Version 17.2

This commit is contained in:
Antonio Cañas Vargas 2017-09-17 16:58:09 +02:00
parent a92307a062
commit 06ba4b2d99
19 changed files with 971 additions and 508 deletions

View File

@ -930,6 +930,29 @@ CREATE TABLE IF NOT EXISTS plugins (
IP CHAR(15) NOT NULL, IP CHAR(15) NOT NULL,
UNIQUE INDEX(PlgCod)); UNIQUE INDEX(PlgCod));
-- --
-- Table Prj_grp: stores the groups associated to projects
--
CREATE TABLE IF NOT EXISTS prj_grp (
PrjCod INT NOT NULL,
GrpCod INT NOT NULL,
UNIQUE INDEX(PrjCod,GrpCod));
--
-- Table projects: stores the projects proposed by the teachers to their students
--
CREATE TABLE IF NOT EXISTS projects (
PrjCod INT NOT NULL AUTO_INCREMENT,
CrsCod INT NOT NULL DEFAULT -1,
Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',
NumNotif INT NOT NULL DEFAULT 0,
UsrCod INT NOT NULL,
StartTime DATETIME NOT NULL,
EndTime DATETIME NOT NULL,
Title VARCHAR(2047) NOT NULL,
Folder VARBINARY(255) NOT NULL,
Txt TEXT NOT NULL,
UNIQUE INDEX(PrjCod),
INDEX(CrsCod,Hidden));
--
-- Table sessions: stores the information of open sessions -- Table sessions: stores the information of open sessions
-- --
CREATE TABLE IF NOT EXISTS sessions ( CREATE TABLE IF NOT EXISTS sessions (

View File

@ -65,6 +65,7 @@
#include "swad_preference.h" #include "swad_preference.h"
#include "swad_privacy.h" #include "swad_privacy.h"
#include "swad_profile.h" #include "swad_profile.h"
#include "swad_project.h"
#include "swad_QR.h" #include "swad_QR.h"
#include "swad_report.h" #include "swad_report.h"
#include "swad_role.h" #include "swad_role.h"
@ -424,6 +425,7 @@ Course:
Assessment: Assessment:
288. ActSeeAss Show the assessment system 288. ActSeeAss Show the assessment system
289. ActSeeAsg Show assignments 289. ActSeeAsg Show assignments
NEW. ActSeePrj Show projects
290. ActReqTst Request a test of self-assesment 290. ActReqTst Request a test of self-assesment
NEW. ActSeeAllGam Remote control NEW. ActSeeAllGam Remote control
291. ActSeeAllSvy List all surveys in pages 291. ActSeeAllSvy List all surveys in pages
@ -440,6 +442,7 @@ Assessment:
301. ActRchTxtEdiAss Editor of rich text of assessment 301. ActRchTxtEdiAss Editor of rich text of assessment
302. ActRcvPlaTxtAss Receive and change the plain text of the assessment system 302. ActRcvPlaTxtAss Receive and change the plain text of the assessment system
303. ActRcvRchTxtAss Receive and change the rich text of the assessment system 303. ActRcvRchTxtAss Receive and change the rich text of the assessment system
304. ActFrmNewAsg Form to create a new assignment 304. ActFrmNewAsg Form to create a new assignment
305. ActEdiOneAsg Edit one assignment 305. ActEdiOneAsg Edit one assignment
306. ActPrnOneAsg Print one assignment 306. ActPrnOneAsg Print one assignment
@ -450,6 +453,16 @@ Assessment:
311. ActHidAsg Hide assignment 311. ActHidAsg Hide assignment
312. ActShoAsg Show assignment 312. ActShoAsg Show assignment
NEW. ActFrmNewPrj Form to create a new project
NEW. ActEdiOnePrj Edit one project
NEW. ActPrnOnePrj Print one project
NEW. ActNewPrj Create new project
NEW. ActChgPrj Modify data of an existing project
NEW. ActReqRemPrj Request the removal of an project
NEW. ActRemPrj Remove project
NEW. ActHidPrj Hide project
NEW. ActShoPrj Show project
313. ActSeeTst Show the seft-assessment test 313. ActSeeTst Show the seft-assessment test
314. ActAssTst Assess a self-assessment test 314. ActAssTst Assess a self-assessment test
315. ActEdiTstQst Request the edition of self-assessment questions 315. ActEdiTstQst Request the edition of self-assessment questions
@ -1902,10 +1915,11 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
// Actions in menu: // Actions in menu:
/* ActSeeAss */{ 15, 0,TabAss,ActSeeAss ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_ShowInfo ,"infogrades64x64.gif" }, /* ActSeeAss */{ 15, 0,TabAss,ActSeeAss ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_ShowInfo ,"infogrades64x64.gif" },
/* ActSeeAsg */{ 801, 1,TabAss,ActSeeAsg ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_SeeAssignments ,"desk64x64.gif" }, /* ActSeeAsg */{ 801, 1,TabAss,ActSeeAsg ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_SeeAssignments ,"desk64x64.gif" },
/* ActReqTst */{ 103, 2,TabAss,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ShowFormAskTst ,"test64x64.gif" }, /* ActSeePrj */{1674, 2,TabAss,ActSeePrj ,0x200,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_SeeProjects ,"project64x64.png" },
/* ActSeeAllGam */{1649, 3,TabAss,ActSeeAllGam ,0x200,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_SeeAllGames ,"remote64x64.png" }, /* ActReqTst */{ 103, 3,TabAss,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ShowFormAskTst ,"test64x64.gif" },
/* ActSeeAllSvy */{ 966, 4,TabAss,ActSeeAllSvy ,0x3F8,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_SeeAllSurveys ,"survey64x64.gif" }, /* ActSeeAllGam */{1649, 4,TabAss,ActSeeAllGam ,0x200,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_SeeAllGames ,"remote64x64.png" },
/* ActSeeAllExaAnn */{ 85, 5,TabAss,ActSeeAllExaAnn ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_ListExamAnnouncementsSee ,"announce64x64.gif" }, /* ActSeeAllSvy */{ 966, 5,TabAss,ActSeeAllSvy ,0x3F8,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_SeeAllSurveys ,"survey64x64.gif" },
/* ActSeeAllExaAnn */{ 85, 6,TabAss,ActSeeAllExaAnn ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_ListExamAnnouncementsSee ,"announce64x64.gif" },
// Actions not in menu: // Actions not in menu:
/* ActEdiAss */{ 69,-1,TabUnk,ActSeeAss ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_FormsToSelSendInfo ,NULL}, /* ActEdiAss */{ 69,-1,TabUnk,ActSeeAss ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_FormsToSelSendInfo ,NULL},
@ -1930,6 +1944,16 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActHidAsg */{ 964,-1,TabUnk,ActSeeAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_HideAssignment ,NULL}, /* ActHidAsg */{ 964,-1,TabUnk,ActSeeAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_HideAssignment ,NULL},
/* ActShoAsg */{ 965,-1,TabUnk,ActSeeAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_ShowAssignment ,NULL}, /* ActShoAsg */{ 965,-1,TabUnk,ActSeeAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_ShowAssignment ,NULL},
/* ActFrmNewPrj */{1675,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RequestCreatOrEditPrj ,NULL},
/* ActEdiOnePrj */{1676,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RequestCreatOrEditPrj ,NULL},
/* ActPrnOnePrj */{1677,-1,TabUnk,ActSeePrj ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Prj_PrintOneProject ,NULL},
/* ActNewPrj */{1678,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RecFormProject ,NULL},
/* ActChgPrj */{1679,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RecFormProject ,NULL},
/* ActReqRemPrj */{1680,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqRemProject ,NULL},
/* ActRemPrj */{1681,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RemoveProject ,NULL},
/* ActHidPrj */{1682,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_HideProject ,NULL},
/* ActShoPrj */{1683,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ShowProject ,NULL},
/* ActSeeTst */{ 29,-1,TabUnk,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ShowNewTest ,NULL}, /* ActSeeTst */{ 29,-1,TabUnk,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ShowNewTest ,NULL},
/* ActAssTst */{ 98,-1,TabUnk,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_AssessTest ,NULL}, /* ActAssTst */{ 98,-1,TabUnk,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_AssessTest ,NULL},
@ -4729,6 +4753,16 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActPlyGam1stQst, // #1671 ActPlyGam1stQst, // #1671
ActPlyGamNxtQst, // #1672 ActPlyGamNxtQst, // #1672
ActPlyGamAns, // #1673 ActPlyGamAns, // #1673
ActSeePrj, // #1674
ActFrmNewPrj, // #1675
ActEdiOnePrj, // #1676
ActPrnOnePrj, // #1677
ActNewPrj, // #1678
ActChgPrj, // #1679
ActReqRemPrj, // #1680
ActRemPrj, // #1681
ActHidPrj, // #1682
ActShoPrj, // #1683
}; };
/*****************************************************************************/ /*****************************************************************************/

