mirror of https://github.com/acanas/swad-core.git
Version19.130
This commit is contained in:
parent
6678457b38
commit
2520d5c852
3
Makefile
3
Makefile
|
@ -50,7 +50,8 @@ OBJS = swad_account.o swad_action.o swad_agenda.o swad_alert.o \
|
||||||
swad_message.o swad_MFU.o \
|
swad_message.o swad_MFU.o \
|
||||||
swad_network.o swad_nickname.o swad_notice.o swad_notification.o \
|
swad_network.o swad_nickname.o swad_notice.o swad_notification.o \
|
||||||
swad_pagination.o swad_parameter.o swad_password.o swad_photo.o \
|
swad_pagination.o swad_parameter.o swad_password.o swad_photo.o \
|
||||||
swad_place.o swad_plugin.o swad_privacy.o swad_profile.o swad_project.o \
|
swad_place.o swad_plugin.o swad_privacy.o swad_profile.o \
|
||||||
|
swad_program.o swad_project.o \
|
||||||
swad_QR.o \
|
swad_QR.o \
|
||||||
swad_record.o swad_report.o swad_role.o swad_RSS.o \
|
swad_record.o swad_report.o swad_role.o swad_RSS.o \
|
||||||
swad_scope.o swad_search.o swad_session.o swad_setting.o \
|
swad_scope.o swad_search.o swad_session.o swad_setting.o \
|
||||||
|
|
21
sql/swad.sql
21
sql/swad.sql
|
@ -1025,6 +1025,27 @@ CREATE TABLE IF NOT EXISTS plugins (
|
||||||
IP CHAR(15) NOT NULL,
|
IP CHAR(15) NOT NULL,
|
||||||
UNIQUE INDEX(PlgCod));
|
UNIQUE INDEX(PlgCod));
|
||||||
--
|
--
|
||||||
|
-- Table prg_grp: stores the groups associated to each program item
|
||||||
|
--
|
||||||
|
CREATE TABLE IF NOT EXISTS prg_grp (
|
||||||
|
PrgIteCod INT NOT NULL,
|
||||||
|
GrpCod INT NOT NULL,
|
||||||
|
UNIQUE INDEX(PrgIteCod,GrpCod));
|
||||||
|
--
|
||||||
|
-- Table prg_items: stores the items of the course program
|
||||||
|
--
|
||||||
|
CREATE TABLE IF NOT EXISTS prg_items (
|
||||||
|
PrgIteCod INT NOT NULL AUTO_INCREMENT,
|
||||||
|
CrsCod INT NOT NULL DEFAULT -1,
|
||||||
|
Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',
|
||||||
|
UsrCod INT NOT NULL,
|
||||||
|
StartTime DATETIME NOT NULL,
|
||||||
|
EndTime DATETIME NOT NULL,
|
||||||
|
Title VARCHAR(2047) NOT NULL,
|
||||||
|
Txt TEXT NOT NULL,
|
||||||
|
UNIQUE INDEX(PrgIteCod),
|
||||||
|
INDEX(CrsCod,Hidden));
|
||||||
|
--
|
||||||
-- Table prj_config: stores the configuration of projects for each course
|
-- Table prj_config: stores the configuration of projects for each course
|
||||||
--
|
--
|
||||||
CREATE TABLE IF NOT EXISTS prj_config (
|
CREATE TABLE IF NOT EXISTS prj_config (
|
||||||
|
|
|
@ -73,6 +73,7 @@
|
||||||
#include "swad_photo.h"
|
#include "swad_photo.h"
|
||||||
#include "swad_privacy.h"
|
#include "swad_privacy.h"
|
||||||
#include "swad_profile.h"
|
#include "swad_profile.h"
|
||||||
|
#include "swad_program.h"
|
||||||
#include "swad_project.h"
|
#include "swad_project.h"
|
||||||
#include "swad_QR.h"
|
#include "swad_QR.h"
|
||||||
#include "swad_report.h"
|
#include "swad_report.h"
|
||||||
|
@ -380,7 +381,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
||||||
// TabCrs ******************************************************************
|
// TabCrs ******************************************************************
|
||||||
// Actions in menu:
|
// Actions in menu:
|
||||||
[ActSeeCrsInf ] = { 847, 0,TabCrs,ActSeeCrsInf ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Crs_ShowIntroduction ,"info" },
|
[ActSeeCrsInf ] = { 847, 0,TabCrs,ActSeeCrsInf ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Crs_ShowIntroduction ,"info" },
|
||||||
[ActSeeScd ] = {1821, 1,TabCrs,ActSeeScd ,0x200,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Crs_ShowIntroduction ,"clipboard-list" },
|
[ActSeePrg ] = {1821, 1,TabCrs,ActSeePrg ,0x200,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_SeeCourseProgram ,"clipboard-list" },
|
||||||
[ActSeeTchGui ] = { 784, 2,TabCrs,ActSeeTchGui ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_ShowInfo ,"book-open" },
|
[ActSeeTchGui ] = { 784, 2,TabCrs,ActSeeTchGui ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_ShowInfo ,"book-open" },
|
||||||
[ActSeeSyl ] = {1242, 3,TabCrs,ActSeeSyl ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_ShowInfo ,"list-ol" },
|
[ActSeeSyl ] = {1242, 3,TabCrs,ActSeeSyl ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_ShowInfo ,"list-ol" },
|
||||||
[ActSeeBib ] = { 32, 4,TabCrs,ActSeeBib ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_ShowInfo ,"book" },
|
[ActSeeBib ] = { 32, 4,TabCrs,ActSeeBib ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_ShowInfo ,"book" },
|
||||||
|
@ -397,6 +398,16 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
||||||
[ActChgCrsYeaCfg ] = {1573,-1,TabUnk,ActSeeCrsInf ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,CrsCfg_ChangeCrsYear ,CrsCfg_ContEditAfterChgCrs ,NULL},
|
[ActChgCrsYeaCfg ] = {1573,-1,TabUnk,ActSeeCrsInf ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,CrsCfg_ChangeCrsYear ,CrsCfg_ContEditAfterChgCrs ,NULL},
|
||||||
[ActEdiCrsInf ] = { 848,-1,TabUnk,ActSeeCrsInf ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_FormsToSelSendInfo ,NULL},
|
[ActEdiCrsInf ] = { 848,-1,TabUnk,ActSeeCrsInf ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_FormsToSelSendInfo ,NULL},
|
||||||
|
|
||||||
|
[ActFrmNewPrgIte ] = {1822,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RequestCreatOrEditPrgItem ,NULL},
|
||||||
|
[ActEdiOnePrgIte ] = {1823,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RequestCreatOrEditPrgItem ,NULL},
|
||||||
|
[ActPrnOnePrgIte ] = {1824,-1,TabUnk,ActSeePrg ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Prg_PrintOnePrgItem ,NULL},
|
||||||
|
[ActNewPrgIte ] = {1825,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RecFormPrgItem ,NULL},
|
||||||
|
[ActChgPrgIte ] = {1826,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RecFormPrgItem ,NULL},
|
||||||
|
[ActReqRemPrgIte ] = {1827,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_ReqRemPrgItem ,NULL},
|
||||||
|
[ActRemPrgIte ] = {1828,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RemovePrgItem ,NULL},
|
||||||
|
[ActHidPrgIte ] = {1829,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_HidePrgItem ,NULL},
|
||||||
|
[ActShoPrgIte ] = {1830,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_ShowPrgItem ,NULL},
|
||||||
|
|
||||||
[ActEdiTchGui ] = { 785,-1,TabUnk,ActSeeTchGui ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_FormsToSelSendInfo ,NULL},
|
[ActEdiTchGui ] = { 785,-1,TabUnk,ActSeeTchGui ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_FormsToSelSendInfo ,NULL},
|
||||||
|
|
||||||
[ActSeeSylLec ] = { 28,-1,TabUnk,ActSeeSyl ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_ShowInfo ,NULL},
|
[ActSeeSylLec ] = { 28,-1,TabUnk,ActSeeSyl ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_ShowInfo ,NULL},
|
||||||
|
@ -3536,7 +3547,16 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
|
||||||
ActSeeSysInf, // #1818
|
ActSeeSysInf, // #1818
|
||||||
ActPrnSysInf, // #1819
|
ActPrnSysInf, // #1819
|
||||||
ActMtn, // #1820
|
ActMtn, // #1820
|
||||||
ActSeeScd, // #1821
|
ActSeePrg, // #1821
|
||||||
|
ActFrmNewPrgIte, // #1822
|
||||||
|
ActEdiOnePrgIte, // #1823
|
||||||
|
ActPrnOnePrgIte, // #1824
|
||||||
|
ActNewPrgIte, // #1825
|
||||||
|
ActChgPrgIte, // #1826
|
||||||
|
ActReqRemPrgIte, // #1827
|
||||||
|
ActRemPrgIte, // #1828
|
||||||
|
ActHidPrgIte, // #1829
|
||||||
|
ActShoPrgIte, // #1830
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
205
swad_action.h
205
swad_action.h
|
@ -64,7 +64,7 @@ typedef enum
|
||||||
|
|
||||||
typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
|
typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
|
||||||
|
|
||||||
#define Act_MAX_ACTION_COD 1821
|
#define Act_MAX_ACTION_COD 1830
|
||||||
|
|
||||||
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13
|
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13
|
||||||
|
|
||||||
|
@ -368,7 +368,7 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
// Actions in menu
|
// Actions in menu
|
||||||
#define ActSeeCrsInf (ActChgCrsSta + 1)
|
#define ActSeeCrsInf (ActChgCrsSta + 1)
|
||||||
#define ActSeeScd (ActChgCrsSta + 2)
|
#define ActSeePrg (ActChgCrsSta + 2)
|
||||||
#define ActSeeTchGui (ActChgCrsSta + 3)
|
#define ActSeeTchGui (ActChgCrsSta + 3)
|
||||||
#define ActSeeSyl (ActChgCrsSta + 4)
|
#define ActSeeSyl (ActChgCrsSta + 4)
|
||||||
#define ActSeeBib (ActChgCrsSta + 5)
|
#define ActSeeBib (ActChgCrsSta + 5)
|
||||||
|
@ -384,107 +384,116 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
|
||||||
#define ActChgInsCrsCodCfg (ActChgCrsSta + 13)
|
#define ActChgInsCrsCodCfg (ActChgCrsSta + 13)
|
||||||
#define ActChgCrsYeaCfg (ActChgCrsSta + 14)
|
#define ActChgCrsYeaCfg (ActChgCrsSta + 14)
|
||||||
#define ActEdiCrsInf (ActChgCrsSta + 15)
|
#define ActEdiCrsInf (ActChgCrsSta + 15)
|
||||||
#define ActEdiTchGui (ActChgCrsSta + 16)
|
#define ActFrmNewPrgIte (ActChgCrsSta + 16)
|
||||||
#define ActSeeSylLec (ActChgCrsSta + 17)
|
#define ActEdiOnePrgIte (ActChgCrsSta + 17)
|
||||||
#define ActSeeSylPra (ActChgCrsSta + 18)
|
#define ActPrnOnePrgIte (ActChgCrsSta + 18)
|
||||||
#define ActEdiSylLec (ActChgCrsSta + 19)
|
#define ActNewPrgIte (ActChgCrsSta + 19)
|
||||||
#define ActEdiSylPra (ActChgCrsSta + 20)
|
#define ActChgPrgIte (ActChgCrsSta + 20)
|
||||||
#define ActDelItmSylLec (ActChgCrsSta + 21)
|
#define ActReqRemPrgIte (ActChgCrsSta + 21)
|
||||||
#define ActDelItmSylPra (ActChgCrsSta + 22)
|
#define ActRemPrgIte (ActChgCrsSta + 22)
|
||||||
#define ActUp_IteSylLec (ActChgCrsSta + 23)
|
#define ActHidPrgIte (ActChgCrsSta + 23)
|
||||||
#define ActUp_IteSylPra (ActChgCrsSta + 24)
|
#define ActShoPrgIte (ActChgCrsSta + 24)
|
||||||
#define ActDwnIteSylLec (ActChgCrsSta + 25)
|
#define ActEdiTchGui (ActChgCrsSta + 25)
|
||||||
#define ActDwnIteSylPra (ActChgCrsSta + 26)
|
#define ActSeeSylLec (ActChgCrsSta + 26)
|
||||||
#define ActRgtIteSylLec (ActChgCrsSta + 27)
|
#define ActSeeSylPra (ActChgCrsSta + 27)
|
||||||
#define ActRgtIteSylPra (ActChgCrsSta + 28)
|
#define ActEdiSylLec (ActChgCrsSta + 28)
|
||||||
#define ActLftIteSylLec (ActChgCrsSta + 29)
|
#define ActEdiSylPra (ActChgCrsSta + 29)
|
||||||
#define ActLftIteSylPra (ActChgCrsSta + 30)
|
#define ActDelItmSylLec (ActChgCrsSta + 30)
|
||||||
#define ActInsIteSylLec (ActChgCrsSta + 31)
|
#define ActDelItmSylPra (ActChgCrsSta + 31)
|
||||||
#define ActInsIteSylPra (ActChgCrsSta + 32)
|
#define ActUp_IteSylLec (ActChgCrsSta + 32)
|
||||||
#define ActModIteSylLec (ActChgCrsSta + 33)
|
#define ActUp_IteSylPra (ActChgCrsSta + 33)
|
||||||
#define ActModIteSylPra (ActChgCrsSta + 34)
|
#define ActDwnIteSylLec (ActChgCrsSta + 34)
|
||||||
|
#define ActDwnIteSylPra (ActChgCrsSta + 35)
|
||||||
|
#define ActRgtIteSylLec (ActChgCrsSta + 36)
|
||||||
|
#define ActRgtIteSylPra (ActChgCrsSta + 37)
|
||||||
|
#define ActLftIteSylLec (ActChgCrsSta + 38)
|
||||||
|
#define ActLftIteSylPra (ActChgCrsSta + 39)
|
||||||
|
#define ActInsIteSylLec (ActChgCrsSta + 40)
|
||||||
|
#define ActInsIteSylPra (ActChgCrsSta + 41)
|
||||||
|
#define ActModIteSylLec (ActChgCrsSta + 42)
|
||||||
|
#define ActModIteSylPra (ActChgCrsSta + 43)
|
||||||
|
|
||||||
#define ActEdiBib (ActChgCrsSta + 35)
|
#define ActEdiBib (ActChgCrsSta + 44)
|
||||||
#define ActEdiFAQ (ActChgCrsSta + 36)
|
#define ActEdiFAQ (ActChgCrsSta + 45)
|
||||||
#define ActEdiCrsLnk (ActChgCrsSta + 37)
|
#define ActEdiCrsLnk (ActChgCrsSta + 46)
|
||||||
|
|
||||||
#define ActChgFrcReaCrsInf (ActChgCrsSta + 38)
|
#define ActChgFrcReaCrsInf (ActChgCrsSta + 47)
|
||||||
#define ActChgFrcReaTchGui (ActChgCrsSta + 39)
|
#define ActChgFrcReaTchGui (ActChgCrsSta + 48)
|
||||||
#define ActChgFrcReaSylLec (ActChgCrsSta + 40)
|
#define ActChgFrcReaSylLec (ActChgCrsSta + 49)
|
||||||
#define ActChgFrcReaSylPra (ActChgCrsSta + 41)
|
#define ActChgFrcReaSylPra (ActChgCrsSta + 50)
|
||||||
#define ActChgFrcReaBib (ActChgCrsSta + 42)
|
#define ActChgFrcReaBib (ActChgCrsSta + 51)
|
||||||
#define ActChgFrcReaFAQ (ActChgCrsSta + 43)
|
#define ActChgFrcReaFAQ (ActChgCrsSta + 52)
|
||||||
#define ActChgFrcReaCrsLnk (ActChgCrsSta + 44)
|
#define ActChgFrcReaCrsLnk (ActChgCrsSta + 53)
|
||||||
|
|
||||||
#define ActChgHavReaCrsInf (ActChgCrsSta + 45)
|
#define ActChgHavReaCrsInf (ActChgCrsSta + 54)
|
||||||
#define ActChgHavReaTchGui (ActChgCrsSta + 46)
|
#define ActChgHavReaTchGui (ActChgCrsSta + 55)
|
||||||
#define ActChgHavReaSylLec (ActChgCrsSta + 47)
|
#define ActChgHavReaSylLec (ActChgCrsSta + 56)
|
||||||
#define ActChgHavReaSylPra (ActChgCrsSta + 48)
|
#define ActChgHavReaSylPra (ActChgCrsSta + 57)
|
||||||
#define ActChgHavReaBib (ActChgCrsSta + 49)
|
#define ActChgHavReaBib (ActChgCrsSta + 58)
|
||||||
#define ActChgHavReaFAQ (ActChgCrsSta + 50)
|
#define ActChgHavReaFAQ (ActChgCrsSta + 59)
|
||||||
#define ActChgHavReaCrsLnk (ActChgCrsSta + 51)
|
#define ActChgHavReaCrsLnk (ActChgCrsSta + 60)
|
||||||
|
|
||||||
#define ActSelInfSrcCrsInf (ActChgCrsSta + 52)
|
#define ActSelInfSrcCrsInf (ActChgCrsSta + 61)
|
||||||
#define ActSelInfSrcTchGui (ActChgCrsSta + 53)
|
#define ActSelInfSrcTchGui (ActChgCrsSta + 62)
|
||||||
#define ActSelInfSrcSylLec (ActChgCrsSta + 54)
|
#define ActSelInfSrcSylLec (ActChgCrsSta + 63)
|
||||||
#define ActSelInfSrcSylPra (ActChgCrsSta + 55)
|
#define ActSelInfSrcSylPra (ActChgCrsSta + 64)
|
||||||
#define ActSelInfSrcBib (ActChgCrsSta + 56)
|
#define ActSelInfSrcBib (ActChgCrsSta + 65)
|
||||||
#define ActSelInfSrcFAQ (ActChgCrsSta + 57)
|
#define ActSelInfSrcFAQ (ActChgCrsSta + 66)
|
||||||
#define ActSelInfSrcCrsLnk (ActChgCrsSta + 58)
|
#define ActSelInfSrcCrsLnk (ActChgCrsSta + 67)
|
||||||
#define ActRcvURLCrsInf (ActChgCrsSta + 59)
|
#define ActRcvURLCrsInf (ActChgCrsSta + 68)
|
||||||
#define ActRcvURLTchGui (ActChgCrsSta + 60)
|
#define ActRcvURLTchGui (ActChgCrsSta + 69)
|
||||||
#define ActRcvURLSylLec (ActChgCrsSta + 61)
|
#define ActRcvURLSylLec (ActChgCrsSta + 70)
|
||||||
#define ActRcvURLSylPra (ActChgCrsSta + 62)
|
#define ActRcvURLSylPra (ActChgCrsSta + 71)
|
||||||
#define ActRcvURLBib (ActChgCrsSta + 63)
|
#define ActRcvURLBib (ActChgCrsSta + 72)
|
||||||
#define ActRcvURLFAQ (ActChgCrsSta + 64)
|
#define ActRcvURLFAQ (ActChgCrsSta + 73)
|
||||||
#define ActRcvURLCrsLnk (ActChgCrsSta + 65)
|
#define ActRcvURLCrsLnk (ActChgCrsSta + 74)
|
||||||
#define ActRcvPagCrsInf (ActChgCrsSta + 66)
|
#define ActRcvPagCrsInf (ActChgCrsSta + 75)
|
||||||
#define ActRcvPagTchGui (ActChgCrsSta + 67)
|
#define ActRcvPagTchGui (ActChgCrsSta + 76)
|
||||||
#define ActRcvPagSylLec (ActChgCrsSta + 68)
|
#define ActRcvPagSylLec (ActChgCrsSta + 77)
|
||||||
#define ActRcvPagSylPra (ActChgCrsSta + 69)
|
#define ActRcvPagSylPra (ActChgCrsSta + 78)
|
||||||
#define ActRcvPagBib (ActChgCrsSta + 70)
|
#define ActRcvPagBib (ActChgCrsSta + 79)
|
||||||
#define ActRcvPagFAQ (ActChgCrsSta + 71)
|
#define ActRcvPagFAQ (ActChgCrsSta + 80)
|
||||||
#define ActRcvPagCrsLnk (ActChgCrsSta + 72)
|
#define ActRcvPagCrsLnk (ActChgCrsSta + 81)
|
||||||
#define ActEditorCrsInf (ActChgCrsSta + 73)
|
#define ActEditorCrsInf (ActChgCrsSta + 82)
|
||||||
#define ActEditorTchGui (ActChgCrsSta + 74)
|
#define ActEditorTchGui (ActChgCrsSta + 83)
|
||||||
#define ActEditorSylLec (ActChgCrsSta + 75)
|
#define ActEditorSylLec (ActChgCrsSta + 84)
|
||||||
#define ActEditorSylPra (ActChgCrsSta + 76)
|
#define ActEditorSylPra (ActChgCrsSta + 85)
|
||||||
#define ActEditorBib (ActChgCrsSta + 77)
|
#define ActEditorBib (ActChgCrsSta + 86)
|
||||||
#define ActEditorFAQ (ActChgCrsSta + 78)
|
#define ActEditorFAQ (ActChgCrsSta + 87)
|
||||||
#define ActEditorCrsLnk (ActChgCrsSta + 79)
|
#define ActEditorCrsLnk (ActChgCrsSta + 88)
|
||||||
#define ActPlaTxtEdiCrsInf (ActChgCrsSta + 80)
|
#define ActPlaTxtEdiCrsInf (ActChgCrsSta + 89)
|
||||||
#define ActPlaTxtEdiTchGui (ActChgCrsSta + 81)
|
#define ActPlaTxtEdiTchGui (ActChgCrsSta + 90)
|
||||||
#define ActPlaTxtEdiSylLec (ActChgCrsSta + 82)
|
#define ActPlaTxtEdiSylLec (ActChgCrsSta + 91)
|
||||||
#define ActPlaTxtEdiSylPra (ActChgCrsSta + 83)
|
#define ActPlaTxtEdiSylPra (ActChgCrsSta + 92)
|
||||||
#define ActPlaTxtEdiBib (ActChgCrsSta + 84)
|
#define ActPlaTxtEdiBib (ActChgCrsSta + 93)
|
||||||
#define ActPlaTxtEdiFAQ (ActChgCrsSta + 85)
|
#define ActPlaTxtEdiFAQ (ActChgCrsSta + 94)
|
||||||
#define ActPlaTxtEdiCrsLnk (ActChgCrsSta + 86)
|
#define ActPlaTxtEdiCrsLnk (ActChgCrsSta + 95)
|
||||||
#define ActRchTxtEdiCrsInf (ActChgCrsSta + 87)
|
#define ActRchTxtEdiCrsInf (ActChgCrsSta + 96)
|
||||||
#define ActRchTxtEdiTchGui (ActChgCrsSta + 88)
|
#define ActRchTxtEdiTchGui (ActChgCrsSta + 97)
|
||||||
#define ActRchTxtEdiSylLec (ActChgCrsSta + 89)
|
#define ActRchTxtEdiSylLec (ActChgCrsSta + 98)
|
||||||
#define ActRchTxtEdiSylPra (ActChgCrsSta + 90)
|
#define ActRchTxtEdiSylPra (ActChgCrsSta + 99)
|
||||||
#define ActRchTxtEdiBib (ActChgCrsSta + 91)
|
#define ActRchTxtEdiBib (ActChgCrsSta + 100)
|
||||||
#define ActRchTxtEdiFAQ (ActChgCrsSta + 92)
|
#define ActRchTxtEdiFAQ (ActChgCrsSta + 101)
|
||||||
#define ActRchTxtEdiCrsLnk (ActChgCrsSta + 93)
|
#define ActRchTxtEdiCrsLnk (ActChgCrsSta + 102)
|
||||||
#define ActRcvPlaTxtCrsInf (ActChgCrsSta + 94)
|
#define ActRcvPlaTxtCrsInf (ActChgCrsSta + 103)
|
||||||
#define ActRcvPlaTxtTchGui (ActChgCrsSta + 95)
|
#define ActRcvPlaTxtTchGui (ActChgCrsSta + 104)
|
||||||
#define ActRcvPlaTxtSylLec (ActChgCrsSta + 96)
|
#define ActRcvPlaTxtSylLec (ActChgCrsSta + 105)
|
||||||
#define ActRcvPlaTxtSylPra (ActChgCrsSta + 97)
|
#define ActRcvPlaTxtSylPra (ActChgCrsSta + 106)
|
||||||
#define ActRcvPlaTxtBib (ActChgCrsSta + 98)
|
#define ActRcvPlaTxtBib (ActChgCrsSta + 107)
|
||||||
#define ActRcvPlaTxtFAQ (ActChgCrsSta + 99)
|
#define ActRcvPlaTxtFAQ (ActChgCrsSta + 108)
|
||||||
#define ActRcvPlaTxtCrsLnk (ActChgCrsSta + 100)
|
#define ActRcvPlaTxtCrsLnk (ActChgCrsSta + 109)
|
||||||
#define ActRcvRchTxtCrsInf (ActChgCrsSta + 101)
|
#define ActRcvRchTxtCrsInf (ActChgCrsSta + 110)
|
||||||
#define ActRcvRchTxtTchGui (ActChgCrsSta + 102)
|
#define ActRcvRchTxtTchGui (ActChgCrsSta + 111)
|
||||||
#define ActRcvRchTxtSylLec (ActChgCrsSta + 103)
|
#define ActRcvRchTxtSylLec (ActChgCrsSta + 112)
|
||||||
#define ActRcvRchTxtSylPra (ActChgCrsSta + 104)
|
#define ActRcvRchTxtSylPra (ActChgCrsSta + 113)
|
||||||
#define ActRcvRchTxtBib (ActChgCrsSta + 105)
|
#define ActRcvRchTxtBib (ActChgCrsSta + 114)
|
||||||
#define ActRcvRchTxtFAQ (ActChgCrsSta + 106)
|
#define ActRcvRchTxtFAQ (ActChgCrsSta + 115)
|
||||||
#define ActRcvRchTxtCrsLnk (ActChgCrsSta + 107)
|
#define ActRcvRchTxtCrsLnk (ActChgCrsSta + 116)
|
||||||
|
|
||||||
#define ActPrnCrsTT (ActChgCrsSta + 108)
|
#define ActPrnCrsTT (ActChgCrsSta + 117)
|
||||||
#define ActEdiCrsTT (ActChgCrsSta + 109)
|
#define ActEdiCrsTT (ActChgCrsSta + 118)
|
||||||
#define ActChgCrsTT (ActChgCrsSta + 110)
|
#define ActChgCrsTT (ActChgCrsSta + 119)
|
||||||
#define ActChgCrsTT1stDay (ActChgCrsSta + 111)
|
#define ActChgCrsTT1stDay (ActChgCrsSta + 120)
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/***************************** Assessment tab ********************************/
|
/***************************** Assessment tab ********************************/
|
||||||
|
|
|
@ -520,6 +520,15 @@ Param
|
||||||
// TODO: Impedir la creación y edición de proyectos si no son editables.
|
// TODO: Impedir la creación y edición de proyectos si no son editables.
|
||||||
// TODO: No se puede entrar con DNI '1' suponiendo que no tenga password ¿por qué?
|
// TODO: No se puede entrar con DNI '1' suponiendo que no tenga password ¿por qué?
|
||||||
// TODO: En la lista de conectados central, poner el logo de la institución a la que pertenece el usuario
|
// TODO: En la lista de conectados central, poner el logo de la institución a la que pertenece el usuario
|
||||||
|
// TODO: Miguel Damas: por defecto, marcar "Permitir que los profesores..." en los test (que ya esté marcado en lugar de desmarcado)
|
||||||
|
// TODO: Si el alumno ha marcado "Permitir que los profesores...", entonces pedir confirmación al pulsar el botón azul, para evitar que se envíe por error antes de tiempo
|
||||||
|
// TODO: Análisis > Informe: "Informe de uso de SWAD" sale descentrado
|
||||||
|
// TODO: Fig_GetAndShowCourseProgramStats
|
||||||
|
|
||||||
|
Version 19.130: Feb 20, 2020 New module swad_program. (281273 lines)
|
||||||
|
2 changes necessary in database:
|
||||||
|
CREATE TABLE IF NOT EXISTS prg_grp (PrgIteCod INT NOT NULL,GrpCod INT NOT NULL,UNIQUE INDEX(PrgIteCod,GrpCod));
|
||||||
|
CREATE TABLE IF NOT EXISTS prg_items (PrgIteCod INT NOT NULL AUTO_INCREMENT,CrsCod INT NOT NULL DEFAULT -1,Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',UsrCod INT NOT NULL,StartTime DATETIME NOT NULL,EndTime DATETIME NOT NULL,Title VARCHAR(2047) NOT NULL,Txt TEXT NOT NULL,UNIQUE INDEX(PrgIteCod),INDEX(CrsCod,Hidden));
|
||||||
|
|
||||||
Version 19.129: Feb 20, 2020 New option for schedule in course. (279240 lines)
|
Version 19.129: Feb 20, 2020 New option for schedule in course. (279240 lines)
|
||||||
Copy the following icons to icon public directory:
|
Copy the following icons to icon public directory:
|
||||||
|
|
|
@ -2188,6 +2188,51 @@ mysql> DESCRIBE plugins;
|
||||||
"IP CHAR(15) NOT NULL," // Cns_MAX_BYTES_IP
|
"IP CHAR(15) NOT NULL," // Cns_MAX_BYTES_IP
|
||||||
"UNIQUE INDEX(PlgCod))");
|
"UNIQUE INDEX(PlgCod))");
|
||||||
|
|
||||||
|
/***** Table prg_grp *****/
|
||||||
|
/*
|
||||||
|
mysql> DESCRIBE prg_grp;
|
||||||
|
+-----------+---------+------+-----+---------+-------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-----------+---------+------+-----+---------+-------+
|
||||||
|
| PrgIteCod | int(11) | NO | PRI | NULL | |
|
||||||
|
| GrpCod | int(11) | NO | PRI | NULL | |
|
||||||
|
+-----------+---------+------+-----+---------+-------+
|
||||||
|
2 rows in set (0.06 sec)
|
||||||
|
*/
|
||||||
|
DB_CreateTable ("CREATE TABLE IF NOT EXISTS prg_grp ("
|
||||||
|
"PrgIteCod INT NOT NULL,"
|
||||||
|
"GrpCod INT NOT NULL,"
|
||||||
|
"UNIQUE INDEX(PrgIteCod,GrpCod))");
|
||||||
|
|
||||||
|
/***** Table prg_items *****/
|
||||||
|
/*
|
||||||
|
mysql> DESCRIBE prg_items;
|
||||||
|
+-----------+---------------+------+-----+---------+----------------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-----------+---------------+------+-----+---------+----------------+
|
||||||
|
| PrgIteCod | int(11) | NO | PRI | NULL | auto_increment |
|
||||||
|
| CrsCod | int(11) | NO | MUL | -1 | |
|
||||||
|
| Hidden | enum('N','Y') | NO | | N | |
|
||||||
|
| UsrCod | int(11) | NO | | NULL | |
|
||||||
|
| StartTime | datetime | NO | | NULL | |
|
||||||
|
| EndTime | datetime | NO | | NULL | |
|
||||||
|
| Title | varchar(2047) | NO | | NULL | |
|
||||||
|
| Txt | text | NO | | NULL | |
|
||||||
|
+-----------+---------------+------+-----+---------+----------------+
|
||||||
|
8 rows in set (0.01 sec)
|
||||||
|
*/
|
||||||
|
DB_CreateTable ("CREATE TABLE IF NOT EXISTS prg_items ("
|
||||||
|
"PrgIteCod INT NOT NULL AUTO_INCREMENT,"
|
||||||
|
"CrsCod INT NOT NULL DEFAULT -1,"
|
||||||
|
"Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',"
|
||||||
|
"UsrCod INT NOT NULL,"
|
||||||
|
"StartTime DATETIME NOT NULL,"
|
||||||
|
"EndTime DATETIME NOT NULL,"
|
||||||
|
"Title VARCHAR(2047) NOT NULL," // Prg_MAX_BYTES_PROGRAM_ITEM_TITLE
|
||||||
|
"Txt TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
|
||||||
|
"UNIQUE INDEX(PrgIteCod),"
|
||||||
|
"INDEX(CrsCod,Hidden))");
|
||||||
|
|
||||||
/***** Table prj_config *****/
|
/***** Table prj_config *****/
|
||||||
/*
|
/*
|
||||||
mysql> DESCRIBE prj_config;
|
mysql> DESCRIBE prj_config;
|
||||||
|
|
|
@ -145,6 +145,8 @@ static void Fig_WriteRowStatsFileBrowsers3 (const char *NameOfFileZones,
|
||||||
static void Fig_GetAndShowOERsStats (void);
|
static void Fig_GetAndShowOERsStats (void);
|
||||||
static void Fig_GetNumberOfOERsFromDB (Hie_Level_t Scope,Brw_License_t License,unsigned long NumFiles[2]);
|
static void Fig_GetNumberOfOERsFromDB (Hie_Level_t Scope,Brw_License_t License,unsigned long NumFiles[2]);
|
||||||
|
|
||||||
|
static void Fig_GetAndShowCourseProgramStats (void); // TODO: Change function from assignments to schedule
|
||||||
|
|
||||||
static void Fig_GetAndShowAssignmentsStats (void);
|
static void Fig_GetAndShowAssignmentsStats (void);
|
||||||
static void Fig_GetAndShowProjectsStats (void);
|
static void Fig_GetAndShowProjectsStats (void);
|
||||||
static void Fig_GetAndShowTestsStats (void);
|
static void Fig_GetAndShowTestsStats (void);
|
||||||
|
@ -315,6 +317,7 @@ void Fig_ShowFigures (void)
|
||||||
[Fig_DEGREE_TYPES ] = Fig_GetAndShowDegreeTypesStats,
|
[Fig_DEGREE_TYPES ] = Fig_GetAndShowDegreeTypesStats,
|
||||||
[Fig_FOLDERS_AND_FILES] = Fig_GetAndShowFileBrowsersStats,
|
[Fig_FOLDERS_AND_FILES] = Fig_GetAndShowFileBrowsersStats,
|
||||||
[Fig_OER ] = Fig_GetAndShowOERsStats,
|
[Fig_OER ] = Fig_GetAndShowOERsStats,
|
||||||
|
[Fig_COURSE_PROGRAM ] = Fig_GetAndShowCourseProgramStats,
|
||||||
[Fig_ASSIGNMENTS ] = Fig_GetAndShowAssignmentsStats,
|
[Fig_ASSIGNMENTS ] = Fig_GetAndShowAssignmentsStats,
|
||||||
[Fig_PROJECTS ] = Fig_GetAndShowProjectsStats,
|
[Fig_PROJECTS ] = Fig_GetAndShowProjectsStats,
|
||||||
[Fig_TESTS ] = Fig_GetAndShowTestsStats,
|
[Fig_TESTS ] = Fig_GetAndShowTestsStats,
|
||||||
|
@ -2936,6 +2939,68 @@ static void Fig_GetNumberOfOERsFromDB (Hie_Level_t Scope,Brw_License_t License,u
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
DB_FreeMySQLResult (&mysql_res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************** Show stats about schedule items **********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Fig_GetAndShowCourseProgramStats (void) // TODO: Change function from assignments to course program items
|
||||||
|
{
|
||||||
|
extern const char *Hlp_ANALYTICS_Figures_assignments;
|
||||||
|
extern const char *Txt_FIGURE_TYPES[Fig_NUM_FIGURES];
|
||||||
|
extern const char *Txt_Number_of_BR_assignments;
|
||||||
|
extern const char *Txt_Number_of_BR_courses_with_BR_assignments;
|
||||||
|
extern const char *Txt_Average_number_BR_of_ASSIG_BR_per_course;
|
||||||
|
extern const char *Txt_Number_of_BR_notifications;
|
||||||
|
unsigned NumAssignments;
|
||||||
|
unsigned NumNotif;
|
||||||
|
unsigned NumCoursesWithAssignments = 0;
|
||||||
|
double NumAssignmentsPerCourse = 0.0;
|
||||||
|
|
||||||
|
/***** Get the number of assignments from this location *****/
|
||||||
|
if ((NumAssignments = Asg_GetNumAssignments (Gbl.Scope.Current,&NumNotif)))
|
||||||
|
if ((NumCoursesWithAssignments = Asg_GetNumCoursesWithAssignments (Gbl.Scope.Current)) != 0)
|
||||||
|
NumAssignmentsPerCourse = (double) NumAssignments /
|
||||||
|
(double) NumCoursesWithAssignments;
|
||||||
|
|
||||||
|
/***** Begin box and table *****/
|
||||||
|
Box_BoxTableBegin (NULL,Txt_FIGURE_TYPES[Fig_ASSIGNMENTS],NULL,
|
||||||
|
Hlp_ANALYTICS_Figures_assignments,Box_NOT_CLOSABLE,2);
|
||||||
|
|
||||||
|
/***** Write table heading *****/
|
||||||
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
|
HTM_TH (1,1,"RM",Txt_Number_of_BR_assignments);
|
||||||
|
HTM_TH (1,1,"RM",Txt_Number_of_BR_courses_with_BR_assignments);
|
||||||
|
HTM_TH (1,1,"RM",Txt_Average_number_BR_of_ASSIG_BR_per_course);
|
||||||
|
HTM_TH (1,1,"RM",Txt_Number_of_BR_notifications);
|
||||||
|
|
||||||
|
HTM_TR_End ();
|
||||||
|
|
||||||
|
/***** Write number of assignments *****/
|
||||||
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
|
HTM_TD_Begin ("class=\"DAT RM\"");
|
||||||
|
HTM_Unsigned (NumAssignments);
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
HTM_TD_Begin ("class=\"DAT RM\"");
|
||||||
|
HTM_Unsigned (NumCoursesWithAssignments);
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
HTM_TD_Begin ("class=\"DAT RM\"");
|
||||||
|
HTM_Double2Decimals (NumAssignmentsPerCourse);
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
HTM_TD_Begin ("class=\"DAT RM\"");
|
||||||
|
HTM_Unsigned (NumNotif);
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
HTM_TR_End ();
|
||||||
|
|
||||||
|
/***** End table and box *****/
|
||||||
|
Box_BoxTableEnd ();
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/************************ Show stats about assignments ***********************/
|
/************************ Show stats about assignments ***********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
/************************** Public types and constants ***********************/
|
/************************** Public types and constants ***********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Fig_NUM_FIGURES 28
|
#define Fig_NUM_FIGURES 29
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
Fig_USERS, // Number of users
|
Fig_USERS, // Number of users
|
||||||
|
@ -41,6 +41,7 @@ typedef enum
|
||||||
Fig_DEGREE_TYPES, // Number of degrees in each type of degree
|
Fig_DEGREE_TYPES, // Number of degrees in each type of degree
|
||||||
Fig_FOLDERS_AND_FILES, // Number of folders and files
|
Fig_FOLDERS_AND_FILES, // Number of folders and files
|
||||||
Fig_OER, // Number of OERs (Open Educational Resources)
|
Fig_OER, // Number of OERs (Open Educational Resources)
|
||||||
|
Fig_COURSE_PROGRAM, // Number of program items
|
||||||
Fig_ASSIGNMENTS, // Number of assignments
|
Fig_ASSIGNMENTS, // Number of assignments
|
||||||
Fig_PROJECTS, // Number of projects
|
Fig_PROJECTS, // Number of projects
|
||||||
Fig_TESTS, // Number of test questions
|
Fig_TESTS, // Number of test questions
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
#include "swad_global.h"
|
#include "swad_global.h"
|
||||||
#include "swad_icon.h"
|
#include "swad_icon.h"
|
||||||
#include "swad_parameter.h"
|
#include "swad_parameter.h"
|
||||||
|
#include "swad_program.h"
|
||||||
#include "swad_project.h"
|
#include "swad_project.h"
|
||||||
#include "swad_role.h"
|
#include "swad_role.h"
|
||||||
#include "swad_setting.h"
|
#include "swad_setting.h"
|
||||||
|
@ -296,6 +297,11 @@ void Gbl_InitializeGlobals (void)
|
||||||
Gbl.Search.Str[0] = '\0';
|
Gbl.Search.Str[0] = '\0';
|
||||||
Gbl.Search.LogSearch = false;
|
Gbl.Search.LogSearch = false;
|
||||||
|
|
||||||
|
Gbl.Prg.LstIsRead = false; // List is not read
|
||||||
|
Gbl.Prg.Num = 0;
|
||||||
|
Gbl.Prg.LstPrgIteCods = NULL;
|
||||||
|
Gbl.Prg.SelectedOrder = Prg_ORDER_DEFAULT;
|
||||||
|
|
||||||
Gbl.Asgs.LstIsRead = false; // List is not read
|
Gbl.Asgs.LstIsRead = false; // List is not read
|
||||||
Gbl.Asgs.Num = 0;
|
Gbl.Asgs.Num = 0;
|
||||||
Gbl.Asgs.LstAsgCods = NULL;
|
Gbl.Asgs.LstAsgCods = NULL;
|
||||||
|
|
|
@ -540,6 +540,15 @@ struct Globals
|
||||||
char TmpDir[NAME_MAX + 1];
|
char TmpDir[NAME_MAX + 1];
|
||||||
} ZIP;
|
} ZIP;
|
||||||
} FileBrowser; // Struct used for a file browser
|
} FileBrowser; // Struct used for a file browser
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
bool LstIsRead; // Is the list already read from database, or it needs to be read?
|
||||||
|
unsigned Num; // Number of schedule items
|
||||||
|
long *LstPrgIteCods; // List of schedule items codes
|
||||||
|
Dat_StartEndTime_t SelectedOrder;
|
||||||
|
long PrgIteCodToEdit; // Used as parameter in contextual links
|
||||||
|
unsigned CurrentPage;
|
||||||
|
} Prg;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
bool LstIsRead; // Is the list already read from database, or it needs to be read?
|
bool LstIsRead; // Is the list already read from database, or it needs to be read?
|
||||||
|
|
|
@ -778,6 +778,69 @@ const char *Hlp_COURSE_Information_edit =
|
||||||
"COURSE.Information.en#edit";
|
"COURSE.Information.en#edit";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Hlp_COURSE_Program =
|
||||||
|
#if L==1
|
||||||
|
"COURSE.Program.es";
|
||||||
|
#elif L==2
|
||||||
|
"COURSE.Program.en";
|
||||||
|
#elif L==3
|
||||||
|
"COURSE.Program.en";
|
||||||
|
#elif L==4
|
||||||
|
"COURSE.Program.es";
|
||||||
|
#elif L==5
|
||||||
|
"COURSE.Program.en";
|
||||||
|
#elif L==6
|
||||||
|
"COURSE.Program.es";
|
||||||
|
#elif L==7
|
||||||
|
"COURSE.Program.en";
|
||||||
|
#elif L==8
|
||||||
|
"COURSE.Program.en";
|
||||||
|
#elif L==9
|
||||||
|
"COURSE.Program.en";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const char *Hlp_COURSE_Program_new_item =
|
||||||
|
#if L==1
|
||||||
|
"COURSE.Program.es#nuevo-item";
|
||||||
|
#elif L==2
|
||||||
|
"COURSE.Program.en#new-item";
|
||||||
|
#elif L==3
|
||||||
|
"COURSE.Program.en#new-item";
|
||||||
|
#elif L==4
|
||||||
|
"COURSE.Program.es#nuevo-item";
|
||||||
|
#elif L==5
|
||||||
|
"COURSE.Program.en#new-item";
|
||||||
|
#elif L==6
|
||||||
|
"COURSE.Program.es#nuevo-item";
|
||||||
|
#elif L==7
|
||||||
|
"COURSE.Program.en#new-item";
|
||||||
|
#elif L==8
|
||||||
|
"COURSE.Program.en#new-item";
|
||||||
|
#elif L==9
|
||||||
|
"COURSE.Program.en#new-item";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const char *Hlp_COURSE_Program_edit_item =
|
||||||
|
#if L==1
|
||||||
|
"COURSE.Program.es#editar-item";
|
||||||
|
#elif L==2
|
||||||
|
"COURSE.Program.en#edit-item";
|
||||||
|
#elif L==3
|
||||||
|
"COURSE.Program.en#edit-item";
|
||||||
|
#elif L==4
|
||||||
|
"COURSE.Program.es#editar-item";
|
||||||
|
#elif L==5
|
||||||
|
"COURSE.Program.en#edit-item";
|
||||||
|
#elif L==6
|
||||||
|
"COURSE.Program.es#editar-item";
|
||||||
|
#elif L==7
|
||||||
|
"COURSE.Program.en#edit-item";
|
||||||
|
#elif L==8
|
||||||
|
"COURSE.Program.en#edit-item";
|
||||||
|
#elif L==9
|
||||||
|
"COURSE.Program.en#edit-item";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Hlp_COURSE_Guide =
|
const char *Hlp_COURSE_Guide =
|
||||||
#if L==1
|
#if L==1
|
||||||
"COURSE.Guide.es";
|
"COURSE.Guide.es";
|
||||||
|
|
|
@ -101,7 +101,7 @@ static const Act_Action_t Mnu_MenuActions[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_
|
||||||
},
|
},
|
||||||
[TabCrs] = {
|
[TabCrs] = {
|
||||||
[ 0] = ActSeeCrsInf,
|
[ 0] = ActSeeCrsInf,
|
||||||
[ 1] = ActSeeScd,
|
[ 1] = ActSeePrg,
|
||||||
[ 2] = ActSeeTchGui,
|
[ 2] = ActSeeTchGui,
|
||||||
[ 3] = ActSeeSyl,
|
[ 3] = ActSeeSyl,
|
||||||
[ 4] = ActSeeBib,
|
[ 4] = ActSeeBib,
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include "swad_global.h"
|
#include "swad_global.h"
|
||||||
#include "swad_HTML.h"
|
#include "swad_HTML.h"
|
||||||
#include "swad_parameter.h"
|
#include "swad_parameter.h"
|
||||||
|
#include "swad_program.h"
|
||||||
#include "swad_project.h"
|
#include "swad_project.h"
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -53,6 +54,7 @@ extern const Act_Action_t For_ActionsSeePstFor[For_NUM_TYPES_FORUM];
|
||||||
|
|
||||||
static const char *Pag_ParamNumPag[Pag_NUM_WHAT_PAGINATE] =
|
static const char *Pag_ParamNumPag[Pag_NUM_WHAT_PAGINATE] =
|
||||||
{
|
{
|
||||||
|
[Pag_COURSE_PROGRAM ] = "NumPagPrg",
|
||||||
[Pag_ASSIGNMENTS ] = "NumPagAsg",
|
[Pag_ASSIGNMENTS ] = "NumPagAsg",
|
||||||
[Pag_PROJECTS ] = "NumPagPrj",
|
[Pag_PROJECTS ] = "NumPagPrj",
|
||||||
[Pag_GAMES ] = "NumPagGam",
|
[Pag_GAMES ] = "NumPagGam",
|
||||||
|
@ -165,6 +167,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
|
||||||
{
|
{
|
||||||
switch (WhatPaginate)
|
switch (WhatPaginate)
|
||||||
{
|
{
|
||||||
|
case Pag_COURSE_PROGRAM:
|
||||||
|
Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor);
|
||||||
|
Pag_PutHiddenParamPagNum (WhatPaginate,1);
|
||||||
|
Prg_PutHiddenParamPrgOrder ();
|
||||||
|
Grp_PutParamWhichGrps ();
|
||||||
|
break;
|
||||||
case Pag_ASSIGNMENTS:
|
case Pag_ASSIGNMENTS:
|
||||||
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
||||||
Pag_PutHiddenParamPagNum (WhatPaginate,1);
|
Pag_PutHiddenParamPagNum (WhatPaginate,1);
|
||||||
|
@ -279,6 +287,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
|
||||||
{
|
{
|
||||||
switch (WhatPaginate)
|
switch (WhatPaginate)
|
||||||
{
|
{
|
||||||
|
case Pag_COURSE_PROGRAM:
|
||||||
|
Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor);
|
||||||
|
Pag_PutHiddenParamPagNum (WhatPaginate,1);
|
||||||
|
Prg_PutHiddenParamPrgOrder ();
|
||||||
|
Grp_PutParamWhichGrps ();
|
||||||
|
break;
|
||||||
case Pag_ASSIGNMENTS:
|
case Pag_ASSIGNMENTS:
|
||||||
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
||||||
Pag_PutHiddenParamPagNum (WhatPaginate,1);
|
Pag_PutHiddenParamPagNum (WhatPaginate,1);
|
||||||
|
@ -379,6 +393,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
|
||||||
{
|
{
|
||||||
switch (WhatPaginate)
|
switch (WhatPaginate)
|
||||||
{
|
{
|
||||||
|
case Pag_COURSE_PROGRAM:
|
||||||
|
Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor);
|
||||||
|
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage);
|
||||||
|
Prg_PutHiddenParamPrgOrder ();
|
||||||
|
Grp_PutParamWhichGrps ();
|
||||||
|
break;
|
||||||
case Pag_ASSIGNMENTS:
|
case Pag_ASSIGNMENTS:
|
||||||
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
||||||
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage);
|
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage);
|
||||||
|
@ -491,6 +511,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
|
||||||
{
|
{
|
||||||
switch (WhatPaginate)
|
switch (WhatPaginate)
|
||||||
{
|
{
|
||||||
|
case Pag_COURSE_PROGRAM:
|
||||||
|
Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor);
|
||||||
|
Pag_PutHiddenParamPagNum (WhatPaginate,NumPage);
|
||||||
|
Prg_PutHiddenParamPrgOrder ();
|
||||||
|
Grp_PutParamWhichGrps ();
|
||||||
|
break;
|
||||||
case Pag_ASSIGNMENTS:
|
case Pag_ASSIGNMENTS:
|
||||||
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
||||||
Pag_PutHiddenParamPagNum (WhatPaginate,NumPage);
|
Pag_PutHiddenParamPagNum (WhatPaginate,NumPage);
|
||||||
|
@ -590,6 +616,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
|
||||||
}
|
}
|
||||||
switch (WhatPaginate)
|
switch (WhatPaginate)
|
||||||
{
|
{
|
||||||
|
case Pag_COURSE_PROGRAM:
|
||||||
|
Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor);
|
||||||
|
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage);
|
||||||
|
Prg_PutHiddenParamPrgOrder ();
|
||||||
|
Grp_PutParamWhichGrps ();
|
||||||
|
break;
|
||||||
case Pag_ASSIGNMENTS:
|
case Pag_ASSIGNMENTS:
|
||||||
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
||||||
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage);
|
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage);
|
||||||
|
@ -690,6 +722,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
|
||||||
}
|
}
|
||||||
switch (WhatPaginate)
|
switch (WhatPaginate)
|
||||||
{
|
{
|
||||||
|
case Pag_COURSE_PROGRAM:
|
||||||
|
Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor);
|
||||||
|
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags);
|
||||||
|
Prg_PutHiddenParamPrgOrder ();
|
||||||
|
Grp_PutParamWhichGrps ();
|
||||||
|
break;
|
||||||
case Pag_ASSIGNMENTS:
|
case Pag_ASSIGNMENTS:
|
||||||
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
||||||
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags);
|
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags);
|
||||||
|
|
|
@ -37,20 +37,21 @@
|
||||||
/******************************** Public types *******************************/
|
/******************************** Public types *******************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Pag_NUM_WHAT_PAGINATE 11
|
#define Pag_NUM_WHAT_PAGINATE 12
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
Pag_ASSIGNMENTS = 0,
|
Pag_COURSE_PROGRAM = 0,
|
||||||
Pag_PROJECTS = 1,
|
Pag_ASSIGNMENTS = 1,
|
||||||
Pag_GAMES = 2,
|
Pag_PROJECTS = 2,
|
||||||
Pag_SURVEYS = 3,
|
Pag_GAMES = 3,
|
||||||
Pag_ATT_EVENTS = 4,
|
Pag_SURVEYS = 4,
|
||||||
Pag_THREADS_FORUM = 5,
|
Pag_ATT_EVENTS = 5,
|
||||||
Pag_POSTS_FORUM = 6,
|
Pag_THREADS_FORUM = 6,
|
||||||
Pag_MESSAGES_RECEIVED = 7,
|
Pag_POSTS_FORUM = 7,
|
||||||
Pag_MESSAGES_SENT = 8,
|
Pag_MESSAGES_RECEIVED = 8,
|
||||||
Pag_MY_AGENDA = 9,
|
Pag_MESSAGES_SENT = 9,
|
||||||
Pag_ANOTHER_AGENDA = 10,
|
Pag_MY_AGENDA = 10,
|
||||||
|
Pag_ANOTHER_AGENDA = 11,
|
||||||
} Pag_WhatPaginate_t;
|
} Pag_WhatPaginate_t;
|
||||||
|
|
||||||
struct Pagination // Used for threads and messages pagination
|
struct Pagination // Used for threads and messages pagination
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,90 @@
|
||||||
|
// swad_program.h: course program
|
||||||
|
|
||||||
|
#ifndef _SWAD_PRG
|
||||||
|
#define _SWAD_PRG
|
||||||
|
/*
|
||||||
|
SWAD (Shared Workspace At a Distance),
|
||||||
|
is a web platform developed at the University of Granada (Spain),
|
||||||
|
and used to support university teaching.
|
||||||
|
|
||||||
|
This file is part of SWAD core.
|
||||||
|
Copyright (C) 1999-2020 Antonio Cañas Vargas
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as
|
||||||
|
published by the Free Software Foundation, either version 3 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************************* Headers ***********************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
#include "swad_date.h"
|
||||||
|
#include "swad_file_browser.h"
|
||||||
|
#include "swad_notification.h"
|
||||||
|
#include "swad_user.h"
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************************** Public types and constants ***********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
#define Prg_MAX_CHARS_PROGRAM_ITEM_TITLE (128 - 1) // 127
|
||||||
|
#define Prg_MAX_BYTES_PROGRAM_ITEM_TITLE ((Prg_MAX_CHARS_PROGRAM_ITEM_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
|
||||||
|
|
||||||
|
struct ProgramItem
|
||||||
|
{
|
||||||
|
long PrgIteCod;
|
||||||
|
bool Hidden;
|
||||||
|
long UsrCod;
|
||||||
|
time_t TimeUTC[Dat_NUM_START_END_TIME];
|
||||||
|
bool Open;
|
||||||
|
char Title[Prg_MAX_BYTES_PROGRAM_ITEM_TITLE + 1];
|
||||||
|
bool IBelongToCrsOrGrps; // I can do this program item
|
||||||
|
// (it is associated to no groups
|
||||||
|
// or, if associated to groups,
|
||||||
|
// I belong to any of the groups)
|
||||||
|
};
|
||||||
|
|
||||||
|
#define Prg_ORDER_DEFAULT Dat_START_TIME
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Public prototypes *****************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void Prg_SeeCourseProgram (void);
|
||||||
|
void Prg_PrintOnePrgItem (void);
|
||||||
|
|
||||||
|
void Prg_PutHiddenParamPrgOrder (void);
|
||||||
|
void Prg_RequestCreatOrEditPrgItem (void);
|
||||||
|
void Prg_GetListPrgItems (void);
|
||||||
|
void Prg_GetDataOfPrgItemByCod (struct ProgramItem *PrgItem);
|
||||||
|
void Prg_FreeListPrgItems (void);
|
||||||
|
|
||||||
|
void Prg_GetNotifPrgItem (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
||||||
|
char **ContentStr,
|
||||||
|
long PrgIteCod,bool GetContent);
|
||||||
|
|
||||||
|
long Prg_GetParamPrgItemCod (void);
|
||||||
|
void Prg_ReqRemPrgItem (void);
|
||||||
|
void Prg_RemovePrgItem (void);
|
||||||
|
void Prg_HidePrgItem (void);
|
||||||
|
void Prg_ShowPrgItem (void);
|
||||||
|
void Prg_RecFormPrgItem (void);
|
||||||
|
bool Prg_CheckIfPrgItemIsAssociatedToGrp (long PrgIteCod,long GrpCod);
|
||||||
|
void Prg_RemoveGroup (long GrpCod);
|
||||||
|
void Prg_RemoveGroupsOfType (long GrpTypCod);
|
||||||
|
void Prg_RemoveCrsPrgItems (long CrsCod);
|
||||||
|
unsigned Prg_GetNumPrgItemsInCrs(long CrsCod);
|
||||||
|
|
||||||
|
unsigned Prg_GetNumCoursesWithPrgItems (Hie_Level_t Scope);
|
||||||
|
unsigned Prg_GetNumPrgItems (Hie_Level_t Scope,unsigned *NumNotif);
|
||||||
|
|
||||||
|
#endif
|
289
swad_text.c
289
swad_text.c
|
@ -1506,6 +1506,27 @@ const char *Txt_Already_existed_an_event_with_the_title_X = // Warning: it is ve
|
||||||
"Já existe um evento com o título <strong>%s</strong>.";
|
"Já existe um evento com o título <strong>%s</strong>.";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_Already_existed_an_item_with_the_title_X = // Warning: it is very important to include %s in the following sentences
|
||||||
|
#if L==1 // ca
|
||||||
|
"Ja existia un ítem amb el títol <strong>%s</strong>.";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Es gibt bereits einen Artikel mit dem Namen <strong>%s</strong>.";
|
||||||
|
#elif L==3 // en
|
||||||
|
"Already existed an item with the title <strong>%s</strong>.";
|
||||||
|
#elif L==4 // es
|
||||||
|
"Ya existía un ítem con el título <strong>%s</strong>.";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Il existe déjà un article du titre <strong>%s</strong>.";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Ya existía un ítem con el título <strong>%s</strong>."; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Esiste già un articolo con il titolo <strong>%s</strong>.";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Istniala juz przedmiot z tytulu <strong>%s</strong>.";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Já existe um item com o título <strong>%s</strong>.";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_Altitude =
|
const char *Txt_Altitude =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Altitud";
|
"Altitud";
|
||||||
|
@ -5182,6 +5203,27 @@ const char *Txt_course =
|
||||||
"disciplina";
|
"disciplina";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_Course_program =
|
||||||
|
#if L==1 // ca
|
||||||
|
"Programa de l'assignatura";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Kursprogramm";
|
||||||
|
#elif L==3 // en
|
||||||
|
"Course program";
|
||||||
|
#elif L==4 // es
|
||||||
|
"Programa de la asignatura";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Programme de la matière";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Programa de la asignatura"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Programma del corso";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Program kursu";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Programa da disciplina";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_COURSE_STATUS[Crs_NUM_STATUS_TXT] =
|
const char *Txt_COURSE_STATUS[Crs_NUM_STATUS_TXT] =
|
||||||
{
|
{
|
||||||
[Crs_STATUS_UNKNOWN] =
|
[Crs_STATUS_UNKNOWN] =
|
||||||
|
@ -5941,6 +5983,27 @@ const char *Txt_Create_institution =
|
||||||
"Criar institução";
|
"Criar institução";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_Create_item =
|
||||||
|
#if L==1 // ca
|
||||||
|
"Crear ítem";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Artikel eingeben";
|
||||||
|
#elif L==3 // en
|
||||||
|
"Create item";
|
||||||
|
#elif L==4 // es
|
||||||
|
"Crear ítem";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Créer article";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Crear ítem"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Crea articolo";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Utwórz przedmiot";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Criar item";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_Create_link =
|
const char *Txt_Create_link =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Crear enllaç";
|
"Crear enllaç";
|
||||||
|
@ -6529,6 +6592,27 @@ const char *Txt_Created_new_institution_X = // Warning: it is very important to
|
||||||
"Criada nova institução <strong>%s</strong>.";
|
"Criada nova institução <strong>%s</strong>.";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_Created_new_item_X = // Warning: it is very important to include %s in the following sentences
|
||||||
|
#if L==1 // ca
|
||||||
|
"Creado nuevo ítem <strong>%s</strong>."; // Necessita traduccio
|
||||||
|
#elif L==2 // de
|
||||||
|
"Neue Artikel <strong>%s</strong> eingegeben.";
|
||||||
|
#elif L==3 // en
|
||||||
|
"Created new item <strong>%s</strong>.";
|
||||||
|
#elif L==4 // es
|
||||||
|
"Creado nuevo ítem <strong>%s</strong>.";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Créée nouvel article <strong>%s</strong>.";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Creado nuevo ítem <strong>%s</strong>."; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Creato nuovo articolo <strong>%s</strong>.";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Utworzono nowa przedmiot <strong>%s</strong>.";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Criado novo item <strong>%s</strong>.";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_Created_new_link_X = // Warning: it is very important to include %s in the following sentences
|
const char *Txt_Created_new_link_X = // Warning: it is very important to include %s in the following sentences
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Creado nuevo enlace <strong>%s</strong>."; // Necessita traduccio
|
"Creado nuevo enlace <strong>%s</strong>."; // Necessita traduccio
|
||||||
|
@ -9080,6 +9164,27 @@ const char *Txt_Do_you_really_want_to_remove_the_group_X_Y_students_ = // Warnin
|
||||||
"Ao fazer isso, você removerá %u estudantes desse grupo.";
|
"Ao fazer isso, você removerá %u estudantes desse grupo.";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_Do_you_really_want_to_remove_the_item_X = // Warning: it is very important to include %s in the following sentences
|
||||||
|
#if L==1 // ca
|
||||||
|
"De veres voleu eliminar l'ítem <strong>%s</strong>?";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Wollen Sie die Artikel <strong>%s</strong> wirklich entfernen?";
|
||||||
|
#elif L==3 // en
|
||||||
|
"Do you really want to remove the item <strong>%s</strong>?";
|
||||||
|
#elif L==4 // es
|
||||||
|
"¿Realmente desea eliminar el ítem <strong>%s</strong>?";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Voulez-vous vraiment supprimer l'article <strong>%s</strong>?";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"¿Realmente desea eliminar el ítem <strong>%s</strong>?"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Vuoi realmente rimuovere il articolo <strong>%s</strong>?";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Czy na pewno chcesz usunac przedmiot <strong>%s</strong>?";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Você realmente deseja remover o item <strong>%s</strong>?";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_Do_you_really_want_to_remove_the_match_X = // Warning: it is very important to include %s in the following sentences
|
const char *Txt_Do_you_really_want_to_remove_the_match_X = // Warning: it is very important to include %s in the following sentences
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"De veres voleu eliminar la partida <strong>%s</strong>?";
|
"De veres voleu eliminar la partida <strong>%s</strong>?";
|
||||||
|
@ -9145,7 +9250,7 @@ const char *Txt_Do_you_really_want_to_remove_the_project_X = // Warning: it is v
|
||||||
|
|
||||||
const char *Txt_Do_you_really_want_to_remove_the_question_X = // Warning: it is very important to include %ld in the following sentences
|
const char *Txt_Do_you_really_want_to_remove_the_question_X = // Warning: it is very important to include %ld in the following sentences
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"De veres voleu eliminar pregunta <strong>%ld</strong>?";
|
"De veres voleu eliminar la pregunta <strong>%ld</strong>?";
|
||||||
#elif L==2 // de
|
#elif L==2 // de
|
||||||
"Wollen Sie die Frage <strong>%ld</strong> wirklich entfernen?";
|
"Wollen Sie die Frage <strong>%ld</strong> wirklich entfernen?";
|
||||||
#elif L==3 // en
|
#elif L==3 // en
|
||||||
|
@ -9896,6 +10001,27 @@ const char *Txt_Edit_game =
|
||||||
"Editar jogo";
|
"Editar jogo";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_Edit_item =
|
||||||
|
#if L==1 // ca
|
||||||
|
"Editar ítem";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Artikel bearbeiten";
|
||||||
|
#elif L==3 // en
|
||||||
|
"Edit item";
|
||||||
|
#elif L==4 // es
|
||||||
|
"Editar ítem";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Éditer article";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Editar ítem"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Editare articolo";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Edycja przedmiot";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Editar item";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_Edit_my_personal_data =
|
const char *Txt_Edit_my_personal_data =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Edita meves dades personals";
|
"Edita meves dades personals";
|
||||||
|
@ -15912,7 +16038,7 @@ const char *Txt_INFO_TITLE[Inf_NUM_INFO_TYPES] =
|
||||||
#elif L==2 // de
|
#elif L==2 // de
|
||||||
"Studienplan (Vorlesungen)"
|
"Studienplan (Vorlesungen)"
|
||||||
#elif L==3 // en
|
#elif L==3 // en
|
||||||
"Syllabus (lectures)"
|
"Topics (lectures)"
|
||||||
#elif L==4 // es
|
#elif L==4 // es
|
||||||
"Temario teoría"
|
"Temario teoría"
|
||||||
#elif L==5 // fr
|
#elif L==5 // fr
|
||||||
|
@ -15933,7 +16059,7 @@ const char *Txt_INFO_TITLE[Inf_NUM_INFO_TYPES] =
|
||||||
#elif L==2 // de
|
#elif L==2 // de
|
||||||
"Studienplan (Übungen)"
|
"Studienplan (Übungen)"
|
||||||
#elif L==3 // en
|
#elif L==3 // en
|
||||||
"Syllabus (practicals)"
|
"Topics (practicals)"
|
||||||
#elif L==4 // es
|
#elif L==4 // es
|
||||||
"Temario prácticas"
|
"Temario prácticas"
|
||||||
#elif L==5 // fr
|
#elif L==5 // fr
|
||||||
|
@ -17083,6 +17209,27 @@ const char *Txt_It_is_optional_to_choose_a_group =
|
||||||
"Escolher um grupo é voluntário";
|
"Escolher um grupo é voluntário";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_Item =
|
||||||
|
#if L==1 // ca
|
||||||
|
"Ítem";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Artikel";
|
||||||
|
#elif L==3 // en
|
||||||
|
"Item";
|
||||||
|
#elif L==4 // es
|
||||||
|
"Ítem";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Article";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Ítem"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Articolo";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Pozycja";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Item";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_Its_me =
|
const char *Txt_Its_me =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Sóc jo!";
|
"Sóc jo!";
|
||||||
|
@ -19223,13 +19370,13 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
|
||||||
"Informação"
|
"Informação"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
// 1: ActSeeScd
|
// 1: ActSeePrg
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Programa"
|
"Programa"
|
||||||
#elif L==2 // de
|
#elif L==2 // de
|
||||||
"Programm"
|
"Programm"
|
||||||
#elif L==3 // en
|
#elif L==3 // en
|
||||||
"Schedule"
|
"Program"
|
||||||
#elif L==4 // es
|
#elif L==4 // es
|
||||||
"Programa"
|
"Programa"
|
||||||
#elif L==5 // fr
|
#elif L==5 // fr
|
||||||
|
@ -19271,7 +19418,7 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
|
||||||
#elif L==2 // de
|
#elif L==2 // de
|
||||||
"Studienplan"
|
"Studienplan"
|
||||||
#elif L==3 // en
|
#elif L==3 // en
|
||||||
"Syllabus"
|
"Topics"
|
||||||
#elif L==4 // es
|
#elif L==4 // es
|
||||||
"Temario"
|
"Temario"
|
||||||
#elif L==5 // fr
|
#elif L==5 // fr
|
||||||
|
@ -21079,7 +21226,7 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
|
||||||
"Informação desta disciplina"
|
"Informação desta disciplina"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
// 1: ActSeeScd
|
// 1: ActSeePrg
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Programació didàctica de l'assignatura"
|
"Programació didàctica de l'assignatura"
|
||||||
#elif L==2 // de
|
#elif L==2 // de
|
||||||
|
@ -21127,7 +21274,7 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
|
||||||
#elif L==2 // de
|
#elif L==2 // de
|
||||||
"Studienplan"
|
"Studienplan"
|
||||||
#elif L==3 // en
|
#elif L==3 // en
|
||||||
"Syllabus"
|
"Topics"
|
||||||
#elif L==4 // es
|
#elif L==4 // es
|
||||||
"Temario de la asignatura"
|
"Temario de la asignatura"
|
||||||
#elif L==5 // fr
|
#elif L==5 // fr
|
||||||
|
@ -24463,6 +24610,27 @@ const char *Txt_New_institution =
|
||||||
"Nova institução (universidade, faculdade, escola, academia, organização, empresa...)";
|
"Nova institução (universidade, faculdade, escola, academia, organização, empresa...)";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_New_item =
|
||||||
|
#if L==1 // ca
|
||||||
|
"Nou ítem";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Neuer Artikel";
|
||||||
|
#elif L==3 // en
|
||||||
|
"New item";
|
||||||
|
#elif L==4 // es
|
||||||
|
"Nuevo ítem";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Nouvel article";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Nuevo ítem"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Nuovo articolo";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Nowa pozycja";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Novo item";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_New_link =
|
const char *Txt_New_link =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Nuevo enlace"; // Necessita traduccio
|
"Nuevo enlace"; // Necessita traduccio
|
||||||
|
@ -25510,6 +25678,27 @@ const char *Txt_No_institutions =
|
||||||
"Não há instituções.";
|
"Não há instituções.";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_No_items =
|
||||||
|
#if L==1 // ca
|
||||||
|
"No hi ha items";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Keine Artikel";
|
||||||
|
#elif L==3 // en
|
||||||
|
"No items";
|
||||||
|
#elif L==4 // es
|
||||||
|
"No hay items";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Il n'y a pas d'articles";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"No hay items"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Non ci sono articoli";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Brak przedmiotów";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Não há itens";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_No_links =
|
const char *Txt_No_links =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"No hi ha enllaços.";
|
"No hi ha enllaços.";
|
||||||
|
@ -32859,6 +33048,27 @@ const char *Txt_Remove_group =
|
||||||
"Remover grupo";
|
"Remover grupo";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_Remove_item =
|
||||||
|
#if L==1 // ca
|
||||||
|
"Eliminar ítem";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Entfernen Artikel";
|
||||||
|
#elif L==3 // en
|
||||||
|
"Remove item";
|
||||||
|
#elif L==4 // es
|
||||||
|
"Eliminar ítem";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Supprimer article";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Eliminar ítem"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Rimuovere articolo";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Usuń przedmiot";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Remover item";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_Remove_link =
|
const char *Txt_Remove_link =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Eliminar enllaç";
|
"Eliminar enllaç";
|
||||||
|
@ -41681,6 +41891,27 @@ const char *Txt_FIGURE_TYPES[Fig_NUM_FIGURES] =
|
||||||
"Otwarte Zasoby Edukacyjne (OER)"
|
"Otwarte Zasoby Edukacyjne (OER)"
|
||||||
#elif L==9 // pt
|
#elif L==9 // pt
|
||||||
"Recursos Educacionais Abertos (OER)"
|
"Recursos Educacionais Abertos (OER)"
|
||||||
|
#endif
|
||||||
|
,
|
||||||
|
[Fig_COURSE_PROGRAM] =
|
||||||
|
#if L==1 // ca
|
||||||
|
"Programa"
|
||||||
|
#elif L==2 // de
|
||||||
|
"Programm"
|
||||||
|
#elif L==3 // en
|
||||||
|
"Program"
|
||||||
|
#elif L==4 // es
|
||||||
|
"Programa"
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Programme"
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Programa" // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Programma"
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Program"
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Programa"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
[Fig_ASSIGNMENTS] =
|
[Fig_ASSIGNMENTS] =
|
||||||
|
@ -45894,6 +46125,27 @@ const char *Txt_The_integrated_editor_is_not_yet_available =
|
||||||
"O editor integrado ainda não está disponível.";
|
"O editor integrado ainda não está disponível.";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_The_item_has_been_modified =
|
||||||
|
#if L==1 // ca
|
||||||
|
"El ítem ha estat modificat.";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Das Artikel wurde geändert.";
|
||||||
|
#elif L==3 // en
|
||||||
|
"The item has been modified.";
|
||||||
|
#elif L==4 // es
|
||||||
|
"El ítem ha sido modificado.";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"L'article a été modifié.";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"El ítem ha sido modificado."; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Il articolo è stato modificato.";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Gra przedmiot zmodyfikowane.";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"O item foi modificado.";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_The_link_X_already_exists = // Warning: it is very important to include %s in the following sentences
|
const char *Txt_The_link_X_already_exists = // Warning: it is very important to include %s in the following sentences
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"El enlace <strong>%s</strong> ya existe."; // Necessita traduccio
|
"El enlace <strong>%s</strong> ya existe."; // Necessita traduccio
|
||||||
|
@ -56821,6 +57073,27 @@ const char *Txt_You_must_specify_the_title_of_the_game =
|
||||||
"Você deve especificar o título do jogo.";
|
"Você deve especificar o título do jogo.";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_You_must_specify_the_title_of_the_item =
|
||||||
|
#if L==1 // ca
|
||||||
|
"Cal especificar el títol del ítem.";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Die Artikel muss angegeben werden.";
|
||||||
|
#elif L==3 // en
|
||||||
|
"You must specify the title of the item.";
|
||||||
|
#elif L==4 // es
|
||||||
|
"Debe especificar el título del ítem.";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Vous devez spécifier le titre du article.";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Debe especificar el título del ítem."; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"È necessario specificare il titolo del articolo.";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Musisz podać tytuł przedmiot.";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Você deve especificar o título do item.";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_You_must_specify_the_title_of_the_project =
|
const char *Txt_You_must_specify_the_title_of_the_project =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Cal especificar el títol del projecte.";
|
"Cal especificar el títol del projecte.";
|
||||||
|
|
|
@ -4766,7 +4766,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
|
||||||
"" // Precisa de tradução
|
"" // Precisa de tradução
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
[ActSeeScd] =
|
[ActSeePrg] =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"" // Necessita traducció
|
"" // Necessita traducció
|
||||||
#elif L==2 // de
|
#elif L==2 // de
|
||||||
|
|
Loading…
Reference in New Issue