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,
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
--
CREATE TABLE IF NOT EXISTS sessions (

View File

@ -65,6 +65,7 @@
#include "swad_preference.h"
#include "swad_privacy.h"
#include "swad_profile.h"
#include "swad_project.h"
#include "swad_QR.h"
#include "swad_report.h"
#include "swad_role.h"
@ -424,6 +425,7 @@ Course:
Assessment:
288. ActSeeAss Show the assessment system
289. ActSeeAsg Show assignments
NEW. ActSeePrj Show projects
290. ActReqTst Request a test of self-assesment
NEW. ActSeeAllGam Remote control
291. ActSeeAllSvy List all surveys in pages
@ -440,6 +442,7 @@ Assessment:
301. ActRchTxtEdiAss Editor of rich text of assessment
302. ActRcvPlaTxtAss Receive and change the plain 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
305. ActEdiOneAsg Edit one assignment
306. ActPrnOneAsg Print one assignment
@ -450,6 +453,16 @@ Assessment:
311. ActHidAsg Hide 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
314. ActAssTst Assess a self-assessment test
315. ActEdiTstQst Request the edition of self-assessment questions
@ -1902,10 +1915,11 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
// 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" },
/* 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" },
/* ActSeeAllGam */{1649, 3,TabAss,ActSeeAllGam ,0x200,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_SeeAllGames ,"remote64x64.png" },
/* ActSeeAllSvy */{ 966, 4,TabAss,ActSeeAllSvy ,0x3F8,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_SeeAllSurveys ,"survey64x64.gif" },
/* ActSeeAllExaAnn */{ 85, 5,TabAss,ActSeeAllExaAnn ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_ListExamAnnouncementsSee ,"announce64x64.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" },
/* ActReqTst */{ 103, 3,TabAss,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ShowFormAskTst ,"test64x64.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" },
/* 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:
/* 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},
/* 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},
/* 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
ActPlyGamNxtQst, // #1672
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
#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
@ -432,110 +432,121 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
/***************************** Assessment tab ********************************/
/*****************************************************************************/
// Actions in menu
#define ActSeeAss (ActChgCalCrs1stDay + 1)
#define ActSeeAsg (ActChgCalCrs1stDay + 2)
#define ActReqTst (ActChgCalCrs1stDay + 3)
#define ActSeeAllGam (ActChgCalCrs1stDay + 4)
#define ActSeeAllSvy (ActChgCalCrs1stDay + 5)
#define ActSeeAllExaAnn (ActChgCalCrs1stDay + 6)
#define ActSeeAss (ActChgCalCrs1stDay + 1)
#define ActSeeAsg (ActChgCalCrs1stDay + 2)
#define ActSeePrj (ActChgCalCrs1stDay + 3)
#define ActReqTst (ActChgCalCrs1stDay + 4)
#define ActSeeAllGam (ActChgCalCrs1stDay + 5)
#define ActSeeAllSvy (ActChgCalCrs1stDay + 6)
#define ActSeeAllExaAnn (ActChgCalCrs1stDay + 7)
// Secondary actions
#define ActEdiAss (ActChgCalCrs1stDay + 7)
#define ActChgFrcReaAss (ActChgCalCrs1stDay + 8)
#define ActChgHavReaAss (ActChgCalCrs1stDay + 9)
#define ActSelInfSrcAss (ActChgCalCrs1stDay + 10)
#define ActRcvURLAss (ActChgCalCrs1stDay + 11)
#define ActRcvPagAss (ActChgCalCrs1stDay + 12)
#define ActEditorAss (ActChgCalCrs1stDay + 13)
#define ActPlaTxtEdiAss (ActChgCalCrs1stDay + 14)
#define ActRchTxtEdiAss (ActChgCalCrs1stDay + 15)
#define ActRcvPlaTxtAss (ActChgCalCrs1stDay + 16)
#define ActRcvRchTxtAss (ActChgCalCrs1stDay + 17)
#define ActEdiAss (ActChgCalCrs1stDay + 8)
#define ActChgFrcReaAss (ActChgCalCrs1stDay + 9)
#define ActChgHavReaAss (ActChgCalCrs1stDay + 10)
#define ActSelInfSrcAss (ActChgCalCrs1stDay + 11)
#define ActRcvURLAss (ActChgCalCrs1stDay + 12)
#define ActRcvPagAss (ActChgCalCrs1stDay + 13)
#define ActEditorAss (ActChgCalCrs1stDay + 14)
#define ActPlaTxtEdiAss (ActChgCalCrs1stDay + 15)
#define ActRchTxtEdiAss (ActChgCalCrs1stDay + 16)
#define ActRcvPlaTxtAss (ActChgCalCrs1stDay + 17)
#define ActRcvRchTxtAss (ActChgCalCrs1stDay + 18)
#define ActFrmNewAsg (ActChgCalCrs1stDay + 18)
#define ActEdiOneAsg (ActChgCalCrs1stDay + 19)
#define ActPrnOneAsg (ActChgCalCrs1stDay + 20)
#define ActNewAsg (ActChgCalCrs1stDay + 21)
#define ActChgAsg (ActChgCalCrs1stDay + 22)
#define ActReqRemAsg (ActChgCalCrs1stDay + 23)
#define ActRemAsg (ActChgCalCrs1stDay + 24)
#define ActHidAsg (ActChgCalCrs1stDay + 25)
#define ActShoAsg (ActChgCalCrs1stDay + 26)
#define ActFrmNewAsg (ActChgCalCrs1stDay + 19)
#define ActEdiOneAsg (ActChgCalCrs1stDay + 20)
#define ActPrnOneAsg (ActChgCalCrs1stDay + 21)
#define ActNewAsg (ActChgCalCrs1stDay + 22)
#define ActChgAsg (ActChgCalCrs1stDay + 23)
#define ActReqRemAsg (ActChgCalCrs1stDay + 24)
#define ActRemAsg (ActChgCalCrs1stDay + 25)
#define ActHidAsg (ActChgCalCrs1stDay + 26)
#define ActShoAsg (ActChgCalCrs1stDay + 27)
#define ActSeeTst (ActChgCalCrs1stDay + 27)
#define ActAssTst (ActChgCalCrs1stDay + 28)
#define ActEdiTstQst (ActChgCalCrs1stDay + 29)
#define ActEdiOneTstQst (ActChgCalCrs1stDay + 30)
#define ActReqImpTstQst (ActChgCalCrs1stDay + 31)
#define ActImpTstQst (ActChgCalCrs1stDay + 32)
#define ActLstTstQst (ActChgCalCrs1stDay + 33)
#define ActRcvTstQst (ActChgCalCrs1stDay + 34)
#define ActReqRemTstQst (ActChgCalCrs1stDay + 35)
#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 ActFrmNewPrj (ActChgCalCrs1stDay + 28)
#define ActEdiOnePrj (ActChgCalCrs1stDay + 29)
#define ActPrnOnePrj (ActChgCalCrs1stDay + 30)
#define ActNewPrj (ActChgCalCrs1stDay + 31)
#define ActChgPrj (ActChgCalCrs1stDay + 32)
#define ActReqRemPrj (ActChgCalCrs1stDay + 33)
#define ActRemPrj (ActChgCalCrs1stDay + 34)
#define ActHidPrj (ActChgCalCrs1stDay + 35)
#define ActShoPrj (ActChgCalCrs1stDay + 36)
#define ActReqSeeMyTstRes (ActChgCalCrs1stDay + 43)
#define ActSeeMyTstRes (ActChgCalCrs1stDay + 44)
#define ActSeeOneTstResMe (ActChgCalCrs1stDay + 45)
#define ActReqSeeUsrTstRes (ActChgCalCrs1stDay + 46)
#define ActSeeUsrTstRes (ActChgCalCrs1stDay + 47)
#define ActSeeOneTstResOth (ActChgCalCrs1stDay + 48)
#define ActSeeTst (ActChgCalCrs1stDay + 37)
#define ActAssTst (ActChgCalCrs1stDay + 38)
#define ActEdiTstQst (ActChgCalCrs1stDay + 39)
#define ActEdiOneTstQst (ActChgCalCrs1stDay + 40)
#define ActReqImpTstQst (ActChgCalCrs1stDay + 41)
#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 ActPlyGam (ActChgCalCrs1stDay + 50)
#define ActPlyGam1stQst (ActChgCalCrs1stDay + 51)
#define ActPlyGamNxtQst (ActChgCalCrs1stDay + 52)
#define ActPlyGamAns (ActChgCalCrs1stDay + 53)
#define ActAnsGam (ActChgCalCrs1stDay + 54)
#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 ActReqSeeMyTstRes (ActChgCalCrs1stDay + 53)
#define ActSeeMyTstRes (ActChgCalCrs1stDay + 54)
#define ActSeeOneTstResMe (ActChgCalCrs1stDay + 55)
#define ActReqSeeUsrTstRes (ActChgCalCrs1stDay + 56)
#define ActSeeUsrTstRes (ActChgCalCrs1stDay + 57)
#define ActSeeOneTstResOth (ActChgCalCrs1stDay + 58)
#define ActSeeOneSvy (ActChgCalCrs1stDay + 72)
#define ActAnsSvy (ActChgCalCrs1stDay + 73)
#define ActFrmNewSvy (ActChgCalCrs1stDay + 74)
#define ActEdiOneSvy (ActChgCalCrs1stDay + 75)
#define ActNewSvy (ActChgCalCrs1stDay + 76)
#define ActChgSvy (ActChgCalCrs1stDay + 77)
#define ActReqRemSvy (ActChgCalCrs1stDay + 78)
#define ActRemSvy (ActChgCalCrs1stDay + 79)
#define ActReqRstSvy (ActChgCalCrs1stDay + 80)
#define ActRstSvy (ActChgCalCrs1stDay + 81)
#define ActHidSvy (ActChgCalCrs1stDay + 82)
#define ActShoSvy (ActChgCalCrs1stDay + 83)
#define ActEdiOneSvyQst (ActChgCalCrs1stDay + 84)
#define ActRcvSvyQst (ActChgCalCrs1stDay + 85)
#define ActReqRemSvyQst (ActChgCalCrs1stDay + 86)
#define ActRemSvyQst (ActChgCalCrs1stDay + 87)
#define ActSeeOneGam (ActChgCalCrs1stDay + 59)
#define ActPlyGam (ActChgCalCrs1stDay + 60)
#define ActPlyGam1stQst (ActChgCalCrs1stDay + 61)
#define ActPlyGamNxtQst (ActChgCalCrs1stDay + 62)
#define ActPlyGamAns (ActChgCalCrs1stDay + 63)
#define ActAnsGam (ActChgCalCrs1stDay + 64)
#define ActFrmNewGam (ActChgCalCrs1stDay + 65)
#define ActEdiOneGam (ActChgCalCrs1stDay + 66)
#define ActNewGam (ActChgCalCrs1stDay + 67)
#define ActChgGam (ActChgCalCrs1stDay + 68)
#define ActReqRemGam (ActChgCalCrs1stDay + 69)
#define ActRemGam (ActChgCalCrs1stDay + 70)
#define ActReqRstGam (ActChgCalCrs1stDay + 71)
#define ActRstGam (ActChgCalCrs1stDay + 72)
#define ActHidGam (ActChgCalCrs1stDay + 73)
#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 ActSeeDatExaAnn (ActChgCalCrs1stDay + 89)
#define ActEdiExaAnn (ActChgCalCrs1stDay + 90)
#define ActRcvExaAnn (ActChgCalCrs1stDay + 91)
#define ActPrnExaAnn (ActChgCalCrs1stDay + 92)
#define ActReqRemExaAnn (ActChgCalCrs1stDay + 93)
#define ActRemExaAnn (ActChgCalCrs1stDay + 94)
#define ActHidExaAnn (ActChgCalCrs1stDay + 95)
#define ActShoExaAnn (ActChgCalCrs1stDay + 96)
#define ActSeeOneSvy (ActChgCalCrs1stDay + 82)
#define ActAnsSvy (ActChgCalCrs1stDay + 83)
#define ActFrmNewSvy (ActChgCalCrs1stDay + 84)
#define ActEdiOneSvy (ActChgCalCrs1stDay + 85)
#define ActNewSvy (ActChgCalCrs1stDay + 86)
#define ActChgSvy (ActChgCalCrs1stDay + 87)
#define ActReqRemSvy (ActChgCalCrs1stDay + 88)
#define ActRemSvy (ActChgCalCrs1stDay + 89)
#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 **********************************/

View File

@ -1291,7 +1291,8 @@ static void Asg_ShowLstGrpsToEditAssignment (long AsgCod)
NumGrpTyp < Gbl.CurrentCrs.Grps.GrpTypes.Num;
NumGrpTyp++)
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 *****/
Box_EndBoxTable ();