View File

@ -58,9 +58,9 @@ 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_NUM_ACTIONS (1 + 9 + 43 + 17 + 47 + 33 + 24 + 115 + 96 + 416 + 165 + 172 + 42 + 14 + 97) #define Act_NUM_ACTIONS (1 + 9 + 43 + 17 + 47 + 33 + 24 + 115 + 106 + 416 + 165 + 172 + 42 + 14 + 97)
#define Act_MAX_ACTION_COD 1673 #define Act_MAX_ACTION_COD 1683
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 12 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 12
@ -432,110 +432,121 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
/***************************** Assessment tab ********************************/ /***************************** Assessment tab ********************************/
/*****************************************************************************/ /*****************************************************************************/
// Actions in menu // Actions in menu
#define ActSeeAss (ActChgCalCrs1stDay + 1) #define ActSeeAss (ActChgCalCrs1stDay + 1)
#define ActSeeAsg (ActChgCalCrs1stDay + 2) #define ActSeeAsg (ActChgCalCrs1stDay + 2)
#define ActReqTst (ActChgCalCrs1stDay + 3) #define ActSeePrj (ActChgCalCrs1stDay + 3)
#define ActSeeAllGam (ActChgCalCrs1stDay + 4) #define ActReqTst (ActChgCalCrs1stDay + 4)
#define ActSeeAllSvy (ActChgCalCrs1stDay + 5) #define ActSeeAllGam (ActChgCalCrs1stDay + 5)
#define ActSeeAllExaAnn (ActChgCalCrs1stDay + 6) #define ActSeeAllSvy (ActChgCalCrs1stDay + 6)
#define ActSeeAllExaAnn (ActChgCalCrs1stDay + 7)
// Secondary actions // Secondary actions
#define ActEdiAss (ActChgCalCrs1stDay + 7) #define ActEdiAss (ActChgCalCrs1stDay + 8)
#define ActChgFrcReaAss (ActChgCalCrs1stDay + 8) #define ActChgFrcReaAss (ActChgCalCrs1stDay + 9)
#define ActChgHavReaAss (ActChgCalCrs1stDay + 9) #define ActChgHavReaAss (ActChgCalCrs1stDay + 10)
#define ActSelInfSrcAss (ActChgCalCrs1stDay + 10) #define ActSelInfSrcAss (ActChgCalCrs1stDay + 11)
#define ActRcvURLAss (ActChgCalCrs1stDay + 11) #define ActRcvURLAss (ActChgCalCrs1stDay + 12)
#define ActRcvPagAss (ActChgCalCrs1stDay + 12) #define ActRcvPagAss (ActChgCalCrs1stDay + 13)
#define ActEditorAss (ActChgCalCrs1stDay + 13) #define ActEditorAss (ActChgCalCrs1stDay + 14)
#define ActPlaTxtEdiAss (ActChgCalCrs1stDay + 14) #define ActPlaTxtEdiAss (ActChgCalCrs1stDay + 15)
#define ActRchTxtEdiAss (ActChgCalCrs1stDay + 15) #define ActRchTxtEdiAss (ActChgCalCrs1stDay + 16)
#define ActRcvPlaTxtAss (ActChgCalCrs1stDay + 16) #define ActRcvPlaTxtAss (ActChgCalCrs1stDay + 17)
#define ActRcvRchTxtAss (ActChgCalCrs1stDay + 17) #define ActRcvRchTxtAss (ActChgCalCrs1stDay + 18)
#define ActFrmNewAsg (ActChgCalCrs1stDay + 18) #define ActFrmNewAsg (ActChgCalCrs1stDay + 19)
#define ActEdiOneAsg (ActChgCalCrs1stDay + 19) #define ActEdiOneAsg (ActChgCalCrs1stDay + 20)
#define ActPrnOneAsg (ActChgCalCrs1stDay + 20) #define ActPrnOneAsg (ActChgCalCrs1stDay + 21)
#define ActNewAsg (ActChgCalCrs1stDay + 21) #define ActNewAsg (ActChgCalCrs1stDay + 22)
#define ActChgAsg (ActChgCalCrs1stDay + 22) #define ActChgAsg (ActChgCalCrs1stDay + 23)
#define ActReqRemAsg (ActChgCalCrs1stDay + 23) #define ActReqRemAsg (ActChgCalCrs1stDay + 24)
#define ActRemAsg (ActChgCalCrs1stDay + 24) #define ActRemAsg (ActChgCalCrs1stDay + 25)
#define ActHidAsg (ActChgCalCrs1stDay + 25) #define ActHidAsg (ActChgCalCrs1stDay + 26)
#define ActShoAsg (ActChgCalCrs1stDay + 26) #define ActShoAsg (ActChgCalCrs1stDay + 27)
#define ActSeeTst (ActChgCalCrs1stDay + 27) #define ActFrmNewPrj (ActChgCalCrs1stDay + 28)
#define ActAssTst (ActChgCalCrs1stDay + 28) #define ActEdiOnePrj (ActChgCalCrs1stDay + 29)
#define ActEdiTstQst (ActChgCalCrs1stDay + 29) #define ActPrnOnePrj (ActChgCalCrs1stDay + 30)
#define ActEdiOneTstQst (ActChgCalCrs1stDay + 30) #define ActNewPrj (ActChgCalCrs1stDay + 31)
#define ActReqImpTstQst (ActChgCalCrs1stDay + 31) #define ActChgPrj (ActChgCalCrs1stDay + 32)
#define ActImpTstQst (ActChgCalCrs1stDay + 32) #define ActReqRemPrj (ActChgCalCrs1stDay + 33)
#define ActLstTstQst (ActChgCalCrs1stDay + 33) #define ActRemPrj (ActChgCalCrs1stDay + 34)
#define ActRcvTstQst (ActChgCalCrs1stDay + 34) #define ActHidPrj (ActChgCalCrs1stDay + 35)
#define ActReqRemTstQst (ActChgCalCrs1stDay + 35) #define ActShoPrj (ActChgCalCrs1stDay + 36)
#define ActRemTstQst (ActChgCalCrs1stDay + 36)
#define ActShfTstQst (ActChgCalCrs1stDay + 37)
#define ActCfgTst (ActChgCalCrs1stDay + 38)
#define ActEnableTag (ActChgCalCrs1stDay + 39)
#define ActDisableTag (ActChgCalCrs1stDay + 40)
#define ActRenTag (ActChgCalCrs1stDay + 41)
#define ActRcvCfgTst (ActChgCalCrs1stDay + 42)
#define ActReqSeeMyTstRes (ActChgCalCrs1stDay + 43) #define ActSeeTst (ActChgCalCrs1stDay + 37)
#define ActSeeMyTstRes (ActChgCalCrs1stDay + 44) #define ActAssTst (ActChgCalCrs1stDay + 38)
#define ActSeeOneTstResMe (ActChgCalCrs1stDay + 45) #define ActEdiTstQst (ActChgCalCrs1stDay + 39)
#define ActReqSeeUsrTstRes (ActChgCalCrs1stDay + 46) #define ActEdiOneTstQst (ActChgCalCrs1stDay + 40)
#define ActSeeUsrTstRes (ActChgCalCrs1stDay + 47) #define ActReqImpTstQst (ActChgCalCrs1stDay + 41)
#define ActSeeOneTstResOth (ActChgCalCrs1stDay + 48) #define ActImpTstQst (ActChgCalCrs1stDay + 42)
#define ActLstTstQst (ActChgCalCrs1stDay + 43)
#define ActRcvTstQst (ActChgCalCrs1stDay + 44)
#define ActReqRemTstQst (ActChgCalCrs1stDay + 45)
#define ActRemTstQst (ActChgCalCrs1stDay + 46)
#define ActShfTstQst (ActChgCalCrs1stDay + 47)
#define ActCfgTst (ActChgCalCrs1stDay + 48)
#define ActEnableTag (ActChgCalCrs1stDay + 49)
#define ActDisableTag (ActChgCalCrs1stDay + 50)
#define ActRenTag (ActChgCalCrs1stDay + 51)
#define ActRcvCfgTst (ActChgCalCrs1stDay + 52)
#define ActSeeOneGam (ActChgCalCrs1stDay + 49) #define ActReqSeeMyTstRes (ActChgCalCrs1stDay + 53)
#define ActPlyGam (ActChgCalCrs1stDay + 50) #define ActSeeMyTstRes (ActChgCalCrs1stDay + 54)
#define ActPlyGam1stQst (ActChgCalCrs1stDay + 51) #define ActSeeOneTstResMe (ActChgCalCrs1stDay + 55)
#define ActPlyGamNxtQst (ActChgCalCrs1stDay + 52) #define ActReqSeeUsrTstRes (ActChgCalCrs1stDay + 56)
#define ActPlyGamAns (ActChgCalCrs1stDay + 53) #define ActSeeUsrTstRes (ActChgCalCrs1stDay + 57)
#define ActAnsGam (ActChgCalCrs1stDay + 54) #define ActSeeOneTstResOth (ActChgCalCrs1stDay + 58)
#define ActFrmNewGam (ActChgCalCrs1stDay + 55)
#define ActEdiOneGam (ActChgCalCrs1stDay + 56)
#define ActNewGam (ActChgCalCrs1stDay + 57)
#define ActChgGam (ActChgCalCrs1stDay + 58)
#define ActReqRemGam (ActChgCalCrs1stDay + 59)
#define ActRemGam (ActChgCalCrs1stDay + 60)
#define ActReqRstGam (ActChgCalCrs1stDay + 61)
#define ActRstGam (ActChgCalCrs1stDay + 62)
#define ActHidGam (ActChgCalCrs1stDay + 63)
#define ActShoGam (ActChgCalCrs1stDay + 64)
#define ActAddOneGamQst (ActChgCalCrs1stDay + 65)
#define ActGamLstTstQst (ActChgCalCrs1stDay + 66)
#define ActAddTstQstToGam (ActChgCalCrs1stDay + 67)
#define ActReqRemGamQst (ActChgCalCrs1stDay + 68)
#define ActRemGamQst (ActChgCalCrs1stDay + 69)
#define ActUp_GamQst (ActChgCalCrs1stDay + 70)
#define ActDwnGamQst (ActChgCalCrs1stDay + 71)
#define ActSeeOneSvy (ActChgCalCrs1stDay + 72) #define ActSeeOneGam (ActChgCalCrs1stDay + 59)
#define ActAnsSvy (ActChgCalCrs1stDay + 73) #define ActPlyGam (ActChgCalCrs1stDay + 60)
#define ActFrmNewSvy (ActChgCalCrs1stDay + 74) #define ActPlyGam1stQst (ActChgCalCrs1stDay + 61)
#define ActEdiOneSvy (ActChgCalCrs1stDay + 75) #define ActPlyGamNxtQst (ActChgCalCrs1stDay + 62)
#define ActNewSvy (ActChgCalCrs1stDay + 76) #define ActPlyGamAns (ActChgCalCrs1stDay + 63)
#define ActChgSvy (ActChgCalCrs1stDay + 77) #define ActAnsGam (ActChgCalCrs1stDay + 64)
#define ActReqRemSvy (ActChgCalCrs1stDay + 78) #define ActFrmNewGam (ActChgCalCrs1stDay + 65)
#define ActRemSvy (ActChgCalCrs1stDay + 79) #define ActEdiOneGam (ActChgCalCrs1stDay + 66)
#define ActReqRstSvy (ActChgCalCrs1stDay + 80) #define ActNewGam (ActChgCalCrs1stDay + 67)
#define ActRstSvy (ActChgCalCrs1stDay + 81) #define ActChgGam (ActChgCalCrs1stDay + 68)
#define ActHidSvy (ActChgCalCrs1stDay + 82) #define ActReqRemGam (ActChgCalCrs1stDay + 69)
#define ActShoSvy (ActChgCalCrs1stDay + 83) #define ActRemGam (ActChgCalCrs1stDay + 70)
#define ActEdiOneSvyQst (ActChgCalCrs1stDay + 84) #define ActReqRstGam (ActChgCalCrs1stDay + 71)
#define ActRcvSvyQst (ActChgCalCrs1stDay + 85) #define ActRstGam (ActChgCalCrs1stDay + 72)
#define ActReqRemSvyQst (ActChgCalCrs1stDay + 86) #define ActHidGam (ActChgCalCrs1stDay + 73)
#define ActRemSvyQst (ActChgCalCrs1stDay + 87) #define ActShoGam (ActChgCalCrs1stDay + 74)
#define ActAddOneGamQst (ActChgCalCrs1stDay + 75)
#define ActGamLstTstQst (ActChgCalCrs1stDay + 76)
#define ActAddTstQstToGam (ActChgCalCrs1stDay + 77)
#define ActReqRemGamQst (ActChgCalCrs1stDay + 78)
#define ActRemGamQst (ActChgCalCrs1stDay + 79)
#define ActUp_GamQst (ActChgCalCrs1stDay + 80)
#define ActDwnGamQst (ActChgCalCrs1stDay + 81)
#define ActSeeOneExaAnn (ActChgCalCrs1stDay + 88) #define ActSeeOneSvy (ActChgCalCrs1stDay + 82)
#define ActSeeDatExaAnn (ActChgCalCrs1stDay + 89) #define ActAnsSvy (ActChgCalCrs1stDay + 83)
#define ActEdiExaAnn (ActChgCalCrs1stDay + 90) #define ActFrmNewSvy (ActChgCalCrs1stDay + 84)
#define ActRcvExaAnn (ActChgCalCrs1stDay + 91) #define ActEdiOneSvy (ActChgCalCrs1stDay + 85)
#define ActPrnExaAnn (ActChgCalCrs1stDay + 92) #define ActNewSvy (ActChgCalCrs1stDay + 86)
#define ActReqRemExaAnn (ActChgCalCrs1stDay + 93) #define ActChgSvy (ActChgCalCrs1stDay + 87)
#define ActRemExaAnn (ActChgCalCrs1stDay + 94) #define ActReqRemSvy (ActChgCalCrs1stDay + 88)
#define ActHidExaAnn (ActChgCalCrs1stDay + 95) #define ActRemSvy (ActChgCalCrs1stDay + 89)
#define ActShoExaAnn (ActChgCalCrs1stDay + 96) #define ActReqRstSvy (ActChgCalCrs1stDay + 90)
#define ActRstSvy (ActChgCalCrs1stDay + 91)
#define ActHidSvy (ActChgCalCrs1stDay + 92)
#define ActShoSvy (ActChgCalCrs1stDay + 93)
#define ActEdiOneSvyQst (ActChgCalCrs1stDay + 94)
#define ActRcvSvyQst (ActChgCalCrs1stDay + 95)
#define ActReqRemSvyQst (ActChgCalCrs1stDay + 96)
#define ActRemSvyQst (ActChgCalCrs1stDay + 97)
#define ActSeeOneExaAnn (ActChgCalCrs1stDay + 98)
#define ActSeeDatExaAnn (ActChgCalCrs1stDay + 99)
#define ActEdiExaAnn (ActChgCalCrs1stDay + 100)
#define ActRcvExaAnn (ActChgCalCrs1stDay + 101)
#define ActPrnExaAnn (ActChgCalCrs1stDay + 102)
#define ActReqRemExaAnn (ActChgCalCrs1stDay + 103)
#define ActRemExaAnn (ActChgCalCrs1stDay + 104)
#define ActHidExaAnn (ActChgCalCrs1stDay + 105)
#define ActShoExaAnn (ActChgCalCrs1stDay + 106)
/*****************************************************************************/ /*****************************************************************************/
/******************************** Files tab **********************************/ /******************************** Files tab **********************************/

