From 06ba4b2d99a57656385569898a7977dae2445658 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Sun, 17 Sep 2017 16:58:09 +0200 Subject: [PATCH] Version 17.2 --- sql/swad.sql | 23 +++ swad_action.c | 42 +++- swad_action.h | 207 ++++++++++--------- swad_assignment.c | 3 +- swad_attendance.c | 3 +- swad_changelog.h | 19 +- swad_database.c | 49 +++++ swad_game.c | 4 +- swad_global.c | 6 + swad_global.h | 9 + swad_group.c | 8 +- swad_group.h | 7 +- swad_help_URL.c | 64 ++++++ swad_menu.c | 10 +- swad_pagination.c | 38 ++++ swad_project.c | 507 +++++++++++++++++++--------------------------- swad_project.h | 6 +- swad_survey.c | 3 +- swad_text.c | 471 ++++++++++++++++++++++++++++++++++-------- 19 files changed, 971 insertions(+), 508 deletions(-) diff --git a/sql/swad.sql b/sql/swad.sql index 1f69733c..20624fdf 100644 --- a/sql/swad.sql +++ b/sql/swad.sql @@ -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 ( diff --git a/swad_action.c b/swad_action.c index 9fa71e25..ec362aae 100644 --- a/swad_action.c +++ b/swad_action.c @@ -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 }; /*****************************************************************************/ diff --git a/swad_action.h b/swad_action.h index 9be5ac71..4dd2d46c 100644 --- a/swad_action.h +++ b/swad_action.h @@ -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 **********************************/ diff --git a/swad_assignment.c b/swad_assignment.c index 54b52669..b2ba52ef 100644 --- a/swad_assignment.c +++ b/swad_assignment.c @@ -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 (); diff --git a/swad_attendance.c b/swad_attendance.c index 6932f64c..6214b8b7 100644 --- a/swad_attendance.c +++ b/swad_attendance.c @@ -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 (); diff --git a/swad_changelog.h b/swad_changelog.h index 7592871d..5339a5cc 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -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/ diff --git a/swad_database.c b/swad_database.c index e166572d..be2f079a 100644 --- a/swad_database.c +++ b/swad_database.c @@ -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; diff --git a/swad_game.c b/swad_game.c index e63aedb0..47501d22 100644 --- a/swad_game.c +++ b/swad_game.c @@ -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 (); diff --git a/swad_global.c b/swad_global.c index ae09d1de..fb771b80 100644 --- a/swad_global.c +++ b/swad_global.c @@ -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; diff --git a/swad_global.h b/swad_global.h index ab58225e..13988660 100644 --- a/swad_global.h +++ b/swad_global.h @@ -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? diff --git a/swad_group.c b/swad_group.c index e00c2779..93a91334 100644 --- a/swad_group.c +++ b/swad_group.c @@ -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; diff --git a/swad_group.h b/swad_group.h index fcb43e52..c10a4a74 100644 --- a/swad_group.h +++ b/swad_group.h @@ -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); diff --git a/swad_help_URL.c b/swad_help_URL.c index fab70405..3cec02ca 100644 --- a/swad_help_URL.c +++ b/swad_help_URL.c @@ -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"; diff --git a/swad_menu.c b/swad_menu.c index 90e91c02..122d00ad 100644 --- a/swad_menu.c +++ b/swad_menu.c @@ -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 diff --git a/swad_pagination.c b/swad_pagination.c index ba69f5b3..6aa17807 100644 --- a/swad_pagination.c +++ b/swad_pagination.c @@ -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); diff --git a/swad_project.c b/swad_project.c index 4a62065c..d821091d 100644 --- a/swad_project.c +++ b/swad_project.c @@ -73,11 +73,11 @@ static void Prj_PutButtonToCreateNewPrj (void); static void Prj_PutFormToSelectWhichGroupsToShow (void); static void Prj_ParamsWhichGroupsToShow (void); static void Prj_ShowOneProject (long PrjCod,bool PrintView); -static void Prj_WriteAsgAuthor (struct Project *Prj); +static void Prj_WritePrjAuthor (struct Project *Prj); static void Prj_WriteAssignmentFolder (struct Project *Prj,bool PrintView); -static void Prj_GetParamAsgOrder (void); +static void Prj_GetParamPrjOrder (void); -static void Prj_PutFormsToRemEditOneAsg (long PrjCod,bool Hidden); +static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden); static void Prj_PutParams (void); static void Prj_GetDataOfProject (struct Project *Prj,const char *Query); static void Prj_ResetProject (struct Project *Prj); @@ -85,7 +85,6 @@ static void Prj_GetProjectTxtFromDB (long PrjCod,char Txt[Cns_MAX_BYTES_TEXT + 1 static void Prj_PutParamPrjCod (long PrjCod); static bool Prj_CheckIfSimilarProjectsExists (const char *Field,const char *Value,long PrjCod); static void Prj_ShowLstGrpsToEditProject (long PrjCod); -static void Prj_UpdateNumUsrsNotifiedByEMailAboutProject (long PrjCod,unsigned NumUsrsToBeNotifiedByEMail); static void Prj_CreateProject (struct Project *Prj,const char *Txt); static void Prj_UpdateProject (struct Project *Prj,const char *Txt); static bool Prj_CheckIfPrjIsAssociatedToGrps (long PrjCod); @@ -95,40 +94,40 @@ static void Prj_GetAndWriteNamesOfGrpsAssociatedToPrj (struct Project *Prj); static bool Prj_CheckIfIBelongToCrsOrGrpsThisProject (long PrjCod); /*****************************************************************************/ -/************************ List all the projects ***************************/ +/************************** List all the projects ****************************/ /*****************************************************************************/ void Prj_SeeProjects (void) { /***** Get parameters *****/ - Prj_GetParamAsgOrder (); + Prj_GetParamPrjOrder (); Grp_GetParamWhichGrps (); - Gbl.Asgs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); + Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); /***** Show all the projects *****/ Prj_ShowAllProjects (); } /*****************************************************************************/ -/************************ Show all the projects ***************************/ +/************************** Show all the projects ****************************/ /*****************************************************************************/ static void Prj_ShowAllProjects (void) { - extern const char *Hlp_ASSESSMENT_Assignments; - extern const char *Txt_Assignments; - extern const char *Txt_No_assignments; + extern const char *Hlp_ASSESSMENT_Projects; + extern const char *Txt_Projects; + extern const char *Txt_No_projects; struct Pagination Pagination; - unsigned NumAsg; + unsigned NumPrj; /***** Get list of projects *****/ Prj_GetListProjects (); /***** Compute variables related to pagination *****/ - Pagination.NumItems = Gbl.Asgs.Num; - Pagination.CurrentPage = (int) Gbl.Asgs.CurrentPage; + Pagination.NumItems = Gbl.Prjs.Num; + Pagination.CurrentPage = (int) Gbl.Prjs.CurrentPage; Pag_CalculatePagination (&Pagination); - Gbl.Asgs.CurrentPage = (unsigned) Pagination.CurrentPage; + Gbl.Prjs.CurrentPage = (unsigned) Pagination.CurrentPage; /***** Write links to pages *****/ if (Pagination.MoreThanOnePage) @@ -137,31 +136,31 @@ static void Prj_ShowAllProjects (void) &Pagination); /***** Start box *****/ - Box_StartBox ("100%",Txt_Assignments,Prj_PutIconsListProjects, - Hlp_ASSESSMENT_Assignments,Box_NOT_CLOSABLE); + Box_StartBox ("100%",Txt_Projects,Prj_PutIconsListProjects, + Hlp_ASSESSMENT_Projects,Box_NOT_CLOSABLE); /***** Select whether show only my groups or all groups *****/ if (Gbl.CurrentCrs.Grps.NumGrps) Prj_PutFormToSelectWhichGroupsToShow (); - if (Gbl.Asgs.Num) + if (Gbl.Prjs.Num) { /***** Table head *****/ Tbl_StartTableWideMargin (2); Prj_PutHeadForSeeing (false); // Not print view /***** Write all the projects *****/ - for (NumAsg = Pagination.FirstItemVisible; - NumAsg <= Pagination.LastItemVisible; - NumAsg++) - Prj_ShowOneProject (Gbl.Asgs.LstAsgCods[NumAsg - 1], + for (NumPrj = Pagination.FirstItemVisible; + NumPrj <= Pagination.LastItemVisible; + NumPrj++) + Prj_ShowOneProject (Gbl.Prjs.LstPrjCods[NumPrj - 1], false); // Not print view /***** End table *****/ Tbl_EndTable (); } else // No projects created - Ale_ShowAlert (Ale_INFO,Txt_No_assignments); + Ale_ShowAlert (Ale_INFO,Txt_No_projects); /***** Button to create a new project *****/ if (Prj_CheckIfICanCreateProjects ()) @@ -184,7 +183,7 @@ static void Prj_ShowAllProjects (void) } /*****************************************************************************/ -/***************** Write header with fields of a project *****************/ +/******************* Write header with fields of a project *******************/ /*****************************************************************************/ static void Prj_PutHeadForSeeing (bool PrintView) @@ -206,18 +205,18 @@ static void Prj_PutHeadForSeeing (bool PrintView) if (!PrintView) { - Act_FormStart (ActSeeAsg); + Act_FormStart (ActSeePrj); Grp_PutParamWhichGrps (); - Pag_PutHiddenParamPagNum (Pag_PROJECTS,Gbl.Asgs.CurrentPage); + Pag_PutHiddenParamPagNum (Pag_PROJECTS,Gbl.Prjs.CurrentPage); Par_PutHiddenParamUnsigned ("Order",(unsigned) Order); Act_LinkFormSubmit (Txt_START_END_TIME_HELP[Order],"TIT_TBL",NULL); - if (Order == Gbl.Asgs.SelectedOrder) + if (Order == Gbl.Prjs.SelectedOrder) fprintf (Gbl.F.Out,""); } fprintf (Gbl.F.Out,"%s",Txt_START_END_TIME[Order]); if (!PrintView) { - if (Order == Gbl.Asgs.SelectedOrder) + if (Order == Gbl.Prjs.SelectedOrder) fprintf (Gbl.F.Out,""); fprintf (Gbl.F.Out,""); Act_FormEnd (); @@ -241,7 +240,7 @@ static void Prj_PutHeadForSeeing (bool PrintView) } /*****************************************************************************/ -/******************** Check if I can create projects **********************/ +/********************** Check if I can create projects ***********************/ /*****************************************************************************/ static bool Prj_CheckIfICanCreateProjects (void) @@ -251,7 +250,7 @@ static bool Prj_CheckIfICanCreateProjects (void) } /*****************************************************************************/ -/*************** Put contextual icons in list of projects *****************/ +/***************** Put contextual icons in list of projects ******************/ /*****************************************************************************/ static void Prj_PutIconsListProjects (void) @@ -266,33 +265,33 @@ static void Prj_PutIconsListProjects (void) } /*****************************************************************************/ -/******************* Put icon to create a new project *********************/ +/********************* Put icon to create a new project **********************/ /*****************************************************************************/ static void Prj_PutIconToCreateNewPrj (void) { - extern const char *Txt_New_assignment; + extern const char *Txt_New_project; /***** Put form to create a new project *****/ - Gbl.Asgs.AsgCodToEdit = -1L; - Lay_PutContextualLink (ActFrmNewAsg,NULL,Prj_PutParams, + Gbl.Prjs.PrjCodToEdit = -1L; + Lay_PutContextualLink (ActFrmNewPrj,NULL,Prj_PutParams, "plus64x64.png", - Txt_New_assignment,NULL, + Txt_New_project,NULL, NULL); } /*****************************************************************************/ -/****************** Put button to create a new project ********************/ +/******************** Put button to create a new project *********************/ /*****************************************************************************/ static void Prj_PutButtonToCreateNewPrj (void) { - extern const char *Txt_New_assignment; + extern const char *Txt_New_project; - Gbl.Asgs.AsgCodToEdit = -1L; - Act_FormStart (ActFrmNewAsg); + Gbl.Prjs.PrjCodToEdit = -1L; + Act_FormStart (ActFrmNewPrj); Prj_PutParams (); - Btn_PutConfirmButton (Txt_New_assignment); + Btn_PutConfirmButton (Txt_New_project); Act_FormEnd (); } @@ -303,18 +302,18 @@ static void Prj_PutButtonToCreateNewPrj (void) static void Prj_PutFormToSelectWhichGroupsToShow (void) { fprintf (Gbl.F.Out,"
"); - Grp_ShowFormToSelWhichGrps (ActSeeAsg,Prj_ParamsWhichGroupsToShow); + Grp_ShowFormToSelWhichGrps (ActSeePrj,Prj_ParamsWhichGroupsToShow); fprintf (Gbl.F.Out,"
"); } static void Prj_ParamsWhichGroupsToShow (void) { Prj_PutHiddenParamPrjOrder (); - Pag_PutHiddenParamPagNum (Pag_PROJECTS,Gbl.Asgs.CurrentPage); + Pag_PutHiddenParamPagNum (Pag_PROJECTS,Gbl.Prjs.CurrentPage); } /*****************************************************************************/ -/******************** Show print view of one project **********************/ +/********************** Show print view of one project ***********************/ /*****************************************************************************/ void Prj_PrintOneProject (void) @@ -343,10 +342,10 @@ void Prj_PrintOneProject (void) } /*****************************************************************************/ -/*************************** Show one project *****************************/ +/***************************** Show one project ******************************/ /*****************************************************************************/ -static void Prj_ShowOneProject (long AsgºCod,bool PrintView) +static void Prj_ShowOneProject (long PrjCod,bool PrintView) { extern const char *Txt_Today; extern const char *Txt_ASSIGNMENT_TYPES[Prj_NUM_TYPES_SEND_WORK]; @@ -357,7 +356,7 @@ static void Prj_ShowOneProject (long Asg char Txt[Cns_MAX_BYTES_TEXT + 1]; /***** Get data of this project *****/ - Prj.PrjCod = AsgºCod; + Prj.PrjCod = PrjCod; Prj_GetDataOfProjectByCod (&Prj); /***** Write first row of data of this project *****/ @@ -369,7 +368,7 @@ static void Prj_ShowOneProject (long Asg else { fprintf (Gbl.F.Out," COLOR%u\">",Gbl.RowEvenOdd); - Prj_PutFormsToRemEditOneAsg (Prj.PrjCod,Prj.Hidden); + Prj_PutFormsToRemEditOnePrj (Prj.PrjCod,Prj.Hidden); } fprintf (Gbl.F.Out,""); @@ -459,7 +458,7 @@ static void Prj_ShowOneProject (long Asg fprintf (Gbl.F.Out,"\">"); /* Author of the project */ - Prj_WriteAsgAuthor (&Prj); + Prj_WritePrjAuthor (&Prj); fprintf (Gbl.F.Out,""); @@ -486,24 +485,19 @@ static void Prj_ShowOneProject (long Asg Txt); Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd; - - /***** Mark possible notification as seen *****/ - Ntf_MarkNotifAsSeen (Ntf_EVENT_ASSIGNMENT, - AsgºCod,Gbl.CurrentCrs.Crs.CrsCod, - Gbl.Usrs.Me.UsrDat.UsrCod); } /*****************************************************************************/ -/********************* Write the author of a project *********************/ +/*********************** Write the author of a project ***********************/ /*****************************************************************************/ -static void Prj_WriteAsgAuthor (struct Project *Prj) +static void Prj_WritePrjAuthor (struct Project *Prj) { Usr_WriteAuthor1Line (Prj->UsrCod,Prj->Hidden); } /*****************************************************************************/ -/********************* Write the folder of a project *********************/ +/*********************** Write the folder of a project ***********************/ /*****************************************************************************/ static void Prj_WriteAssignmentFolder (struct Project *Prj,bool PrintView) @@ -520,7 +514,7 @@ static void Prj_WriteAssignmentFolder (struct Project *Prj,bool PrintView) ICanSendFiles) // I can send files to this project folder { /* Form to create a new file or folder */ - Act_FormStart (ActFrmCreAsgUsr); + Act_FormStart (ActFrmCreAsgUsr); // TODO: Remove this feature Brw_PutParamsFileBrowser (ActUnk, Brw_INTERNAL_NAME_ROOT_FOLDER_ASSIGNMENTS, Prj->Folder, @@ -548,12 +542,12 @@ static void Prj_WriteAssignmentFolder (struct Project *Prj,bool PrintView) } /*****************************************************************************/ -/******* Get parameter with the type or order in list of projects *********/ +/********* Get parameter with the type or order in list of projects **********/ /*****************************************************************************/ -static void Prj_GetParamAsgOrder (void) +static void Prj_GetParamPrjOrder (void) { - Gbl.Asgs.SelectedOrder = (Dat_StartEndTime_t) + Gbl.Prjs.SelectedOrder = (Dat_StartEndTime_t) Par_GetParToUnsignedLong ("Order", 0, Dat_NUM_START_END_TIME - 1, @@ -561,42 +555,42 @@ static void Prj_GetParamAsgOrder (void) } /*****************************************************************************/ -/*** Put a hidden parameter with the type of order in list of projects ****/ +/***** Put a hidden parameter with the type of order in list of projects *****/ /*****************************************************************************/ void Prj_PutHiddenParamPrjOrder (void) { - Par_PutHiddenParamUnsigned ("Order",(unsigned) Gbl.Asgs.SelectedOrder); + Par_PutHiddenParamUnsigned ("Order",(unsigned) Gbl.Prjs.SelectedOrder); } /*****************************************************************************/ -/***************** Put a link (form) to edit one project ******************/ +/****************** Put a link (form) to edit one project ********************/ /*****************************************************************************/ -static void Prj_PutFormsToRemEditOneAsg (long PrjCod,bool Hidden) +static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden) { - Gbl.Asgs.AsgCodToEdit = PrjCod; // Used as parameter in contextual links + Gbl.Prjs.PrjCodToEdit = PrjCod; // Used as parameter in contextual links switch (Gbl.Usrs.Me.Role.Logged) { case Rol_TCH: case Rol_SYS_ADM: /***** Put form to remove project *****/ - Ico_PutContextualIconToRemove (ActReqRemAsg,Prj_PutParams); + Ico_PutContextualIconToRemove (ActReqRemPrj,Prj_PutParams); /***** Put form to hide/show project *****/ if (Hidden) - Ico_PutContextualIconToUnhide (ActShoAsg,Prj_PutParams); + Ico_PutContextualIconToUnhide (ActShoPrj,Prj_PutParams); else - Ico_PutContextualIconToHide (ActHidAsg,Prj_PutParams); + Ico_PutContextualIconToHide (ActHidPrj,Prj_PutParams); /***** Put form to edit project *****/ - Ico_PutContextualIconToEdit (ActEdiOneAsg,Prj_PutParams); + Ico_PutContextualIconToEdit (ActEdiOnePrj,Prj_PutParams); // no break case Rol_STD: case Rol_NET: /***** Put form to print project *****/ - Ico_PutContextualIconToPrint (ActPrnOneAsg,Prj_PutParams); + Ico_PutContextualIconToPrint (ActPrnOnePrj,Prj_PutParams); break; default: break; @@ -604,20 +598,20 @@ static void Prj_PutFormsToRemEditOneAsg (long PrjCod,bool Hidden) } /*****************************************************************************/ -/******************** Params used to edit a project **********************/ +/********************** Params used to edit a project ************************/ /*****************************************************************************/ static void Prj_PutParams (void) { - if (Gbl.Asgs.AsgCodToEdit > 0) - Prj_PutParamPrjCod (Gbl.Asgs.AsgCodToEdit); + if (Gbl.Prjs.PrjCodToEdit > 0) + Prj_PutParamPrjCod (Gbl.Prjs.PrjCodToEdit); Prj_PutHiddenParamPrjOrder (); Grp_PutParamWhichGrps (); - Pag_PutHiddenParamPagNum (Pag_PROJECTS,Gbl.Asgs.CurrentPage); + Pag_PutHiddenParamPagNum (Pag_PROJECTS,Gbl.Prjs.CurrentPage); } /*****************************************************************************/ -/************************ List all the projects ***************************/ +/************************** List all the projects ****************************/ /*****************************************************************************/ void Prj_GetListProjects (void) @@ -628,9 +622,9 @@ void Prj_GetListProjects (void) MYSQL_RES *mysql_res; MYSQL_ROW row; unsigned long NumRows; - unsigned NumAsg; + unsigned NumPrj; - if (Gbl.Asgs.LstIsRead) + if (Gbl.Prjs.LstIsRead) Prj_FreeListProjects (); /***** Get list of projects from database *****/ @@ -644,7 +638,7 @@ void Prj_GetListProjects (void) sprintf (HiddenSubQuery," AND Hidden='N'"); break; } - switch (Gbl.Asgs.SelectedOrder) + switch (Gbl.Prjs.SelectedOrder) { case Dat_START_TIME: sprintf (OrderBySubQuery,"StartTime DESC,EndTime DESC,Title DESC"); @@ -657,9 +651,9 @@ void Prj_GetListProjects (void) sprintf (Query,"SELECT PrjCod" " FROM projects" " WHERE CrsCod=%ld%s" - " AND (PrjCod NOT IN (SELECT PrjCod FROM asg_grp) OR" - " PrjCod IN (SELECT asg_grp.PrjCod FROM asg_grp,crs_grp_usr" - " WHERE crs_grp_usr.UsrCod=%ld AND asg_grp.GrpCod=crs_grp_usr.GrpCod))" + " AND (PrjCod NOT IN (SELECT PrjCod FROM prj_grp) OR" + " PrjCod IN (SELECT prj_grp.PrjCod FROM prj_grp,crs_grp_usr" + " WHERE crs_grp_usr.UsrCod=%ld AND prj_grp.GrpCod=crs_grp_usr.GrpCod))" " ORDER BY %s", Gbl.CurrentCrs.Crs.CrsCod, HiddenSubQuery, @@ -673,36 +667,36 @@ void Prj_GetListProjects (void) Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,OrderBySubQuery); NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get projects"); - if (NumRows) // Assignments found... + if (NumRows) // Projects found... { - Gbl.Asgs.Num = (unsigned) NumRows; + Gbl.Prjs.Num = (unsigned) NumRows; /***** Create list of projects *****/ - if ((Gbl.Asgs.LstAsgCods = (long *) calloc (NumRows,sizeof (long))) == NULL) + if ((Gbl.Prjs.LstPrjCods = (long *) calloc (NumRows,sizeof (long))) == NULL) Lay_ShowErrorAndExit ("Not enough memory to store list of projects."); /***** Get the projects codes *****/ - for (NumAsg = 0; - NumAsg < Gbl.Asgs.Num; - NumAsg++) + for (NumPrj = 0; + NumPrj < Gbl.Prjs.Num; + NumPrj++) { /* Get next project code */ row = mysql_fetch_row (mysql_res); - if ((Gbl.Asgs.LstAsgCods[NumAsg] = Str_ConvertStrCodToLongCod (row[0])) < 0) + if ((Gbl.Prjs.LstPrjCods[NumPrj] = Str_ConvertStrCodToLongCod (row[0])) < 0) Lay_ShowErrorAndExit ("Error: wrong project code."); } } else - Gbl.Asgs.Num = 0; + Gbl.Prjs.Num = 0; /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); - Gbl.Asgs.LstIsRead = true; + Gbl.Prjs.LstIsRead = true; } /*****************************************************************************/ -/******************* Get project data using its code **********************/ +/********************* Get project data using its code ***********************/ /*****************************************************************************/ void Prj_GetDataOfProjectByCod (struct Project *Prj) @@ -733,7 +727,7 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj) } /*****************************************************************************/ -/*************** Get project data using its folder name *******************/ +/***************** Get project data using its folder name ********************/ /*****************************************************************************/ void Prj_GetDataOfProjectByFolder (struct Project *Prj) @@ -764,7 +758,7 @@ void Prj_GetDataOfProjectByFolder (struct Project *Prj) } /*****************************************************************************/ -/************************* Get project data *******************************/ +/**************************** Get project data *******************************/ /*****************************************************************************/ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query) @@ -817,7 +811,7 @@ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query) } /*****************************************************************************/ -/************************* Clear all project data **************************/ +/************************** Clear all project data ***************************/ /*****************************************************************************/ static void Prj_ResetProject (struct Project *Prj) @@ -837,23 +831,23 @@ static void Prj_ResetProject (struct Project *Prj) } /*****************************************************************************/ -/************************* Free list of projects **************************/ +/*************************** Free list of projects ***************************/ /*****************************************************************************/ void Prj_FreeListProjects (void) { - if (Gbl.Asgs.LstIsRead && Gbl.Asgs.LstAsgCods) + if (Gbl.Prjs.LstIsRead && Gbl.Prjs.LstPrjCods) { /***** Free memory used by the list of projects *****/ - free ((void *) Gbl.Asgs.LstAsgCods); - Gbl.Asgs.LstAsgCods = NULL; - Gbl.Asgs.Num = 0; - Gbl.Asgs.LstIsRead = false; + free ((void *) Gbl.Prjs.LstPrjCods); + Gbl.Prjs.LstPrjCods = NULL; + Gbl.Prjs.Num = 0; + Gbl.Prjs.LstIsRead = false; } } /*****************************************************************************/ -/******************** Get project text from database **********************/ +/********************** Get project text from database ***********************/ /*****************************************************************************/ static void Prj_GetProjectTxtFromDB (long PrjCod,char Txt[Cns_MAX_BYTES_TEXT + 1]) @@ -888,53 +882,7 @@ static void Prj_GetProjectTxtFromDB (long PrjCod,char Txt[Cns_MAX_BYTES_TEXT + 1 } /*****************************************************************************/ -/***************** Get summary and content of a project *****************/ -/*****************************************************************************/ -// This function may be called inside a web service - -void Prj_GetNotifProject (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1], - char **ContentStr, - long PrjCod,bool GetContent) - { - char Query[512]; - MYSQL_RES *mysql_res; - MYSQL_ROW row; - size_t Length; - - SummaryStr[0] = '\0'; // Return nothing on error - - /***** Build query *****/ - sprintf (Query,"SELECT Title,Txt FROM projects WHERE PrjCod=%ld", - PrjCod); - if (!mysql_query (&Gbl.mysql,Query)) - if ((mysql_res = mysql_store_result (&Gbl.mysql)) != NULL) - { - /***** Result should have a unique row *****/ - if (mysql_num_rows (mysql_res) == 1) - { - /***** Get row *****/ - row = mysql_fetch_row (mysql_res); - - /***** Get summary *****/ - Str_Copy (SummaryStr,row[0], - Ntf_MAX_BYTES_SUMMARY); - - /***** Get content *****/ - if (GetContent) - { - Length = strlen (row[1]); - if ((*ContentStr = (char *) malloc (Length + 1)) == NULL) - Lay_ShowErrorAndExit ("Error allocating memory for notification content."); - Str_Copy (*ContentStr,row[1], - Length); - } - } - mysql_free_result (mysql_res); - } - } - -/*****************************************************************************/ -/***************** Write parameter with code of project *******************/ +/******************* Write parameter with code of project ********************/ /*****************************************************************************/ static void Prj_PutParamPrjCod (long PrjCod) @@ -943,7 +891,7 @@ static void Prj_PutParamPrjCod (long PrjCod) } /*****************************************************************************/ -/****************** Get parameter with code of project ********************/ +/******************** Get parameter with code of project *********************/ /*****************************************************************************/ long Prj_GetParamPrjCod (void) @@ -953,19 +901,19 @@ long Prj_GetParamPrjCod (void) } /*****************************************************************************/ -/************* Ask for confirmation of removing a project ****************/ +/*************** Ask for confirmation of removing a project ******************/ /*****************************************************************************/ void Prj_ReqRemProject (void) { - extern const char *Txt_Do_you_really_want_to_remove_the_assignment_X; - extern const char *Txt_Remove_assignment; + extern const char *Txt_Do_you_really_want_to_remove_the_project_X; + extern const char *Txt_Remove_project; struct Project Prj; /***** Get parameters *****/ - Prj_GetParamAsgOrder (); + Prj_GetParamPrjOrder (); Grp_GetParamWhichGrps (); - Gbl.Asgs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); + Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); /***** Get project code *****/ if ((Prj.PrjCod = Prj_GetParamPrjCod ()) == -1L) @@ -975,19 +923,19 @@ void Prj_ReqRemProject (void) Prj_GetDataOfProjectByCod (&Prj); /***** Show question and button to remove the project *****/ - Gbl.Asgs.AsgCodToEdit = Prj.PrjCod; - sprintf (Gbl.Alert.Txt,Txt_Do_you_really_want_to_remove_the_assignment_X, + Gbl.Prjs.PrjCodToEdit = Prj.PrjCod; + sprintf (Gbl.Alert.Txt,Txt_Do_you_really_want_to_remove_the_project_X, Prj.Title); Ale_ShowAlertAndButton (Ale_QUESTION,Gbl.Alert.Txt, - ActRemAsg,NULL,NULL,Prj_PutParams, - Btn_REMOVE_BUTTON,Txt_Remove_assignment); + ActRemPrj,NULL,NULL,Prj_PutParams, + Btn_REMOVE_BUTTON,Txt_Remove_project); /***** Show projects again *****/ Prj_SeeProjects (); } /*****************************************************************************/ -/*************************** Remove a project ****************************/ +/***************************** Remove a project ******************************/ /*****************************************************************************/ void Prj_RemoveProject (void) @@ -1016,9 +964,6 @@ void Prj_RemoveProject (void) Prj.PrjCod,Gbl.CurrentCrs.Crs.CrsCod); DB_QueryDELETE (Query,"can not remove project"); - /***** Mark possible notifications as removed *****/ - Ntf_MarkNotifAsRemoved (Ntf_EVENT_ASSIGNMENT,Prj.PrjCod); - /***** Write message to show the change made *****/ sprintf (Gbl.Alert.Txt,Txt_Assignment_X_removed, Prj.Title); @@ -1029,7 +974,7 @@ void Prj_RemoveProject (void) } /*****************************************************************************/ -/**************************** Hide a project *****************************/ +/****************************** Hide a project *******************************/ /*****************************************************************************/ void Prj_HideProject (void) @@ -1061,7 +1006,7 @@ void Prj_HideProject (void) } /*****************************************************************************/ -/**************************** Show a project *****************************/ +/****************************** Show a project *******************************/ /*****************************************************************************/ void Prj_ShowProject (void) @@ -1093,7 +1038,7 @@ void Prj_ShowProject (void) } /*****************************************************************************/ -/******** Check if the title or the folder of a project exists ***********/ +/********** Check if the title or the folder of a project exists *************/ /*****************************************************************************/ static bool Prj_CheckIfSimilarProjectsExists (const char *Field,const char *Value,long PrjCod) @@ -1108,30 +1053,30 @@ static bool Prj_CheckIfSimilarProjectsExists (const char *Field,const char *Valu } /*****************************************************************************/ -/****************** Put a form to create a new project ********************/ +/******************** Put a form to create a new project *********************/ /*****************************************************************************/ void Prj_RequestCreatOrEditPrj (void) { - extern const char *Hlp_ASSESSMENT_Assignments_new_assignment; - extern const char *Hlp_ASSESSMENT_Assignments_edit_assignment; + extern const char *Hlp_ASSESSMENT_Projects_new_project; + extern const char *Hlp_ASSESSMENT_Projects_edit_project; extern const char *The_ClassForm[The_NUM_THEMES]; - extern const char *Txt_New_assignment; - extern const char *Txt_Edit_assignment; + extern const char *Txt_New_project; + extern const char *Txt_Edit_project; extern const char *Txt_Title; extern const char *Txt_Upload_files_QUESTION; extern const char *Txt_Folder; extern const char *Txt_Description; - extern const char *Txt_Create_assignment; + extern const char *Txt_Create_project; extern const char *Txt_Save; struct Project Prj; bool ItsANewAssignment; char Txt[Cns_MAX_BYTES_TEXT + 1]; /***** Get parameters *****/ - Prj_GetParamAsgOrder (); + Prj_GetParamPrjOrder (); Grp_GetParamWhichGrps (); - Gbl.Asgs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); + Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); /***** Get the code of the project *****/ ItsANewAssignment = ((Prj.PrjCod = Prj_GetParamPrjCod ()) == -1L); @@ -1161,23 +1106,23 @@ void Prj_RequestCreatOrEditPrj (void) /***** Start form *****/ if (ItsANewAssignment) { - Act_FormStart (ActNewAsg); - Gbl.Asgs.AsgCodToEdit = -1L; + Act_FormStart (ActNewPrj); + Gbl.Prjs.PrjCodToEdit = -1L; } else { - Act_FormStart (ActChgAsg); - Gbl.Asgs.AsgCodToEdit = Prj.PrjCod; + Act_FormStart (ActChgPrj); + Gbl.Prjs.PrjCodToEdit = Prj.PrjCod; } Prj_PutParams (); /***** Start box and table *****/ if (ItsANewAssignment) - Box_StartBoxTable (NULL,Txt_New_assignment,NULL, - Hlp_ASSESSMENT_Assignments_new_assignment,Box_NOT_CLOSABLE,2); + Box_StartBoxTable (NULL,Txt_New_project,NULL, + Hlp_ASSESSMENT_Projects_new_project,Box_NOT_CLOSABLE,2); else - Box_StartBoxTable (NULL,Txt_Edit_assignment,NULL, - Hlp_ASSESSMENT_Assignments_edit_assignment,Box_NOT_CLOSABLE,2); + Box_StartBoxTable (NULL,Txt_Edit_project,NULL, + Hlp_ASSESSMENT_Projects_edit_project,Box_NOT_CLOSABLE,2); /***** Project title *****/ fprintf (Gbl.F.Out,"" @@ -1233,7 +1178,7 @@ void Prj_RequestCreatOrEditPrj (void) /***** End table, send button and end box *****/ if (ItsANewAssignment) - Box_EndBoxTableWithButton (Btn_CREATE_BUTTON,Txt_Create_assignment); + Box_EndBoxTableWithButton (Btn_CREATE_BUTTON,Txt_Create_project); else Box_EndBoxTableWithButton (Btn_CONFIRM_BUTTON,Txt_Save); @@ -1245,7 +1190,7 @@ void Prj_RequestCreatOrEditPrj (void) } /*****************************************************************************/ -/**************** Show list of groups to edit and project *****************/ +/****************** Show list of groups to edit and project ******************/ /*****************************************************************************/ static void Prj_ShowLstGrpsToEditProject (long PrjCod) @@ -1291,7 +1236,8 @@ static void Prj_ShowLstGrpsToEditProject (long PrjCod) NumGrpTyp < Gbl.CurrentCrs.Grps.GrpTypes.Num; NumGrpTyp++) if (Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp].NumGrps) - Grp_ListGrpsToEditAsgAttSvyGam (&Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp],PrjCod,Grp_ASSIGNMENT); + Grp_ListGrpsToEditAsgPrjAttSvyGam (&Gbl.CurrentCrs.Grps.GrpTypes.LstGrpTypes[NumGrpTyp], + PrjCod,Grp_PROJECT); /***** End table and box *****/ Box_EndBoxTable (); @@ -1304,84 +1250,83 @@ static void Prj_ShowLstGrpsToEditProject (long PrjCod) } /*****************************************************************************/ -/****************** Receive form to create a new project ******************/ +/******************** Receive form to create a new project *******************/ /*****************************************************************************/ void Prj_RecFormProject (void) { - extern const char *Txt_Already_existed_an_assignment_with_the_title_X; - extern const char *Txt_Already_existed_an_assignment_with_the_folder_X; - extern const char *Txt_You_must_specify_the_title_of_the_assignment; - extern const char *Txt_Created_new_assignment_X; - extern const char *Txt_The_assignment_has_been_modified; + extern const char *Txt_Already_existed_a_project_with_the_title_X; + extern const char *Txt_Already_existed_a_project_with_the_folder_X; + extern const char *Txt_You_must_specify_the_title_of_the_project; + extern const char *Txt_Created_new_project_X; + extern const char *Txt_The_project_has_been_modified; extern const char *Txt_You_can_not_disable_file_uploading_once_folders_have_been_created; - struct Project OldAsg; // Current assigment data in database - struct Project NewAsg; // Project data received from form + struct Project OldPrj; // Current assigment data in database + struct Project NewPrj; // Project data received from form bool ItsANewAssignment; bool NewAssignmentIsCorrect = true; - unsigned NumUsrsToBeNotifiedByEMail; char Txt[Cns_MAX_BYTES_TEXT + 1]; /***** Get the code of the project *****/ - NewAsg.PrjCod = Prj_GetParamPrjCod (); - ItsANewAssignment = (NewAsg.PrjCod < 0); + NewPrj.PrjCod = Prj_GetParamPrjCod (); + ItsANewAssignment = (NewPrj.PrjCod < 0); if (ItsANewAssignment) { /***** Reset old (current, not existing) project data *****/ - OldAsg.PrjCod = -1L; - Prj_ResetProject (&OldAsg); + OldPrj.PrjCod = -1L; + Prj_ResetProject (&OldPrj); } else { /***** Get data of the old (current) project from database *****/ - OldAsg.PrjCod = NewAsg.PrjCod; - Prj_GetDataOfProjectByCod (&OldAsg); + OldPrj.PrjCod = NewPrj.PrjCod; + Prj_GetDataOfProjectByCod (&OldPrj); } /***** Get start/end date-times *****/ - NewAsg.TimeUTC[Dat_START_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC"); - NewAsg.TimeUTC[Dat_END_TIME ] = Dat_GetTimeUTCFromForm ("EndTimeUTC" ); + NewPrj.TimeUTC[Dat_START_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC"); + NewPrj.TimeUTC[Dat_END_TIME ] = Dat_GetTimeUTCFromForm ("EndTimeUTC" ); /***** Get project title *****/ - Par_GetParToText ("Title",NewAsg.Title,Prj_MAX_BYTES_ASSIGNMENT_TITLE); + Par_GetParToText ("Title",NewPrj.Title,Prj_MAX_BYTES_ASSIGNMENT_TITLE); /***** Get folder name where to send works of the project *****/ - Par_GetParToText ("Folder",NewAsg.Folder,Brw_MAX_BYTES_FOLDER); - NewAsg.SendWork = (NewAsg.Folder[0]) ? Prj_SEND_WORK : + Par_GetParToText ("Folder",NewPrj.Folder,Brw_MAX_BYTES_FOLDER); + NewPrj.SendWork = (NewPrj.Folder[0]) ? Prj_SEND_WORK : Prj_DO_NOT_SEND_WORK; /***** Get project text *****/ Par_GetParToHTML ("Txt",Txt,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous) /***** Adjust dates *****/ - if (NewAsg.TimeUTC[Dat_START_TIME] == 0) - NewAsg.TimeUTC[Dat_START_TIME] = Gbl.StartExecutionTimeUTC; - if (NewAsg.TimeUTC[Dat_END_TIME] == 0) - NewAsg.TimeUTC[Dat_END_TIME] = NewAsg.TimeUTC[Dat_START_TIME] + 2 * 60 * 60; // +2 hours + if (NewPrj.TimeUTC[Dat_START_TIME] == 0) + NewPrj.TimeUTC[Dat_START_TIME] = Gbl.StartExecutionTimeUTC; + if (NewPrj.TimeUTC[Dat_END_TIME] == 0) + NewPrj.TimeUTC[Dat_END_TIME] = NewPrj.TimeUTC[Dat_START_TIME] + 2 * 60 * 60; // +2 hours /***** Check if title is correct *****/ - if (NewAsg.Title[0]) // If there's a project title + if (NewPrj.Title[0]) // If there's a project title { /* If title of project was in database... */ - if (Prj_CheckIfSimilarProjectsExists ("Title",NewAsg.Title,NewAsg.PrjCod)) + if (Prj_CheckIfSimilarProjectsExists ("Title",NewPrj.Title,NewPrj.PrjCod)) { NewAssignmentIsCorrect = false; - sprintf (Gbl.Alert.Txt,Txt_Already_existed_an_assignment_with_the_title_X, - NewAsg.Title); + sprintf (Gbl.Alert.Txt,Txt_Already_existed_a_project_with_the_title_X, + NewPrj.Title); Ale_ShowAlert (Ale_WARNING,Gbl.Alert.Txt); } else // Title is correct { - if (NewAsg.SendWork == Prj_SEND_WORK) + if (NewPrj.SendWork == Prj_SEND_WORK) { - if (Str_ConvertFilFolLnkNameToValid (NewAsg.Folder)) // If folder name is valid... + if (Str_ConvertFilFolLnkNameToValid (NewPrj.Folder)) // If folder name is valid... { - if (Prj_CheckIfSimilarProjectsExists ("Folder",NewAsg.Folder,NewAsg.PrjCod)) // If folder of project was in database... + if (Prj_CheckIfSimilarProjectsExists ("Folder",NewPrj.Folder,NewPrj.PrjCod)) // If folder of project was in database... { NewAssignmentIsCorrect = false; - sprintf (Gbl.Alert.Txt,Txt_Already_existed_an_assignment_with_the_folder_X, - NewAsg.Folder); + sprintf (Gbl.Alert.Txt,Txt_Already_existed_a_project_with_the_folder_X, + NewPrj.Folder); Ale_ShowAlert (Ale_WARNING,Gbl.Alert.Txt); } } @@ -1391,11 +1336,11 @@ void Prj_RecFormProject (void) Ale_ShowAlert (Ale_WARNING,Gbl.Alert.Txt); } } - else // NewAsg.SendWork == Prj_DO_NOT_SEND_WORK + else // NewPrj.SendWork == Prj_DO_NOT_SEND_WORK { - if (OldAsg.SendWork == Prj_SEND_WORK) + if (OldPrj.SendWork == Prj_SEND_WORK) { - if (Brw_CheckIfExistsFolderAssigmentForAnyUsr (OldAsg.Folder)) + if (Brw_CheckIfExistsFolderAssigmentForAnyUsr (OldPrj.Folder)) { NewAssignmentIsCorrect = false; Ale_ShowAlert (Ale_WARNING,Txt_You_can_not_disable_file_uploading_once_folders_have_been_created); @@ -1407,7 +1352,7 @@ void Prj_RecFormProject (void) else // If there is not a project title { NewAssignmentIsCorrect = false; - Ale_ShowAlert (Ale_WARNING,Txt_You_must_specify_the_title_of_the_assignment); + Ale_ShowAlert (Ale_WARNING,Txt_You_must_specify_the_title_of_the_project); } /***** Create a new project or update an existing one *****/ @@ -1418,33 +1363,29 @@ void Prj_RecFormProject (void) if (ItsANewAssignment) { - Prj_CreateProject (&NewAsg,Txt); // Add new project to database + Prj_CreateProject (&NewPrj,Txt); // Add new project to database /***** Write success message *****/ - sprintf (Gbl.Alert.Txt,Txt_Created_new_assignment_X,NewAsg.Title); + sprintf (Gbl.Alert.Txt,Txt_Created_new_project_X,NewPrj.Title); Ale_ShowAlert (Ale_SUCCESS,Gbl.Alert.Txt); } else { - if (OldAsg.Folder[0] && NewAsg.Folder[0]) - if (strcmp (OldAsg.Folder,NewAsg.Folder)) // Folder name has changed - NewAssignmentIsCorrect = Brw_UpdateFoldersAssigmentsIfExistForAllUsrs (OldAsg.Folder,NewAsg.Folder); + if (OldPrj.Folder[0] && NewPrj.Folder[0]) + if (strcmp (OldPrj.Folder,NewPrj.Folder)) // Folder name has changed + NewAssignmentIsCorrect = Brw_UpdateFoldersAssigmentsIfExistForAllUsrs (OldPrj.Folder,NewPrj.Folder); if (NewAssignmentIsCorrect) { - Prj_UpdateProject (&NewAsg,Txt); + Prj_UpdateProject (&NewPrj,Txt); /***** Write success message *****/ - Ale_ShowAlert (Ale_SUCCESS,Txt_The_assignment_has_been_modified); + Ale_ShowAlert (Ale_SUCCESS,Txt_The_project_has_been_modified); } } /* Free memory for list of selected groups */ Grp_FreeListCodSelectedGrps (); - /***** Notify by email about the new project *****/ - if ((NumUsrsToBeNotifiedByEMail = Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_ASSIGNMENT,NewAsg.PrjCod))) - Prj_UpdateNumUsrsNotifiedByEMailAboutProject (NewAsg.PrjCod,NumUsrsToBeNotifiedByEMail); - /***** Show projects again *****/ Prj_SeeProjects (); } @@ -1454,22 +1395,7 @@ void Prj_RecFormProject (void) } /*****************************************************************************/ -/******** Update number of users notified in table of projects ************/ -/*****************************************************************************/ - -static void Prj_UpdateNumUsrsNotifiedByEMailAboutProject (long PrjCod,unsigned NumUsrsToBeNotifiedByEMail) - { - char Query[512]; - - /***** Update number of users notified *****/ - sprintf (Query,"UPDATE projects SET NumNotif=NumNotif+%u" - " WHERE PrjCod=%ld", - NumUsrsToBeNotifiedByEMail,PrjCod); - DB_QueryUPDATE (Query,"can not update the number of notifications of a project"); - } - -/*****************************************************************************/ -/************************ Create a new project ****************************/ +/************************** Create a new project *****************************/ /*****************************************************************************/ static void Prj_CreateProject (struct Project *Prj,const char *Txt) @@ -1499,7 +1425,7 @@ static void Prj_CreateProject (struct Project *Prj,const char *Txt) } /*****************************************************************************/ -/********************* Update an existing project *************************/ +/*********************** Update an existing project **************************/ /*****************************************************************************/ static void Prj_UpdateProject (struct Project *Prj,const char *Txt) @@ -1532,7 +1458,7 @@ static void Prj_UpdateProject (struct Project *Prj,const char *Txt) } /*****************************************************************************/ -/*********** Check if a project is associated to any group ***************/ +/************* Check if a project is associated to any group *****************/ /*****************************************************************************/ static bool Prj_CheckIfPrjIsAssociatedToGrps (long PrjCod) @@ -1540,13 +1466,13 @@ static bool Prj_CheckIfPrjIsAssociatedToGrps (long PrjCod) char Query[256]; /***** Get if a project is associated to a group from database *****/ - sprintf (Query,"SELECT COUNT(*) FROM asg_grp WHERE PrjCod=%ld", + sprintf (Query,"SELECT COUNT(*) FROM prj_grp WHERE PrjCod=%ld", PrjCod); return (DB_QueryCOUNT (Query,"can not check if a project is associated to groups") != 0); } /*****************************************************************************/ -/************ Check if a project is associated to a group ****************/ +/************** Check if a project is associated to a group ******************/ /*****************************************************************************/ bool Prj_CheckIfPrjIsAssociatedToGrp (long PrjCod,long GrpCod) @@ -1554,14 +1480,14 @@ bool Prj_CheckIfPrjIsAssociatedToGrp (long PrjCod,long GrpCod) char Query[256]; /***** Get if a project is associated to a group from database *****/ - sprintf (Query,"SELECT COUNT(*) FROM asg_grp" + sprintf (Query,"SELECT COUNT(*) FROM prj_grp" " WHERE PrjCod=%ld AND GrpCod=%ld", PrjCod,GrpCod); return (DB_QueryCOUNT (Query,"can not check if a project is associated to a group") != 0); } /*****************************************************************************/ -/********************* Remove groups of a project ************************/ +/*********************** Remove groups of a project **************************/ /*****************************************************************************/ static void Prj_RemoveAllTheGrpsAssociatedToAProject (long PrjCod) @@ -1569,12 +1495,12 @@ static void Prj_RemoveAllTheGrpsAssociatedToAProject (long PrjCod) char Query[256]; /***** Remove groups of the project *****/ - sprintf (Query,"DELETE FROM asg_grp WHERE PrjCod=%ld",PrjCod); + sprintf (Query,"DELETE FROM prj_grp WHERE PrjCod=%ld",PrjCod); DB_QueryDELETE (Query,"can not remove the groups associated to a project"); } /*****************************************************************************/ -/**************** Remove one group from all the projects ******************/ +/****************** Remove one group from all the projects *******************/ /*****************************************************************************/ void Prj_RemoveGroup (long GrpCod) @@ -1582,12 +1508,12 @@ void Prj_RemoveGroup (long GrpCod) char Query[256]; /***** Remove group from all the projects *****/ - sprintf (Query,"DELETE FROM asg_grp WHERE GrpCod=%ld",GrpCod); + sprintf (Query,"DELETE FROM prj_grp WHERE GrpCod=%ld",GrpCod); DB_QueryDELETE (Query,"can not remove group from the associations between projects and groups"); } /*****************************************************************************/ -/*********** Remove groups of one type from all the projects **************/ +/************* Remove groups of one type from all the projects ***************/ /*****************************************************************************/ void Prj_RemoveGroupsOfType (long GrpTypCod) @@ -1595,15 +1521,15 @@ void Prj_RemoveGroupsOfType (long GrpTypCod) char Query[256]; /***** Remove group from all the projects *****/ - sprintf (Query,"DELETE FROM asg_grp USING crs_grp,asg_grp" + sprintf (Query,"DELETE FROM prj_grp USING crs_grp,prj_grp" " WHERE crs_grp.GrpTypCod=%ld" - " AND crs_grp.GrpCod=asg_grp.GrpCod", + " AND crs_grp.GrpCod=prj_grp.GrpCod", GrpTypCod); DB_QueryDELETE (Query,"can not remove groups of a type from the associations between projects and groups"); } /*****************************************************************************/ -/********************* Create groups of a project ************************/ +/*********************** Create groups of a project **************************/ /*****************************************************************************/ static void Prj_CreateGrps (long PrjCod) @@ -1617,7 +1543,7 @@ static void Prj_CreateGrps (long PrjCod) NumGrpSel++) { /* Create group */ - sprintf (Query,"INSERT INTO asg_grp" + sprintf (Query,"INSERT INTO prj_grp" " (PrjCod,GrpCod)" " VALUES" " (%ld,%ld)", @@ -1627,7 +1553,7 @@ static void Prj_CreateGrps (long PrjCod) } /*****************************************************************************/ -/********* Get and write the names of the groups of a project ************/ +/*********** Get and write the names of the groups of a project **************/ /*****************************************************************************/ static void Prj_GetAndWriteNamesOfGrpsAssociatedToPrj (struct Project *Prj) @@ -1644,9 +1570,9 @@ static void Prj_GetAndWriteNamesOfGrpsAssociatedToPrj (struct Project *Prj) /***** Get groups associated to a project from database *****/ sprintf (Query,"SELECT crs_grp_types.GrpTypName,crs_grp.GrpName" - " FROM asg_grp,crs_grp,crs_grp_types" - " WHERE asg_grp.PrjCod=%ld" - " AND asg_grp.GrpCod=crs_grp.GrpCod" + " FROM prj_grp,crs_grp,crs_grp_types" + " WHERE prj_grp.PrjCod=%ld" + " AND prj_grp.GrpCod=crs_grp.GrpCod" " AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" " ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName", Prj->PrjCod); @@ -1694,7 +1620,7 @@ static void Prj_GetAndWriteNamesOfGrpsAssociatedToPrj (struct Project *Prj) } /*****************************************************************************/ -/****************** Remove all the projects of a course *******************/ +/******************** Remove all the projects of a course ********************/ /*****************************************************************************/ void Prj_RemoveCrsProjects (long CrsCod) @@ -1702,9 +1628,9 @@ void Prj_RemoveCrsProjects (long CrsCod) char Query[512]; /***** Remove groups *****/ - sprintf (Query,"DELETE FROM asg_grp USING projects,asg_grp" + sprintf (Query,"DELETE FROM prj_grp USING projects,prj_grp" " WHERE projects.CrsCod=%ld" - " AND projects.PrjCod=asg_grp.PrjCod", + " AND projects.PrjCod=prj_grp.PrjCod", CrsCod); DB_QueryDELETE (Query,"can not remove all the groups associated to projects of a course"); @@ -1714,7 +1640,7 @@ void Prj_RemoveCrsProjects (long CrsCod) } /*****************************************************************************/ -/********* Check if I belong to any of the groups of a project ***********/ +/*********** Check if I belong to any of the groups of a project *************/ /*****************************************************************************/ static bool Prj_CheckIfIBelongToCrsOrGrpsThisProject (long PrjCod) @@ -1732,12 +1658,12 @@ static bool Prj_CheckIfIBelongToCrsOrGrpsThisProject (long PrjCod) " WHERE PrjCod=%ld" " AND " "(" - "PrjCod NOT IN (SELECT PrjCod FROM asg_grp)" // Project is for the whole course + "PrjCod NOT IN (SELECT PrjCod FROM prj_grp)" // Project is for the whole course " OR " "PrjCod IN" // Project is for specific groups - " (SELECT asg_grp.PrjCod FROM asg_grp,crs_grp_usr" + " (SELECT prj_grp.PrjCod FROM prj_grp,crs_grp_usr" " WHERE crs_grp_usr.UsrCod=%ld" - " AND asg_grp.GrpCod=crs_grp_usr.GrpCod)" + " AND prj_grp.GrpCod=crs_grp_usr.GrpCod)" ")", PrjCod,Gbl.Usrs.Me.UsrDat.UsrCod); return (DB_QueryCOUNT (Query,"can not check if I can do a project") != 0); @@ -1753,7 +1679,7 @@ static bool Prj_CheckIfIBelongToCrsOrGrpsThisProject (long PrjCod) } /*****************************************************************************/ -/****************** Get number of projects in a course ********************/ +/******************** Get number of projects in a course *********************/ /*****************************************************************************/ unsigned Prj_GetNumProjectsInCrs (long CrsCod) @@ -1767,7 +1693,7 @@ unsigned Prj_GetNumProjectsInCrs (long CrsCod) } /*****************************************************************************/ -/****************** Get number of courses with projects *******************/ +/******************** Get number of courses with projects ********************/ /*****************************************************************************/ // Returns the number of courses with projects // in this location (all the platform, current degree or current course) @@ -1849,28 +1775,28 @@ unsigned Prj_GetNumCoursesWithProjects (Sco_Scope_t Scope) } /*****************************************************************************/ -/************************ Get number of projects **************************/ +/************************** Get number of projects ***************************/ /*****************************************************************************/ // Returns the number of projects // in this location (all the platform, current degree or current course) -unsigned Prj_GetNumProjects (Sco_Scope_t Scope,unsigned *NumNotif) +unsigned Prj_GetNumProjects (Sco_Scope_t Scope) { char Query[1024]; MYSQL_RES *mysql_res; MYSQL_ROW row; - unsigned NumAssignments; + unsigned NumProjects; /***** Get number of projects from database *****/ switch (Scope) { case Sco_SCOPE_SYS: - sprintf (Query,"SELECT COUNT(*),SUM(NumNotif)" + sprintf (Query,"SELECT COUNT(*)" " FROM projects" " WHERE CrsCod>0"); break; case Sco_SCOPE_CTY: - sprintf (Query,"SELECT COUNT(*),SUM(projects.NumNotif)" + sprintf (Query,"SELECT COUNT(*)" " FROM institutions,centres,degrees,courses,projects" " WHERE institutions.CtyCod=%ld" " AND institutions.InsCod=centres.InsCod" @@ -1880,7 +1806,7 @@ unsigned Prj_GetNumProjects (Sco_Scope_t Scope,unsigned *NumNotif) Gbl.CurrentCty.Cty.CtyCod); break; case Sco_SCOPE_INS: - sprintf (Query,"SELECT COUNT(*),SUM(projects.NumNotif)" + sprintf (Query,"SELECT COUNT(*)" " FROM centres,degrees,courses,projects" " WHERE centres.InsCod=%ld" " AND centres.CtrCod=degrees.CtrCod" @@ -1889,7 +1815,7 @@ unsigned Prj_GetNumProjects (Sco_Scope_t Scope,unsigned *NumNotif) Gbl.CurrentIns.Ins.InsCod); break; case Sco_SCOPE_CTR: - sprintf (Query,"SELECT COUNT(*),SUM(projects.NumNotif)" + sprintf (Query,"SELECT COUNT(*)" " FROM degrees,courses,projects" " WHERE degrees.CtrCod=%ld" " AND degrees.DegCod=courses.DegCod" @@ -1897,14 +1823,14 @@ unsigned Prj_GetNumProjects (Sco_Scope_t Scope,unsigned *NumNotif) Gbl.CurrentCtr.Ctr.CtrCod); break; case Sco_SCOPE_DEG: - sprintf (Query,"SELECT COUNT(*),SUM(projects.NumNotif)" + sprintf (Query,"SELECT COUNT(*)" " FROM courses,projects" " WHERE courses.DegCod=%ld" " AND courses.CrsCod=projects.CrsCod", Gbl.CurrentDeg.Deg.DegCod); break; case Sco_SCOPE_CRS: - sprintf (Query,"SELECT COUNT(*),SUM(NumNotif)" + sprintf (Query,"SELECT COUNT(*)" " FROM projects" " WHERE CrsCod=%ld", Gbl.CurrentCrs.Crs.CrsCod); @@ -1917,20 +1843,11 @@ unsigned Prj_GetNumProjects (Sco_Scope_t Scope,unsigned *NumNotif) /***** Get number of projects *****/ row = mysql_fetch_row (mysql_res); - if (sscanf (row[0],"%u",&NumAssignments) != 1) + if (sscanf (row[0],"%u",&NumProjects) != 1) Lay_ShowErrorAndExit ("Error when getting number of projects."); - /***** Get number of notifications by email *****/ - if (row[1]) - { - if (sscanf (row[1],"%u",NumNotif) != 1) - Lay_ShowErrorAndExit ("Error when getting number of notifications of projects."); - } - else - *NumNotif = 0; - /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); - return NumAssignments; + return NumProjects; } diff --git a/swad_project.h b/swad_project.h index b81d09b7..dbcdb4ef 100644 --- a/swad_project.h +++ b/swad_project.h @@ -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 diff --git a/swad_survey.c b/swad_survey.c index 4c82822b..6475b586 100644 --- a/swad_survey.c +++ b/swad_survey.c @@ -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 (); diff --git a/swad_text.c b/swad_text.c index de1f99e0..97e6483c 100644 --- a/swad_text.c +++ b/swad_text.c @@ -2529,6 +2529,48 @@ const char *Txt_Already_existed_a_game_with_the_title_X = // Warning: it is very "Já existe um jogo com o título %s."; #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 %s."; +#elif L==2 + "Es gibt bereits einen Projekt im Verzeichnis %s."; +#elif L==3 + "There is already a project with folder %s."; +#elif L==4 + "Ya existía un proyecto con la carpeta %s."; +#elif L==5 + "Il existe déjà un projet avec le répertoire %s."; +#elif L==6 + "Ya existía un proyecto con la carpeta %s."; // Okoteve traducción +#elif L==7 + "Esiste già un progetto con la cartella %s."; +#elif L==8 + "Istniał projekt z folderem %s."; +#elif L==9 + "Já existe um projeto com o diretório %s."; +#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ítol %s."; +#elif L==2 + "Es gibt bereits einen Projekt mit dem Namen %s."; +#elif L==3 + "Already existed a project with the title %s."; +#elif L==4 + "Ya existía un proyecto con el título %s."; +#elif L==5 + "Il existe déjà un projet du titre %s."; +#elif L==6 + "Ya existía un proyecto con el título %s."; // Okoteve traducción +#elif L==7 + "Esiste già un progetto con il titolo %s."; +#elif L==8 + "Był już projekt o tytule %s."; +#elif L==9 + "Já existe um projeto com o título %s."; +#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ítol %s."; @@ -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é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 %s."; // Necessita traduccio + "Creada nova activitat %s."; #elif L==2 "Neue Aufgabe %s 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 %s."; // Necessita traduccio + "Creat nou banner %s."; #elif L==2 "Neuer Werbebanner %s 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 %s."; // Necessita traduccio + "Creat nou centre %s."; // Necessita traduccio #elif L==2 "Neues Lehrinstitut %s 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 %s."; #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 %s."; // Necessita traduccio +#elif L==2 + "Neues Projekt %s eingegeben."; +#elif L==3 + "Created new project %s."; +#elif L==4 + "Creado nuevo proyecto %s."; +#elif L==5 + "Créé nouveau projet %s."; +#elif L==6 + "Creado nuevo proyecto %s."; // Okoteve traducción +#elif L==7 + "Creato nuovo progetto %s."; +#elif L==8 + "Utworzono nowe projekt %s."; +#elif L==9 + "Criado novo projeto %s."; +#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 %s."; // 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 - "¿Realmente desea eliminar la actividad %s?"; // Necessita traduccio + "¿De veres voleu eliminar l'activitat %s?"; #elif L==2 "Wollen Sie die Aufgabe %s 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ê realmente deseja remover la foto de %s?"; #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 + "¿De veres voleu eliminar el projecte %s?"; +#elif L==2 + "Wollen Sie die Projekt %s wirklich entfernen?"; +#elif L==3 + "Do you really want to remove the project %s?"; +#elif L==4 + "¿Realmente desea eliminar el proyecto %s?"; +#elif L==5 + "Voulez-vous vraiment supprimer le projet %s?"; +#elif L==6 + "¿Realmente desea eliminar el proyecto %s?"; // Okoteve traducción +#elif L==7 + "Vuoi realmente rimuovere il progetto %s?"; +#elif L==8 + "Czy na pewno chcesz usunac projekt %s?"; +#elif L==9 + "Você realmente deseja remover o projeto %s?"; +#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 %lu?"; @@ -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 + "É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ł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 + "É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é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 - "É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ł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éritos" #endif , - // 5: ActSeeAllExaAnn + // 6: ActSeeAllExaAnn #if L==1 "Convocatò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…)" +#elif L==4 + "Proyectos (proyectos fin de carrera, trabajos fin de grado…)" +#elif L==5 + "Projets" +#elif L==6 + "Proyectos (proyectos fin de carrera, trabajos fin de grado…)" // 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à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ònimes" #elif L==2 @@ -21199,7 +21366,7 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] = "Inquéritos" #endif , - // 5: ActSeeAllExaAnn + // 6: ActSeeAllExaAnn #if L==1 "Llistat de convocatòries d'exà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º 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ão há projetos."; +#endif + const char *Txt_No_questions_found_matching_your_search_criteria = #if L==1 "No hay preguntas con el criterio de búsqueda seleccionado."; // Necessita traduccio @@ -29822,6 +30030,70 @@ const char *Txt_Possibly_duplicate_users = "Usuários possivelmente duplicados"; #endif + +const char *Txt_Post = // Publish (verb) +#if L==1 + "Publicar"; +#elif L==2 + "Verö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ć"; +#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ível para alguns usuários identificados"; #endif -const char *Txt_Post = // Publish (verb) +const char *Txt_Projects = #if L==1 - "Publicar"; + "Projectes"; #elif L==2 - "Verö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ć"; + "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ń 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ändert."; #elif L==3 @@ -42778,7 +43029,7 @@ const char *Txt_The_assignment_has_been_modified = #elif L==7 "L'attività è stata modificata."; #elif L==8 - "The assignment has been modified."; // Potrzebujesz tlumaczenie + "Działanie został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 %s has been renamed as %s."; // 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ändert."; +#elif L==3 + "The project has been modified."; +#elif L==4 + "Le projet ha sido modificado."; +#elif L==5 + "Le projet a été modifié."; +#elif L==6 + "El proyecto ha sido modificado."; // Okoteve traducción +#elif L==7 + "Il progetto è stato modificato."; +#elif L==8 + "Projekt został 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ê deve especificar o título do jogo."; #endif +const char *Txt_You_must_specify_the_title_of_the_project = +#if L==1 + "Cal especificar el tí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ítulo del proyecto."; +#elif L==5 + "Vous devez spécifier le titre du projet."; +#elif L==6 + "Debe especificar el título del proyecto."; // Okoteve traducción +#elif L==7 + "È necessario specificare il titolo del progetto."; +#elif L==8 + "Musisz podać tytuł projektu."; +#elif L==9 + "Você deve especificar o título do projeto."; +#endif + const char *Txt_You_must_specify_the_title_of_the_survey = #if L==1 "Cal especificar el títol de l'enquesta.";