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_network.o swad_nickname.o swad_notice.o swad_notification.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_record.o swad_report.o swad_role.o swad_RSS.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,
|
||||
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
|
||||
--
|
||||
CREATE TABLE IF NOT EXISTS prj_config (
|
||||
|
|
|
@ -73,6 +73,7 @@
|
|||
#include "swad_photo.h"
|
||||
#include "swad_privacy.h"
|
||||
#include "swad_profile.h"
|
||||
#include "swad_program.h"
|
||||
#include "swad_project.h"
|
||||
#include "swad_QR.h"
|
||||
#include "swad_report.h"
|
||||
|
@ -380,7 +381,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
|||
// TabCrs ******************************************************************
|
||||
// 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" },
|
||||
[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" },
|
||||
[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" },
|
||||
|
@ -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},
|
||||
[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},
|
||||
|
||||
[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
|
||||
ActPrnSysInf, // #1819
|
||||
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
|
||||
|
||||
#define Act_MAX_ACTION_COD 1821
|
||||
#define Act_MAX_ACTION_COD 1830
|
||||
|
||||
#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
|
||||
#define ActSeeCrsInf (ActChgCrsSta + 1)
|
||||
#define ActSeeScd (ActChgCrsSta + 2)
|
||||
#define ActSeePrg (ActChgCrsSta + 2)
|
||||
#define ActSeeTchGui (ActChgCrsSta + 3)
|
||||
#define ActSeeSyl (ActChgCrsSta + 4)
|
||||
#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 ActChgCrsYeaCfg (ActChgCrsSta + 14)
|
||||
#define ActEdiCrsInf (ActChgCrsSta + 15)
|
||||
#define ActEdiTchGui (ActChgCrsSta + 16)
|
||||
#define ActSeeSylLec (ActChgCrsSta + 17)
|
||||
#define ActSeeSylPra (ActChgCrsSta + 18)
|
||||
#define ActEdiSylLec (ActChgCrsSta + 19)
|
||||
#define ActEdiSylPra (ActChgCrsSta + 20)
|
||||
#define ActDelItmSylLec (ActChgCrsSta + 21)
|
||||
#define ActDelItmSylPra (ActChgCrsSta + 22)
|
||||
#define ActUp_IteSylLec (ActChgCrsSta + 23)
|
||||
#define ActUp_IteSylPra (ActChgCrsSta + 24)
|
||||
#define ActDwnIteSylLec (ActChgCrsSta + 25)
|
||||
#define ActDwnIteSylPra (ActChgCrsSta + 26)
|
||||
#define ActRgtIteSylLec (ActChgCrsSta + 27)
|
||||
#define ActRgtIteSylPra (ActChgCrsSta + 28)
|
||||
#define ActLftIteSylLec (ActChgCrsSta + 29)
|
||||
#define ActLftIteSylPra (ActChgCrsSta + 30)
|
||||
#define ActInsIteSylLec (ActChgCrsSta + 31)
|
||||
#define ActInsIteSylPra (ActChgCrsSta + 32)
|
||||
#define ActModIteSylLec (ActChgCrsSta + 33)
|
||||
#define ActModIteSylPra (ActChgCrsSta + 34)
|
||||
#define ActFrmNewPrgIte (ActChgCrsSta + 16)
|
||||
#define ActEdiOnePrgIte (ActChgCrsSta + 17)
|
||||
#define ActPrnOnePrgIte (ActChgCrsSta + 18)
|
||||
#define ActNewPrgIte (ActChgCrsSta + 19)
|
||||
#define ActChgPrgIte (ActChgCrsSta + 20)
|
||||
#define ActReqRemPrgIte (ActChgCrsSta + 21)
|
||||
#define ActRemPrgIte (ActChgCrsSta + 22)
|
||||
#define ActHidPrgIte (ActChgCrsSta + 23)
|
||||
#define ActShoPrgIte (ActChgCrsSta + 24)
|
||||
#define ActEdiTchGui (ActChgCrsSta + 25)
|
||||
#define ActSeeSylLec (ActChgCrsSta + 26)
|
||||
#define ActSeeSylPra (ActChgCrsSta + 27)
|
||||
#define ActEdiSylLec (ActChgCrsSta + 28)
|
||||
#define ActEdiSylPra (ActChgCrsSta + 29)
|
||||
#define ActDelItmSylLec (ActChgCrsSta + 30)
|
||||
#define ActDelItmSylPra (ActChgCrsSta + 31)
|
||||
#define ActUp_IteSylLec (ActChgCrsSta + 32)
|
||||
#define ActUp_IteSylPra (ActChgCrsSta + 33)
|
||||
#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 ActEdiFAQ (ActChgCrsSta + 36)
|
||||
#define ActEdiCrsLnk (ActChgCrsSta + 37)
|
||||
#define ActEdiBib (ActChgCrsSta + 44)
|
||||
#define ActEdiFAQ (ActChgCrsSta + 45)
|
||||
#define ActEdiCrsLnk (ActChgCrsSta + 46)
|
||||
|
||||
#define ActChgFrcReaCrsInf (ActChgCrsSta + 38)
|
||||
#define ActChgFrcReaTchGui (ActChgCrsSta + 39)
|
||||
#define ActChgFrcReaSylLec (ActChgCrsSta + 40)
|
||||
#define ActChgFrcReaSylPra (ActChgCrsSta + 41)
|
||||
#define ActChgFrcReaBib (ActChgCrsSta + 42)
|
||||
#define ActChgFrcReaFAQ (ActChgCrsSta + 43)
|
||||
#define ActChgFrcReaCrsLnk (ActChgCrsSta + 44)
|
||||
#define ActChgFrcReaCrsInf (ActChgCrsSta + 47)
|
||||
#define ActChgFrcReaTchGui (ActChgCrsSta + 48)
|
||||
#define ActChgFrcReaSylLec (ActChgCrsSta + 49)
|
||||
#define ActChgFrcReaSylPra (ActChgCrsSta + 50)
|
||||
#define ActChgFrcReaBib (ActChgCrsSta + 51)
|
||||
#define ActChgFrcReaFAQ (ActChgCrsSta + 52)
|
||||
#define ActChgFrcReaCrsLnk (ActChgCrsSta + 53)
|
||||
|
||||
#define ActChgHavReaCrsInf (ActChgCrsSta + 45)
|
||||
#define ActChgHavReaTchGui (ActChgCrsSta + 46)
|
||||
#define ActChgHavReaSylLec (ActChgCrsSta + 47)
|
||||
#define ActChgHavReaSylPra (ActChgCrsSta + 48)
|
||||
#define ActChgHavReaBib (ActChgCrsSta + 49)
|
||||
#define ActChgHavReaFAQ (ActChgCrsSta + 50)
|
||||
#define ActChgHavReaCrsLnk (ActChgCrsSta + 51)
|
||||
#define ActChgHavReaCrsInf (ActChgCrsSta + 54)
|
||||
#define ActChgHavReaTchGui (ActChgCrsSta + 55)
|
||||
#define ActChgHavReaSylLec (ActChgCrsSta + 56)
|
||||
#define ActChgHavReaSylPra (ActChgCrsSta + 57)
|
||||
#define ActChgHavReaBib (ActChgCrsSta + 58)
|
||||
#define ActChgHavReaFAQ (ActChgCrsSta + 59)
|
||||
#define ActChgHavReaCrsLnk (ActChgCrsSta + 60)
|
||||
|
||||
#define ActSelInfSrcCrsInf (ActChgCrsSta + 52)
|
||||
#define ActSelInfSrcTchGui (ActChgCrsSta + 53)
|
||||
#define ActSelInfSrcSylLec (ActChgCrsSta + 54)
|
||||
#define ActSelInfSrcSylPra (ActChgCrsSta + 55)
|
||||
#define ActSelInfSrcBib (ActChgCrsSta + 56)
|
||||
#define ActSelInfSrcFAQ (ActChgCrsSta + 57)
|
||||
#define ActSelInfSrcCrsLnk (ActChgCrsSta + 58)
|
||||
#define ActRcvURLCrsInf (ActChgCrsSta + 59)
|
||||
#define ActRcvURLTchGui (ActChgCrsSta + 60)
|
||||
#define ActRcvURLSylLec (ActChgCrsSta + 61)
|
||||
#define ActRcvURLSylPra (ActChgCrsSta + 62)
|
||||
#define ActRcvURLBib (ActChgCrsSta + 63)
|
||||
#define ActRcvURLFAQ (ActChgCrsSta + 64)
|
||||
#define ActRcvURLCrsLnk (ActChgCrsSta + 65)
|
||||
#define ActRcvPagCrsInf (ActChgCrsSta + 66)
|
||||
#define ActRcvPagTchGui (ActChgCrsSta + 67)
|
||||
#define ActRcvPagSylLec (ActChgCrsSta + 68)
|
||||
#define ActRcvPagSylPra (ActChgCrsSta + 69)
|
||||
#define ActRcvPagBib (ActChgCrsSta + 70)
|
||||
#define ActRcvPagFAQ (ActChgCrsSta + 71)
|
||||
#define ActRcvPagCrsLnk (ActChgCrsSta + 72)
|
||||
#define ActEditorCrsInf (ActChgCrsSta + 73)
|
||||
#define ActEditorTchGui (ActChgCrsSta + 74)
|
||||
#define ActEditorSylLec (ActChgCrsSta + 75)
|
||||
#define ActEditorSylPra (ActChgCrsSta + 76)
|
||||
#define ActEditorBib (ActChgCrsSta + 77)
|
||||
#define ActEditorFAQ (ActChgCrsSta + 78)
|
||||
#define ActEditorCrsLnk (ActChgCrsSta + 79)
|
||||
#define ActPlaTxtEdiCrsInf (ActChgCrsSta + 80)
|
||||
#define ActPlaTxtEdiTchGui (ActChgCrsSta + 81)
|
||||
#define ActPlaTxtEdiSylLec (ActChgCrsSta + 82)
|
||||
#define ActPlaTxtEdiSylPra (ActChgCrsSta + 83)
|
||||
#define ActPlaTxtEdiBib (ActChgCrsSta + 84)
|
||||
#define ActPlaTxtEdiFAQ (ActChgCrsSta + 85)
|
||||
#define ActPlaTxtEdiCrsLnk (ActChgCrsSta + 86)
|
||||
#define ActRchTxtEdiCrsInf (ActChgCrsSta + 87)
|
||||
#define ActRchTxtEdiTchGui (ActChgCrsSta + 88)
|
||||
#define ActRchTxtEdiSylLec (ActChgCrsSta + 89)
|
||||
#define ActRchTxtEdiSylPra (ActChgCrsSta + 90)
|
||||
#define ActRchTxtEdiBib (ActChgCrsSta + 91)
|
||||
#define ActRchTxtEdiFAQ (ActChgCrsSta + 92)
|
||||
#define ActRchTxtEdiCrsLnk (ActChgCrsSta + 93)
|
||||
#define ActRcvPlaTxtCrsInf (ActChgCrsSta + 94)
|
||||
#define ActRcvPlaTxtTchGui (ActChgCrsSta + 95)
|
||||
#define ActRcvPlaTxtSylLec (ActChgCrsSta + 96)
|
||||
#define ActRcvPlaTxtSylPra (ActChgCrsSta + 97)
|
||||
#define ActRcvPlaTxtBib (ActChgCrsSta + 98)
|
||||
#define ActRcvPlaTxtFAQ (ActChgCrsSta + 99)
|
||||
#define ActRcvPlaTxtCrsLnk (ActChgCrsSta + 100)
|
||||
#define ActRcvRchTxtCrsInf (ActChgCrsSta + 101)
|
||||
#define ActRcvRchTxtTchGui (ActChgCrsSta + 102)
|
||||
#define ActRcvRchTxtSylLec (ActChgCrsSta + 103)
|
||||
#define ActRcvRchTxtSylPra (ActChgCrsSta + 104)
|
||||
#define ActRcvRchTxtBib (ActChgCrsSta + 105)
|
||||
#define ActRcvRchTxtFAQ (ActChgCrsSta + 106)
|
||||
#define ActRcvRchTxtCrsLnk (ActChgCrsSta + 107)
|
||||
#define ActSelInfSrcCrsInf (ActChgCrsSta + 61)
|
||||
#define ActSelInfSrcTchGui (ActChgCrsSta + 62)
|
||||
#define ActSelInfSrcSylLec (ActChgCrsSta + 63)
|
||||
#define ActSelInfSrcSylPra (ActChgCrsSta + 64)
|
||||
#define ActSelInfSrcBib (ActChgCrsSta + 65)
|
||||
#define ActSelInfSrcFAQ (ActChgCrsSta + 66)
|
||||
#define ActSelInfSrcCrsLnk (ActChgCrsSta + 67)
|
||||
#define ActRcvURLCrsInf (ActChgCrsSta + 68)
|
||||
#define ActRcvURLTchGui (ActChgCrsSta + 69)
|
||||
#define ActRcvURLSylLec (ActChgCrsSta + 70)
|
||||
#define ActRcvURLSylPra (ActChgCrsSta + 71)
|
||||
#define ActRcvURLBib (ActChgCrsSta + 72)
|
||||
#define ActRcvURLFAQ (ActChgCrsSta + 73)
|
||||
#define ActRcvURLCrsLnk (ActChgCrsSta + 74)
|
||||
#define ActRcvPagCrsInf (ActChgCrsSta + 75)
|
||||
#define ActRcvPagTchGui (ActChgCrsSta + 76)
|
||||
#define ActRcvPagSylLec (ActChgCrsSta + 77)
|
||||
#define ActRcvPagSylPra (ActChgCrsSta + 78)
|
||||
#define ActRcvPagBib (ActChgCrsSta + 79)
|
||||
#define ActRcvPagFAQ (ActChgCrsSta + 80)
|
||||
#define ActRcvPagCrsLnk (ActChgCrsSta + 81)
|
||||
#define ActEditorCrsInf (ActChgCrsSta + 82)
|
||||
#define ActEditorTchGui (ActChgCrsSta + 83)
|
||||
#define ActEditorSylLec (ActChgCrsSta + 84)
|
||||
#define ActEditorSylPra (ActChgCrsSta + 85)
|
||||
#define ActEditorBib (ActChgCrsSta + 86)
|
||||
#define ActEditorFAQ (ActChgCrsSta + 87)
|
||||
#define ActEditorCrsLnk (ActChgCrsSta + 88)
|
||||
#define ActPlaTxtEdiCrsInf (ActChgCrsSta + 89)
|
||||
#define ActPlaTxtEdiTchGui (ActChgCrsSta + 90)
|
||||
#define ActPlaTxtEdiSylLec (ActChgCrsSta + 91)
|
||||
#define ActPlaTxtEdiSylPra (ActChgCrsSta + 92)
|
||||
#define ActPlaTxtEdiBib (ActChgCrsSta + 93)
|
||||
#define ActPlaTxtEdiFAQ (ActChgCrsSta + 94)
|
||||
#define ActPlaTxtEdiCrsLnk (ActChgCrsSta + 95)
|
||||
#define ActRchTxtEdiCrsInf (ActChgCrsSta + 96)
|
||||
#define ActRchTxtEdiTchGui (ActChgCrsSta + 97)
|
||||
#define ActRchTxtEdiSylLec (ActChgCrsSta + 98)
|
||||
#define ActRchTxtEdiSylPra (ActChgCrsSta + 99)
|
||||
#define ActRchTxtEdiBib (ActChgCrsSta + 100)
|
||||
#define ActRchTxtEdiFAQ (ActChgCrsSta + 101)
|
||||
#define ActRchTxtEdiCrsLnk (ActChgCrsSta + 102)
|
||||
#define ActRcvPlaTxtCrsInf (ActChgCrsSta + 103)
|
||||
#define ActRcvPlaTxtTchGui (ActChgCrsSta + 104)
|
||||
#define ActRcvPlaTxtSylLec (ActChgCrsSta + 105)
|
||||
#define ActRcvPlaTxtSylPra (ActChgCrsSta + 106)
|
||||
#define ActRcvPlaTxtBib (ActChgCrsSta + 107)
|
||||
#define ActRcvPlaTxtFAQ (ActChgCrsSta + 108)
|
||||
#define ActRcvPlaTxtCrsLnk (ActChgCrsSta + 109)
|
||||
#define ActRcvRchTxtCrsInf (ActChgCrsSta + 110)
|
||||
#define ActRcvRchTxtTchGui (ActChgCrsSta + 111)
|
||||
#define ActRcvRchTxtSylLec (ActChgCrsSta + 112)
|
||||
#define ActRcvRchTxtSylPra (ActChgCrsSta + 113)
|
||||
#define ActRcvRchTxtBib (ActChgCrsSta + 114)
|
||||
#define ActRcvRchTxtFAQ (ActChgCrsSta + 115)
|
||||
#define ActRcvRchTxtCrsLnk (ActChgCrsSta + 116)
|
||||
|
||||
#define ActPrnCrsTT (ActChgCrsSta + 108)
|
||||
#define ActEdiCrsTT (ActChgCrsSta + 109)
|
||||
#define ActChgCrsTT (ActChgCrsSta + 110)
|
||||
#define ActChgCrsTT1stDay (ActChgCrsSta + 111)
|
||||
#define ActPrnCrsTT (ActChgCrsSta + 117)
|
||||
#define ActEdiCrsTT (ActChgCrsSta + 118)
|
||||
#define ActChgCrsTT (ActChgCrsSta + 119)
|
||||
#define ActChgCrsTT1stDay (ActChgCrsSta + 120)
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Assessment tab ********************************/
|
||||
|
|
|
@ -520,6 +520,15 @@ Param
|
|||
// 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: 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)
|
||||
Copy the following icons to icon public directory:
|
||||
|
|
|
@ -2188,6 +2188,51 @@ mysql> DESCRIBE plugins;
|
|||
"IP CHAR(15) NOT NULL," // Cns_MAX_BYTES_IP
|
||||
"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 *****/
|
||||
/*
|
||||
mysql> DESCRIBE prj_config;
|
||||
|
|
|
@ -145,6 +145,8 @@ static void Fig_WriteRowStatsFileBrowsers3 (const char *NameOfFileZones,
|
|||
static void Fig_GetAndShowOERsStats (void);
|
||||
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_GetAndShowProjectsStats (void);
|
||||
static void Fig_GetAndShowTestsStats (void);
|
||||
|
@ -315,6 +317,7 @@ void Fig_ShowFigures (void)
|
|||
[Fig_DEGREE_TYPES ] = Fig_GetAndShowDegreeTypesStats,
|
||||
[Fig_FOLDERS_AND_FILES] = Fig_GetAndShowFileBrowsersStats,
|
||||
[Fig_OER ] = Fig_GetAndShowOERsStats,
|
||||
[Fig_COURSE_PROGRAM ] = Fig_GetAndShowCourseProgramStats,
|
||||
[Fig_ASSIGNMENTS ] = Fig_GetAndShowAssignmentsStats,
|
||||
[Fig_PROJECTS ] = Fig_GetAndShowProjectsStats,
|
||||
[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);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************** 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 ***********************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
/************************** Public types and constants ***********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Fig_NUM_FIGURES 28
|
||||
#define Fig_NUM_FIGURES 29
|
||||
typedef enum
|
||||
{
|
||||
Fig_USERS, // Number of users
|
||||
|
@ -41,6 +41,7 @@ typedef enum
|
|||
Fig_DEGREE_TYPES, // Number of degrees in each type of degree
|
||||
Fig_FOLDERS_AND_FILES, // Number of folders and files
|
||||
Fig_OER, // Number of OERs (Open Educational Resources)
|
||||
Fig_COURSE_PROGRAM, // Number of program items
|
||||
Fig_ASSIGNMENTS, // Number of assignments
|
||||
Fig_PROJECTS, // Number of projects
|
||||
Fig_TESTS, // Number of test questions
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include "swad_global.h"
|
||||
#include "swad_icon.h"
|
||||
#include "swad_parameter.h"
|
||||
#include "swad_program.h"
|
||||
#include "swad_project.h"
|
||||
#include "swad_role.h"
|
||||
#include "swad_setting.h"
|
||||
|
@ -296,6 +297,11 @@ void Gbl_InitializeGlobals (void)
|
|||
Gbl.Search.Str[0] = '\0';
|
||||
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.Num = 0;
|
||||
Gbl.Asgs.LstAsgCods = NULL;
|
||||
|
|
|
@ -540,6 +540,15 @@ struct Globals
|
|||
char TmpDir[NAME_MAX + 1];
|
||||
} ZIP;
|
||||
} 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
|
||||
{
|
||||
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";
|
||||
#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 =
|
||||
#if L==1
|
||||
"COURSE.Guide.es";
|
||||
|
|
|
@ -101,7 +101,7 @@ static const Act_Action_t Mnu_MenuActions[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_
|
|||
},
|
||||
[TabCrs] = {
|
||||
[ 0] = ActSeeCrsInf,
|
||||
[ 1] = ActSeeScd,
|
||||
[ 1] = ActSeePrg,
|
||||
[ 2] = ActSeeTchGui,
|
||||
[ 3] = ActSeeSyl,
|
||||
[ 4] = ActSeeBib,
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#include "swad_global.h"
|
||||
#include "swad_HTML.h"
|
||||
#include "swad_parameter.h"
|
||||
#include "swad_program.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] =
|
||||
{
|
||||
[Pag_COURSE_PROGRAM ] = "NumPagPrg",
|
||||
[Pag_ASSIGNMENTS ] = "NumPagAsg",
|
||||
[Pag_PROJECTS ] = "NumPagPrj",
|
||||
[Pag_GAMES ] = "NumPagGam",
|
||||
|
@ -165,6 +167,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
|
|||
{
|
||||
switch (WhatPaginate)
|
||||
{
|
||||
case Pag_COURSE_PROGRAM:
|
||||
Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor);
|
||||
Pag_PutHiddenParamPagNum (WhatPaginate,1);
|
||||
Prg_PutHiddenParamPrgOrder ();
|
||||
Grp_PutParamWhichGrps ();
|
||||
break;
|
||||
case Pag_ASSIGNMENTS:
|
||||
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
||||
Pag_PutHiddenParamPagNum (WhatPaginate,1);
|
||||
|
@ -279,6 +287,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
|
|||
{
|
||||
switch (WhatPaginate)
|
||||
{
|
||||
case Pag_COURSE_PROGRAM:
|
||||
Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor);
|
||||
Pag_PutHiddenParamPagNum (WhatPaginate,1);
|
||||
Prg_PutHiddenParamPrgOrder ();
|
||||
Grp_PutParamWhichGrps ();
|
||||
break;
|
||||
case Pag_ASSIGNMENTS:
|
||||
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
||||
Pag_PutHiddenParamPagNum (WhatPaginate,1);
|
||||
|
@ -379,6 +393,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t 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:
|
||||
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
||||
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage);
|
||||
|
@ -491,6 +511,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
|
|||
{
|
||||
switch (WhatPaginate)
|
||||
{
|
||||
case Pag_COURSE_PROGRAM:
|
||||
Frm_StartFormAnchor (ActSeePrg,Pagination->Anchor);
|
||||
Pag_PutHiddenParamPagNum (WhatPaginate,NumPage);
|
||||
Prg_PutHiddenParamPrgOrder ();
|
||||
Grp_PutParamWhichGrps ();
|
||||
break;
|
||||
case Pag_ASSIGNMENTS:
|
||||
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
||||
Pag_PutHiddenParamPagNum (WhatPaginate,NumPage);
|
||||
|
@ -590,6 +616,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t 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:
|
||||
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
||||
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage);
|
||||
|
@ -690,6 +722,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t 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:
|
||||
Frm_StartFormAnchor (ActSeeAsg,Pagination->Anchor);
|
||||
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags);
|
||||
|
|
|
@ -37,20 +37,21 @@
|
|||
/******************************** Public types *******************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Pag_NUM_WHAT_PAGINATE 11
|
||||
#define Pag_NUM_WHAT_PAGINATE 12
|
||||
typedef enum
|
||||
{
|
||||
Pag_ASSIGNMENTS = 0,
|
||||
Pag_PROJECTS = 1,
|
||||
Pag_GAMES = 2,
|
||||
Pag_SURVEYS = 3,
|
||||
Pag_ATT_EVENTS = 4,
|
||||
Pag_THREADS_FORUM = 5,
|
||||
Pag_POSTS_FORUM = 6,
|
||||
Pag_MESSAGES_RECEIVED = 7,
|
||||
Pag_MESSAGES_SENT = 8,
|
||||
Pag_MY_AGENDA = 9,
|
||||
Pag_ANOTHER_AGENDA = 10,
|
||||
Pag_COURSE_PROGRAM = 0,
|
||||
Pag_ASSIGNMENTS = 1,
|
||||
Pag_PROJECTS = 2,
|
||||
Pag_GAMES = 3,
|
||||
Pag_SURVEYS = 4,
|
||||
Pag_ATT_EVENTS = 5,
|
||||
Pag_THREADS_FORUM = 6,
|
||||
Pag_POSTS_FORUM = 7,
|
||||
Pag_MESSAGES_RECEIVED = 8,
|
||||
Pag_MESSAGES_SENT = 9,
|
||||
Pag_MY_AGENDA = 10,
|
||||
Pag_ANOTHER_AGENDA = 11,
|
||||
} Pag_WhatPaginate_t;
|
||||
|
||||
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>.";
|
||||
#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 =
|
||||
#if L==1 // ca
|
||||
"Altitud";
|
||||
|
@ -5182,6 +5203,27 @@ const char *Txt_course =
|
|||
"disciplina";
|
||||
#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] =
|
||||
{
|
||||
[Crs_STATUS_UNKNOWN] =
|
||||
|
@ -5941,6 +5983,27 @@ const char *Txt_Create_institution =
|
|||
"Criar institução";
|
||||
#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 =
|
||||
#if L==1 // ca
|
||||
"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>.";
|
||||
#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
|
||||
#if L==1 // ca
|
||||
"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.";
|
||||
#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
|
||||
#if L==1 // ca
|
||||
"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
|
||||
#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
|
||||
"Wollen Sie die Frage <strong>%ld</strong> wirklich entfernen?";
|
||||
#elif L==3 // en
|
||||
|
@ -9896,6 +10001,27 @@ const char *Txt_Edit_game =
|
|||
"Editar jogo";
|
||||
#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 =
|
||||
#if L==1 // ca
|
||||
"Edita meves dades personals";
|
||||
|
@ -15912,7 +16038,7 @@ const char *Txt_INFO_TITLE[Inf_NUM_INFO_TYPES] =
|
|||
#elif L==2 // de
|
||||
"Studienplan (Vorlesungen)"
|
||||
#elif L==3 // en
|
||||
"Syllabus (lectures)"
|
||||
"Topics (lectures)"
|
||||
#elif L==4 // es
|
||||
"Temario teoría"
|
||||
#elif L==5 // fr
|
||||
|
@ -15933,7 +16059,7 @@ const char *Txt_INFO_TITLE[Inf_NUM_INFO_TYPES] =
|
|||
#elif L==2 // de
|
||||
"Studienplan (Übungen)"
|
||||
#elif L==3 // en
|
||||
"Syllabus (practicals)"
|
||||
"Topics (practicals)"
|
||||
#elif L==4 // es
|
||||
"Temario prácticas"
|
||||
#elif L==5 // fr
|
||||
|
@ -17083,6 +17209,27 @@ const char *Txt_It_is_optional_to_choose_a_group =
|
|||
"Escolher um grupo é voluntário";
|
||||
#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 =
|
||||
#if L==1 // ca
|
||||
"Sóc jo!";
|
||||
|
@ -19223,13 +19370,13 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
|
|||
"Informação"
|
||||
#endif
|
||||
,
|
||||
// 1: ActSeeScd
|
||||
// 1: ActSeePrg
|
||||
#if L==1 // ca
|
||||
"Programa"
|
||||
#elif L==2 // de
|
||||
"Programm"
|
||||
#elif L==3 // en
|
||||
"Schedule"
|
||||
"Program"
|
||||
#elif L==4 // es
|
||||
"Programa"
|
||||
#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
|
||||
"Studienplan"
|
||||
#elif L==3 // en
|
||||
"Syllabus"
|
||||
"Topics"
|
||||
#elif L==4 // es
|
||||
"Temario"
|
||||
#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"
|
||||
#endif
|
||||
,
|
||||
// 1: ActSeeScd
|
||||
// 1: ActSeePrg
|
||||
#if L==1 // ca
|
||||
"Programació didàctica de l'assignatura"
|
||||
#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
|
||||
"Studienplan"
|
||||
#elif L==3 // en
|
||||
"Syllabus"
|
||||
"Topics"
|
||||
#elif L==4 // es
|
||||
"Temario de la asignatura"
|
||||
#elif L==5 // fr
|
||||
|
@ -24463,6 +24610,27 @@ const char *Txt_New_institution =
|
|||
"Nova institução (universidade, faculdade, escola, academia, organização, empresa...)";
|
||||
#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 =
|
||||
#if L==1 // ca
|
||||
"Nuevo enlace"; // Necessita traduccio
|
||||
|
@ -25510,6 +25678,27 @@ const char *Txt_No_institutions =
|
|||
"Não há instituções.";
|
||||
#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 =
|
||||
#if L==1 // ca
|
||||
"No hi ha enllaços.";
|
||||
|
@ -32859,6 +33048,27 @@ const char *Txt_Remove_group =
|
|||
"Remover grupo";
|
||||
#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 =
|
||||
#if L==1 // ca
|
||||
"Eliminar enllaç";
|
||||
|
@ -41681,6 +41891,27 @@ const char *Txt_FIGURE_TYPES[Fig_NUM_FIGURES] =
|
|||
"Otwarte Zasoby Edukacyjne (OER)"
|
||||
#elif L==9 // pt
|
||||
"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
|
||||
,
|
||||
[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.";
|
||||
#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
|
||||
#if L==1 // ca
|
||||
"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.";
|
||||
#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 =
|
||||
#if L==1 // ca
|
||||
"Cal especificar el títol del projecte.";
|
||||
|
|
|
@ -4766,7 +4766,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
|
|||
"" // Precisa de tradução
|
||||
#endif
|
||||
,
|
||||
[ActSeeScd] =
|
||||
[ActSeePrg] =
|
||||
#if L==1 // ca
|
||||
"" // Necessita traducció
|
||||
#elif L==2 // de
|
||||
|
|
Loading…
Reference in New Issue