View File

@ -1291,7 +1291,8 @@ static void Asg_ShowLstGrpsToEditAssignment (long AsgCod)
NumGrpTyp < Gbl.CurrentCrs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.CurrentCrs.Grps.GrpTypes.Num;
NumGrpTyp++) NumGrpTyp++)
if (Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) if (Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps)
Grp_ListGrpsToEditAsgAttSvyGam (&Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],AsgCod,Grp_ASSIGNMENT); Grp_ListGrpsToEditAsgPrjAttSvyGam (&Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],
AsgCod,Grp_ASSIGNMENT);
/***** End table and box *****/ /***** End table and box *****/
Box_EndBoxTable (); Box_EndBoxTable ();

View File

@ -1213,7 +1213,8 @@ static void Att_ShowLstGrpsToEditAttEvent (long AttCod)
NumGrpTyp < Gbl.CurrentCrs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.CurrentCrs.Grps.GrpTypes.Num;
NumGrpTyp++) NumGrpTyp++)
if (Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) if (Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps)
Grp_ListGrpsToEditAsgAttSvyGam (&Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],AttCod,Grp_ATT_EVENT); Grp_ListGrpsToEditAsgPrjAttSvyGam (&Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],
AttCod,Grp_ATT_EVENT);
/***** End table and box *****/ /***** End table and box *****/
Box_EndBoxTable (); Box_EndBoxTable ();

View File

