diff --git a/swad_action.c b/swad_action.c index 509c8edc0..ba3d3d840 100644 --- a/swad_action.c +++ b/swad_action.c @@ -508,6 +508,10 @@ Assessment: 365. ActShoPrj Show project NEW. ActLckPrj Lock project edition NEW. ActUnlPrj Unlock project edition + NEW. ActReqLckAllPrj Request locking of all projects + NEW. ActReqUnlAllPrj Request unlocking of all projects + NEW. ActLckAllPrj Lock all projects + NEW. ActUnlAllPrj Unlock all projects 366. ActReqAddStdPrj Request adding a student to a project 367. ActReqAddTutPrj Request adding a tutor to a project 368. ActReqAddEvlPrj Request adding an evaluator to a project @@ -1638,10 +1642,10 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActAllShaSocNotGbl*/{1766,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_ShowAllSharersNoteGbl ,NULL}, /* ActAllFavSocNotGbl*/{1767,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_ShowAllFaversNoteGbl ,NULL}, /* ActAllFavSocComGbl*/{1768,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_ShowAllFaversComGbl ,NULL}, - /* ActShaSocNotGbl */{1495,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_ShaNoteGbl ,NULL}, - /* ActUnsSocNotGbl */{1496,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_UnsNoteGbl ,NULL}, + /* ActShaSocNotGbl */{1495,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_ShaNoteGbl ,NULL}, + /* ActUnsSocNotGbl */{1496,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_UnsNoteGbl ,NULL}, /* ActFavSocNotGbl */{1512,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_FavNoteGbl ,NULL}, - /* ActUnfSocNotGbl */{1513,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_UnfNoteGbl ,NULL}, + /* ActUnfSocNotGbl */{1513,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_UnfNoteGbl ,NULL}, /* ActFavSocComGbl */{1516,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_FavCommentGbl ,NULL}, /* ActUnfSocComGbl */{1517,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_UnfCommentGbl ,NULL}, /* ActReqRemSocPubGbl*/{1494,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,TL_ShowTimelineGbl1 ,TL_RequestRemNoteGbl ,NULL}, @@ -1656,10 +1660,10 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActAllShaSocNotUsr*/{1769,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_ShowAllSharersNoteUsr ,NULL}, /* ActAllFavSocNotUsr*/{1770,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_ShowAllFaversNoteUsr ,NULL}, /* ActAllFavSocComUsr*/{1771,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_ShowAllFaversComUsr ,NULL}, - /* ActShaSocNotUsr */{1499,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_ShaNoteUsr ,NULL}, - /* ActUnsSocNotUsr */{1500,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_UnsNoteUsr ,NULL}, + /* ActShaSocNotUsr */{1499,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_ShaNoteUsr ,NULL}, + /* ActUnsSocNotUsr */{1500,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_UnsNoteUsr ,NULL}, /* ActFavSocNotUsr */{1514,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_FavNoteUsr ,NULL}, - /* ActUnfSocNotUsr */{1515,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_UnfNoteUsr ,NULL}, + /* ActUnfSocNotUsr */{1515,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_UnfNoteUsr ,NULL}, /* ActFavSocComUsr */{1518,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_FavCommentUsr ,NULL}, /* ActUnfSocComUsr */{1519,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_UnfCommentUsr ,NULL}, /* ActReqRemSocPubUsr*/{1501,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TL_RequestRemNoteUsr ,NULL}, @@ -2047,6 +2051,10 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActShoPrj */{1683,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ShowProject ,NULL}, /* ActLckPrj */{1773,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_LockProjectEdition ,NULL}, /* ActUnlPrj */{1774,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_UnlockProjectEdition ,NULL}, + /* ActReqLckAllPrj */{1775,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqLockAllProjectsEdition ,NULL}, + /* ActReqUnlAllPrj */{1776,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqUnlockAllProjectsEdition,NULL}, + /* ActLckAllPrj */{1777,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_LockAllProjectsEdition ,NULL}, + /* ActUnlAllPrj */{1778,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_UnlockAllProjectsEdition ,NULL}, /* ActReqAddStdPrj */{1684,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqAddStds ,NULL}, /* ActReqAddTutPrj */{1685,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqAddTuts ,NULL}, /* ActReqAddEvlPrj */{1686,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqAddEvls ,NULL}, @@ -4955,6 +4963,10 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un ActReqMaiUsr, // #1772 ActLckPrj, // #1773 ActUnlPrj, // #1774 + ActReqLckAllPrj, // #1775 + ActReqUnlAllPrj, // #1776 + ActLckAllPrj, // #1777 + ActUnlAllPrj, // #1778 }; /*****************************************************************************/ diff --git a/swad_action.h b/swad_action.h index 974f1d740..8e88fd346 100644 --- a/swad_action.h +++ b/swad_action.h @@ -61,9 +61,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 + 8 + 61 + 38 + 12 + 42 + 36 + 19 + 110 + 159 + 437 + 176 + 169 + 15 + 67) +#define Act_NUM_ACTIONS (1 + 8 + 61 + 38 + 12 + 42 + 36 + 19 + 110 + 163 + 437 + 176 + 169 + 15 + 67) -#define Act_MAX_ACTION_COD 1774 +#define Act_MAX_ACTION_COD 1778 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13 @@ -524,133 +524,137 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to #define ActShoPrj (ActChgCrsTT1stDay + 37) #define ActLckPrj (ActChgCrsTT1stDay + 38) #define ActUnlPrj (ActChgCrsTT1stDay + 39) -#define ActReqAddStdPrj (ActChgCrsTT1stDay + 40) -#define ActReqAddTutPrj (ActChgCrsTT1stDay + 41) -#define ActReqAddEvlPrj (ActChgCrsTT1stDay + 42) -#define ActAddStdPrj (ActChgCrsTT1stDay + 43) -#define ActAddTutPrj (ActChgCrsTT1stDay + 44) -#define ActAddEvlPrj (ActChgCrsTT1stDay + 45) -#define ActReqRemStdPrj (ActChgCrsTT1stDay + 46) -#define ActReqRemTutPrj (ActChgCrsTT1stDay + 47) -#define ActReqRemEvlPrj (ActChgCrsTT1stDay + 48) -#define ActRemStdPrj (ActChgCrsTT1stDay + 49) -#define ActRemTutPrj (ActChgCrsTT1stDay + 50) -#define ActRemEvlPrj (ActChgCrsTT1stDay + 51) +#define ActReqLckAllPrj (ActChgCrsTT1stDay + 40) +#define ActReqUnlAllPrj (ActChgCrsTT1stDay + 41) +#define ActLckAllPrj (ActChgCrsTT1stDay + 42) +#define ActUnlAllPrj (ActChgCrsTT1stDay + 43) +#define ActReqAddStdPrj (ActChgCrsTT1stDay + 44) +#define ActReqAddTutPrj (ActChgCrsTT1stDay + 45) +#define ActReqAddEvlPrj (ActChgCrsTT1stDay + 46) +#define ActAddStdPrj (ActChgCrsTT1stDay + 47) +#define ActAddTutPrj (ActChgCrsTT1stDay + 48) +#define ActAddEvlPrj (ActChgCrsTT1stDay + 49) +#define ActReqRemStdPrj (ActChgCrsTT1stDay + 50) +#define ActReqRemTutPrj (ActChgCrsTT1stDay + 51) +#define ActReqRemEvlPrj (ActChgCrsTT1stDay + 52) +#define ActRemStdPrj (ActChgCrsTT1stDay + 53) +#define ActRemTutPrj (ActChgCrsTT1stDay + 54) +#define ActRemEvlPrj (ActChgCrsTT1stDay + 55) -#define ActAdmDocPrj (ActChgCrsTT1stDay + 52) -#define ActReqRemFilDocPrj (ActChgCrsTT1stDay + 53) -#define ActRemFilDocPrj (ActChgCrsTT1stDay + 54) -#define ActRemFolDocPrj (ActChgCrsTT1stDay + 55) -#define ActCopDocPrj (ActChgCrsTT1stDay + 56) -#define ActPasDocPrj (ActChgCrsTT1stDay + 57) -#define ActRemTreDocPrj (ActChgCrsTT1stDay + 58) -#define ActFrmCreDocPrj (ActChgCrsTT1stDay + 59) -#define ActCreFolDocPrj (ActChgCrsTT1stDay + 60) -#define ActCreLnkDocPrj (ActChgCrsTT1stDay + 61) -#define ActRenFolDocPrj (ActChgCrsTT1stDay + 62) -#define ActRcvFilDocPrjDZ (ActChgCrsTT1stDay + 63) -#define ActRcvFilDocPrjCla (ActChgCrsTT1stDay + 64) -#define ActExpDocPrj (ActChgCrsTT1stDay + 65) -#define ActConDocPrj (ActChgCrsTT1stDay + 66) -#define ActZIPDocPrj (ActChgCrsTT1stDay + 67) -#define ActReqDatDocPrj (ActChgCrsTT1stDay + 68) -#define ActChgDatDocPrj (ActChgCrsTT1stDay + 69) -#define ActDowDocPrj (ActChgCrsTT1stDay + 70) +#define ActAdmDocPrj (ActChgCrsTT1stDay + 56) +#define ActReqRemFilDocPrj (ActChgCrsTT1stDay + 57) +#define ActRemFilDocPrj (ActChgCrsTT1stDay + 58) +#define ActRemFolDocPrj (ActChgCrsTT1stDay + 59) +#define ActCopDocPrj (ActChgCrsTT1stDay + 60) +#define ActPasDocPrj (ActChgCrsTT1stDay + 61) +#define ActRemTreDocPrj (ActChgCrsTT1stDay + 62) +#define ActFrmCreDocPrj (ActChgCrsTT1stDay + 63) +#define ActCreFolDocPrj (ActChgCrsTT1stDay + 64) +#define ActCreLnkDocPrj (ActChgCrsTT1stDay + 65) +#define ActRenFolDocPrj (ActChgCrsTT1stDay + 66) +#define ActRcvFilDocPrjDZ (ActChgCrsTT1stDay + 67) +#define ActRcvFilDocPrjCla (ActChgCrsTT1stDay + 68) +#define ActExpDocPrj (ActChgCrsTT1stDay + 69) +#define ActConDocPrj (ActChgCrsTT1stDay + 70) +#define ActZIPDocPrj (ActChgCrsTT1stDay + 71) +#define ActReqDatDocPrj (ActChgCrsTT1stDay + 72) +#define ActChgDatDocPrj (ActChgCrsTT1stDay + 73) +#define ActDowDocPrj (ActChgCrsTT1stDay + 74) -#define ActAdmAssPrj (ActChgCrsTT1stDay + 71) -#define ActReqRemFilAssPrj (ActChgCrsTT1stDay + 72) -#define ActRemFilAssPrj (ActChgCrsTT1stDay + 73) -#define ActRemFolAssPrj (ActChgCrsTT1stDay + 74) -#define ActCopAssPrj (ActChgCrsTT1stDay + 75) -#define ActPasAssPrj (ActChgCrsTT1stDay + 76) -#define ActRemTreAssPrj (ActChgCrsTT1stDay + 77) -#define ActFrmCreAssPrj (ActChgCrsTT1stDay + 78) -#define ActCreFolAssPrj (ActChgCrsTT1stDay + 79) -#define ActCreLnkAssPrj (ActChgCrsTT1stDay + 80) -#define ActRenFolAssPrj (ActChgCrsTT1stDay + 81) -#define ActRcvFilAssPrjDZ (ActChgCrsTT1stDay + 82) -#define ActRcvFilAssPrjCla (ActChgCrsTT1stDay + 83) -#define ActExpAssPrj (ActChgCrsTT1stDay + 84) -#define ActConAssPrj (ActChgCrsTT1stDay + 85) -#define ActZIPAssPrj (ActChgCrsTT1stDay + 86) -#define ActReqDatAssPrj (ActChgCrsTT1stDay + 87) -#define ActChgDatAssPrj (ActChgCrsTT1stDay + 88) -#define ActDowAssPrj (ActChgCrsTT1stDay + 89) +#define ActAdmAssPrj (ActChgCrsTT1stDay + 75) +#define ActReqRemFilAssPrj (ActChgCrsTT1stDay + 76) +#define ActRemFilAssPrj (ActChgCrsTT1stDay + 77) +#define ActRemFolAssPrj (ActChgCrsTT1stDay + 78) +#define ActCopAssPrj (ActChgCrsTT1stDay + 79) +#define ActPasAssPrj (ActChgCrsTT1stDay + 80) +#define ActRemTreAssPrj (ActChgCrsTT1stDay + 81) +#define ActFrmCreAssPrj (ActChgCrsTT1stDay + 82) +#define ActCreFolAssPrj (ActChgCrsTT1stDay + 83) +#define ActCreLnkAssPrj (ActChgCrsTT1stDay + 84) +#define ActRenFolAssPrj (ActChgCrsTT1stDay + 85) +#define ActRcvFilAssPrjDZ (ActChgCrsTT1stDay + 86) +#define ActRcvFilAssPrjCla (ActChgCrsTT1stDay + 87) +#define ActExpAssPrj (ActChgCrsTT1stDay + 88) +#define ActConAssPrj (ActChgCrsTT1stDay + 89) +#define ActZIPAssPrj (ActChgCrsTT1stDay + 90) +#define ActReqDatAssPrj (ActChgCrsTT1stDay + 91) +#define ActChgDatAssPrj (ActChgCrsTT1stDay + 92) +#define ActDowAssPrj (ActChgCrsTT1stDay + 93) -#define ActSeeTst (ActChgCrsTT1stDay + 90) -#define ActAssTst (ActChgCrsTT1stDay + 91) -#define ActEdiTstQst (ActChgCrsTT1stDay + 92) -#define ActEdiOneTstQst (ActChgCrsTT1stDay + 93) -#define ActReqImpTstQst (ActChgCrsTT1stDay + 94) -#define ActImpTstQst (ActChgCrsTT1stDay + 95) -#define ActLstTstQst (ActChgCrsTT1stDay + 96) -#define ActRcvTstQst (ActChgCrsTT1stDay + 97) -#define ActReqRemTstQst (ActChgCrsTT1stDay + 98) -#define ActRemTstQst (ActChgCrsTT1stDay + 99) -#define ActShfTstQst (ActChgCrsTT1stDay + 100) -#define ActCfgTst (ActChgCrsTT1stDay + 101) -#define ActEnableTag (ActChgCrsTT1stDay + 102) -#define ActDisableTag (ActChgCrsTT1stDay + 103) -#define ActRenTag (ActChgCrsTT1stDay + 104) -#define ActRcvCfgTst (ActChgCrsTT1stDay + 105) +#define ActSeeTst (ActChgCrsTT1stDay + 94) +#define ActAssTst (ActChgCrsTT1stDay + 95) +#define ActEdiTstQst (ActChgCrsTT1stDay + 96) +#define ActEdiOneTstQst (ActChgCrsTT1stDay + 97) +#define ActReqImpTstQst (ActChgCrsTT1stDay + 98) +#define ActImpTstQst (ActChgCrsTT1stDay + 99) +#define ActLstTstQst (ActChgCrsTT1stDay + 100) +#define ActRcvTstQst (ActChgCrsTT1stDay + 101) +#define ActReqRemTstQst (ActChgCrsTT1stDay + 102) +#define ActRemTstQst (ActChgCrsTT1stDay + 103) +#define ActShfTstQst (ActChgCrsTT1stDay + 104) +#define ActCfgTst (ActChgCrsTT1stDay + 105) +#define ActEnableTag (ActChgCrsTT1stDay + 106) +#define ActDisableTag (ActChgCrsTT1stDay + 107) +#define ActRenTag (ActChgCrsTT1stDay + 108) +#define ActRcvCfgTst (ActChgCrsTT1stDay + 109) -#define ActReqSeeMyTstRes (ActChgCrsTT1stDay + 106) -#define ActSeeMyTstRes (ActChgCrsTT1stDay + 107) -#define ActSeeOneTstResMe (ActChgCrsTT1stDay + 108) -#define ActReqSeeUsrTstRes (ActChgCrsTT1stDay + 109) -#define ActSeeUsrTstRes (ActChgCrsTT1stDay + 110) -#define ActSeeOneTstResOth (ActChgCrsTT1stDay + 111) +#define ActReqSeeMyTstRes (ActChgCrsTT1stDay + 110) +#define ActSeeMyTstRes (ActChgCrsTT1stDay + 111) +#define ActSeeOneTstResMe (ActChgCrsTT1stDay + 112) +#define ActReqSeeUsrTstRes (ActChgCrsTT1stDay + 113) +#define ActSeeUsrTstRes (ActChgCrsTT1stDay + 114) +#define ActSeeOneTstResOth (ActChgCrsTT1stDay + 115) -#define ActSeeOneGam (ActChgCrsTT1stDay + 112) -#define ActPlyGam (ActChgCrsTT1stDay + 113) -#define ActPlyGam1stQst (ActChgCrsTT1stDay + 114) -#define ActPlyGamNxtQst (ActChgCrsTT1stDay + 115) -#define ActPlyGamAns (ActChgCrsTT1stDay + 116) -#define ActAnsGam (ActChgCrsTT1stDay + 117) -#define ActFrmNewGam (ActChgCrsTT1stDay + 118) -#define ActEdiOneGam (ActChgCrsTT1stDay + 119) -#define ActNewGam (ActChgCrsTT1stDay + 120) -#define ActChgGam (ActChgCrsTT1stDay + 121) -#define ActReqRemGam (ActChgCrsTT1stDay + 122) -#define ActRemGam (ActChgCrsTT1stDay + 123) -#define ActReqRstGam (ActChgCrsTT1stDay + 124) -#define ActRstGam (ActChgCrsTT1stDay + 125) -#define ActHidGam (ActChgCrsTT1stDay + 126) -#define ActShoGam (ActChgCrsTT1stDay + 127) -#define ActAddOneGamQst (ActChgCrsTT1stDay + 128) -#define ActGamLstTstQst (ActChgCrsTT1stDay + 129) -#define ActAddTstQstToGam (ActChgCrsTT1stDay + 130) -#define ActReqRemGamQst (ActChgCrsTT1stDay + 131) -#define ActRemGamQst (ActChgCrsTT1stDay + 132) -#define ActUp_GamQst (ActChgCrsTT1stDay + 133) -#define ActDwnGamQst (ActChgCrsTT1stDay + 134) +#define ActSeeOneGam (ActChgCrsTT1stDay + 116) +#define ActPlyGam (ActChgCrsTT1stDay + 117) +#define ActPlyGam1stQst (ActChgCrsTT1stDay + 118) +#define ActPlyGamNxtQst (ActChgCrsTT1stDay + 119) +#define ActPlyGamAns (ActChgCrsTT1stDay + 120) +#define ActAnsGam (ActChgCrsTT1stDay + 121) +#define ActFrmNewGam (ActChgCrsTT1stDay + 122) +#define ActEdiOneGam (ActChgCrsTT1stDay + 123) +#define ActNewGam (ActChgCrsTT1stDay + 124) +#define ActChgGam (ActChgCrsTT1stDay + 125) +#define ActReqRemGam (ActChgCrsTT1stDay + 126) +#define ActRemGam (ActChgCrsTT1stDay + 127) +#define ActReqRstGam (ActChgCrsTT1stDay + 128) +#define ActRstGam (ActChgCrsTT1stDay + 129) +#define ActHidGam (ActChgCrsTT1stDay + 130) +#define ActShoGam (ActChgCrsTT1stDay + 131) +#define ActAddOneGamQst (ActChgCrsTT1stDay + 132) +#define ActGamLstTstQst (ActChgCrsTT1stDay + 133) +#define ActAddTstQstToGam (ActChgCrsTT1stDay + 134) +#define ActReqRemGamQst (ActChgCrsTT1stDay + 135) +#define ActRemGamQst (ActChgCrsTT1stDay + 136) +#define ActUp_GamQst (ActChgCrsTT1stDay + 137) +#define ActDwnGamQst (ActChgCrsTT1stDay + 138) -#define ActSeeOneSvy (ActChgCrsTT1stDay + 135) -#define ActAnsSvy (ActChgCrsTT1stDay + 136) -#define ActFrmNewSvy (ActChgCrsTT1stDay + 137) -#define ActEdiOneSvy (ActChgCrsTT1stDay + 138) -#define ActNewSvy (ActChgCrsTT1stDay + 139) -#define ActChgSvy (ActChgCrsTT1stDay + 140) -#define ActReqRemSvy (ActChgCrsTT1stDay + 141) -#define ActRemSvy (ActChgCrsTT1stDay + 142) -#define ActReqRstSvy (ActChgCrsTT1stDay + 143) -#define ActRstSvy (ActChgCrsTT1stDay + 144) -#define ActHidSvy (ActChgCrsTT1stDay + 145) -#define ActShoSvy (ActChgCrsTT1stDay + 146) -#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 147) -#define ActRcvSvyQst (ActChgCrsTT1stDay + 148) -#define ActReqRemSvyQst (ActChgCrsTT1stDay + 149) -#define ActRemSvyQst (ActChgCrsTT1stDay + 150) +#define ActSeeOneSvy (ActChgCrsTT1stDay + 139) +#define ActAnsSvy (ActChgCrsTT1stDay + 140) +#define ActFrmNewSvy (ActChgCrsTT1stDay + 141) +#define ActEdiOneSvy (ActChgCrsTT1stDay + 142) +#define ActNewSvy (ActChgCrsTT1stDay + 143) +#define ActChgSvy (ActChgCrsTT1stDay + 144) +#define ActReqRemSvy (ActChgCrsTT1stDay + 145) +#define ActRemSvy (ActChgCrsTT1stDay + 146) +#define ActReqRstSvy (ActChgCrsTT1stDay + 147) +#define ActRstSvy (ActChgCrsTT1stDay + 148) +#define ActHidSvy (ActChgCrsTT1stDay + 149) +#define ActShoSvy (ActChgCrsTT1stDay + 150) +#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 151) +#define ActRcvSvyQst (ActChgCrsTT1stDay + 152) +#define ActReqRemSvyQst (ActChgCrsTT1stDay + 153) +#define ActRemSvyQst (ActChgCrsTT1stDay + 154) -#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 151) -#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 152) -#define ActEdiExaAnn (ActChgCrsTT1stDay + 153) -#define ActRcvExaAnn (ActChgCrsTT1stDay + 154) -#define ActPrnExaAnn (ActChgCrsTT1stDay + 155) -#define ActReqRemExaAnn (ActChgCrsTT1stDay + 156) -#define ActRemExaAnn (ActChgCrsTT1stDay + 157) -#define ActHidExaAnn (ActChgCrsTT1stDay + 158) -#define ActShoExaAnn (ActChgCrsTT1stDay + 159) +#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 155) +#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 156) +#define ActEdiExaAnn (ActChgCrsTT1stDay + 157) +#define ActRcvExaAnn (ActChgCrsTT1stDay + 158) +#define ActPrnExaAnn (ActChgCrsTT1stDay + 159) +#define ActReqRemExaAnn (ActChgCrsTT1stDay + 160) +#define ActRemExaAnn (ActChgCrsTT1stDay + 161) +#define ActHidExaAnn (ActChgCrsTT1stDay + 162) +#define ActShoExaAnn (ActChgCrsTT1stDay + 163) /*****************************************************************************/ /******************************** Files tab **********************************/ diff --git a/swad_changelog.h b/swad_changelog.h index 683edbe21..7e3104f6a 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -431,9 +431,6 @@ Lo de mutear anuncios, en principio prefiero hacer una opci // TODO: Ver cómo recibir un fichero desde el cliente (SWADroid) en gsoap -// TODO: Pedro Villar Castro: -// Que haya una opción general que los bloquee todos y que los desbloquee todos - /*****************************************************************************/ /****************************** Public constants *****************************/ /*****************************************************************************/ @@ -453,10 +450,11 @@ En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 18.114.3 (2019-04-18)" +#define Log_PLATFORM_VERSION "SWAD 18.115 (2019-04-18)" #define CSS_FILE "swad18.112.1.css" #define JS_FILE "swad18.114.js" /* + Version 18.115: Apr 18, 2019 Contextual buttons to lock/unlock edition of all projects, suggested by Pedro Villar Castro. (243275 lines) Version 18.114.3: Apr 18, 2019 Locked edition of a project. (243025 lines) Version 18.114.2: Apr 18, 2019 Icons to inform about locked/unlocked project edition. (243023 lines) Version 18.114.1: Apr 18, 2019 Changes in translation of title related to project locking/unlocking. (243024 lines) diff --git a/swad_project.c b/swad_project.c index aa1eaa4a2..c22702ba2 100644 --- a/swad_project.c +++ b/swad_project.c @@ -140,6 +140,8 @@ static void Prj_PutIconsListProjects (void); static void Prj_PutIconToCreateNewPrj (void); static void Prj_PutButtonToCreateNewPrj (void); static void Prj_PutIconToShowAllData (void); +static void Prj_PutIconsToLockUnlockAllProjects (void); + static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj, Prj_ProjectView_t ProjectView); static void Prj_PutIconToToggleProject (unsigned UniqueId, @@ -185,12 +187,15 @@ static void Prj_PutFormsToRemEditOnePrj (const struct Project *Prj, bool ICanViewProjectFiles); static bool Prj_CheckIfICanEditProject (const struct Project *Prj); -static bool Prj_CheckIfICanLockProject (void); +static bool Prj_CheckIfICanLockProjects (void); static void Prj_FormLockUnlock (const struct Project *Prj); static void Prj_PutIconOffLockedUnlocked (const struct Project *Prj); static void Prj_ResetProject (struct Project *Prj); +static void Prj_LockProjectEditionInDB (long PrjCod); +static void Prj_UnlockProjectEditionInDB (long PrjCod); + static void Prj_RequestCreatOrEditPrj (long PrjCod); static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject); static void Prj_EditOneProjectTxtArea (const char *Id, @@ -255,6 +260,9 @@ void Prj_ShowTableAllProjects (void) } else // No projects created Ale_ShowAlert (Ale_INFO,Txt_No_projects); + + /***** Free list of projects *****/ + Prj_FreeListProjects (); } /*****************************************************************************/ @@ -812,8 +820,15 @@ static void Prj_PutIconsListProjects (void) if (Prj_CheckIfICanCreateProjects ()) Prj_PutIconToCreateNewPrj (); - /***** Put icon to show all data in a table *****/ - Prj_PutIconToShowAllData (); + if (Gbl.Prjs.Num) + { + /***** Put icon to show all data in a table *****/ + Prj_PutIconToShowAllData (); + + /***** Put icons to lock/unlock edition of all projects *****/ + if (Prj_CheckIfICanLockProjects ()) + Prj_PutIconsToLockUnlockAllProjects (); + } /***** Put icon to show a figure *****/ Gbl.Figures.FigureType = Fig_PROJECTS; @@ -862,6 +877,26 @@ static void Prj_PutIconToShowAllData (void) Txt_Show_all_data_in_a_table); } +/*****************************************************************************/ +/****** Put icons to request locking/unlocking edition of all projects *******/ +/*****************************************************************************/ + +static void Prj_PutIconsToLockUnlockAllProjects (void) + { + extern const char *Txt_Lock_editing; + extern const char *Txt_Unlock_editing; + + /***** Put icon to lock all projects *****/ + Lay_PutContextualLinkOnlyIcon (ActReqLckAllPrj,NULL,Prj_PutCurrentParams, + "lock.svg", + Txt_Lock_editing); + + /***** Put icon to unlock all projects *****/ + Lay_PutContextualLinkOnlyIcon (ActReqUnlAllPrj,NULL,Prj_PutCurrentParams, + "unlock.svg", + Txt_Unlock_editing); + } + /*****************************************************************************/ /***************** View / edit file browser of one project *******************/ /*****************************************************************************/ @@ -2235,7 +2270,7 @@ static void Prj_PutFormsToRemEditOnePrj (const struct Project *Prj, Ico_PutContextualIconToPrint (ActPrnOnePrj,Prj_PutCurrentParams); /***** Locked/unlocked project edition *****/ - if (Prj_CheckIfICanLockProject ()) + if (Prj_CheckIfICanLockProjects ()) { /* Put form to lock/unlock project edition */ fprintf (Gbl.F.Out,"
",Prj->PrjCod); @@ -2288,10 +2323,10 @@ static bool Prj_CheckIfICanEditProject (const struct Project *Prj) } /*****************************************************************************/ -/************************ Can I block a given project? ***********************/ +/********************* Can I lock/unlock project edition? ********************/ /*****************************************************************************/ -static bool Prj_CheckIfICanLockProject (void) +static bool Prj_CheckIfICanLockProjects (void) { switch (Gbl.Usrs.Me.Role.Logged) { @@ -2972,10 +3007,7 @@ void Prj_LockProjectEdition (void) if (Prj_CheckIfICanEditProject (&Prj)) { /***** Lock project edition *****/ - DB_QueryUPDATE ("can not lock project edition", - "UPDATE projects SET Locked='Y'" - " WHERE PrjCod=%ld AND CrsCod=%ld", - Prj.PrjCod,Gbl.Hierarchy.Crs.CrsCod); + Prj_LockProjectEditionInDB (Prj.PrjCod); Prj.Locked = Prj_LOCKED; /***** Show updated form and icon *****/ @@ -2991,6 +3023,14 @@ void Prj_LockProjectEdition (void) Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true; } +static void Prj_LockProjectEditionInDB (long PrjCod) + { + DB_QueryUPDATE ("can not lock project edition", + "UPDATE projects SET Locked='Y'" + " WHERE PrjCod=%ld AND CrsCod=%ld", + PrjCod,Gbl.Hierarchy.Crs.CrsCod); + } + /*****************************************************************************/ /************************* Unlock edition of a project ***********************/ /*****************************************************************************/ @@ -3013,10 +3053,7 @@ void Prj_UnlockProjectEdition (void) if (Prj_CheckIfICanEditProject (&Prj)) { /***** Unlock project edition *****/ - DB_QueryUPDATE ("can not unlock project edition", - "UPDATE projects SET Locked='N'" - " WHERE PrjCod=%ld AND CrsCod=%ld", - Prj.PrjCod,Gbl.Hierarchy.Crs.CrsCod); + Prj_UnlockProjectEditionInDB (Prj.PrjCod); Prj.Locked = Prj_UNLOCKED; /***** Show updated form and icon *****/ @@ -3032,6 +3069,156 @@ void Prj_UnlockProjectEdition (void) Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true; } +static void Prj_UnlockProjectEditionInDB (long PrjCod) + { + DB_QueryUPDATE ("can not lock project edition", + "UPDATE projects SET Locked='N'" + " WHERE PrjCod=%ld AND CrsCod=%ld", + PrjCod,Gbl.Hierarchy.Crs.CrsCod); + } + +/*****************************************************************************/ +/************ Request locking/unlocking edition of all projects **************/ +/*****************************************************************************/ + +void Prj_ReqLockAllProjectsEdition (void) + { + extern const char *Txt_Lock_editing; + extern const char *Txt_Do_you_want_to_lock_the_editing_of_the_X_selected_projects; + extern const char *Txt_No_projects; + + /***** Get parameters *****/ + Prj_GetParams (); + + /***** Show question and button to lock all selected projects *****/ + if (Prj_CheckIfICanLockProjects ()) + { + /* Get list of projects */ + Prj_GetListProjects (); + + /* Show question and button */ + if (Gbl.Prjs.Num) + Ale_ShowAlertAndButton (ActLckAllPrj,NULL,NULL,Prj_PutCurrentParams, + Btn_REMOVE_BUTTON,Txt_Lock_editing, + Ale_QUESTION,Txt_Do_you_want_to_lock_the_editing_of_the_X_selected_projects, + Gbl.Prjs.Num); + else // No projects found + Ale_ShowAlert (Ale_INFO,Txt_No_projects); + + /* Free list of projects */ + Prj_FreeListProjects (); + } + else + Lay_NoPermissionExit (); + + /***** Show projects again *****/ + Prj_ShowProjectsInCurrentPage (); + } + +void Prj_ReqUnlockAllProjectsEdition (void) + { + extern const char *Txt_Unlock_editing; + extern const char *Txt_Do_you_want_to_unlock_the_editing_of_the_X_selected_projects; + extern const char *Txt_No_projects; + + /***** Get parameters *****/ + Prj_GetParams (); + + /***** Show question and button to unlock all selected projects *****/ + if (Prj_CheckIfICanLockProjects ()) + { + /* Get list of projects */ + Prj_GetListProjects (); + + /* Show question and button */ + if (Gbl.Prjs.Num) + Ale_ShowAlertAndButton (ActUnlAllPrj,NULL,NULL,Prj_PutCurrentParams, + Btn_CREATE_BUTTON,Txt_Unlock_editing, + Ale_QUESTION,Txt_Do_you_want_to_unlock_the_editing_of_the_X_selected_projects, + Gbl.Prjs.Num); + else // No projects found + Ale_ShowAlert (Ale_INFO,Txt_No_projects); + + /* Free list of projects */ + Prj_FreeListProjects (); + } + else + Lay_NoPermissionExit (); + + /***** Show projects again *****/ + Prj_ShowProjectsInCurrentPage (); + } + +/*****************************************************************************/ +/******************* Lock/unlock edition of all projects *********************/ +/*****************************************************************************/ + +void Prj_LockAllProjectsEdition (void) + { + extern const char *Txt_No_projects; + unsigned NumPrj; + + /***** Get parameters *****/ + Prj_GetParams (); + + /***** Lock all selected projects *****/ + if (Prj_CheckIfICanLockProjects ()) + { + /* Get list of projects */ + Prj_GetListProjects (); + + /* Lock projects */ + if (Gbl.Prjs.Num) + for (NumPrj = 0; + NumPrj < Gbl.Prjs.Num; + NumPrj++) + Prj_LockProjectEditionInDB (Gbl.Prjs.LstPrjCods[NumPrj]); + else // No projects found + Ale_ShowAlert (Ale_INFO,Txt_No_projects); + + /* Free list of projects */ + Prj_FreeListProjects (); + } + else + Lay_NoPermissionExit (); + + /***** Show projects again *****/ + Prj_ShowProjectsInCurrentPage (); + } + +void Prj_UnlockAllProjectsEdition (void) + { + extern const char *Txt_No_projects; + unsigned NumPrj; + + /***** Get parameters *****/ + Prj_GetParams (); + + /***** Unlock all selected projects *****/ + if (Prj_CheckIfICanLockProjects ()) + { + /* Get list of projects */ + Prj_GetListProjects (); + + /* Unlock projects */ + if (Gbl.Prjs.Num) + for (NumPrj = 0; + NumPrj < Gbl.Prjs.Num; + NumPrj++) + Prj_UnlockProjectEditionInDB (Gbl.Prjs.LstPrjCods[NumPrj]); + else // No projects found + Ale_ShowAlert (Ale_INFO,Txt_No_projects); + + /* Free list of projects */ + Prj_FreeListProjects (); + } + else + Lay_NoPermissionExit (); + + /***** Show projects again *****/ + Prj_ShowProjectsInCurrentPage (); + } + /*****************************************************************************/ /********************* Put a form to create/edit project *********************/ /*****************************************************************************/ diff --git a/swad_project.h b/swad_project.h index d1bef42ce..6a1d71677 100644 --- a/swad_project.h +++ b/swad_project.h @@ -202,6 +202,12 @@ void Prj_HideProject (void); void Prj_ShowProject (void); void Prj_LockProjectEdition (void); void Prj_UnlockProjectEdition (void); + +void Prj_ReqLockAllProjectsEdition (void); +void Prj_ReqUnlockAllProjectsEdition (void); +void Prj_LockAllProjectsEdition (void); +void Prj_UnlockAllProjectsEdition (void); + void Prj_RecFormProject (void); void Prj_RemoveCrsProjects (long CrsCod); diff --git a/swad_text.c b/swad_text.c index 90d03ae21..e88e5e77c 100644 --- a/swad_text.c +++ b/swad_text.c @@ -17624,6 +17624,90 @@ const char *Txt_LOCKED_UNLOCKED[Prj_NUM_LOCKED_UNLOCKED] = #endif }; +const char *Txt_Lock_editing = +#if L==1 // ca + "Bloquejar edició"; +#elif L==2 // de + "Bearbeitung sperren"; +#elif L==3 // en + "Lock editing"; +#elif L==4 // es + "Bloquear edición"; +#elif L==5 // fr + "Verrouiller l'édition"; +#elif L==6 // gn + "Bloquear edición"; // Okoteve traducción +#elif L==7 // it + "Blocca la modifica"; +#elif L==8 // pl + "Zablokuj edycję"; +#elif L==9 // pt + "Bloquear edição"; +#endif + +const char *Txt_Unlock_editing = +#if L==1 // ca + "Desbloquejar edició"; +#elif L==2 // de + "Bearbeitung freischalten"; +#elif L==3 // en + "Unlock editing"; +#elif L==4 // es + "Desbloquear edición"; +#elif L==5 // fr + "Déverrouiller l'édition"; +#elif L==6 // gn + "Desbloquear edición"; // Okoteve traducción +#elif L==7 // it + "Sblocca la modifica"; +#elif L==8 // pl + "Odblokuj edycję"; +#elif L==9 // pt + "Desbloquear edição"; +#endif + +const char *Txt_Do_you_want_to_lock_the_editing_of_the_X_selected_projects = // Warning: it is very important to include %u in the following sentences +#if L==1 // ca + "Voleu bloquejar l'edición dels %u projectes seleccionats?"; +#elif L==2 // de + "Möchten Sie die Bearbeitung der ausgewählten %u-Projekte sperren?"; +#elif L==3 // en + "Do you want to lock the editing of the %u selected projects?"; +#elif L==4 // es + "¿Desea bloquear la edición de los %u proyectos seleccionados?"; +#elif L==5 // fr + "Voulez-vous verrouiller l'édition des %u projets sélectionnés?"; +#elif L==6 // gn + "¿Desea bloquear la edición de los %u proyectos seleccionados?"; // Okoteve traducción +#elif L==7 // it + "Vuoi bloccare la modifica dei %u progetti selezionati?"; +#elif L==8 // pl + "Czy chcesz zablokować edycję %u wybranych projektów?"; +#elif L==9 // pt + "Você quer bloquear a edição dos %u projetos selecionados?"; +#endif + +const char *Txt_Do_you_want_to_unlock_the_editing_of_the_X_selected_projects = // Warning: it is very important to include %u in the following sentences +#if L==1 // ca + "Voleu desbloquejar l'edició dels %u projectes seleccionats?"; +#elif L==2 // de + "Möchten Sie die Bearbeitung der ausgewählten %u-Projekte freischalten?"; +#elif L==3 // en + "Do you want to unlock the editing of the %u selected projects?"; +#elif L==4 // es + "¿Desea desbloquear la edición de los %u proyectos seleccionados?"; +#elif L==5 // fr + "Voulez-vous déverrouiller l'édition des %u projets sélectionnés?"; +#elif L==6 // gn + "¿Desea desbloquear la edición de los %u proyectos seleccionados?"; // Okoteve traducción +#elif L==7 // it + "Vuoi sbloccare la modifica dei %u progetti selezionati?"; +#elif L==8 // pl + "Czy chcesz odblokować edycję %u wybranych projektów?"; +#elif L==9 // pt + "Você quer desbloquear a edição dos %u projetos selecionados?"; +#endif + const char *Txt_LOG_More_info = #if L==1 // ca "Observaciones"; // Necessita traduccio