View File

@ -1213,7 +1213,8 @@ static void Att_ShowLstGrpsToEditAttEvent (long AttCod)
NumGrpTyp < Gbl.CurrentCrs.Grps.GrpTypes.Num;
NumGrpTyp++)
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 *****/
Box_EndBoxTable ();

View File

@ -252,14 +252,29 @@
/****************************** 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 JS_FILE "swad16.206.3.js"
// 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
/*
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:
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/

View File

@ -1985,6 +1985,55 @@ mysql> DESCRIBE plugins;
"IP CHAR(15) NOT NULL," // Cns_MAX_BYTES_IP
"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 *****/
/*
mysql> DESCRIBE sessions;

View File

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

View File

@ -42,6 +42,7 @@
#include "swad_icon.h"
#include "swad_parameter.h"
#include "swad_preference.h"
#include "swad_project.h"
#include "swad_role.h"
#include "swad_theme.h"
#include "swad_web_service.h"
@ -348,6 +349,11 @@ void Gbl_InitializeGlobals (void)
Gbl.Asgs.LstAsgCods = NULL;
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.Num = 0;
Gbl.AttEvents.Lst = NULL;

View File

@ -569,6 +569,15 @@ struct Globals
long AsgCodToEdit; // Used as parameter in contextual links
unsigned CurrentPage;
} 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
{
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_notification.h"
#include "swad_parameter.h"
#include "swad_project.h"
#include "swad_table.h"
/*****************************************************************************/
@ -1650,8 +1651,8 @@ static void Grp_WriteHeadingGroups (void)
/********* to edit assignments, attendance events, surveys or games **********/
/*****************************************************************************/
void Grp_ListGrpsToEditAsgAttSvyGam (struct GroupType *GrpTyp,long Cod,
Grp_AsgAttSvyGam_t Grp_AsgAttOrSvy)
void Grp_ListGrpsToEditAsgPrjAttSvyGam (struct GroupType *GrpTyp,long Cod,
Grp_AsgPrjAttSvyGam_t Grp_AsgAttOrSvy)
{
struct ListCodGrps LstGrpsIBelong;
unsigned NumGrpThisType;
@ -1691,6 +1692,9 @@ void Grp_ListGrpsToEditAsgAttSvyGam (struct GroupType *GrpTyp,long Cod,
case Grp_ASSIGNMENT:
AssociatedToGrp = Asg_CheckIfAsgIsAssociatedToGrp (Cod,Grp->GrpCod);
break;
case Grp_PROJECT:
AssociatedToGrp = Prj_CheckIfPrjIsAssociatedToGrp (Cod,Grp->GrpCod);
break;
case Grp_ATT_EVENT:
AssociatedToGrp = Att_CheckIfAttEventIsAssociatedToGrp (Cod,Grp->GrpCod);
break;

View File

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

View File

@ -967,6 +967,70 @@ const char *Hlp_ASSESSMENT_Assignments_edit_assignment =
"ASSESSMENT.Assignments.en#edit-assignment";
#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 =
#if L==1
"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
ActSeeAsg, // 1
ActReqTst, // 2
ActSeeAllGam, // 3
ActSeeAllSvy, // 4
ActSeeAllExaAnn, // 5
0, // 6
ActSeePrj, // 2
ActReqTst, // 3
ActSeeAllGam, // 4
ActSeeAllSvy, // 5
ActSeeAllExaAnn, // 6
0, // 7
0, // 8
0, // 9

View File

@ -32,6 +32,7 @@
#include "swad_forum.h"
#include "swad_global.h"
#include "swad_parameter.h"
#include "swad_project.h"
/*****************************************************************************/
/*************** 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] =
{
"NumPagAsg", // Pag_ASSIGNMENTS
"NumPagPrj", // Pag_PROJECTS
"NumPagGam", // Pag_GAMES
"NumPagSvy", // Pag_SURVEYS
"NumPagAtt", // Pag_ATT_EVENTS
@ -160,6 +162,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1);
@ -261,6 +269,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1);
@ -348,6 +362,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage);
@ -446,6 +466,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,NumPage);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,NumPage);
@ -532,6 +558,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage);
@ -617,6 +649,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Asg_PutHiddenParamAsgOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_PROJECTS:
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
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_FreeListProjects (void);
void Prj_GetNotifProject (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
char **ContentStr,
long PrjCod,bool GetContent);
long Prj_GetParamPrjCod (void);
void Prj_ReqRemProject (void);
void Prj_RemoveProject (void);
@ -95,6 +91,6 @@ void Prj_RemoveCrsProjects (long CrsCod);
unsigned Prj_GetNumProjectsInCrs(long CrsCod);
unsigned Prj_GetNumCoursesWithProjects (Sco_Scope_t Scope);
unsigned Prj_GetNumProjects (Sco_Scope_t Scope,unsigned *NumNotif);
unsigned Prj_GetNumProjects (Sco_Scope_t Scope);
#endif

View File

@ -2044,7 +2044,8 @@ static void Svy_ShowLstGrpsToEditSurvey (long SvyCod)
NumGrpTyp < Gbl.CurrentCrs.Grps.GrpTypes.Num;
NumGrpTyp++)
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 *****/
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>.";
#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
#if L==1
"Ja existia una enquesta amb el t&iacute;tol <strong>%s</strong>.";
@ -6777,6 +6819,27 @@ const char *Txt_Create_plugin =
"Criar plugin";
#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 =
#if L==1
"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
#if L==1
"Creada nueva actividad <strong>%s</strong>."; // Necessita traduccio
"Creada nova activitat <strong>%s</strong>.";
#elif L==2
"Neue Aufgabe <strong>%s</strong> erstellt.";
#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
#if L==1
"Creado nuevo banner <strong>%s</strong>."; // Necessita traduccio
"Creat nou banner <strong>%s</strong>.";
#elif L==2
"Neuer Werbebanner <strong>%s</strong> erstellt.";
#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
#if L==1
"Creado nuevo centro <strong>%s</strong>."; // Necessita traduccio
"Creat nou centre <strong>%s</strong>."; // Necessita traduccio
#elif L==2
"Neues Lehrinstitut <strong>%s</strong> eingegeben.";
#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>.";
#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
#if L==1
"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
#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
"Wollen Sie die Aufgabe <strong>%s</strong> wirklich entfernen?";
#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>?";
#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
#if L==1
"De veres voleu eliminar pregunta <strong>%lu</strong>?";
@ -10318,6 +10423,48 @@ const char *Txt_Edit_my_webs_networks =
"Editar as minhas webs / redes";
#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 =
#if L==1
"Editar camps de fitxes";
@ -10360,27 +10507,6 @@ const char *Txt_Edit_survey =
"Editar inqu&eacute;rito";
#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 =
#if L==1
"Editar text enriquit";
@ -19191,7 +19317,28 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Atividades"
#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
"Tests"
#elif L==2
@ -19212,7 +19359,7 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Testes"
#endif
,
// 3: ActSeeAllGam
// 4: ActSeeAllGam
#if L==1
"Jocs"
#elif L==2
@ -19233,7 +19380,7 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Jogos"
#endif
,
// 4: ActSeeAllSvy
// 5: ActSeeAllSvy
#if L==1
"Enquestes"
#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"
#endif
,
// 5: ActSeeAllExaAnn
// 6: ActSeeAllExaAnn
#if L==1
"Convocat&ograve;ries"
#elif L==2
@ -19275,7 +19422,6 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Chamadas"
#endif
,
NULL, // 6
NULL, // 7
NULL, // 8
NULL, // 9
@ -21136,7 +21282,28 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Atividades"
#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
"Tests sobre els continguts d'aquesta assignatura"
#elif L==2
@ -21157,7 +21324,7 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Testes"
#endif
,
// 3: ActSeeAllGam
// 4: ActSeeAllGam
#if L==1
"Jocs (comandament a dist&agrave;ncia)"
#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)"
#endif
,
// 4: ActSeeAllSvy
// 5: ActSeeAllSvy
#if L==1
"Enquestes an&ograve;nimes"
#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"
#endif
,
// 5: ActSeeAllExaAnn
// 6: ActSeeAllExaAnn
#if L==1
"Llistat de convocat&ograve;ries d'ex&agrave;mens d'aquesta assignatura"
#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"
#endif
,
NULL, // 6
NULL, // 7
NULL, // 8
NULL, // 9
@ -24514,6 +24680,27 @@ const char *Txt_New_post =
"Novo post";
#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 =
#if L==1
"Nova pregunta";
@ -25792,6 +25979,27 @@ const char *Txt_No_of_users =
"N&ordm; de utilizadores";
#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 =
#if L==1
"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";
#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
#if L==1
"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";
#endif
const char *Txt_Post = // Publish (verb)
const char *Txt_Projects =
#if L==1
"Publicar";
"Projectes";
#elif L==2
"Ver&ouml;ffentlichen";
"Projekte";
#elif L==3
"Post";
"Projects";
#elif L==4
"Publicar";
"Proyectos";
#elif L==5
"Publier";
"Projets";
#elif L==6
"Publicar"; // Okoteve traducción
"Proyectos"; // Okoteve traducción
#elif L==7
"Pubblicare";
"Progetti";
#elif L==8
"Publikowa&cacute;";
"Projekty";
#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";
"Projetos";
#endif
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";
#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 =
#if L==1
"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 =
#if L==1
"La actividad ha sido modificada."; // Necessita traduccio
"L'activitat ha estat modificada.";
#elif L==2
"Die Aufgabe wurde ge&auml;ndert.";
#elif L==3
@ -42778,7 +43029,7 @@ const char *Txt_The_assignment_has_been_modified =
#elif L==7
"L'attivit&agrave; &egrave; stata modificata.";
#elif L==8
"The assignment has been modified."; // Potrzebujesz tlumaczenie
"Dzia&lstrok;anie zosta&lstrok;o zmodyfikowane.";
#elif L==9
"A atividade foi modificada.";
#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
#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
#if L==1
"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.";
#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 =
#if L==1
"Cal especificar el t&iacute;tol de l'enquesta.";