@ -252,14 +252,29 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 17.1 (2017-09-15)" #define Log_PLATFORM_VERSION "SWAD 17.2 (2017-09-17)"
#define CSS_FILE "swad17.0.css" #define CSS_FILE "swad17.0.css"
#define JS_FILE "swad16.206.3.js" #define JS_FILE "swad16.206.3.js"
// Number of lines (includes comments but not blank lines) has been got with the following command: // Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
/* /*
Version 17.1: Sep 14, 2017 New module swad_project. Not finished. (229123 lines) Version 17.2: Sep 17, 2017 New option for projects. Not finished. (229575 lines)
12 changes necessary in database:
CREATE TABLE IF NOT EXISTS projects (PrjCod INT NOT NULL AUTO_INCREMENT,CrsCod INT NOT NULL DEFAULT -1,Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',NumNotif INT NOT NULL DEFAULT 0,UsrCod INT NOT NULL,StartTime DATETIME NOT NULL,EndTime DATETIME NOT NULL,Title VARCHAR(2047) NOT NULL,Folder VARBINARY(255) NOT NULL,Txt TEXT NOT NULL,UNIQUE INDEX(PrjCod),INDEX(CrsCod,Hidden));
CREATE TABLE IF NOT EXISTS prj_grp (PrjCod INT NOT NULL,GrpCod INT NOT NULL,UNIQUE INDEX(PrjCod,GrpCod));
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1674','es','N','Mostrar respuestas de pregunta juego');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1675','es','N','Mostrar respuestas de pregunta juego');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1676','es','N','Mostrar respuestas de pregunta juego');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1677','es','N','Mostrar respuestas de pregunta juego');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1678','es','N','Mostrar respuestas de pregunta juego');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1679','es','N','Mostrar respuestas de pregunta juego');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1680','es','N','Mostrar respuestas de pregunta juego');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1681','es','N','Mostrar respuestas de pregunta juego');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1682','es','N','Mostrar respuestas de pregunta juego');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1683','es','N','Mostrar respuestas de pregunta juego');
Version 17.1: Sep 15, 2017 New module swad_project. Not finished. (229123 lines)
Copy the following icons to icon public directory: Copy the following icons to icon public directory:
sudo cp icon/iconset/awesome/action64x64/guide64x64.png /var/www/html/swad/icon/iconset/awesome/action64x64/ sudo cp icon/iconset/awesome/action64x64/guide64x64.png /var/www/html/swad/icon/iconset/awesome/action64x64/
sudo cp icon/iconset/awesome/action64x64/project64x64.png /var/www/html/swad/icon/iconset/awesome/action64x64/ sudo cp icon/iconset/awesome/action64x64/project64x64.png /var/www/html/swad/icon/iconset/awesome/action64x64/

View File

@ -1985,6 +1985,55 @@ 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 prj_grp *****/
/*
mysql> DESCRIBE prj_grp;
+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| PrjCod | int(11) | NO | PRI | NULL | |
| GrpCod | int(11) | NO | PRI | NULL | |
+--------+---------+------+-----+---------+-------+
2 rows in set (0,00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS prj_grp ("
"PrjCod INT NOT NULL,"
"GrpCod INT NOT NULL,"
"UNIQUE INDEX(PrjCod,GrpCod))");
/***** Table projects *****/
/*
mysql> DESCRIBE projects;
+-----------+----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------------+------+-----+---------+----------------+
| PrjCod | int(11) | NO | PRI | NULL | auto_increment |
| CrsCod | int(11) | NO | MUL | -1 | |
| Hidden | enum('N','Y') | NO | | N | |
| NumNotif | int(11) | NO | | 0 | |
| UsrCod | int(11) | NO | | NULL | |
| StartTime | datetime | NO | | NULL | |
| EndTime | datetime | NO | | NULL | |
| Title | varchar(2047) | NO | | NULL | |
| Folder | varbinary(255) | NO | | NULL | |
| Txt | text | NO | | NULL | |
+-----------+----------------+------+-----+---------+----------------+
10 rows in set (0,00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS projects ("
"PrjCod INT NOT NULL AUTO_INCREMENT,"
"CrsCod INT NOT NULL DEFAULT -1,"
"Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',"
"NumNotif INT NOT NULL DEFAULT 0,"
"UsrCod INT NOT NULL,"
"StartTime DATETIME NOT NULL,"
"EndTime DATETIME NOT NULL,"
"Title VARCHAR(2047) NOT NULL," // Prj_MAX_BYTES_ASSIGNMENT_TITLE
"Folder VARBINARY(255) NOT NULL," // Brw_MAX_BYTES_FOLDER
"Txt TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
"UNIQUE INDEX(PrjCod),"
"INDEX(CrsCod,Hidden))");
/***** Table sessions *****/ /***** Table sessions *****/
/* /*
mysql> DESCRIBE sessions; mysql> DESCRIBE sessions;

View File

@ -2002,8 +2002,8 @@ static void Gam_ShowLstGrpsToEditGame (long GamCod)
NumGrpTyp < Gbl.CurrentCrs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.CurrentCrs.Grps.GrpTypes.Num;
NumGrpTyp++) NumGrpTyp++)
if (Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) if (Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps)
Grp_ListGrpsToEditAsgAttSvyGam (&Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp], Grp_ListGrpsToEditAsgPrjAttSvyGam (&Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],
GamCod,Grp_SURVEY); GamCod,Grp_SURVEY);
/***** End table and box *****/ /***** End table and box *****/
Box_EndBoxTable (); Box_EndBoxTable ();

View File

@ -42,6 +42,7 @@
#include "swad_icon.h" #include "swad_icon.h"
#include "swad_parameter.h" #include "swad_parameter.h"
#include "swad_preference.h" #include "swad_preference.h"
#include "swad_project.h"
#include "swad_role.h" #include "swad_role.h"
#include "swad_theme.h" #include "swad_theme.h"
#include "swad_web_service.h" #include "swad_web_service.h"
@ -348,6 +349,11 @@ void Gbl_InitializeGlobals (void)
Gbl.Asgs.LstAsgCods = NULL; Gbl.Asgs.LstAsgCods = NULL;
Gbl.Asgs.SelectedOrder = Asg_ORDER_DEFAULT; Gbl.Asgs.SelectedOrder = Asg_ORDER_DEFAULT;
Gbl.Prjs.LstIsRead = false; // List is not read
Gbl.Prjs.Num = 0;
Gbl.Prjs.LstPrjCods = NULL;
Gbl.Prjs.SelectedOrder = Prj_ORDER_DEFAULT;
Gbl.AttEvents.LstIsRead = false; // List is not read Gbl.AttEvents.LstIsRead = false; // List is not read
Gbl.AttEvents.Num = 0; Gbl.AttEvents.Num = 0;
Gbl.AttEvents.Lst = NULL; Gbl.AttEvents.Lst = NULL;

View File

@ -569,6 +569,15 @@ struct Globals
long AsgCodToEdit; // Used as parameter in contextual links long AsgCodToEdit; // Used as parameter in contextual links
unsigned CurrentPage; unsigned CurrentPage;
} Asgs; } Asgs;
struct
{
bool LstIsRead; // Is the list already read from database, or it needs to be read?
unsigned Num; // Number of projects
long *LstPrjCods; // List of project codes
Dat_StartEndTime_t SelectedOrder;
long PrjCodToEdit; // Used as parameter in contextual links
unsigned CurrentPage;
} Prjs;
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?

View File

@ -37,6 +37,7 @@
#include "swad_group.h" #include "swad_group.h"
#include "swad_notification.h" #include "swad_notification.h"
#include "swad_parameter.h" #include "swad_parameter.h"
#include "swad_project.h"
#include "swad_table.h" #include "swad_table.h"
/*****************************************************************************/ /*****************************************************************************/
@ -1650,8 +1651,8 @@ static void Grp_WriteHeadingGroups (void)
/********* to edit assignments, attendance events, surveys or games **********/ /********* to edit assignments, attendance events, surveys or games **********/
/*****************************************************************************/ /*****************************************************************************/
void Grp_ListGrpsToEditAsgAttSvyGam (struct GroupType *GrpTyp,long Cod, void Grp_ListGrpsToEditAsgPrjAttSvyGam (struct GroupType *GrpTyp,long Cod,
Grp_AsgAttSvyGam_t Grp_AsgAttOrSvy) Grp_AsgPrjAttSvyGam_t Grp_AsgAttOrSvy)
{ {
struct ListCodGrps LstGrpsIBelong; struct ListCodGrps LstGrpsIBelong;
unsigned NumGrpThisType; unsigned NumGrpThisType;
@ -1691,6 +1692,9 @@ void Grp_ListGrpsToEditAsgAttSvyGam (struct GroupType *GrpTyp,long Cod,
case Grp_ASSIGNMENT: case Grp_ASSIGNMENT:
AssociatedToGrp = Asg_CheckIfAsgIsAssociatedToGrp (Cod,Grp->GrpCod); AssociatedToGrp = Asg_CheckIfAsgIsAssociatedToGrp (Cod,Grp->GrpCod);
break; break;
case Grp_PROJECT:
AssociatedToGrp = Prj_CheckIfPrjIsAssociatedToGrp (Cod,Grp->GrpCod);
break;
case Grp_ATT_EVENT: case Grp_ATT_EVENT:
AssociatedToGrp = Att_CheckIfAttEventIsAssociatedToGrp (Cod,Grp->GrpCod); AssociatedToGrp = Att_CheckIfAttEventIsAssociatedToGrp (Cod,Grp->GrpCod);
break; break;

View File

@ -124,10 +124,11 @@ typedef enum
typedef enum typedef enum
{ {
Grp_ASSIGNMENT, Grp_ASSIGNMENT,
Grp_PROJECT,
Grp_ATT_EVENT, Grp_ATT_EVENT,
Grp_SURVEY, Grp_SURVEY,
Grp_GAME, Grp_GAME,
} Grp_AsgAttSvyGam_t; } Grp_AsgPrjAttSvyGam_t;
/*****************************************************************************/ /*****************************************************************************/
/****************************** Public prototypes ****************************/ /****************************** Public prototypes ****************************/
@ -152,8 +153,8 @@ void Grp_RegisterUsrIntoGroups (struct UsrData *UsrDat,struct ListCodGrps *LstGr
unsigned Grp_RemoveUsrFromGroups (struct UsrData *UsrDat,struct ListCodGrps *LstGrps); unsigned Grp_RemoveUsrFromGroups (struct UsrData *UsrDat,struct ListCodGrps *LstGrps);
void Grp_RemUsrFromAllGrpsInCrs (long UsrCod,long CrsCod); void Grp_RemUsrFromAllGrpsInCrs (long UsrCod,long CrsCod);
void Grp_RemUsrFromAllGrps (long UsrCod); void Grp_RemUsrFromAllGrps (long UsrCod);
void Grp_ListGrpsToEditAsgAttSvyGam (struct GroupType *GrpTyp,long Cod, void Grp_ListGrpsToEditAsgPrjAttSvyGam (struct GroupType *GrpTyp,long Cod,
Grp_AsgAttSvyGam_t Grp_AsgOrSvy); Grp_AsgPrjAttSvyGam_t Grp_AsgOrSvy);
void Grp_ReqRegisterInGrps (void); void Grp_ReqRegisterInGrps (void);
void Grp_ShowLstGrpsToChgMyGrps (void); void Grp_ShowLstGrpsToChgMyGrps (void);

View File

@ -967,6 +967,70 @@ const char *Hlp_ASSESSMENT_Assignments_edit_assignment =
"ASSESSMENT.Assignments.en#edit-assignment"; "ASSESSMENT.Assignments.en#edit-assignment";
#endif #endif
const char *Hlp_ASSESSMENT_Projects =
#if L==1
"ASSESSMENT.Projects.es";
#elif L==2
"ASSESSMENT.Projects.en";
#elif L==3
"ASSESSMENT.Projects.en";
#elif L==4
"ASSESSMENT.Projects.es";
#elif L==5
"ASSESSMENT.Projects.en";
#elif L==6
"ASSESSMENT.Projects.es";
#elif L==7
"ASSESSMENT.Projects.en";
#elif L==8
"ASSESSMENT.Projects.en";
#elif L==9
"ASSESSMENT.Projects.en";
#endif
const char *Hlp_ASSESSMENT_Projects_new_project =
#if L==1
"ASSESSMENT.Projects.es#nuevo-proyecto";
#elif L==2
"ASSESSMENT.Projects.en#new-project";
#elif L==3
"ASSESSMENT.Projects.en#new-project";
#elif L==4
"ASSESSMENT.Projects.es#nuevo-proyecto";
#elif L==5
"ASSESSMENT.Projects.en#new-project";
#elif L==6
"ASSESSMENT.Projects.es#nuevo-proyecto";
#elif L==7
"ASSESSMENT.Projects.en#new-project";
#elif L==8
"ASSESSMENT.Projects.en#new-project";
#elif L==9
"ASSESSMENT.Projects.en#new-project";
#endif
const char *Hlp_ASSESSMENT_Projects_edit_project =
#if L==1
"ASSESSMENT.Projects.es#editar-proyecto";
#elif L==2
"ASSESSMENT.Projects.en#edit-project";
#elif L==3
"ASSESSMENT.Projects.en#edit-project";
#elif L==4
"ASSESSMENT.Projects.es#editar-proyecto";
#elif L==5
"ASSESSMENT.Projects.en#edit-project";
#elif L==6
"ASSESSMENT.Projects.es#editar-proyecto";
#elif L==7
"ASSESSMENT.Projects.en#edit-project";
#elif L==8
"ASSESSMENT.Projects.en#edit-project";
#elif L==9
"ASSESSMENT.Projects.en#edit-project";
#endif
const char *Hlp_ASSESSMENT_Tests = const char *Hlp_ASSESSMENT_Tests =
#if L==1 #if L==1
"ASSESSMENT.Tests.es"; "ASSESSMENT.Tests.es";

View File

@ -178,11 +178,11 @@ const Act_Action_t Mnu_MenuActions[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB
{ {
ActSeeAss, // 0 ActSeeAss, // 0
ActSeeAsg, // 1 ActSeeAsg, // 1
ActReqTst, // 2 ActSeePrj, // 2
ActSeeAllGam, // 3 ActReqTst, // 3
ActSeeAllSvy, // 4 ActSeeAllGam, // 4
ActSeeAllExaAnn, // 5 ActSeeAllSvy, // 5
0, // 6 ActSeeAllExaAnn, // 6
0, // 7 0, // 7
0, // 8 0, // 8
0, // 9 0, // 9

View File

@ -32,6 +32,7 @@
#include "swad_forum.h" #include "swad_forum.h"
#include "swad_global.h" #include "swad_global.h"
#include "swad_parameter.h" #include "swad_parameter.h"
#include "swad_project.h"
/*****************************************************************************/ /*****************************************************************************/
/*************** External global variables from others modules ***************/ /*************** External global variables from others modules ***************/
@ -48,6 +49,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] =
{ {
"NumPagAsg", // Pag_ASSIGNMENTS "NumPagAsg", // Pag_ASSIGNMENTS
"NumPagPrj", // Pag_PROJECTS
"NumPagGam", // Pag_GAMES "NumPagGam", // Pag_GAMES
"NumPagSvy", // Pag_SURVEYS "NumPagSvy", // Pag_SURVEYS
"NumPagAtt", // Pag_ATT_EVENTS "NumPagAtt", // Pag_ATT_EVENTS
@ -160,6 +162,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder (); Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps (); Grp_PutParamWhichGrps ();
break; break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES: case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor); Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1); Pag_PutHiddenParamPagNum (WhatPaginate,1);
@ -261,6 +269,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder (); Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps (); Grp_PutParamWhichGrps ();
break; break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES: case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor); Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1); Pag_PutHiddenParamPagNum (WhatPaginate,1);
@ -348,6 +362,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder (); Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps (); Grp_PutParamWhichGrps ();
break; break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES: case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor); Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage);
@ -446,6 +466,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder (); Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps (); Grp_PutParamWhichGrps ();
break; break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,NumPage);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES: case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor); Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,NumPage); Pag_PutHiddenParamPagNum (WhatPaginate,NumPage);
@ -532,6 +558,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder (); Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps (); Grp_PutParamWhichGrps ();
break; break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES: case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor); Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage);
@ -617,6 +649,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder (); Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps (); Grp_PutParamWhichGrps ();
break; break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES: case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor); Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags);

File diff suppressed because it is too large Load Diff

View File

@ -78,10 +78,6 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj);
void Prj_GetDataOfProjectByFolder (struct Project *Prj); void Prj_GetDataOfProjectByFolder (struct Project *Prj);
void Prj_FreeListProjects (void); void Prj_FreeListProjects (void);
void Prj_GetNotifProject (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
char **ContentStr,
long PrjCod,bool GetContent);
long Prj_GetParamPrjCod (void); long Prj_GetParamPrjCod (void);
void Prj_ReqRemProject (void); void Prj_ReqRemProject (void);
void Prj_RemoveProject (void); void Prj_RemoveProject (void);
@ -95,6 +91,6 @@ void Prj_RemoveCrsProjects (long CrsCod);
unsigned Prj_GetNumProjectsInCrs(long CrsCod); unsigned Prj_GetNumProjectsInCrs(long CrsCod);
unsigned Prj_GetNumCoursesWithProjects (Sco_Scope_t Scope); unsigned Prj_GetNumCoursesWithProjects (Sco_Scope_t Scope);
unsigned Prj_GetNumProjects (Sco_Scope_t Scope,unsigned *NumNotif); unsigned Prj_GetNumProjects (Sco_Scope_t Scope);
#endif #endif

View File

@ -2044,7 +2044,8 @@ static void Svy_ShowLstGrpsToEditSurvey (long SvyCod)
NumGrpTyp < Gbl.CurrentCrs.Grps.GrpTypes.Num; NumGrpTyp < Gbl.CurrentCrs.Grps.GrpTypes.Num;
NumGrpTyp++) NumGrpTyp++)
if (Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) if (Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps)
Grp_ListGrpsToEditAsgAttSvyGam (&Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],SvyCod,Grp_SURVEY); Grp_ListGrpsToEditAsgPrjAttSvyGam (&Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],
SvyCod,Grp_SURVEY);
/***** End table and box *****/ /***** End table and box *****/
Box_EndBoxTable (); Box_EndBoxTable ();

View File

@ -2529,6 +2529,48 @@ const char *Txt_Already_existed_a_game_with_the_title_X = // Warning: it is very
"J&aacute; existe um jogo com o t&iacute;tulo <strong>%s</strong>."; "J&aacute; existe um jogo com o t&iacute;tulo <strong>%s</strong>.";
#endif #endif
const char *Txt_Already_existed_a_project_with_the_folder_X = // Warning: it is very important to include %s in the following sentences
#if L==1
"Ja existia un projecte amb la carpeta <strong>%s</strong>.";
#elif L==2
"Es gibt bereits einen Projekt im Verzeichnis <strong>%s</strong>.";
#elif L==3
"There is already a project with folder <strong>%s</strong>.";
#elif L==4
"Ya exist&iacute;a un proyecto con la carpeta <strong>%s</strong>.";
#elif L==5
"Il existe d&eacute;j&agrave; un projet avec le r&eacute;pertoire <strong>%s</strong>.";
#elif L==6
"Ya exist&iacute;a un proyecto con la carpeta <strong>%s</strong>."; // Okoteve traducción
#elif L==7
"Esiste gi&agrave; un progetto con la cartella <strong>%s</strong>.";
#elif L==8
"Istnia&lstrok; projekt z folderem <strong>%s</strong>.";
#elif L==9
"J&aacute; existe um projeto com o diret&oacute;rio <strong>%s</strong>.";
#endif
const char *Txt_Already_existed_a_project_with_the_title_X = // Warning: it is very important to include %s in the following sentences
#if L==1
"Ja existia un projecte amb el t&iacute;tol <strong>%s</strong>.";
#elif L==2
"Es gibt bereits einen Projekt mit dem Namen <strong>%s</strong>.";
#elif L==3
"Already existed a project with the title <strong>%s</strong>.";
#elif L==4
"Ya exist&iacute;a un proyecto con el t&iacute;tulo <strong>%s</strong>.";
#elif L==5
"Il existe d&eacute;j&agrave; un projet du titre <strong>%s</strong>.";
#elif L==6
"Ya exist&iacute;a un proyecto con el t&iacute;tulo <strong>%s</strong>."; // Okoteve traducción
#elif L==7
"Esiste gi&agrave; un progetto con il titolo <strong>%s</strong>.";
#elif L==8
"By&lstrok; ju&zdot; projekt o tytule <strong>%s</strong>.";
#elif L==9
"J&aacute; existe um projeto com o t&iacute;tulo <strong>%s</strong>.";
#endif
const char *Txt_Already_existed_a_survey_with_the_title_X = // Warning: it is very important to include %s in the following sentences const char *Txt_Already_existed_a_survey_with_the_title_X = // Warning: it is very important to include %s in the following sentences
#if L==1 #if L==1
"Ja existia una enquesta amb el t&iacute;tol <strong>%s</strong>."; "Ja existia una enquesta amb el t&iacute;tol <strong>%s</strong>.";
@ -6777,6 +6819,27 @@ const char *Txt_Create_plugin =
"Criar plugin"; "Criar plugin";
#endif #endif
const char *Txt_Create_project =
#if L==1
"Crear projecte";
#elif L==2
"Projekt eingeben";
#elif L==3
"Create project";
#elif L==4
"Crear proyecto";
#elif L==5
"Cr&eacute;er projet";
#elif L==6
"Crear proyecto"; // Okoteve traducción
#elif L==7
"Crea progetto";
#elif L==8
"Tworzenie projekt";
#elif L==9
"Criar projeto";
#endif
const char *Txt_Create_question = const char *Txt_Create_question =
#if L==1 #if L==1
"Crear pregunta"; "Crear pregunta";
@ -6926,7 +6989,7 @@ const char *Txt_Created_new_announcement_of_exam =
const char *Txt_Created_new_assignment_X = // Warning: it is very important to include %s in the following sentences const char *Txt_Created_new_assignment_X = // Warning: it is very important to include %s in the following sentences
#if L==1 #if L==1
"Creada nueva actividad <strong>%s</strong>."; // Necessita traduccio "Creada nova activitat <strong>%s</strong>.";
#elif L==2 #elif L==2
"Neue Aufgabe <strong>%s</strong> erstellt."; "Neue Aufgabe <strong>%s</strong> erstellt.";
#elif L==3 #elif L==3
@ -6947,7 +7010,7 @@ const char *Txt_Created_new_assignment_X = // Warning: it is very important to i
const char *Txt_Created_new_banner_X = // Warning: it is very important to include %s in the following sentences const char *Txt_Created_new_banner_X = // Warning: it is very important to include %s in the following sentences
#if L==1 #if L==1
"Creado nuevo banner <strong>%s</strong>."; // Necessita traduccio "Creat nou banner <strong>%s</strong>.";
#elif L==2 #elif L==2
"Neuer Werbebanner <strong>%s</strong> erstellt."; "Neuer Werbebanner <strong>%s</strong> erstellt.";
#elif L==3 #elif L==3
@ -6968,7 +7031,7 @@ const char *Txt_Created_new_banner_X = // Warning: it is very important to inclu
const char *Txt_Created_new_centre_X = // Warning: it is very important to include %s in the following sentences const char *Txt_Created_new_centre_X = // Warning: it is very important to include %s in the following sentences
#if L==1 #if L==1
"Creado nuevo centro <strong>%s</strong>."; // Necessita traduccio "Creat nou centre <strong>%s</strong>."; // Necessita traduccio
#elif L==2 #elif L==2
"Neues Lehrinstitut <strong>%s</strong> eingegeben."; "Neues Lehrinstitut <strong>%s</strong> eingegeben.";
#elif L==3 #elif L==3
@ -7260,6 +7323,27 @@ const char *Txt_Created_new_plugin_X = // Warning: it is very important to inclu
"Criado novo plugin <strong>%s</strong>."; "Criado novo plugin <strong>%s</strong>.";
#endif #endif
const char *Txt_Created_new_project_X = // Warning: it is very important to include %s in the following sentences
#if L==1
"Creat nou projecte <strong>%s</strong>."; // Necessita traduccio
#elif L==2
"Neues Projekt <strong>%s</strong> eingegeben.";
#elif L==3
"Created new project <strong>%s</strong>.";
#elif L==4
"Creado nuevo proyecto <strong>%s</strong>.";
#elif L==5
"Cr&eacute;&eacute; nouveau projet <strong>%s</strong>.";
#elif L==6
"Creado nuevo proyecto <strong>%s</strong>."; // Okoteve traducción
#elif L==7
"Creato nuovo progetto <strong>%s</strong>.";
#elif L==8
"Utworzono nowe projekt <strong>%s</strong>.";
#elif L==9
"Criado novo projeto <strong>%s</strong>.";
#endif
const char *Txt_Created_new_record_field_X = // Warning: it is very important to include %s in the following sentences const char *Txt_Created_new_record_field_X = // Warning: it is very important to include %s in the following sentences
#if L==1 #if L==1
"Creado nuevo campo de ficha <strong>%s</strong>."; // Necessita traduccio "Creado nuevo campo de ficha <strong>%s</strong>."; // Necessita traduccio
@ -9165,7 +9249,7 @@ const char *Txt_Do_you_really_want_to_remove_the_X_students_from_the_course_Y_ =
const char *Txt_Do_you_really_want_to_remove_the_assignment_X = // Warning: it is very important to include %s in the following sentences const char *Txt_Do_you_really_want_to_remove_the_assignment_X = // Warning: it is very important to include %s in the following sentences
#if L==1 #if L==1
"&iquest;Realmente desea eliminar la actividad <strong>%s</strong>?"; // Necessita traduccio "&iquest;De veres voleu eliminar l'activitat <strong>%s</strong>?";
#elif L==2 #elif L==2
"Wollen Sie die Aufgabe <strong>%s</strong> wirklich entfernen?"; "Wollen Sie die Aufgabe <strong>%s</strong> wirklich entfernen?";
#elif L==3 #elif L==3
@ -9586,6 +9670,27 @@ const char *Txt_Do_you_really_want_to_remove_the_photo_of_X = // Warning: it is
"Voc&ecirc; realmente deseja remover la foto de <strong>%s</strong>?"; "Voc&ecirc; realmente deseja remover la foto de <strong>%s</strong>?";
#endif #endif
const char *Txt_Do_you_really_want_to_remove_the_project_X = // Warning: it is very important to include %s in the following sentences
#if L==1
"&iquest;De veres voleu eliminar el projecte <strong>%s</strong>?";
#elif L==2
"Wollen Sie die Projekt <strong>%s</strong> wirklich entfernen?";
#elif L==3
"Do you really want to remove the project <strong>%s</strong>?";
#elif L==4
"&iquest;Realmente desea eliminar el proyecto <strong>%s</strong>?";
#elif L==5
"Voulez-vous vraiment supprimer le projet <strong>%s</strong>?";
#elif L==6
"&iquest;Realmente desea eliminar el proyecto <strong>%s</strong>?"; // Okoteve traducción
#elif L==7
"Vuoi realmente rimuovere il progetto <strong>%s</strong>?";
#elif L==8
"Czy na pewno chcesz usunac projekt <strong>%s</strong>?";
#elif L==9
"Voc&ecirc; realmente deseja remover o projeto <strong>%s</strong>?";
#endif
const char *Txt_Do_you_really_want_to_remove_the_question_X = // Warning: it is very important to include %lu in the following sentences const char *Txt_Do_you_really_want_to_remove_the_question_X = // Warning: it is very important to include %lu in the following sentences
#if L==1 #if L==1
"De veres voleu eliminar pregunta <strong>%lu</strong>?"; "De veres voleu eliminar pregunta <strong>%lu</strong>?";
@ -10318,6 +10423,48 @@ const char *Txt_Edit_my_webs_networks =
"Editar as minhas webs / redes"; "Editar as minhas webs / redes";
#endif #endif
const char *Txt_Edit_plain_text =
#if L==1
"Editar text sense format";
#elif L==2
"Plain Text bearbeiten";
#elif L==3
"Edit plain text";
#elif L==4
"Editar texto sin formato";
#elif L==5
"&Eacute;diter texte simple";
#elif L==6
"Editar texto sin formato"; // Okoteve traducción
#elif L==7
"Editare testo normale";
#elif L==8
"Edycja tekstu zwyk&lstrok;y";
#elif L==9
"Editar texto simples";
#endif
const char *Txt_Edit_project =
#if L==1
"Editar projecte";
#elif L==2
"Projekt bearbeiten";
#elif L==3
"Edit project";
#elif L==4
"Editar proyecto";
#elif L==5
"&Eacute;diter projet";
#elif L==6
"Editar proyecto"; // Okoteve traducción
#elif L==7
"Editare progetto";
#elif L==8
"Edycja projekt";
#elif L==9
"Editar projeto";
#endif
const char *Txt_Edit_record_fields = const char *Txt_Edit_record_fields =
#if L==1 #if L==1
"Editar camps de fitxes"; "Editar camps de fitxes";
@ -10360,27 +10507,6 @@ const char *Txt_Edit_survey =
"Editar inqu&eacute;rito"; "Editar inqu&eacute;rito";
#endif #endif
const char *Txt_Edit_plain_text =
#if L==1
"Editar text sense format";
#elif L==2
"Plain Text bearbeiten";
#elif L==3
"Edit plain text";
#elif L==4
"Editar texto sin formato";
#elif L==5
"&Eacute;diter texte simple";
#elif L==6
"Editar texto sin formato"; // Okoteve traducción
#elif L==7
"Editare testo normale";
#elif L==8
"Edycja tekstu zwyk&lstrok;y";
#elif L==9
"Editar texto simples";
#endif
const char *Txt_Edit_rich_text = const char *Txt_Edit_rich_text =
#if L==1 #if L==1
"Editar text enriquit"; "Editar text enriquit";
@ -19191,7 +19317,28 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Atividades" "Atividades"
#endif #endif
, ,
// 2: ActReqTst // 2: ActSeePrj
#if L==1
"Projectes"
#elif L==2
"Projekte"
#elif L==3
"Projects"
#elif L==4
"Proyectos"
#elif L==5
"Projets"
#elif L==6
"Proyectos" // Okoteve traducción
#elif L==7
"Progetti"
#elif L==8
"Projekty"
#elif L==9
"Projetos"
#endif
,
// 3: ActReqTst
#if L==1 #if L==1
"Tests" "Tests"
#elif L==2 #elif L==2
@ -19212,7 +19359,7 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Testes" "Testes"
#endif #endif
, ,
// 3: ActSeeAllGam // 4: ActSeeAllGam
#if L==1 #if L==1
"Jocs" "Jocs"
#elif L==2 #elif L==2
@ -19233,7 +19380,7 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Jogos" "Jogos"
#endif #endif
, ,
// 4: ActSeeAllSvy // 5: ActSeeAllSvy
#if L==1 #if L==1
"Enquestes" "Enquestes"
#elif L==2 #elif L==2
@ -19254,7 +19401,7 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Inqu&eacute;ritos" "Inqu&eacute;ritos"
#endif #endif
, ,
// 5: ActSeeAllExaAnn // 6: ActSeeAllExaAnn
#if L==1 #if L==1
"Convocat&ograve;ries" "Convocat&ograve;ries"
#elif L==2 #elif L==2
@ -19275,7 +19422,6 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Chamadas" "Chamadas"
#endif #endif
, ,
NULL, // 6
NULL, // 7 NULL, // 7
NULL, // 8 NULL, // 8
NULL, // 9 NULL, // 9
@ -21136,7 +21282,28 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Atividades" "Atividades"
#endif #endif
, ,
// 2: ActReqTst // 2: ActSeePrj
#if L==1
"Projectes"
#elif L==2
"Projekte"
#elif L==3
"Projects (final degree projects&hellip;)"
#elif L==4
"Proyectos (proyectos fin de carrera, trabajos fin de grado&hellip;)"
#elif L==5
"Projets"
#elif L==6
"Proyectos (proyectos fin de carrera, trabajos fin de grado&hellip;)" // Okoteve traducción
#elif L==7
"Progetti"
#elif L==8
"Projekty"
#elif L==9
"Projetos"
#endif
,
// 3: ActReqTst
#if L==1 #if L==1
"Tests sobre els continguts d'aquesta assignatura" "Tests sobre els continguts d'aquesta assignatura"
#elif L==2 #elif L==2
@ -21157,7 +21324,7 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Testes" "Testes"
#endif #endif
, ,
// 3: ActSeeAllGam // 4: ActSeeAllGam
#if L==1 #if L==1
"Jocs (comandament a dist&agrave;ncia)" "Jocs (comandament a dist&agrave;ncia)"
#elif L==2 #elif L==2
@ -21178,7 +21345,7 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Jogos (controlo remoto)" "Jogos (controlo remoto)"
#endif #endif
, ,
// 4: ActSeeAllSvy // 5: ActSeeAllSvy
#if L==1 #if L==1
"Enquestes an&ograve;nimes" "Enquestes an&ograve;nimes"
#elif L==2 #elif L==2
@ -21199,7 +21366,7 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Inqu&eacute;ritos" "Inqu&eacute;ritos"
#endif #endif
, ,
// 5: ActSeeAllExaAnn // 6: ActSeeAllExaAnn
#if L==1 #if L==1
"Llistat de convocat&ograve;ries d'ex&agrave;mens d'aquesta assignatura" "Llistat de convocat&ograve;ries d'ex&agrave;mens d'aquesta assignatura"
#elif L==2 #elif L==2
@ -21220,7 +21387,6 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Chamadas para exames" "Chamadas para exames"
#endif #endif
, ,
NULL, // 6
NULL, // 7 NULL, // 7
NULL, // 8 NULL, // 8
NULL, // 9 NULL, // 9
@ -24514,6 +24680,27 @@ const char *Txt_New_post =
"Novo post"; "Novo post";
#endif #endif
const char *Txt_New_project =
#if L==1
"Nou projecte";
#elif L==2
"Neues Projekt";
#elif L==3
"New project";
#elif L==4
"Nuevo proyecto";
#elif L==5
"Nouveau projet";
#elif L==6
"Nuevo proyecto"; // Okoteve traducción
#elif L==7
"Nuovo progetto";
#elif L==8
"Nowy projekt";
#elif L==9
"Novo projeto";
#endif
const char *Txt_New_question = const char *Txt_New_question =
#if L==1 #if L==1
"Nova pregunta"; "Nova pregunta";
@ -25792,6 +25979,27 @@ const char *Txt_No_of_users =
"N&ordm; de utilizadores"; "N&ordm; de utilizadores";
#endif #endif
const char *Txt_No_projects =
#if L==1
"No hi ha projectes.";
#elif L==2
"Keine Projekte.";
#elif L==3
"No projects.";
#elif L==4
"No hay proyectos.";
#elif L==5
"Il n'y a pas de projets.";
#elif L==6
"No hay proyectos."; // Okoteve traducción
#elif L==7
"Non ci sono progetti.";
#elif L==8
"Brak projekty.";
#elif L==9
"N&atilde;o h&aacute; projetos.";
#endif
const char *Txt_No_questions_found_matching_your_search_criteria = const char *Txt_No_questions_found_matching_your_search_criteria =
#if L==1 #if L==1
"No hay preguntas con el criterio de b&uacute;squeda seleccionado."; // Necessita traduccio "No hay preguntas con el criterio de b&uacute;squeda seleccionado."; // Necessita traduccio
@ -29822,6 +30030,70 @@ const char *Txt_Possibly_duplicate_users =
"Usu&aacute;rios possivelmente duplicados"; "Usu&aacute;rios possivelmente duplicados";
#endif #endif
const char *Txt_Post = // Publish (verb)
#if L==1
"Publicar";
#elif L==2
"Ver&ouml;ffentlichen";
#elif L==3
"Post";
#elif L==4
"Publicar";
#elif L==5
"Publier";
#elif L==6
"Publicar"; // Okoteve traducción
#elif L==7
"Pubblicare";
#elif L==8
"Publikowa&cacute;";
#elif L==9
"Publicar";
#endif
const char *Txt_post =
#if L==1
"comentari";
#elif L==2
"Post";
#elif L==3
"post";
#elif L==4
"comentario";
#elif L==5
"post";
#elif L==6
"marandu";
#elif L==7
"post";
#elif L==8
"post";
#elif L==9
"post";
#endif
const char *Txt_posts =
#if L==1
"comentaris";
#elif L==2
"Nachrichten";
#elif L==3
"posts";
#elif L==4
"comentarios";
#elif L==5
"posts";
#elif L==6
"marandu";
#elif L==7
"post";
#elif L==8
"posty";
#elif L==9
"posts";
#endif
const char *Txt_Post_X_allowed = // Warning: it is very important to include %u in the following sentences const char *Txt_Post_X_allowed = // Warning: it is very important to include %u in the following sentences
#if L==1 #if L==1
"Comentario %u permitido."; // Necessita traduccio "Comentario %u permitido."; // Necessita traduccio
@ -30240,67 +30512,25 @@ const char *Txt_Private_available_to_certain_users_identified =
"Privado, dispon&iacute;vel para alguns usu&aacute;rios identificados"; "Privado, dispon&iacute;vel para alguns usu&aacute;rios identificados";
#endif #endif
const char *Txt_Post = // Publish (verb) const char *Txt_Projects =
#if L==1 #if L==1
"Publicar"; "Projectes";
#elif L==2 #elif L==2
"Ver&ouml;ffentlichen"; "Projekte";
#elif L==3 #elif L==3
"Post"; "Projects";
#elif L==4 #elif L==4
"Publicar"; "Proyectos";
#elif L==5 #elif L==5
"Publier"; "Projets";
#elif L==6 #elif L==6
"Publicar"; // Okoteve traducción "Proyectos"; // Okoteve traducción
#elif L==7 #elif L==7
"Pubblicare"; "Progetti";
#elif L==8 #elif L==8
"Publikowa&cacute;"; "Projekty";
#elif L==9 #elif L==9
"Publicar"; "Projetos";
#endif
const char *Txt_post =
#if L==1
"comentari";
#elif L==2
"Post";
#elif L==3
"post";
#elif L==4
"comentario";
#elif L==5
"post";
#elif L==6
"marandu";
#elif L==7
"post";
#elif L==8
"post";
#elif L==9
"post";
#endif
const char *Txt_posts =
#if L==1
"comentaris";
#elif L==2
"Nachrichten";
#elif L==3
"posts";
#elif L==4
"comentarios";
#elif L==5
"posts";
#elif L==6
"marandu";
#elif L==7
"post";
#elif L==8
"posty";
#elif L==9
"posts";
#endif #endif
const char *Txt_Public_agenda_USER = // Warning: it is very important to include %s in the following sentences const char *Txt_Public_agenda_USER = // Warning: it is very important to include %s in the following sentences
@ -31884,6 +32114,27 @@ const char *Txt_Remove_photo =
"Remover foto"; "Remover foto";
#endif #endif
const char *Txt_Remove_project =
#if L==1
"Eliminar projecte";
#elif L==2
"Entfernen Projekt";
#elif L==3
"Remove project";
#elif L==4
"Eliminar proyecto";
#elif L==5
"Supprimer projet";
#elif L==6
"Eliminar proyecto"; // Okoteve traducción
#elif L==7
"Rimuovere progetto";
#elif L==8
"Usu&nacute; projekt";
#elif L==9
"Remover projeto";
#endif
const char *Txt_Remove_question = const char *Txt_Remove_question =
#if L==1 #if L==1
"Eliminar pregunta"; "Eliminar pregunta";
@ -42764,7 +43015,7 @@ const char *Txt_The_answers_of_the_question_with_code_X_will_appear_without_shuf
const char *Txt_The_assignment_has_been_modified = const char *Txt_The_assignment_has_been_modified =
#if L==1 #if L==1
"La actividad ha sido modificada."; // Necessita traduccio "L'activitat ha estat modificada.";
#elif L==2 #elif L==2
"Die Aufgabe wurde ge&auml;ndert."; "Die Aufgabe wurde ge&auml;ndert.";
#elif L==3 #elif L==3
@ -42778,7 +43029,7 @@ const char *Txt_The_assignment_has_been_modified =
#elif L==7 #elif L==7
"L'attivit&agrave; &egrave; stata modificata."; "L'attivit&agrave; &egrave; stata modificata.";
#elif L==8 #elif L==8
"The assignment has been modified."; // Potrzebujesz tlumaczenie "Dzia&lstrok;anie zosta&lstrok;o zmodyfikowane.";
#elif L==9 #elif L==9
"A atividade foi modificada."; "A atividade foi modificada.";
#endif #endif
@ -46002,6 +46253,27 @@ const char *Txt_The_plugin_X_has_been_renamed_as_Y = // Warning: it is very impo
"The plugin <strong>%s</strong> has been renamed as <strong>%s</strong>."; // Necessita de tradução "The plugin <strong>%s</strong> has been renamed as <strong>%s</strong>."; // Necessita de tradução
#endif #endif
const char *Txt_The_project_has_been_modified =
#if L==1
"L'activitat ha estat modificada.";
#elif L==2
"Die Projekt wurde ge&auml;ndert.";
#elif L==3
"The project has been modified.";
#elif L==4
"Le projet ha sido modificado.";
#elif L==5
"Le projet a &eacute;t&eacute; modifi&eacute;.";
#elif L==6
"El proyecto ha sido modificado."; // Okoteve traducción
#elif L==7
"Il progetto &egrave; stato modificato.";
#elif L==8
"Projekt zosta&lstrok; zmodyfikowany.";
#elif L==9
"O projeto foi modificado.";
#endif
const char *Txt_The_properties_of_file_X_have_been_saved = // Warning: it is very important to include %s in the following sentences const char *Txt_The_properties_of_file_X_have_been_saved = // Warning: it is very important to include %s in the following sentences
#if L==1 #if L==1
"Las propiedades del archivo %s se han guardado."; // Necessita traduccio "Las propiedades del archivo %s se han guardado."; // Necessita traduccio
@ -55433,6 +55705,27 @@ const char *Txt_You_must_specify_the_title_of_the_game =
"Voc&ecirc; deve especificar o t&iacute;tulo do jogo."; "Voc&ecirc; deve especificar o t&iacute;tulo do jogo.";
#endif #endif
const char *Txt_You_must_specify_the_title_of_the_project =
#if L==1
"Cal especificar el t&iacute;tol del projecte.";
#elif L==2
"Der Projekt muss angegeben werden.";
#elif L==3
"You must specify the title of the project.";
#elif L==4
"Debe especificar el t&iacute;tulo del proyecto.";
#elif L==5
"Vous devez sp&eacute;cifier le titre du projet.";
#elif L==6
"Debe especificar el t&iacute;tulo del proyecto."; // Okoteve traducción
#elif L==7
"&Egrave; necessario specificare il titolo del progetto.";
#elif L==8
"Musisz poda&cacute; tytu&lstrok; projektu.";
#elif L==9
"Voc&ecirc; deve especificar o t&iacute;tulo do projeto.";
#endif
const char *Txt_You_must_specify_the_title_of_the_survey = const char *Txt_You_must_specify_the_title_of_the_survey =
#if L==1 #if L==1
"Cal especificar el t&iacute;tol de l'enquesta."; "Cal especificar el t&iacute;tol de l'enquesta.";