Version 17.22

This commit is contained in:
Antonio Cañas Vargas 2017-10-08 16:12:58 +02:00
parent 23e78e9294
commit 468a8d1c30
12 changed files with 653 additions and 192 deletions

View File

@ -477,24 +477,44 @@ Assessment:
337. ActRemEvaPrj Remove an emulator from a project 337. ActRemEvaPrj Remove an emulator from a project
NEW. ActAdmDocPrj Admin. project documents NEW. ActAdmDocPrj Admin. project documents
NEW. ActReqRemFilBrf Request removal of a file from project documents NEW. ActReqRemFilDocPrj Request removal of a file from project documents
NEW. ActRemFilBrf Remove a file from project documents NEW. ActRemFilDocPrj Remove a file from project documents
NEW. ActRemFolBrf Remove an empty folder from project documents NEW. ActRemFolDocPrj Remove an empty folder from project documents
NEW. ActCopBrf Set source of copy in project documents NEW. ActCopDocPrj Set source of copy in project documents
NEW. ActPasBrf Paste a folder or file into project documents NEW. ActPasDocPrj Paste a folder or file into project documents
NEW. ActRemTreBrf Remove a non empty folder from project documents NEW. ActRemTreDocPrj Remove a non empty folder from project documents
NEW. ActFrmCreBrf Form to create a folder or file in project documents NEW. ActFrmCreDocPrj Form to create a folder or file in project documents
NEW. ActCreFolBrf Create a new folder in project documents NEW. ActCreFolDocPrj Create a new folder in project documents
NEW. ActCreLnkBrf Create a new link in project documents NEW. ActCreLnkDocPrj Create a new link in project documents
NEW. ActRenFolBrf Rename a folder in project documents NEW. ActRenFolDocPrj Rename a folder in project documents
NEW. ActRcvFilBrfDZ Receive a file in project documents using Dropzone.js NEW. ActRcvFilDocPrjDZ Receive a file in project documents using Dropzone.js
NEW. ActRcvFilBrfCla Receive a file in project documents using the classic way NEW. ActRcvFilDocPrjCla Receive a file in project documents using the classic way
NEW. ActExpBrf Expand a folder in project documents NEW. ActExpDocPrj Expand a folder in project documents
NEW. ActConBrf Contract a folder in project documents NEW. ActConDocPrj Contract a folder in project documents
NEW. ActZIPBrf Compress a folder in project documents NEW. ActZIPDocPrj Compress a folder in project documents
NEW. ActReqDatBrf Ask for metadata of a file in project documents NEW. ActReqDatDocPrj Ask for metadata of a file in project documents
NEW. ActChgDatBrf Change metadata of a file in project documents NEW. ActChgDatDocPrj Change metadata of a file in project documents
NEW. ActDowBrf Download a file from project documents NEW. ActDowDocPrj Download a file from project documents
NEW. ActAdmAssPrj Admin. project assessment
NEW. ActReqRemFilAssPrj Request removal of a file from project assessment
NEW. ActRemFilAssPrj Remove a file from project assessment
NEW. ActRemFolAssPrj Remove an empty folder from project assessment
NEW. ActCopAssPrj Set source of copy in project assessment
NEW. ActPasAssPrj Paste a folder or file into project assessment
NEW. ActRemTreAssPrj Remove a non empty folder from project assessment
NEW. ActFrmCreAssPrj Form to create a folder or file in project assessment
NEW. ActCreFolAssPrj Create a new folder in project assessment
NEW. ActCreLnkAssPrj Create a new link in project assessment
NEW. ActRenFolAssPrj Rename a folder in project assessment
NEW. ActRcvFilAssPrjDZ Receive a file in project assessment using Dropzone.js
NEW. ActRcvFilAssPrjCla Receive a file in project assessment using the classic way
NEW. ActExpAssPrj Expand a folder in project assessment
NEW. ActConAssPrj Contract a folder in project assessment
NEW. ActZIPAssPrj Compress a folder in project assessment
NEW. ActReqDatAssPrj Ask for metadata of a file in project assessment
NEW. ActChgDatAssPrj Change metadata of a file in project assessment
NEW. ActDowAssPrj Download a file from project assessment
338. ActSeeTst Show the seft-assessment test 338. ActSeeTst Show the seft-assessment test
339. ActAssTst Assess a self-assessment test 339. ActAssTst Assess a self-assessment test
@ -2019,6 +2039,26 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActChgDatDocPrj */{1714,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ChgFileMetadata ,NULL}, /* ActChgDatDocPrj */{1714,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ChgFileMetadata ,NULL},
/* ActDowDocPrj */{1715,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_DOWNLD_FILE,Brw_DownloadFile ,NULL ,NULL}, /* ActDowDocPrj */{1715,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_DOWNLD_FILE,Brw_DownloadFile ,NULL ,NULL},
/* ActAdmAssPrj */{1716,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ShowFileBrowserOrWorks ,NULL},
/* ActReqRemFilAssPrj*/{1717,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_AskRemFileFromTree ,NULL},
/* ActRemFilAssPrj */{1718,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_RemFileFromTree ,NULL},
/* ActRemFolAssPrj */{1719,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_RemFolderFromTree ,NULL},
/* ActCopAssPrj */{1720,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_CopyFromFileBrowser ,NULL},
/* ActPasAssPrj */{1721,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_PasteIntoFileBrowser ,NULL},
/* ActRemTreAssPrj */{1722,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_RemSubtreeInFileBrowser ,NULL},
/* ActFrmCreAssPrj */{1723,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ShowFormFileBrowser ,NULL},
/* ActCreFolAssPrj */{1724,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_RecFolderFileBrowser ,NULL},
/* ActCreLnkAssPrj */{1725,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_RecLinkFileBrowser ,NULL},
/* ActRenFolAssPrj */{1726,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_RenFolderFileBrowser ,NULL},
/* ActRcvFilAssPrjDZ */{1727,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_UPLOAD_FILE,Brw_RcvFileInFileBrwDropzone ,NULL ,NULL},
/* ActRcvFilAssPrjCla*/{1728,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic ,NULL},
/* ActExpAssPrj */{1729,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NO_CONT,Brw_ExpandFileTree ,NULL ,NULL},
/* ActConAssPrj */{1730,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NO_CONT,Brw_ContractFileTree ,NULL ,NULL},
/* ActZIPAssPrj */{1731,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ZIP_CompressFileTree ,NULL},
/* ActReqDatAssPrj */{1732,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ShowFileMetadata ,NULL},
/* ActChgDatAssPrj */{1733,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ChgFileMetadata ,NULL},
/* ActDowAssPrj */{1734,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_DOWNLD_FILE,Brw_DownloadFile ,NULL ,NULL},
/* ActSeeTst */{ 29,-1,TabUnk,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ShowNewTest ,NULL}, /* ActSeeTst */{ 29,-1,TabUnk,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ShowNewTest ,NULL},
/* ActAssTst */{ 98,-1,TabUnk,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_AssessTest ,NULL}, /* ActAssTst */{ 98,-1,TabUnk,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_AssessTest ,NULL},
@ -4860,6 +4900,25 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActReqDatDocPrj, // #1713 ActReqDatDocPrj, // #1713
ActChgDatDocPrj, // #1714 ActChgDatDocPrj, // #1714
ActDowDocPrj, // #1715 ActDowDocPrj, // #1715
ActAdmAssPrj, // #1716
ActReqRemFilAssPrj, // #1717
ActRemFilAssPrj, // #1718
ActRemFolAssPrj, // #1719
ActCopAssPrj, // #1720
ActPasAssPrj, // #1721
ActRemTreAssPrj, // #1722
ActFrmCreAssPrj, // #1723
ActCreFolAssPrj, // #1724
ActCreLnkAssPrj, // #1725
ActRenFolAssPrj, // #1726
ActRcvFilAssPrjDZ, // #1727
ActRcvFilAssPrjCla, // #1728
ActExpAssPrj, // #1729
ActConAssPrj, // #1730
ActZIPAssPrj, // #1731
ActReqDatAssPrj, // #1732
ActChgDatAssPrj, // #1733
ActDowAssPrj, // #1734
}; };
/*****************************************************************************/ /*****************************************************************************/

View File

@ -59,9 +59,9 @@ typedef enum
typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
#define Act_NUM_ACTIONS (1 + 9 + 43 + 17 + 47 + 33 + 24 + 115 + 138 + 437 + 165 + 172 + 42 + 14 + 76) #define Act_NUM_ACTIONS (1 + 9 + 43 + 17 + 47 + 33 + 24 + 115 + 157 + 437 + 165 + 172 + 42 + 14 + 76)
#define Act_MAX_ACTION_COD 1715 #define Act_MAX_ACTION_COD 1734
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13
@ -507,80 +507,100 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActChgDatDocPrj (ActChgCalCrs1stDay + 67) #define ActChgDatDocPrj (ActChgCalCrs1stDay + 67)
#define ActDowDocPrj (ActChgCalCrs1stDay + 68) #define ActDowDocPrj (ActChgCalCrs1stDay + 68)
#define ActSeeTst (ActChgCalCrs1stDay + 69) #define ActAdmAssPrj (ActChgCalCrs1stDay + 69)
#define ActAssTst (ActChgCalCrs1stDay + 70) #define ActReqRemFilAssPrj (ActChgCalCrs1stDay + 70)
#define ActEdiTstQst (ActChgCalCrs1stDay + 71) #define ActRemFilAssPrj (ActChgCalCrs1stDay + 71)
#define ActEdiOneTstQst (ActChgCalCrs1stDay + 72) #define ActRemFolAssPrj (ActChgCalCrs1stDay + 72)
#define ActReqImpTstQst (ActChgCalCrs1stDay + 73) #define ActCopAssPrj (ActChgCalCrs1stDay + 73)
#define ActImpTstQst (ActChgCalCrs1stDay + 74) #define ActPasAssPrj (ActChgCalCrs1stDay + 74)
#define ActLstTstQst (ActChgCalCrs1stDay + 75) #define ActRemTreAssPrj (ActChgCalCrs1stDay + 75)
#define ActRcvTstQst (ActChgCalCrs1stDay + 76) #define ActFrmCreAssPrj (ActChgCalCrs1stDay + 76)
#define ActReqRemTstQst (ActChgCalCrs1stDay + 77) #define ActCreFolAssPrj (ActChgCalCrs1stDay + 77)
#define ActRemTstQst (ActChgCalCrs1stDay + 78) #define ActCreLnkAssPrj (ActChgCalCrs1stDay + 78)
#define ActShfTstQst (ActChgCalCrs1stDay + 79) #define ActRenFolAssPrj (ActChgCalCrs1stDay + 79)
#define ActCfgTst (ActChgCalCrs1stDay + 80) #define ActRcvFilAssPrjDZ (ActChgCalCrs1stDay + 80)
#define ActEnableTag (ActChgCalCrs1stDay + 81) #define ActRcvFilAssPrjCla (ActChgCalCrs1stDay + 81)
#define ActDisableTag (ActChgCalCrs1stDay + 82) #define ActExpAssPrj (ActChgCalCrs1stDay + 82)
#define ActRenTag (ActChgCalCrs1stDay + 83) #define ActConAssPrj (ActChgCalCrs1stDay + 83)
#define ActRcvCfgTst (ActChgCalCrs1stDay + 84) #define ActZIPAssPrj (ActChgCalCrs1stDay + 84)
#define ActReqDatAssPrj (ActChgCalCrs1stDay + 85)
#define ActChgDatAssPrj (ActChgCalCrs1stDay + 86)
#define ActDowAssPrj (ActChgCalCrs1stDay + 87)
#define ActReqSeeMyTstRes (ActChgCalCrs1stDay + 85) #define ActSeeTst (ActChgCalCrs1stDay + 88)
#define ActSeeMyTstRes (ActChgCalCrs1stDay + 86) #define ActAssTst (ActChgCalCrs1stDay + 89)
#define ActSeeOneTstResMe (ActChgCalCrs1stDay + 87) #define ActEdiTstQst (ActChgCalCrs1stDay + 90)
#define ActReqSeeUsrTstRes (ActChgCalCrs1stDay + 88) #define ActEdiOneTstQst (ActChgCalCrs1stDay + 91)
#define ActSeeUsrTstRes (ActChgCalCrs1stDay + 89) #define ActReqImpTstQst (ActChgCalCrs1stDay + 92)
#define ActSeeOneTstResOth (ActChgCalCrs1stDay + 90) #define ActImpTstQst (ActChgCalCrs1stDay + 93)
#define ActLstTstQst (ActChgCalCrs1stDay + 94)
#define ActRcvTstQst (ActChgCalCrs1stDay + 95)
#define ActReqRemTstQst (ActChgCalCrs1stDay + 96)
#define ActRemTstQst (ActChgCalCrs1stDay + 97)
#define ActShfTstQst (ActChgCalCrs1stDay + 98)
#define ActCfgTst (ActChgCalCrs1stDay + 99)
#define ActEnableTag (ActChgCalCrs1stDay + 100)
#define ActDisableTag (ActChgCalCrs1stDay + 101)
#define ActRenTag (ActChgCalCrs1stDay + 102)
#define ActRcvCfgTst (ActChgCalCrs1stDay + 103)
#define ActSeeOneGam (ActChgCalCrs1stDay + 91) #define ActReqSeeMyTstRes (ActChgCalCrs1stDay + 104)
#define ActPlyGam (ActChgCalCrs1stDay + 92) #define ActSeeMyTstRes (ActChgCalCrs1stDay + 105)
#define ActPlyGam1stQst (ActChgCalCrs1stDay + 93) #define ActSeeOneTstResMe (ActChgCalCrs1stDay + 106)
#define ActPlyGamNxtQst (ActChgCalCrs1stDay + 94) #define ActReqSeeUsrTstRes (ActChgCalCrs1stDay + 107)
#define ActPlyGamAns (ActChgCalCrs1stDay + 95) #define ActSeeUsrTstRes (ActChgCalCrs1stDay + 108)
#define ActAnsGam (ActChgCalCrs1stDay + 96) #define ActSeeOneTstResOth (ActChgCalCrs1stDay + 109)
#define ActFrmNewGam (ActChgCalCrs1stDay + 97)
#define ActEdiOneGam (ActChgCalCrs1stDay + 98)
#define ActNewGam (ActChgCalCrs1stDay + 99)
#define ActChgGam (ActChgCalCrs1stDay + 100)
#define ActReqRemGam (ActChgCalCrs1stDay + 101)
#define ActRemGam (ActChgCalCrs1stDay + 102)
#define ActReqRstGam (ActChgCalCrs1stDay + 103)
#define ActRstGam (ActChgCalCrs1stDay + 104)
#define ActHidGam (ActChgCalCrs1stDay + 105)
#define ActShoGam (ActChgCalCrs1stDay + 106)
#define ActAddOneGamQst (ActChgCalCrs1stDay + 107)
#define ActGamLstTstQst (ActChgCalCrs1stDay + 108)
#define ActAddTstQstToGam (ActChgCalCrs1stDay + 109)
#define ActReqRemGamQst (ActChgCalCrs1stDay + 100)
#define ActRemGamQst (ActChgCalCrs1stDay + 111)
#define ActUp_GamQst (ActChgCalCrs1stDay + 112)
#define ActDwnGamQst (ActChgCalCrs1stDay + 113)
#define ActSeeOneSvy (ActChgCalCrs1stDay + 114) #define ActSeeOneGam (ActChgCalCrs1stDay + 110)
#define ActAnsSvy (ActChgCalCrs1stDay + 115) #define ActPlyGam (ActChgCalCrs1stDay + 111)
#define ActFrmNewSvy (ActChgCalCrs1stDay + 116) #define ActPlyGam1stQst (ActChgCalCrs1stDay + 112)
#define ActEdiOneSvy (ActChgCalCrs1stDay + 117) #define ActPlyGamNxtQst (ActChgCalCrs1stDay + 113)
#define ActNewSvy (ActChgCalCrs1stDay + 118) #define ActPlyGamAns (ActChgCalCrs1stDay + 114)
#define ActChgSvy (ActChgCalCrs1stDay + 119) #define ActAnsGam (ActChgCalCrs1stDay + 115)
#define ActReqRemSvy (ActChgCalCrs1stDay + 120) #define ActFrmNewGam (ActChgCalCrs1stDay + 116)
#define ActRemSvy (ActChgCalCrs1stDay + 121) #define ActEdiOneGam (ActChgCalCrs1stDay + 117)
#define ActReqRstSvy (ActChgCalCrs1stDay + 122) #define ActNewGam (ActChgCalCrs1stDay + 118)
#define ActRstSvy (ActChgCalCrs1stDay + 123) #define ActChgGam (ActChgCalCrs1stDay + 119)
#define ActHidSvy (ActChgCalCrs1stDay + 124) #define ActReqRemGam (ActChgCalCrs1stDay + 120)
#define ActShoSvy (ActChgCalCrs1stDay + 125) #define ActRemGam (ActChgCalCrs1stDay + 121)
#define ActEdiOneSvyQst (ActChgCalCrs1stDay + 126) #define ActReqRstGam (ActChgCalCrs1stDay + 122)
#define ActRcvSvyQst (ActChgCalCrs1stDay + 127) #define ActRstGam (ActChgCalCrs1stDay + 123)
#define ActReqRemSvyQst (ActChgCalCrs1stDay + 128) #define ActHidGam (ActChgCalCrs1stDay + 124)
#define ActRemSvyQst (ActChgCalCrs1stDay + 129) #define ActShoGam (ActChgCalCrs1stDay + 125)
#define ActAddOneGamQst (ActChgCalCrs1stDay + 126)
#define ActGamLstTstQst (ActChgCalCrs1stDay + 127)
#define ActAddTstQstToGam (ActChgCalCrs1stDay + 128)
#define ActReqRemGamQst (ActChgCalCrs1stDay + 129)
#define ActRemGamQst (ActChgCalCrs1stDay + 130)
#define ActUp_GamQst (ActChgCalCrs1stDay + 131)
#define ActDwnGamQst (ActChgCalCrs1stDay + 132)
#define ActSeeOneExaAnn (ActChgCalCrs1stDay + 130) #define ActSeeOneSvy (ActChgCalCrs1stDay + 133)
#define ActSeeDatExaAnn (ActChgCalCrs1stDay + 131) #define ActAnsSvy (ActChgCalCrs1stDay + 134)
#define ActEdiExaAnn (ActChgCalCrs1stDay + 132) #define ActFrmNewSvy (ActChgCalCrs1stDay + 135)
#define ActRcvExaAnn (ActChgCalCrs1stDay + 133) #define ActEdiOneSvy (ActChgCalCrs1stDay + 136)
#define ActPrnExaAnn (ActChgCalCrs1stDay + 134) #define ActNewSvy (ActChgCalCrs1stDay + 137)
#define ActReqRemExaAnn (ActChgCalCrs1stDay + 135) #define ActChgSvy (ActChgCalCrs1stDay + 138)
#define ActRemExaAnn (ActChgCalCrs1stDay + 136) #define ActReqRemSvy (ActChgCalCrs1stDay + 139)
#define ActHidExaAnn (ActChgCalCrs1stDay + 137) #define ActRemSvy (ActChgCalCrs1stDay + 140)
#define ActShoExaAnn (ActChgCalCrs1stDay + 138) #define ActReqRstSvy (ActChgCalCrs1stDay + 141)
#define ActRstSvy (ActChgCalCrs1stDay + 142)
#define ActHidSvy (ActChgCalCrs1stDay + 143)
#define ActShoSvy (ActChgCalCrs1stDay + 144)
#define ActEdiOneSvyQst (ActChgCalCrs1stDay + 145)
#define ActRcvSvyQst (ActChgCalCrs1stDay + 146)
#define ActReqRemSvyQst (ActChgCalCrs1stDay + 147)
#define ActRemSvyQst (ActChgCalCrs1stDay + 148)
#define ActSeeOneExaAnn (ActChgCalCrs1stDay + 149)
#define ActSeeDatExaAnn (ActChgCalCrs1stDay + 150)
#define ActEdiExaAnn (ActChgCalCrs1stDay + 151)
#define ActRcvExaAnn (ActChgCalCrs1stDay + 152)
#define ActPrnExaAnn (ActChgCalCrs1stDay + 153)
#define ActReqRemExaAnn (ActChgCalCrs1stDay + 154)
#define ActRemExaAnn (ActChgCalCrs1stDay + 155)
#define ActHidExaAnn (ActChgCalCrs1stDay + 156)
#define ActShoExaAnn (ActChgCalCrs1stDay + 157)
/*****************************************************************************/ /*****************************************************************************/
/******************************** Files tab **********************************/ /******************************** Files tab **********************************/

View File

@ -256,13 +256,35 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 17.21.6 (2017-10-08)" #define Log_PLATFORM_VERSION "SWAD 17.22 (2017-10-08)"
#define CSS_FILE "swad17.0.css" #define CSS_FILE "swad17.0.css"
#define JS_FILE "swad17.17.1.js" #define JS_FILE "swad17.17.1.js"
// Number of lines (includes comments but not blank lines) has been got with the following command: // Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
/* /*
Version 17.22: Oct 08, 2017 New file browser for project assessment. (233755 lines)
19 changes necessary in database:
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1716','es','N','Editar eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1717','es','N','Subir archivo a eval. proyecto (ant.)');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1718','es','N','Eliminar archivo eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1719','es','N','Crear carpeta en eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1720','es','N','Eliminar carpeta eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1721','es','N','Renombrar carpeta en eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1722','es','N','Eliminar árbol eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1723','es','N','Solicitar elim. arch. eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1724','es','N','Copiar de eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1725','es','N','Pegar en eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1726','es','N','Expandir carpeta eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1727','es','N','Contraer carpeta eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1728','es','N','Solic. nuevo arch/carp eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1729','es','N','Ver datos arch. eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1730','es','N','Cambiar datos arch. eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1731','es','N','Descargar arch. eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1732','es','N','Crear ZIP carpeta eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1733','es','N','Subir archivo a eval. proyecto');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1734','es','N','Crear enlace en eval. proyecto');
Version 17.21.6: Oct 08, 2017 Changes related with project file browsers. (233315 lines) Version 17.21.6: Oct 08, 2017 Changes related with project file browsers. (233315 lines)
Version 17.21.5: Oct 08, 2017 Code refactoring in removal of files from database when removing course. (233317 lines) Version 17.21.5: Oct 08, 2017 Code refactoring in removal of files from database when removing course. (233317 lines)
Version 17.21.4: Oct 08, 2017 Fixed bug: remove group files from database when removing course. Version 17.21.4: Oct 08, 2017 Fixed bug: remove group files from database when removing course.

View File

@ -131,6 +131,7 @@ const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER] =
Brw_ADMI_TCH_CRS, // Brw_ADMI_TCH_CRS = 25 Brw_ADMI_TCH_CRS, // Brw_ADMI_TCH_CRS = 25
Brw_ADMI_TCH_GRP, // Brw_ADMI_TCH_GRP = 26 Brw_ADMI_TCH_GRP, // Brw_ADMI_TCH_GRP = 26
Brw_ADMI_DOC_PRJ, // Brw_ADMI_DOC_PRJ = 27 Brw_ADMI_DOC_PRJ, // Brw_ADMI_DOC_PRJ = 27
Brw_ADMI_ASS_PRJ, // Brw_ADMI_ASS_PRJ = 28
}; };
// Browsers viewable shown in search for documents // Browsers viewable shown in search for documents
const Brw_FileBrowser_t Brw_FileBrowserForFoundDocs[Brw_NUM_TYPES_FILE_BROWSER] = const Brw_FileBrowser_t Brw_FileBrowserForFoundDocs[Brw_NUM_TYPES_FILE_BROWSER] =
@ -163,6 +164,7 @@ const Brw_FileBrowser_t Brw_FileBrowserForFoundDocs[Brw_NUM_TYPES_FILE_BROWSER]
Brw_ADMI_TCH_CRS, // Brw_ADMI_TCH_CRS = 25 Brw_ADMI_TCH_CRS, // Brw_ADMI_TCH_CRS = 25
Brw_ADMI_TCH_GRP, // Brw_ADMI_TCH_GRP = 26 Brw_ADMI_TCH_GRP, // Brw_ADMI_TCH_GRP = 26
Brw_ADMI_DOC_PRJ, // Brw_ADMI_DOC_PRJ = 27 Brw_ADMI_DOC_PRJ, // Brw_ADMI_DOC_PRJ = 27
Brw_ADMI_ASS_PRJ, // Brw_ADMI_ASS_PRJ = 28
}; };
// Browsers types for database "clipboard" table // Browsers types for database "clipboard" table
static const Brw_FileBrowser_t Brw_FileBrowserForDB_clipboard[Brw_NUM_TYPES_FILE_BROWSER] = static const Brw_FileBrowser_t Brw_FileBrowserForDB_clipboard[Brw_NUM_TYPES_FILE_BROWSER] =
@ -195,6 +197,7 @@ static const Brw_FileBrowser_t Brw_FileBrowserForDB_clipboard[Brw_NUM_TYPES_FILE
Brw_ADMI_TCH_CRS, // Brw_ADMI_TCH_CRS = 25 Brw_ADMI_TCH_CRS, // Brw_ADMI_TCH_CRS = 25
Brw_ADMI_TCH_GRP, // Brw_ADMI_TCH_GRP = 26 Brw_ADMI_TCH_GRP, // Brw_ADMI_TCH_GRP = 26
Brw_ADMI_DOC_PRJ, // Brw_ADMI_DOC_PRJ = 27 Brw_ADMI_DOC_PRJ, // Brw_ADMI_DOC_PRJ = 27
Brw_ADMI_ASS_PRJ, // Brw_ADMI_ASS_PRJ = 28
}; };
// Browsers types for database "expanded_folders" table // Browsers types for database "expanded_folders" table
static const Brw_FileBrowser_t Brw_FileBrowserForDB_expanded_folders[Brw_NUM_TYPES_FILE_BROWSER] = static const Brw_FileBrowser_t Brw_FileBrowserForDB_expanded_folders[Brw_NUM_TYPES_FILE_BROWSER] =
@ -227,6 +230,7 @@ static const Brw_FileBrowser_t Brw_FileBrowserForDB_expanded_folders[Brw_NUM_TYP
Brw_ADMI_TCH_CRS, // Brw_ADMI_TCH_CRS = 25 Brw_ADMI_TCH_CRS, // Brw_ADMI_TCH_CRS = 25
Brw_ADMI_TCH_GRP, // Brw_ADMI_TCH_GRP = 26 Brw_ADMI_TCH_GRP, // Brw_ADMI_TCH_GRP = 26
Brw_ADMI_DOC_PRJ, // Brw_ADMI_DOC_PRJ = 27 Brw_ADMI_DOC_PRJ, // Brw_ADMI_DOC_PRJ = 27
Brw_ADMI_ASS_PRJ, // Brw_ADMI_ASS_PRJ = 28
}; };
// Browsers types for database "file_browser_last" table // Browsers types for database "file_browser_last" table
// Assignments and works are stored as one in file_browser_last... // Assignments and works are stored as one in file_browser_last...
@ -261,6 +265,7 @@ static const Brw_FileBrowser_t Brw_FileBrowserForDB_file_browser_last[Brw_NUM_TY
Brw_ADMI_TCH_CRS, // Brw_ADMI_TCH_CRS = 25 Brw_ADMI_TCH_CRS, // Brw_ADMI_TCH_CRS = 25
Brw_ADMI_TCH_GRP, // Brw_ADMI_TCH_GRP = 26 Brw_ADMI_TCH_GRP, // Brw_ADMI_TCH_GRP = 26
Brw_ADMI_DOC_PRJ, // Brw_ADMI_DOC_PRJ = 27 Brw_ADMI_DOC_PRJ, // Brw_ADMI_DOC_PRJ = 27
Brw_ADMI_ASS_PRJ, // Brw_ADMI_ASS_PRJ = 28
}; };
// Internal names of root folders // Internal names of root folders
@ -294,6 +299,7 @@ const char *Brw_RootFolderInternalNames[Brw_NUM_TYPES_FILE_BROWSER] =
Brw_INTERNAL_NAME_ROOT_FOLDER_TEACHERS, // Brw_ADMI_TCH_CRS Brw_INTERNAL_NAME_ROOT_FOLDER_TEACHERS, // Brw_ADMI_TCH_CRS
Brw_INTERNAL_NAME_ROOT_FOLDER_TEACHERS, // Brw_ADMI_TCH_GRP Brw_INTERNAL_NAME_ROOT_FOLDER_TEACHERS, // Brw_ADMI_TCH_GRP
Brw_INTERNAL_NAME_ROOT_FOLDER_PROJECT_DOCUMENTS, // Brw_ADMI_DOC_PRJ Brw_INTERNAL_NAME_ROOT_FOLDER_PROJECT_DOCUMENTS, // Brw_ADMI_DOC_PRJ
Brw_INTERNAL_NAME_ROOT_FOLDER_PROJECT_ASSESSMENT, // Brw_ADMI_ASS_PRJ
}; };
static const bool Brw_FileBrowserIsEditable[Brw_NUM_TYPES_FILE_BROWSER] = static const bool Brw_FileBrowserIsEditable[Brw_NUM_TYPES_FILE_BROWSER] =
@ -326,6 +332,7 @@ static const bool Brw_FileBrowserIsEditable[Brw_NUM_TYPES_FILE_BROWSER] =
true, // Brw_ADMI_TCH_CRS true, // Brw_ADMI_TCH_CRS
true, // Brw_ADMI_TCH_GRP true, // Brw_ADMI_TCH_GRP
true, // Brw_ADMI_DOC_PRJ true, // Brw_ADMI_DOC_PRJ
true, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActSeeAdm[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActSeeAdm[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -357,6 +364,7 @@ static const Act_Action_t Brw_ActSeeAdm[Brw_NUM_TYPES_FILE_BROWSER] =
ActAdmTchCrs, // Brw_ADMI_TCH_CRS ActAdmTchCrs, // Brw_ADMI_TCH_CRS
ActAdmTchGrp, // Brw_ADMI_TCH_GRP ActAdmTchGrp, // Brw_ADMI_TCH_GRP
ActAdmDocPrj, // Brw_ADMI_DOC_PRJ ActAdmDocPrj, // Brw_ADMI_DOC_PRJ
ActAdmAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActFromSeeToAdm[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActFromSeeToAdm[Brw_NUM_TYPES_FILE_BROWSER] =
@ -389,6 +397,7 @@ static const Act_Action_t Brw_ActFromSeeToAdm[Brw_NUM_TYPES_FILE_BROWSER] =
ActUnk, // Brw_ADMI_TCH_CRS ActUnk, // Brw_ADMI_TCH_CRS
ActUnk, // Brw_ADMI_TCH_GRP ActUnk, // Brw_ADMI_TCH_GRP
ActUnk, // Brw_ADMI_DOC_PRJ ActUnk, // Brw_ADMI_DOC_PRJ
ActUnk, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActFromAdmToSee[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActFromAdmToSee[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -420,6 +429,7 @@ static const Act_Action_t Brw_ActFromAdmToSee[Brw_NUM_TYPES_FILE_BROWSER] =
ActUnk, // Brw_ADMI_TCH_CRS ActUnk, // Brw_ADMI_TCH_CRS
ActUnk, // Brw_ADMI_TCH_GRP ActUnk, // Brw_ADMI_TCH_GRP
ActUnk, // Brw_ADMI_DOC_PRJ ActUnk, // Brw_ADMI_DOC_PRJ
ActUnk, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActChgZone[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActChgZone[Brw_NUM_TYPES_FILE_BROWSER] =
@ -452,6 +462,7 @@ static const Act_Action_t Brw_ActChgZone[Brw_NUM_TYPES_FILE_BROWSER] =
ActChgToAdmTch, // Brw_ADMI_TCH_CRS ActChgToAdmTch, // Brw_ADMI_TCH_CRS
ActChgToAdmTch, // Brw_ADMI_TCH_GRP ActChgToAdmTch, // Brw_ADMI_TCH_GRP
ActUnk, // Brw_ADMI_DOC_PRJ ActUnk, // Brw_ADMI_DOC_PRJ
ActUnk, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActShow[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActShow[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -483,6 +494,7 @@ static const Act_Action_t Brw_ActShow[Brw_NUM_TYPES_FILE_BROWSER] =
ActUnk, // Brw_ADMI_TCH_CRS ActUnk, // Brw_ADMI_TCH_CRS
ActUnk, // Brw_ADMI_TCH_GRP ActUnk, // Brw_ADMI_TCH_GRP
ActUnk, // Brw_ADMI_DOC_PRJ ActUnk, // Brw_ADMI_DOC_PRJ
ActUnk, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActHide[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActHide[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -514,6 +526,7 @@ static const Act_Action_t Brw_ActHide[Brw_NUM_TYPES_FILE_BROWSER] =
ActUnk, // Brw_ADMI_TCH_CRS ActUnk, // Brw_ADMI_TCH_CRS
ActUnk, // Brw_ADMI_TCH_GRP ActUnk, // Brw_ADMI_TCH_GRP
ActUnk, // Brw_ADMI_DOC_PRJ ActUnk, // Brw_ADMI_DOC_PRJ
ActUnk, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActReqDatFile[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActReqDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -545,6 +558,7 @@ static const Act_Action_t Brw_ActReqDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
ActReqDatTchCrs, // Brw_ADMI_TCH_CRS ActReqDatTchCrs, // Brw_ADMI_TCH_CRS
ActReqDatTchGrp, // Brw_ADMI_TCH_GRP ActReqDatTchGrp, // Brw_ADMI_TCH_GRP
ActReqDatDocPrj, // Brw_ADMI_DOC_PRJ ActReqDatDocPrj, // Brw_ADMI_DOC_PRJ
ActReqDatAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActDowFile[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActDowFile[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -576,6 +590,7 @@ static const Act_Action_t Brw_ActDowFile[Brw_NUM_TYPES_FILE_BROWSER] =
ActDowTchCrs, // Brw_ADMI_TCH_CRS ActDowTchCrs, // Brw_ADMI_TCH_CRS
ActDowTchGrp, // Brw_ADMI_TCH_GRP ActDowTchGrp, // Brw_ADMI_TCH_GRP
ActDowDocPrj, // Brw_ADMI_DOC_PRJ ActDowDocPrj, // Brw_ADMI_DOC_PRJ
ActDowAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActAskRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActAskRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -607,6 +622,7 @@ static const Act_Action_t Brw_ActAskRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] =
ActReqRemFilTchCrs, // Brw_ADMI_TCH_CRS ActReqRemFilTchCrs, // Brw_ADMI_TCH_CRS
ActReqRemFilTchGrp, // Brw_ADMI_TCH_GRP ActReqRemFilTchGrp, // Brw_ADMI_TCH_GRP
ActReqRemFilDocPrj, // Brw_ADMI_DOC_PRJ ActReqRemFilDocPrj, // Brw_ADMI_DOC_PRJ
ActReqRemFilAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -638,6 +654,7 @@ static const Act_Action_t Brw_ActRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] =
ActRemFilTchCrs, // Brw_ADMI_TCH_CRS ActRemFilTchCrs, // Brw_ADMI_TCH_CRS
ActRemFilTchGrp, // Brw_ADMI_TCH_GRP ActRemFilTchGrp, // Brw_ADMI_TCH_GRP
ActRemFilDocPrj, // Brw_ADMI_DOC_PRJ ActRemFilDocPrj, // Brw_ADMI_DOC_PRJ
ActRemFilAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActRemoveFolder[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActRemoveFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -669,6 +686,7 @@ static const Act_Action_t Brw_ActRemoveFolder[Brw_NUM_TYPES_FILE_BROWSER] =
ActRemFolTchCrs, // Brw_ADMI_TCH_CRS ActRemFolTchCrs, // Brw_ADMI_TCH_CRS
ActRemFolTchGrp, // Brw_ADMI_TCH_GRP ActRemFolTchGrp, // Brw_ADMI_TCH_GRP
ActRemFolDocPrj, // Brw_ADMI_DOC_PRJ ActRemFolDocPrj, // Brw_ADMI_DOC_PRJ
ActRemFolAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActRemoveFolderNotEmpty[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActRemoveFolderNotEmpty[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -700,6 +718,7 @@ static const Act_Action_t Brw_ActRemoveFolderNotEmpty[Brw_NUM_TYPES_FILE_BROWSER
ActRemTreTchCrs, // Brw_ADMI_TCH_CRS ActRemTreTchCrs, // Brw_ADMI_TCH_CRS
ActRemTreTchGrp, // Brw_ADMI_TCH_GRP ActRemTreTchGrp, // Brw_ADMI_TCH_GRP
ActRemTreDocPrj, // Brw_ADMI_DOC_PRJ ActRemTreDocPrj, // Brw_ADMI_DOC_PRJ
ActRemTreAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActCopy[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActCopy[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -731,6 +750,7 @@ static const Act_Action_t Brw_ActCopy[Brw_NUM_TYPES_FILE_BROWSER] =
ActCopTchCrs, // Brw_ADMI_TCH_CRS ActCopTchCrs, // Brw_ADMI_TCH_CRS
ActCopTchGrp, // Brw_ADMI_TCH_GRP ActCopTchGrp, // Brw_ADMI_TCH_GRP
ActCopDocPrj, // Brw_ADMI_DOC_PRJ ActCopDocPrj, // Brw_ADMI_DOC_PRJ
ActCopAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActPaste[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActPaste[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -762,6 +782,7 @@ static const Act_Action_t Brw_ActPaste[Brw_NUM_TYPES_FILE_BROWSER] =
ActPasTchCrs, // Brw_ADMI_TCH_CRS ActPasTchCrs, // Brw_ADMI_TCH_CRS
ActPasTchGrp, // Brw_ADMI_TCH_GRP ActPasTchGrp, // Brw_ADMI_TCH_GRP
ActPasDocPrj, // Brw_ADMI_DOC_PRJ ActPasDocPrj, // Brw_ADMI_DOC_PRJ
ActPasAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActFormCreate[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActFormCreate[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -793,6 +814,7 @@ static const Act_Action_t Brw_ActFormCreate[Brw_NUM_TYPES_FILE_BROWSER] =
ActFrmCreTchCrs, // Brw_ADMI_TCH_CRS ActFrmCreTchCrs, // Brw_ADMI_TCH_CRS
ActFrmCreTchGrp, // Brw_ADMI_TCH_GRP ActFrmCreTchGrp, // Brw_ADMI_TCH_GRP
ActFrmCreDocPrj, // Brw_ADMI_DOC_PRJ ActFrmCreDocPrj, // Brw_ADMI_DOC_PRJ
ActFrmCreAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActCreateFolder[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActCreateFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -824,6 +846,7 @@ static const Act_Action_t Brw_ActCreateFolder[Brw_NUM_TYPES_FILE_BROWSER] =
ActCreFolTchCrs, // Brw_ADMI_TCH_CRS ActCreFolTchCrs, // Brw_ADMI_TCH_CRS
ActCreFolTchGrp, // Brw_ADMI_TCH_GRP ActCreFolTchGrp, // Brw_ADMI_TCH_GRP
ActCreFolDocPrj, // Brw_ADMI_DOC_PRJ ActCreFolDocPrj, // Brw_ADMI_DOC_PRJ
ActCreFolAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActCreateLink[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActCreateLink[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -855,6 +878,7 @@ static const Act_Action_t Brw_ActCreateLink[Brw_NUM_TYPES_FILE_BROWSER] =
ActCreLnkTchCrs, // Brw_ADMI_TCH_CRS ActCreLnkTchCrs, // Brw_ADMI_TCH_CRS
ActCreLnkTchGrp, // Brw_ADMI_TCH_GRP ActCreLnkTchGrp, // Brw_ADMI_TCH_GRP
ActCreLnkDocPrj, // Brw_ADMI_DOC_PRJ ActCreLnkDocPrj, // Brw_ADMI_DOC_PRJ
ActCreLnkAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActRenameFolder[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActRenameFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -886,6 +910,7 @@ static const Act_Action_t Brw_ActRenameFolder[Brw_NUM_TYPES_FILE_BROWSER] =
ActRenFolTchCrs, // Brw_ADMI_TCH_CRS ActRenFolTchCrs, // Brw_ADMI_TCH_CRS
ActRenFolTchGrp, // Brw_ADMI_TCH_GRP ActRenFolTchGrp, // Brw_ADMI_TCH_GRP
ActRenFolDocPrj, // Brw_ADMI_DOC_PRJ ActRenFolDocPrj, // Brw_ADMI_DOC_PRJ
ActRenFolAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActUploadFileDropzone[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActUploadFileDropzone[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -917,6 +942,7 @@ static const Act_Action_t Brw_ActUploadFileDropzone[Brw_NUM_TYPES_FILE_BROWSER]
ActRcvFilTchCrsDZ, // Brw_ADMI_TCH_CRS ActRcvFilTchCrsDZ, // Brw_ADMI_TCH_CRS
ActRcvFilTchGrpDZ, // Brw_ADMI_TCH_GRP ActRcvFilTchGrpDZ, // Brw_ADMI_TCH_GRP
ActRcvFilDocPrjDZ, // Brw_ADMI_DOC_PRJ ActRcvFilDocPrjDZ, // Brw_ADMI_DOC_PRJ
ActRcvFilAssPrjDZ, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActUploadFileClassic[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActUploadFileClassic[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -948,6 +974,7 @@ static const Act_Action_t Brw_ActUploadFileClassic[Brw_NUM_TYPES_FILE_BROWSER] =
ActRcvFilTchCrsCla, // Brw_ADMI_TCH_CRS ActRcvFilTchCrsCla, // Brw_ADMI_TCH_CRS
ActRcvFilTchGrpCla, // Brw_ADMI_TCH_GRP ActRcvFilTchGrpCla, // Brw_ADMI_TCH_GRP
ActRcvFilDocPrjCla, // Brw_ADMI_DOC_PRJ ActRcvFilDocPrjCla, // Brw_ADMI_DOC_PRJ
ActRcvFilAssPrjCla, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActRefreshAfterUploadFiles[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActRefreshAfterUploadFiles[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -979,6 +1006,7 @@ static const Act_Action_t Brw_ActRefreshAfterUploadFiles[Brw_NUM_TYPES_FILE_BROW
ActAdmTchCrs, // Brw_ADMI_TCH_CRS ActAdmTchCrs, // Brw_ADMI_TCH_CRS
ActAdmTchGrp, // Brw_ADMI_TCH_GRP ActAdmTchGrp, // Brw_ADMI_TCH_GRP
ActAdmDocPrj, // Brw_ADMI_DOC_PRJ ActAdmDocPrj, // Brw_ADMI_DOC_PRJ
ActAdmAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActExpandFolder[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActExpandFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -1010,6 +1038,7 @@ static const Act_Action_t Brw_ActExpandFolder[Brw_NUM_TYPES_FILE_BROWSER] =
ActExpTchCrs, // Brw_ADMI_TCH_CRS ActExpTchCrs, // Brw_ADMI_TCH_CRS
ActExpTchGrp, // Brw_ADMI_TCH_GRP ActExpTchGrp, // Brw_ADMI_TCH_GRP
ActExpDocPrj, // Brw_ADMI_DOC_PRJ ActExpDocPrj, // Brw_ADMI_DOC_PRJ
ActExpAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActContractFolder[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActContractFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -1041,6 +1070,7 @@ static const Act_Action_t Brw_ActContractFolder[Brw_NUM_TYPES_FILE_BROWSER] =
ActConTchCrs, // Brw_ADMI_TCH_CRS ActConTchCrs, // Brw_ADMI_TCH_CRS
ActConTchGrp, // Brw_ADMI_TCH_GRP ActConTchGrp, // Brw_ADMI_TCH_GRP
ActConDocPrj, // Brw_ADMI_DOC_PRJ ActConDocPrj, // Brw_ADMI_DOC_PRJ
ActConAssPrj, // Brw_ADMI_ASS_PRJ
}; };
static const Act_Action_t Brw_ActRecDatFile[Brw_NUM_TYPES_FILE_BROWSER] = static const Act_Action_t Brw_ActRecDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
@ -1072,6 +1102,7 @@ static const Act_Action_t Brw_ActRecDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
ActChgDatTchCrs, // Brw_ADMI_TCH_CRS ActChgDatTchCrs, // Brw_ADMI_TCH_CRS
ActChgDatTchGrp, // Brw_ADMI_TCH_GRP ActChgDatTchGrp, // Brw_ADMI_TCH_GRP
ActChgDatDocPrj, // Brw_ADMI_DOC_PRJ ActChgDatDocPrj, // Brw_ADMI_DOC_PRJ
ActChgDatAssPrj, // Brw_ADMI_ASS_PRJ
}; };
/* All quotas must be multiple of 1 GiB (Gibibyte)*/ /* All quotas must be multiple of 1 GiB (Gibibyte)*/
@ -1138,6 +1169,10 @@ static const Act_Action_t Brw_ActRecDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
#define Brw_MAX_FILES_DOC_PRJ 500 #define Brw_MAX_FILES_DOC_PRJ 500
#define Brw_MAX_FOLDS_DOC_PRJ 50 #define Brw_MAX_FOLDS_DOC_PRJ 50
#define Brw_MAX_QUOTA_ASS_PRJ ( 1ULL*Brw_GiB)
#define Brw_MAX_FILES_ASS_PRJ 200
#define Brw_MAX_FOLDS_ASS_PRJ 20
#define Brw_MAX_QUOTA_MARKS_CRS ( 1ULL*Brw_GiB) #define Brw_MAX_QUOTA_MARKS_CRS ( 1ULL*Brw_GiB)
#define Brw_MAX_FILES_MARKS_CRS 500 #define Brw_MAX_FILES_MARKS_CRS 500
#define Brw_MAX_FOLDS_MARKS_CRS 50 #define Brw_MAX_FOLDS_MARKS_CRS 50
@ -1675,7 +1710,10 @@ static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level);
static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level); static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level);
static bool Brw_CheckIfICanModifySharedFileOrFolder (void); static bool Brw_CheckIfICanModifySharedFileOrFolder (void);
static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void); static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void);
static bool Brw_CheckIfICanModifyProjectFileOrFolder (void); static bool Brw_CheckIfICanViewProjectDocuments (Prj_RoleInProject_t MyRoleInProject);
static bool Brw_CheckIfICanViewProjectAssessment (Prj_RoleInProject_t MyRoleInProject);
static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void);
static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void);
static long Brw_GetPublisherOfSubtree (void); static long Brw_GetPublisherOfSubtree (void);
static void Brw_WriteRowDocData (unsigned *NumDocsNotHidden,MYSQL_ROW row); static void Brw_WriteRowDocData (unsigned *NumDocsNotHidden,MYSQL_ROW row);
@ -2172,6 +2210,29 @@ void Brw_GetParAndInitFileBrowser (void)
Gbl.FileBrowser.Type = Brw_ADMI_DOC_PRJ; Gbl.FileBrowser.Type = Brw_ADMI_DOC_PRJ;
break; break;
/***** Assessment of project *****/
case ActAdmAssPrj:
case ActReqRemFilAssPrj:
case ActRemFilAssPrj:
case ActRemFolAssPrj:
case ActCopAssPrj:
case ActPasAssPrj:
case ActRemTreAssPrj:
case ActFrmCreAssPrj:
case ActCreFolAssPrj:
case ActCreLnkAssPrj:
case ActRenFolAssPrj:
case ActRcvFilAssPrjDZ:
case ActRcvFilAssPrjCla:
case ActExpAssPrj:
case ActConAssPrj:
case ActZIPAssPrj:
case ActReqDatAssPrj:
case ActChgDatAssPrj:
case ActDowAssPrj:
Gbl.FileBrowser.Type = Brw_ADMI_ASS_PRJ;
break;
/***** Marks *****/ /***** Marks *****/
case ActSeeAdmMrk: // Access to a marks zone from menu case ActSeeAdmMrk: // Access to a marks zone from menu
/* Set file browser type acording to last group accessed */ /* Set file browser type acording to last group accessed */
@ -2342,6 +2403,7 @@ void Brw_GetParAndInitFileBrowser (void)
case ActCreFolWrkUsr: case ActRenFolWrkUsr: case ActCreFolWrkUsr: case ActRenFolWrkUsr:
case ActCreFolDocPrj: case ActRenFolDocPrj: case ActCreFolDocPrj: case ActRenFolDocPrj:
case ActCreFolAssPrj: case ActRenFolAssPrj:
case ActCreFolBrf: case ActRenFolBrf: case ActCreFolBrf: case ActRenFolBrf:
/* Get the name of the new folder */ /* Get the name of the new folder */
@ -2799,6 +2861,7 @@ static void Brw_SetPathFileBrowser (void)
} }
break; break;
case Brw_ADMI_DOC_PRJ: case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
/* Create a directory for projects inside the current course */ /* Create a directory for projects inside the current course */
sprintf (Path,"%s/%s", sprintf (Path,"%s/%s",
Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_PRJ); Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_PRJ);
@ -3207,6 +3270,11 @@ static void Brw_SetMaxQuota (void)
Gbl.FileBrowser.Size.MaxFiles = Brw_MAX_FILES_DOC_PRJ; Gbl.FileBrowser.Size.MaxFiles = Brw_MAX_FILES_DOC_PRJ;
Gbl.FileBrowser.Size.MaxFolds = Brw_MAX_FOLDS_DOC_PRJ; Gbl.FileBrowser.Size.MaxFolds = Brw_MAX_FOLDS_DOC_PRJ;
break; break;
case Brw_ADMI_ASS_PRJ:
Gbl.FileBrowser.Size.MaxQuota = Brw_MAX_QUOTA_ASS_PRJ;
Gbl.FileBrowser.Size.MaxFiles = Brw_MAX_FILES_ASS_PRJ;
Gbl.FileBrowser.Size.MaxFolds = Brw_MAX_FOLDS_ASS_PRJ;
break;
case Brw_SHOW_MRK_CRS: case Brw_SHOW_MRK_CRS:
case Brw_ADMI_MRK_CRS: case Brw_ADMI_MRK_CRS:
Gbl.FileBrowser.Size.MaxQuota = Brw_MAX_QUOTA_MARKS_CRS; Gbl.FileBrowser.Size.MaxQuota = Brw_MAX_QUOTA_MARKS_CRS;
@ -3354,6 +3422,7 @@ static void Brw_ShowFileBrowserProject (void)
{ {
extern const char *Hlp_ASSESSMENT_Projects; extern const char *Hlp_ASSESSMENT_Projects;
struct Project Prj; struct Project Prj;
Prj_RoleInProject_t MyRoleInProject;
/***** Allocate memory for the project *****/ /***** Allocate memory for the project *****/
Prj_AllocMemProject (&Prj); Prj_AllocMemProject (&Prj);
@ -3361,6 +3430,7 @@ static void Brw_ShowFileBrowserProject (void)
/***** Get project data *****/ /***** Get project data *****/
Prj.PrjCod = Prj_GetParamPrjCod (); Prj.PrjCod = Prj_GetParamPrjCod ();
Prj_GetDataOfProjectByCod (&Prj); Prj_GetDataOfProjectByCod (&Prj);
Gbl.CurrentCrs.Prjs.PrjCod = Prj.PrjCod;
/***** Start box *****/ /***** Start box *****/
Box_StartBox (NULL,Prj.Title,NULL, Box_StartBox (NULL,Prj.Title,NULL,
@ -3370,22 +3440,29 @@ static void Brw_ShowFileBrowserProject (void)
Prj_ShowOneUniqueProject (&Prj); Prj_ShowOneUniqueProject (&Prj);
/***** Show project file browsers *****/ /***** Show project file browsers *****/
if (Prj_CheckIfICanAdminDocsProject (Prj.PrjCod)) MyRoleInProject = Prj_GetMyRoleInProject (Gbl.CurrentCrs.Prjs.PrjCod);
if (Prj_CheckIfICanViewProjectFiles (MyRoleInProject))
{ {
Brw_WriteTopBeforeShowingFileBrowser (); Brw_WriteTopBeforeShowingFileBrowser ();
/***** Show the tree with the project documents *****/ if (Brw_CheckIfICanViewProjectDocuments (MyRoleInProject))
Gbl.FileBrowser.Type = Brw_ADMI_DOC_PRJ; {
Brw_InitializeFileBrowser (); /***** Show the tree with the project documents *****/
Brw_ShowFileBrowser (); Gbl.FileBrowser.Type = Brw_ADMI_DOC_PRJ;
Brw_InitializeFileBrowser ();
Brw_ShowFileBrowser ();
}
/***** Show the tree with the project assessment *****/ if (Brw_CheckIfICanViewProjectAssessment (MyRoleInProject))
Gbl.FileBrowser.Type = Brw_ADMI_DOC_PRJ; {
Brw_InitializeFileBrowser (); /***** Show the tree with the project assessment *****/
Brw_ShowFileBrowser (); Gbl.FileBrowser.Type = Brw_ADMI_ASS_PRJ;
Brw_InitializeFileBrowser ();
Brw_ShowFileBrowser ();
}
} }
else else
Ale_ShowAlert (Ale_WARNING,"You have no access to project documents."); Ale_ShowAlert (Ale_WARNING,"You have no access to project files.");
/***** End box *****/ /***** End box *****/
Box_EndBox (); Box_EndBox ();
@ -3756,6 +3833,7 @@ static void Brw_ShowFileBrowser (void)
extern const char *Txt_Works_area; extern const char *Txt_Works_area;
extern const char *Txt_Temporary_private_storage_area; extern const char *Txt_Temporary_private_storage_area;
extern const char *Txt_Project_documents; extern const char *Txt_Project_documents;
extern const char *Txt_Project_assessment;
const char *Brw_TitleOfFileBrowser[Brw_NUM_TYPES_FILE_BROWSER]; const char *Brw_TitleOfFileBrowser[Brw_NUM_TYPES_FILE_BROWSER];
const char *Brw_HelpOfFileBrowser[Brw_NUM_TYPES_FILE_BROWSER]; const char *Brw_HelpOfFileBrowser[Brw_NUM_TYPES_FILE_BROWSER];
@ -3790,17 +3868,18 @@ static void Brw_ShowFileBrowser (void)
Brw_TitleOfFileBrowser[Brw_ADMI_SHR_DEG] = Txt_Shared_files_area; // Brw_ADMI_SHR_DEG Brw_TitleOfFileBrowser[Brw_ADMI_SHR_DEG] = Txt_Shared_files_area; // Brw_ADMI_SHR_DEG
Brw_TitleOfFileBrowser[Brw_ADMI_SHR_CTR] = Txt_Shared_files_area; // Brw_ADMI_SHR_CTR Brw_TitleOfFileBrowser[Brw_ADMI_SHR_CTR] = Txt_Shared_files_area; // Brw_ADMI_SHR_CTR
Brw_TitleOfFileBrowser[Brw_ADMI_SHR_INS] = Txt_Shared_files_area; // Brw_ADMI_SHR_INS Brw_TitleOfFileBrowser[Brw_ADMI_SHR_INS] = Txt_Shared_files_area; // Brw_ADMI_SHR_INS
Brw_TitleOfFileBrowser[Brw_ADMI_TCH_CRS] = Txt_Teachers_files_area; // Brw_ADMI_TCH_CRS Brw_TitleOfFileBrowser[Brw_ADMI_TCH_CRS] = Txt_Teachers_files_area; // Brw_ADMI_TCH_CRS
Brw_TitleOfFileBrowser[Brw_ADMI_TCH_GRP] = Txt_Teachers_files_area; // Brw_ADMI_TCH_GRP Brw_TitleOfFileBrowser[Brw_ADMI_TCH_GRP] = Txt_Teachers_files_area; // Brw_ADMI_TCH_GRP
Brw_TitleOfFileBrowser[Brw_ADMI_DOC_PRJ] = Txt_Project_documents; // Brw_ADMI_DOC_PRJ Brw_TitleOfFileBrowser[Brw_ADMI_DOC_PRJ] = Txt_Project_documents; // Brw_ADMI_DOC_PRJ
Brw_TitleOfFileBrowser[Brw_ADMI_ASS_PRJ] = Txt_Project_assessment; // Brw_ADMI_ASS_PRJ
/***** Set help link of file browser *****/ /***** Set help link of file browser *****/
Brw_HelpOfFileBrowser[Brw_UNKNOWN ] = NULL; // Brw_UNKNOWN Brw_HelpOfFileBrowser[Brw_UNKNOWN ] = NULL; // Brw_UNKNOWN
Brw_HelpOfFileBrowser[Brw_SHOW_DOC_CRS] = Hlp_FILES_Documents; // Brw_SHOW_DOC_CRS Brw_HelpOfFileBrowser[Brw_SHOW_DOC_CRS] = Hlp_FILES_Documents; // Brw_SHOW_DOC_CRS
Brw_HelpOfFileBrowser[Brw_SHOW_MRK_CRS] = Hlp_FILES_Marks; // Brw_SHOW_MRK_CRS Brw_HelpOfFileBrowser[Brw_SHOW_MRK_CRS] = Hlp_FILES_Marks; // Brw_SHOW_MRK_CRS
Brw_HelpOfFileBrowser[Brw_ADMI_DOC_CRS] = Hlp_FILES_Documents; // Brw_ADMI_DOC_CRS Brw_HelpOfFileBrowser[Brw_ADMI_DOC_CRS] = Hlp_FILES_Documents; // Brw_ADMI_DOC_CRS
Brw_HelpOfFileBrowser[Brw_ADMI_SHR_CRS] = Hlp_FILES_Shared; // Brw_ADMI_SHR_CRS Brw_HelpOfFileBrowser[Brw_ADMI_SHR_CRS] = Hlp_FILES_Shared; // Brw_ADMI_SHR_CRS
Brw_HelpOfFileBrowser[Brw_ADMI_SHR_GRP] = Hlp_FILES_Shared; // Brw_ADMI_SHR_GRP Brw_HelpOfFileBrowser[Brw_ADMI_SHR_GRP] = Hlp_FILES_Shared; // Brw_ADMI_SHR_GRP
Brw_HelpOfFileBrowser[Brw_ADMI_WRK_USR] = Hlp_FILES_Homework_for_students; // Brw_ADMI_WRK_USR Brw_HelpOfFileBrowser[Brw_ADMI_WRK_USR] = Hlp_FILES_Homework_for_students; // Brw_ADMI_WRK_USR
Brw_HelpOfFileBrowser[Brw_ADMI_WRK_CRS] = Hlp_FILES_Homework_for_teachers; // Brw_ADMI_WRK_CRS Brw_HelpOfFileBrowser[Brw_ADMI_WRK_CRS] = Hlp_FILES_Homework_for_teachers; // Brw_ADMI_WRK_CRS
Brw_HelpOfFileBrowser[Brw_ADMI_MRK_CRS] = Hlp_FILES_Marks; // Brw_ADMI_MRK_CRS Brw_HelpOfFileBrowser[Brw_ADMI_MRK_CRS] = Hlp_FILES_Marks; // Brw_ADMI_MRK_CRS
@ -3817,12 +3896,13 @@ static void Brw_ShowFileBrowser (void)
Brw_HelpOfFileBrowser[Brw_ADMI_DOC_CTR] = Hlp_FILES_Documents; // Brw_ADMI_DOC_CTR Brw_HelpOfFileBrowser[Brw_ADMI_DOC_CTR] = Hlp_FILES_Documents; // Brw_ADMI_DOC_CTR
Brw_HelpOfFileBrowser[Brw_SHOW_DOC_INS] = Hlp_FILES_Documents; // Brw_SHOW_DOC_INS Brw_HelpOfFileBrowser[Brw_SHOW_DOC_INS] = Hlp_FILES_Documents; // Brw_SHOW_DOC_INS
Brw_HelpOfFileBrowser[Brw_ADMI_DOC_INS] = Hlp_FILES_Documents; // Brw_ADMI_DOC_INS Brw_HelpOfFileBrowser[Brw_ADMI_DOC_INS] = Hlp_FILES_Documents; // Brw_ADMI_DOC_INS
Brw_HelpOfFileBrowser[Brw_ADMI_SHR_DEG] = Hlp_FILES_Shared; // Brw_ADMI_SHR_DEG Brw_HelpOfFileBrowser[Brw_ADMI_SHR_DEG] = Hlp_FILES_Shared; // Brw_ADMI_SHR_DEG
Brw_HelpOfFileBrowser[Brw_ADMI_SHR_CTR] = Hlp_FILES_Shared; // Brw_ADMI_SHR_CTR Brw_HelpOfFileBrowser[Brw_ADMI_SHR_CTR] = Hlp_FILES_Shared; // Brw_ADMI_SHR_CTR
Brw_HelpOfFileBrowser[Brw_ADMI_SHR_INS] = Hlp_FILES_Shared; // Brw_ADMI_SHR_INS Brw_HelpOfFileBrowser[Brw_ADMI_SHR_INS] = Hlp_FILES_Shared; // Brw_ADMI_SHR_INS
Brw_HelpOfFileBrowser[Brw_ADMI_TCH_CRS] = Hlp_FILES_Private; // Brw_ADMI_TCH_CRS Brw_HelpOfFileBrowser[Brw_ADMI_TCH_CRS] = Hlp_FILES_Private; // Brw_ADMI_TCH_CRS
Brw_HelpOfFileBrowser[Brw_ADMI_TCH_GRP] = Hlp_FILES_Private; // Brw_ADMI_TCH_GRP Brw_HelpOfFileBrowser[Brw_ADMI_TCH_GRP] = Hlp_FILES_Private; // Brw_ADMI_TCH_GRP
Brw_HelpOfFileBrowser[Brw_ADMI_DOC_PRJ] = Hlp_ASSESSMENT_Projects; // Brw_ADMI_DOC_PRJ Brw_HelpOfFileBrowser[Brw_ADMI_DOC_PRJ] = Hlp_ASSESSMENT_Projects; // Brw_ADMI_DOC_PRJ
Brw_HelpOfFileBrowser[Brw_ADMI_ASS_PRJ] = Hlp_ASSESSMENT_Projects; // Brw_ADMI_ASS_PRJ
/***** Set contextual icon in box *****/ /***** Set contextual icon in box *****/
Gbl.FileBrowser.IconViewEdit = Brw_ICON_NONE; Gbl.FileBrowser.IconViewEdit = Brw_ICON_NONE;
@ -3952,6 +4032,7 @@ static void Brw_PutIconsFileBrowser (void)
case Brw_ADMI_WRK_CRS: case Brw_ADMI_WRK_CRS:
case Brw_ADMI_ASG_CRS: case Brw_ADMI_ASG_CRS:
case Brw_ADMI_DOC_PRJ: case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
break; break;
default: default:
Brw_PutIconShowFigure (); Brw_PutIconShowFigure ();
@ -4149,6 +4230,7 @@ static void Brw_WriteSubtitleOfFileBrowser (void)
extern const char *Txt_accessible_only_for_reading_by_you_and_the_teachers_of_the_course; extern const char *Txt_accessible_only_for_reading_by_you_and_the_teachers_of_the_course;
extern const char *Txt_the_marks_of_a_student_chosen_at_random_; extern const char *Txt_the_marks_of_a_student_chosen_at_random_;
extern const char *Txt_accessible_for_reading_and_writing_by_project_members; extern const char *Txt_accessible_for_reading_and_writing_by_project_members;
extern const char *Txt_accessible_for_reading_and_writing_by_project_tutors_and_evaluators;
extern const char *Txt_nobody_else_can_access_this_content; extern const char *Txt_nobody_else_can_access_this_content;
char Subtitle[1024]; char Subtitle[1024];
@ -4275,6 +4357,10 @@ static void Brw_WriteSubtitleOfFileBrowser (void)
sprintf (Subtitle,"(%s)", sprintf (Subtitle,"(%s)",
Txt_accessible_for_reading_and_writing_by_project_members); Txt_accessible_for_reading_and_writing_by_project_members);
break; break;
case Brw_ADMI_ASS_PRJ:
sprintf (Subtitle,"(%s)",
Txt_accessible_for_reading_and_writing_by_project_tutors_and_evaluators);
break;
case Brw_ADMI_BRF_USR: case Brw_ADMI_BRF_USR:
sprintf (Subtitle,"%s<br />(%s)", sprintf (Subtitle,"%s<br />(%s)",
Gbl.Usrs.Me.UsrDat.FullName, Gbl.Usrs.Me.UsrDat.FullName,
@ -4615,10 +4701,11 @@ void Brw_RemoveCrsFilesFromDB (long CrsCod)
/* Remove from project file zones */ /* Remove from project file zones */
sprintf (Query,"DELETE FROM file_view USING file_view,files" sprintf (Query,"DELETE FROM file_view USING file_view,files"
" WHERE files.FileBrowser IN (%u)" " WHERE files.FileBrowser IN (%u,%u)"
" AND files.Cod IN %s" " AND files.Cod IN %s"
" AND files.FilCod=file_view.FilCod", " AND files.FilCod=file_view.FilCod",
(unsigned) Brw_ADMI_DOC_PRJ, (unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
SubqueryPrj); SubqueryPrj);
DB_QueryDELETE (Query,"can not remove file views to files of a course"); DB_QueryDELETE (Query,"can not remove file views to files of a course");
@ -4651,9 +4738,10 @@ void Brw_RemoveCrsFilesFromDB (long CrsCod)
/* Remove from project file zones */ /* Remove from project file zones */
sprintf (Query,"DELETE LOW_PRIORITY FROM expanded_folders" sprintf (Query,"DELETE LOW_PRIORITY FROM expanded_folders"
" WHERE FileBrowser IN (%u)" " WHERE FileBrowser IN (%u,%u)"
" AND Cod IN %s", " AND Cod IN %s",
(unsigned) Brw_ADMI_DOC_PRJ, (unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
SubqueryPrj); SubqueryPrj);
DB_QueryDELETE (Query,"can not remove expanded folders of a course"); DB_QueryDELETE (Query,"can not remove expanded folders of a course");
@ -4686,9 +4774,10 @@ void Brw_RemoveCrsFilesFromDB (long CrsCod)
/* Remove from project file zones */ /* Remove from project file zones */
sprintf (Query,"DELETE FROM clipboard" sprintf (Query,"DELETE FROM clipboard"
" WHERE FileBrowser IN (%u)" " WHERE FileBrowser IN (%u,%u)"
" AND Cod IN %s", " AND Cod IN %s",
(unsigned) Brw_ADMI_DOC_PRJ, (unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
SubqueryPrj); SubqueryPrj);
DB_QueryDELETE (Query,"can not remove clipboards related to files of a course"); DB_QueryDELETE (Query,"can not remove clipboards related to files of a course");
@ -4720,9 +4809,10 @@ void Brw_RemoveCrsFilesFromDB (long CrsCod)
/* Remove from project file zones */ /* Remove from project file zones */
sprintf (Query,"DELETE FROM file_browser_last" sprintf (Query,"DELETE FROM file_browser_last"
" WHERE FileBrowser IN (%u)" " WHERE FileBrowser IN (%u,%u)"
" AND Cod IN %s", " AND Cod IN %s",
(unsigned) Brw_ADMI_DOC_PRJ, (unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
SubqueryPrj); SubqueryPrj);
DB_QueryDELETE (Query,"can not remove file last visits to files of a course"); DB_QueryDELETE (Query,"can not remove file last visits to files of a course");
@ -4753,9 +4843,10 @@ void Brw_RemoveCrsFilesFromDB (long CrsCod)
/* Remove from project file zones */ /* Remove from project file zones */
sprintf (Query,"DELETE FROM file_browser_size" sprintf (Query,"DELETE FROM file_browser_size"
" WHERE FileBrowser IN (%u)" " WHERE FileBrowser IN (%u,%u)"
" AND Cod IN %s", " AND Cod IN %s",
(unsigned) Brw_ADMI_DOC_PRJ, (unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
SubqueryPrj); SubqueryPrj);
DB_QueryDELETE (Query,"can not remove sizes of file zones of a course"); DB_QueryDELETE (Query,"can not remove sizes of file zones of a course");
@ -4786,9 +4877,10 @@ void Brw_RemoveCrsFilesFromDB (long CrsCod)
/* Remove from project file zones */ /* Remove from project file zones */
sprintf (Query,"DELETE FROM files" sprintf (Query,"DELETE FROM files"
" WHERE FileBrowser IN (%u)" " WHERE FileBrowser IN (%u,%u)"
" AND Cod IN %s", " AND Cod IN %s",
(unsigned) Brw_ADMI_DOC_PRJ, (unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
SubqueryPrj); SubqueryPrj);
DB_QueryDELETE (Query,"can not remove files of a course"); DB_QueryDELETE (Query,"can not remove files of a course");
} }
@ -4888,50 +4980,56 @@ void Brw_RemovePrjFilesFromDB (long PrjCod)
/***** Remove from database the entries that store the file views *****/ /***** Remove from database the entries that store the file views *****/
sprintf (Query,"DELETE FROM file_view USING file_view,files" sprintf (Query,"DELETE FROM file_view USING file_view,files"
" WHERE files.FileBrowser IN (%u)" " WHERE files.FileBrowser IN (%u,%u)"
" AND files.Cod=%ld" " AND files.Cod=%ld"
" AND files.FilCod=file_view.FilCod", " AND files.FilCod=file_view.FilCod",
(unsigned) Brw_ADMI_DOC_PRJ, (unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
PrjCod); PrjCod);
DB_QueryDELETE (Query,"can not remove file views to files of a project"); DB_QueryDELETE (Query,"can not remove file views to files of a project");
/***** Remove from database expanded folders *****/ /***** Remove from database expanded folders *****/
sprintf (Query,"DELETE LOW_PRIORITY FROM expanded_folders" sprintf (Query,"DELETE LOW_PRIORITY FROM expanded_folders"
" WHERE FileBrowser IN (%u)" " WHERE FileBrowser IN (%u,%u)"
" AND Cod=%ld", " AND Cod=%ld",
(unsigned) Brw_ADMI_DOC_PRJ, (unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
PrjCod); PrjCod);
DB_QueryDELETE (Query,"can not remove expanded folders of a project"); DB_QueryDELETE (Query,"can not remove expanded folders of a project");
/***** Remove from database the entries that store clipboards *****/ /***** Remove from database the entries that store clipboards *****/
sprintf (Query,"DELETE FROM clipboard" sprintf (Query,"DELETE FROM clipboard"
" WHERE FileBrowser IN (%u)" " WHERE FileBrowser IN (%u,%u)"
" AND Cod=%ld", " AND Cod=%ld",
(unsigned) Brw_ADMI_DOC_PRJ, (unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
PrjCod); PrjCod);
DB_QueryDELETE (Query,"can not remove clipboards related to files of a project"); DB_QueryDELETE (Query,"can not remove clipboards related to files of a project");
/***** Remove from database the entries that store the last time users visited file zones *****/ /***** Remove from database the entries that store the last time users visited file zones *****/
sprintf (Query,"DELETE FROM file_browser_last" sprintf (Query,"DELETE FROM file_browser_last"
" WHERE FileBrowser IN (%u)" " WHERE FileBrowser IN (%u,%u)"
" AND Cod=%ld", " AND Cod=%ld",
(unsigned) Brw_ADMI_DOC_PRJ, (unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
PrjCod); PrjCod);
DB_QueryDELETE (Query,"can not remove file last visits to files of a project"); DB_QueryDELETE (Query,"can not remove file last visits to files of a project");
/***** Remove from database the entries that store the sizes of the file zones *****/ /***** Remove from database the entries that store the sizes of the file zones *****/
sprintf (Query,"DELETE FROM file_browser_size" sprintf (Query,"DELETE FROM file_browser_size"
" WHERE FileBrowser IN (%u)" " WHERE FileBrowser IN (%u,%u)"
" AND Cod=%ld", " AND Cod=%ld",
(unsigned) Brw_ADMI_DOC_PRJ, (unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
PrjCod); PrjCod);
DB_QueryDELETE (Query,"can not remove sizes of file zones of a project"); DB_QueryDELETE (Query,"can not remove sizes of file zones of a project");
/***** Remove from database the entries that store the data files *****/ /***** Remove from database the entries that store the data files *****/
sprintf (Query,"DELETE FROM files" sprintf (Query,"DELETE FROM files"
" WHERE FileBrowser IN (%u)" " WHERE FileBrowser IN (%u,%u)"
" AND Cod=%ld", " AND Cod=%ld",
(unsigned) Brw_ADMI_DOC_PRJ, (unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
PrjCod); PrjCod);
DB_QueryDELETE (Query,"can not remove files of a project"); DB_QueryDELETE (Query,"can not remove files of a project");
} }
@ -5206,7 +5304,14 @@ static bool Brw_GetIfGroupFileBrowser (void)
static bool Brw_GetIfProjectFileBrowser (void) static bool Brw_GetIfProjectFileBrowser (void)
{ {
return (Gbl.FileBrowser.Type == Brw_ADMI_DOC_PRJ); switch (Gbl.FileBrowser.Type)
{
case Brw_ADMI_DOC_PRJ: // Project documents
case Brw_ADMI_ASS_PRJ: // Project assessment
return true;
default:
return false;
}
} }
/*****************************************************************************/ /*****************************************************************************/
@ -5339,6 +5444,7 @@ static void Brw_GetAndUpdateDateLastAccFileBrowser (void)
Cod = Gbl.CurrentCrs.Grps.GrpCod; Cod = Gbl.CurrentCrs.Grps.GrpCod;
break; break;
case Brw_ADMI_DOC_PRJ: case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
Cod = Gbl.CurrentCrs.Prjs.PrjCod; Cod = Gbl.CurrentCrs.Prjs.PrjCod;
break; break;
case Brw_ADMI_BRF_USR: case Brw_ADMI_BRF_USR:
@ -7166,6 +7272,7 @@ static void Brw_WriteCurrentClipboard (void)
extern const char *Txt_assignments_area; extern const char *Txt_assignments_area;
extern const char *Txt_works_area; extern const char *Txt_works_area;
extern const char *Txt_project_documents; extern const char *Txt_project_documents;
extern const char *Txt_project_assessment;
extern const char *Txt_marks_management_area; extern const char *Txt_marks_management_area;
extern const char *Txt_temporary_private_storage_area; extern const char *Txt_temporary_private_storage_area;
extern const char *Txt_institution; extern const char *Txt_institution;
@ -7333,13 +7440,15 @@ static void Brw_WriteCurrentClipboard (void)
Usr_UsrDataDestructor (&UsrDat); Usr_UsrDataDestructor (&UsrDat);
break; break;
case Brw_ADMI_DOC_PRJ: case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
Prj_AllocMemProject (&Prj); Prj_AllocMemProject (&Prj);
Prj.PrjCod = Gbl.FileBrowser.Clipboard.Cod; Prj.PrjCod = Gbl.FileBrowser.Clipboard.Cod;
Prj_GetDataOfProjectByCod (&Prj); Prj_GetDataOfProjectByCod (&Prj);
Crs.CrsCod = Prj.CrsCod; Crs.CrsCod = Prj.CrsCod;
Crs_GetDataOfCourseByCod (&Crs); Crs_GetDataOfCourseByCod (&Crs);
sprintf (TxtClipboardZone,"%s, %s <strong>%s</strong>, %s <strong>%s</strong>", sprintf (TxtClipboardZone,"%s, %s <strong>%s</strong>, %s <strong>%s</strong>",
Txt_project_documents, Gbl.FileBrowser.Clipboard.FileBrowser == Brw_ADMI_DOC_PRJ ? Txt_project_documents :
Txt_project_assessment,
Txt_course,Crs.ShrtName, Txt_course,Crs.ShrtName,
Txt_project,Prj.Title); Txt_project,Prj.Title);
Prj_FreeMemProject (&Prj); Prj_FreeMemProject (&Prj);
@ -7516,6 +7625,7 @@ static bool Brw_CheckIfClipboardIsInThisTree (void)
return true; // I am in the group of the clipboard return true; // I am in the group of the clipboard
break; break;
case Brw_ADMI_DOC_PRJ: case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
if (Gbl.FileBrowser.Clipboard.Cod == Gbl.CurrentCrs.Prjs.PrjCod) if (Gbl.FileBrowser.Clipboard.Cod == Gbl.CurrentCrs.Prjs.PrjCod)
return true; // I am in the project of the clipboard return true; // I am in the project of the clipboard
break; break;
@ -7603,6 +7713,7 @@ static long Brw_GetCodForClipboard (void)
case Brw_ADMI_MRK_GRP: case Brw_ADMI_MRK_GRP:
return Gbl.CurrentCrs.Grps.GrpCod; return Gbl.CurrentCrs.Grps.GrpCod;
case Brw_ADMI_DOC_PRJ: case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
return Gbl.CurrentCrs.Prjs.PrjCod; return Gbl.CurrentCrs.Prjs.PrjCod;
default: default:
return -1L; return -1L;
@ -8073,6 +8184,7 @@ static void Brw_RemoveAffectedClipboards (Brw_FileBrowser_t FileBrowser,
Gbl.CurrentCrs.Crs.CrsCod,WorksUsrCod); Gbl.CurrentCrs.Crs.CrsCod,WorksUsrCod);
break; break;
case Brw_ADMI_DOC_PRJ: case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
sprintf (Query,"DELETE FROM clipboard" sprintf (Query,"DELETE FROM clipboard"
" WHERE FileBrowser=%u AND Cod=%ld", " WHERE FileBrowser=%u AND Cod=%ld",
(unsigned) FileBrowser, (unsigned) FileBrowser,
@ -8255,6 +8367,7 @@ static void Brw_PasteClipboard (void)
Lay_ShowErrorAndExit ("The copy source does not exist."); Lay_ShowErrorAndExit ("The copy source does not exist.");
break; break;
case Brw_ADMI_DOC_PRJ: case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
PrjCod = Gbl.FileBrowser.Clipboard.Cod; PrjCod = Gbl.FileBrowser.Clipboard.Cod;
Crs.CrsCod = Prj_GetCourseOfProject (PrjCod); Crs.CrsCod = Prj_GetCourseOfProject (PrjCod);
if (Crs_GetDataOfCourseByCod (&Crs)) if (Crs_GetDataOfCourseByCod (&Crs))
@ -10526,6 +10639,7 @@ void Brw_ChgFileMetadata (void)
case Brw_ADMI_WRK_USR: case Brw_ADMI_WRK_USR:
case Brw_ADMI_WRK_CRS: case Brw_ADMI_WRK_CRS:
case Brw_ADMI_DOC_PRJ: case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
case Brw_ADMI_BRF_USR: case Brw_ADMI_BRF_USR:
PublicFileAfterEdition = false; // Files in these zones can not be public PublicFileAfterEdition = false; // Files in these zones can not be public
License = Brw_GetParLicense (); License = Brw_GetParLicense ();
@ -11324,6 +11438,7 @@ long Brw_GetCodForFiles (void)
case Brw_ADMI_MRK_GRP: case Brw_ADMI_MRK_GRP:
return Gbl.CurrentCrs.Grps.GrpCod; return Gbl.CurrentCrs.Grps.GrpCod;
case Brw_ADMI_DOC_PRJ: case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
return Gbl.CurrentCrs.Prjs.PrjCod; return Gbl.CurrentCrs.Prjs.PrjCod;
default: default:
return -1L; return -1L;
@ -11428,6 +11543,7 @@ void Brw_GetCrsGrpFromFileMetadata (Brw_FileBrowser_t FileBrowser,long Cod,
*InsCod = Ctr.InsCod; *InsCod = Ctr.InsCod;
break; break;
case Brw_ADMI_DOC_PRJ: case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
/* Cod stores the project code */ /* Cod stores the project code */
*GrpCod = -1L; *GrpCod = -1L;
*CrsCod = Crs.CrsCod = Prj_GetCourseOfProject (Cod); *CrsCod = Crs.CrsCod = Prj_GetCourseOfProject (Cod);
@ -11671,11 +11787,13 @@ static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level)
} }
return false; return false;
case Brw_ADMI_DOC_PRJ: case Brw_ADMI_DOC_PRJ:
// Check if I am the publisher of the file/folder return Brw_CheckIfICanModifyPrjDocFileOrFolder ();
return Brw_CheckIfICanModifyProjectFileOrFolder (); case Brw_ADMI_ASS_PRJ:
return Brw_CheckIfICanModifyPrjAssFileOrFolder ();
default: default:
return Brw_FileBrowserIsEditable[Gbl.FileBrowser.Type]; return Brw_FileBrowserIsEditable[Gbl.FileBrowser.Type];
} }
return false;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -11754,6 +11872,7 @@ static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level)
default: default:
return Brw_FileBrowserIsEditable[Gbl.FileBrowser.Type]; return Brw_FileBrowserIsEditable[Gbl.FileBrowser.Type];
} }
return false;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -11780,6 +11899,7 @@ static bool Brw_CheckIfICanModifySharedFileOrFolder (void)
default: default:
return false; return false;
} }
return false;
} }
static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void) static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void)
@ -11798,8 +11918,66 @@ static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void)
default: default:
return false; return false;
} }
return false;
} }
/*****************************************************************************/
/******** Check if I have permission to view project documents zone **********/
/*****************************************************************************/
static bool Brw_CheckIfICanViewProjectDocuments (Prj_RoleInProject_t MyRoleInProject)
{
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_STD:
case Rol_NET:
case Rol_TCH:
switch (MyRoleInProject)
{
case Prj_ROLE_UNK: // I am not a member
return false;
case Prj_ROLE_STD:
case Prj_ROLE_TUT:
case Prj_ROLE_EVA:
return true;
}
break;
case Rol_SYS_ADM:
return true;
default:
return false;
}
return false;
}
/*****************************************************************************/
/******** Check if I have permission to view project assessment zone *********/
/*****************************************************************************/
static bool Brw_CheckIfICanViewProjectAssessment (Prj_RoleInProject_t MyRoleInProject)
{
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_STD:
case Rol_NET:
case Rol_TCH:
switch (MyRoleInProject)
{
case Prj_ROLE_UNK: // I am not a member
case Prj_ROLE_STD: // Students can not view or edit project assessment
return false;
case Prj_ROLE_TUT:
case Prj_ROLE_EVA:
return true;
}
break;
case Rol_SYS_ADM:
return true;
default:
return false;
}
return false;
}
/*****************************************************************************/ /*****************************************************************************/
/********** Check if I have permission to modify a file or folder ************/ /********** Check if I have permission to modify a file or folder ************/
@ -11809,17 +11987,14 @@ static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void)
// I can remove or rename a file if I am the publisher // I can remove or rename a file if I am the publisher
// I can remove or rename a folder if I am the unique publisher of all the files and folders in the subtree starting there // I can remove or rename a folder if I am the unique publisher of all the files and folders in the subtree starting there
static bool Brw_CheckIfICanModifyProjectFileOrFolder (void) static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void)
{ {
Prj_RoleInProject_t MyRoleInProject;
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
case Rol_STD: // If I am a student or a non-editing teacher... case Rol_STD:
case Rol_NET: // ...I can modify the file/folder if I am the publisher case Rol_NET:
case Rol_TCH: case Rol_TCH:
MyRoleInProject = Prj_GetMyRoleInProject (Gbl.CurrentCrs.Prjs.PrjCod); switch (Prj_GetMyRoleInProject (Gbl.CurrentCrs.Prjs.PrjCod))
switch (MyRoleInProject)
{ {
case Prj_ROLE_UNK: // I am not a member case Prj_ROLE_UNK: // I am not a member
return false; return false;
@ -11828,12 +12003,46 @@ static bool Brw_CheckIfICanModifyProjectFileOrFolder (void)
case Prj_ROLE_EVA: case Prj_ROLE_EVA:
return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_GetPublisherOfSubtree ()); // Am I the publisher of subtree? return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_GetPublisherOfSubtree ()); // Am I the publisher of subtree?
} }
return false; break;
case Rol_SYS_ADM: case Rol_SYS_ADM:
return true; return true;
default: default:
return false; return false;
} }
return false;
}
/*****************************************************************************/
/********** Check if I have permission to modify a file or folder ************/
/********** in the current project assessment zone ************/
/*****************************************************************************/
// Returns true if I can remove or rename Gbl.FileBrowser.Priv.FullPathInTree, and false if I have not permission
// I can remove or rename a file if I am the publisher
// I can remove or rename a folder if I am the unique publisher of all the files and folders in the subtree starting there
static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void)
{
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_STD:
case Rol_NET:
case Rol_TCH:
switch (Prj_GetMyRoleInProject (Gbl.CurrentCrs.Prjs.PrjCod))
{
case Prj_ROLE_UNK: // I am not a member
case Prj_ROLE_STD: // Students can not view or edit project assessment
return false;
case Prj_ROLE_TUT:
case Prj_ROLE_EVA:
return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_GetPublisherOfSubtree ()); // Am I the publisher of subtree?
}
break;
case Rol_SYS_ADM:
return true;
default:
return false;
}
return false;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -12160,6 +12369,7 @@ static void Brw_WriteRowDocData (unsigned *NumDocsNotHidden,MYSQL_ROW row)
extern const char *Txt_Assignments_area; extern const char *Txt_Assignments_area;
extern const char *Txt_Works_area; extern const char *Txt_Works_area;
extern const char *Txt_Project_documents; extern const char *Txt_Project_documents;
extern const char *Txt_Project_assessment;
extern const char *Txt_Marks_area; extern const char *Txt_Marks_area;
extern const char *Txt_Temporary_private_storage_area; extern const char *Txt_Temporary_private_storage_area;
extern const char *Txt_Go_to_X; extern const char *Txt_Go_to_X;
@ -12317,6 +12527,9 @@ static void Brw_WriteRowDocData (unsigned *NumDocsNotHidden,MYSQL_ROW row)
case Brw_ADMI_DOC_PRJ: case Brw_ADMI_DOC_PRJ:
Title = Txt_Project_documents; Title = Txt_Project_documents;
break; break;
case Brw_ADMI_ASS_PRJ:
Title = Txt_Project_assessment;
break;
case Brw_ADMI_MRK_CRS: case Brw_ADMI_MRK_CRS:
case Brw_ADMI_MRK_GRP: case Brw_ADMI_MRK_GRP:
Title = Txt_Marks_area; Title = Txt_Marks_area;

View File

@ -39,7 +39,7 @@
#define Brw_MAX_CHARS_FOLDER 30 // 30 #define Brw_MAX_CHARS_FOLDER 30 // 30
#define Brw_MAX_BYTES_FOLDER NAME_MAX // 255 #define Brw_MAX_BYTES_FOLDER NAME_MAX // 255
#define Brw_NUM_TYPES_FILE_BROWSER 28 #define Brw_NUM_TYPES_FILE_BROWSER 29
// The following types are stored in several database tables as numeric fields, // The following types are stored in several database tables as numeric fields,
// so don't change numbers! // so don't change numbers!
typedef enum typedef enum
@ -72,6 +72,7 @@ typedef enum
Brw_ADMI_TCH_CRS = 25, Brw_ADMI_TCH_CRS = 25,
Brw_ADMI_TCH_GRP = 26, Brw_ADMI_TCH_GRP = 26,
Brw_ADMI_DOC_PRJ = 27, Brw_ADMI_DOC_PRJ = 27,
Brw_ADMI_ASS_PRJ = 28,
} Brw_FileBrowser_t; } Brw_FileBrowser_t;
// The following types are stored in files and clipboard tables as numeric fields, so don't change numbers! // The following types are stored in files and clipboard tables as numeric fields, so don't change numbers!
@ -155,7 +156,7 @@ struct FileMetadata
#define Brw_INTERNAL_NAME_ROOT_FOLDER_ASSIGNMENTS "actividades" // TODO: It should be "asg" #define Brw_INTERNAL_NAME_ROOT_FOLDER_ASSIGNMENTS "actividades" // TODO: It should be "asg"
#define Brw_INTERNAL_NAME_ROOT_FOLDER_WORKS "trabajos" // TODO: It should be "wrk" #define Brw_INTERNAL_NAME_ROOT_FOLDER_WORKS "trabajos" // TODO: It should be "wrk"
#define Brw_INTERNAL_NAME_ROOT_FOLDER_PROJECT_DOCUMENTS "doc" #define Brw_INTERNAL_NAME_ROOT_FOLDER_PROJECT_DOCUMENTS "doc"
#define Brw_INTERNAL_NAME_ROOT_FOLDER_PROJECT_ASSESSMENT "ass" // For future use #define Brw_INTERNAL_NAME_ROOT_FOLDER_PROJECT_ASSESSMENT "ass"
#define Brw_INTERNAL_NAME_ROOT_FOLDER_MARKS "calificaciones" // TODO: It should be "mrk" #define Brw_INTERNAL_NAME_ROOT_FOLDER_MARKS "calificaciones" // TODO: It should be "mrk"
#define Brw_INTERNAL_NAME_ROOT_FOLDER_BRIEF "maletin" // TODO: It should be "brf" #define Brw_INTERNAL_NAME_ROOT_FOLDER_BRIEF "maletin" // TODO: It should be "brf"

View File

@ -464,6 +464,7 @@ void Gbl_InitializeGlobals (void)
Usr_FlushCacheUsrHasAcceptedInCurrentCrs (); Usr_FlushCacheUsrHasAcceptedInCurrentCrs ();
Usr_FlushCacheUsrSharesAnyOfMyCrs (); Usr_FlushCacheUsrSharesAnyOfMyCrs ();
Rol_FlushCacheRoleUsrInCrs (); Rol_FlushCacheRoleUsrInCrs ();
Prj_FlushCacheMyRoleInProject ();
Grp_FlushCacheIBelongToGrp (); Grp_FlushCacheIBelongToGrp ();
Grp_FlushCacheUsrSharesAnyOfMyGrpsInCurrentCrs (); Grp_FlushCacheUsrSharesAnyOfMyGrpsInCurrentCrs ();
} }

View File

@ -856,6 +856,11 @@ struct Globals
long CrsCod; long CrsCod;
Rol_Role_t Role; Rol_Role_t Role;
} RoleUsrInCrs; } RoleUsrInCrs;
struct
{
long PrjCod;
Prj_RoleInProject_t RoleInProject;
} MyRoleInProject;
} Cache; } Cache;
}; };

View File

@ -222,6 +222,7 @@ void Lay_WriteStartOfPage (void)
case ActFrmCreWrkUsr: // Brw_ADMI_WRK_USR case ActFrmCreWrkUsr: // Brw_ADMI_WRK_USR
case ActFrmCreWrkCrs: // Brw_ADMI_WRK_CRS case ActFrmCreWrkCrs: // Brw_ADMI_WRK_CRS
case ActFrmCreDocPrj: // Brw_ADMI_DOC_PRJ case ActFrmCreDocPrj: // Brw_ADMI_DOC_PRJ
case ActFrmCreAssPrj: // Brw_ADMI_ASS_PRJ
case ActFrmCreMrkCrs: // Brw_ADMI_MRK_CRS case ActFrmCreMrkCrs: // Brw_ADMI_MRK_CRS
case ActFrmCreMrkGrp: // Brw_ADMI_MRK_GRP case ActFrmCreMrkGrp: // Brw_ADMI_MRK_GRP
case ActFrmCreBrf: // Brw_ADMI_BRF_USR case ActFrmCreBrf: // Brw_ADMI_BRF_USR
@ -596,6 +597,7 @@ static void Lay_WriteScripts (void)
case ActFrmCreWrkUsr: // Brw_ADMI_WRK_USR case ActFrmCreWrkUsr: // Brw_ADMI_WRK_USR
case ActFrmCreWrkCrs: // Brw_ADMI_WRK_CRS case ActFrmCreWrkCrs: // Brw_ADMI_WRK_CRS
case ActFrmCreDocPrj: // Brw_ADMI_DOC_PRJ case ActFrmCreDocPrj: // Brw_ADMI_DOC_PRJ
case ActFrmCreAssPrj: // Brw_ADMI_ASS_PRJ
case ActFrmCreMrkCrs: // Brw_ADMI_MRK_CRS case ActFrmCreMrkCrs: // Brw_ADMI_MRK_CRS
case ActFrmCreMrkGrp: // Brw_ADMI_MRK_GRP case ActFrmCreMrkGrp: // Brw_ADMI_MRK_GRP
case ActFrmCreBrf: // Brw_ADMI_BRF_USR case ActFrmCreBrf: // Brw_ADMI_BRF_USR

View File

@ -124,6 +124,8 @@ static void Prj_ShowTableAllProjectsMembersWithARole (const struct Project *Prj,
static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject, static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject,
MYSQL_RES **mysql_res); MYSQL_RES **mysql_res);
static Prj_RoleInProject_t Prj_ConvertUnsignedStrToRoleInProject (const char *UnsignedStr);
static void Prj_ReqAnotherUsrID (Prj_RoleInProject_t RoleInProject); static void Prj_ReqAnotherUsrID (Prj_RoleInProject_t RoleInProject);
static void Prj_AddUsrToProject (Prj_RoleInProject_t RoleInProject); static void Prj_AddUsrToProject (Prj_RoleInProject_t RoleInProject);
static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject); static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject);
@ -132,11 +134,9 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject);
static void Prj_GetParamPrjOrder (void); static void Prj_GetParamPrjOrder (void);
static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden, static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden,
bool ICanAdminDocsProject); bool ICanViewProjectFiles);
static bool Prj_CheckIfICanEditProject (long PrjCod); static bool Prj_CheckIfICanEditProject (long PrjCod);
static bool Prj_GetIfIAmMemberOfProject (long PrjCod);
static bool Prj_GetIfIAmTutorInProject (long PrjCod);
static void Prj_PutParams (void); static void Prj_PutParams (void);
static void Prj_GetDataOfProject (struct Project *Prj,const char *Query); static void Prj_GetDataOfProject (struct Project *Prj,const char *Query);
@ -607,7 +607,7 @@ void Prj_PrintOneProject (void)
static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectView) static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectView)
{ {
extern const char *Txt_Today; extern const char *Txt_Today;
extern const char *Txt_Project_documents; extern const char *Txt_Project_files;
extern const char *Txt_Preassigned_QUESTION; extern const char *Txt_Preassigned_QUESTION;
extern const char *Txt_Yes; extern const char *Txt_Yes;
extern const char *Txt_No; extern const char *Txt_No;
@ -620,7 +620,7 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
extern const char *Txt_Required_knowledge; extern const char *Txt_Required_knowledge;
extern const char *Txt_Required_materials; extern const char *Txt_Required_materials;
static unsigned UniqueId = 0; static unsigned UniqueId = 0;
bool ICanAdminDocsProject = Prj_CheckIfICanAdminDocsProject (Prj->PrjCod); bool ICanViewProjectFiles = Prj_CheckIfICanViewProjectFiles (Prj_GetMyRoleInProject (Prj->PrjCod));
/***** Write first row of data of this project *****/ /***** Write first row of data of this project *****/
/* Forms to remove/edit this project */ /* Forms to remove/edit this project */
@ -634,7 +634,7 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
case Prj_FILE_BROWSER_PROJECT: case Prj_FILE_BROWSER_PROJECT:
fprintf (Gbl.F.Out,"\">"); fprintf (Gbl.F.Out,"\">");
Prj_PutFormsToRemEditOnePrj (Prj->PrjCod,Prj->Hidden, Prj_PutFormsToRemEditOnePrj (Prj->PrjCod,Prj->Hidden,
ICanAdminDocsProject); ICanViewProjectFiles);
break; break;
default: default:
fprintf (Gbl.F.Out,"\">"); fprintf (Gbl.F.Out,"\">");
@ -681,11 +681,11 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
if (ProjectView == Prj_LIST_PROJECTS) if (ProjectView == Prj_LIST_PROJECTS)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd); fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"\">"); fprintf (Gbl.F.Out,"\">");
if (ICanAdminDocsProject) if (ICanViewProjectFiles)
{ {
Act_FormStart (ActAdmDocPrj); Act_FormStart (ActAdmDocPrj);
Prj_PutParams (); Prj_PutParams ();
Act_LinkFormSubmit (Txt_Project_documents, Act_LinkFormSubmit (Txt_Project_files,
Prj->Hidden ? "ASG_TITLE_LIGHT" : Prj->Hidden ? "ASG_TITLE_LIGHT" :
"ASG_TITLE", "ASG_TITLE",
NULL); NULL);
@ -1410,28 +1410,57 @@ static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject,
/************************** Get my role in a project *************************/ /************************** Get my role in a project *************************/
/*****************************************************************************/ /*****************************************************************************/
void Prj_FlushCacheMyRoleInProject (void)
{
Gbl.Cache.MyRoleInProject.PrjCod = -1L;
Gbl.Cache.MyRoleInProject.RoleInProject = Prj_ROLE_UNK;
}
Prj_RoleInProject_t Prj_GetMyRoleInProject (long PrjCod) Prj_RoleInProject_t Prj_GetMyRoleInProject (long PrjCod)
{ {
char Query[128]; char Query[256];
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned UnsignedNum;
Prj_RoleInProject_t RoleInProject = Prj_ROLE_UNK;
/***** Get my role in project from database *****/ /***** 1. Fast check: trivial cases *****/
sprintf (Query,"SELECT RoleInProject FROM prj_usr WHERE PrjCod=%ld",PrjCod); if (Gbl.Usrs.Me.UsrDat.UsrCod <= 0 ||
PrjCod <= 0)
return Prj_ROLE_UNK;
/***** 2. Fast check: Is my role in project already calculated *****/
if (PrjCod == Gbl.Cache.MyRoleInProject.PrjCod)
return Gbl.Cache.MyRoleInProject.RoleInProject;
/***** 3. Slow check: Get my role in project from database.
The result of the query will have one row or none *****/
Gbl.Cache.MyRoleInProject.PrjCod = PrjCod;
Gbl.Cache.MyRoleInProject.RoleInProject = Prj_ROLE_UNK;
sprintf (Query,"SELECT RoleInProject FROM prj_usr"
" WHERE PrjCod=%ld AND UsrCod=%ld",
PrjCod,Gbl.Usrs.Me.UsrDat.UsrCod);
if (DB_QuerySELECT (Query,&mysql_res,"can not get my role in project")) if (DB_QuerySELECT (Query,&mysql_res,"can not get my role in project"))
{ {
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%u",&UnsignedNum) == 1) Gbl.Cache.MyRoleInProject.RoleInProject = Prj_ConvertUnsignedStrToRoleInProject (row[0]);
if (UnsignedNum < Prj_NUM_ROLES_IN_PROJECT)
RoleInProject = (Prj_RoleInProject_t) UnsignedNum;
} }
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res); DB_FreeMySQLResult (&mysql_res);
return RoleInProject; return Gbl.Cache.MyRoleInProject.RoleInProject;
}
/*****************************************************************************/
/********************** Get role from unsigned string ************************/
/*****************************************************************************/
static Prj_RoleInProject_t Prj_ConvertUnsignedStrToRoleInProject (const char *UnsignedStr)
{
unsigned UnsignedNum;
if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1)
if (UnsignedNum < Prj_NUM_ROLES_IN_PROJECT)
return (Prj_RoleInProject_t) UnsignedNum;
return Prj_ROLE_UNK;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1540,6 +1569,10 @@ static void Prj_AddUsrToProject (Prj_RoleInProject_t RoleInProject)
PrjCod,(unsigned) RoleInProject,Gbl.Usrs.Other.UsrDat.UsrCod); PrjCod,(unsigned) RoleInProject,Gbl.Usrs.Other.UsrDat.UsrCod);
DB_QueryREPLACE (Query,"can not add user to project"); DB_QueryREPLACE (Query,"can not add user to project");
/***** Flush cache *****/
if (Gbl.Usrs.Other.UsrDat.UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod) // It's me
Prj_FlushCacheMyRoleInProject ();
/* Show success alert */ /* Show success alert */
sprintf (Gbl.Alert.Txt,Txt_THE_USER_X_has_been_enroled_as_a_Y_in_the_project, sprintf (Gbl.Alert.Txt,Txt_THE_USER_X_has_been_enroled_as_a_Y_in_the_project,
Gbl.Usrs.Other.UsrDat.FullName, Gbl.Usrs.Other.UsrDat.FullName,
@ -1703,6 +1736,10 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
Gbl.Usrs.Other.UsrDat.UsrCod); Gbl.Usrs.Other.UsrDat.UsrCod);
DB_QueryDELETE (Query,"can not remove a user from a project"); DB_QueryDELETE (Query,"can not remove a user from a project");
/***** Flush cache *****/
if (Gbl.Usrs.Other.UsrDat.UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod) // It's me
Prj_FlushCacheMyRoleInProject ();
/***** Show success alert *****/ /***** Show success alert *****/
sprintf (Gbl.Alert.Txt,Txt_THE_USER_X_has_been_removed_as_a_Y_from_the_project_Z, sprintf (Gbl.Alert.Txt,Txt_THE_USER_X_has_been_removed_as_a_Y_from_the_project_Z,
Gbl.Usrs.Other.UsrDat.FullName, Gbl.Usrs.Other.UsrDat.FullName,
@ -1750,7 +1787,7 @@ void Prj_PutHiddenParamPrjOrder (void)
/*****************************************************************************/ /*****************************************************************************/
static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden, static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden,
bool ICanAdminDocsProject) bool ICanViewProjectFiles)
{ {
Gbl.Prjs.PrjCodToEdit = PrjCod; // Used as parameter in contextual links Gbl.Prjs.PrjCodToEdit = PrjCod; // Used as parameter in contextual links
@ -1770,7 +1807,7 @@ static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden,
} }
/***** Put form to admin project documents *****/ /***** Put form to admin project documents *****/
if (ICanAdminDocsProject) if (ICanViewProjectFiles)
Ico_PutContextualIconToViewFiles (ActAdmDocPrj,Prj_PutParams); Ico_PutContextualIconToViewFiles (ActAdmDocPrj,Prj_PutParams);
/***** Put form to print project *****/ /***** Put form to print project *****/
@ -1778,17 +1815,26 @@ static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden,
} }
/*****************************************************************************/ /*****************************************************************************/
/***************** Can I admin documents of a given project? *****************/ /******************** Can I view files of a given project? *******************/
/*****************************************************************************/ /*****************************************************************************/
bool Prj_CheckIfICanAdminDocsProject (long PrjCod) bool Prj_CheckIfICanViewProjectFiles (Prj_RoleInProject_t MyRoleInProject)
{ {
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
case Rol_STD: case Rol_STD:
case Rol_NET: case Rol_NET:
case Rol_TCH: case Rol_TCH:
return Prj_GetIfIAmMemberOfProject (PrjCod); switch (MyRoleInProject)
{
case Prj_ROLE_UNK: // I am not a member
return false;
case Prj_ROLE_STD:
case Prj_ROLE_TUT:
case Prj_ROLE_EVA:
return true;
}
return false;
case Rol_SYS_ADM: case Rol_SYS_ADM:
return true; return true;
default: default:
@ -1805,7 +1851,7 @@ static bool Prj_CheckIfICanEditProject (long PrjCod)
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
case Rol_NET: case Rol_NET:
return Prj_GetIfIAmTutorInProject (PrjCod); return (Prj_GetMyRoleInProject (PrjCod) == Prj_ROLE_TUT);
case Rol_TCH: case Rol_TCH:
case Rol_SYS_ADM: case Rol_SYS_ADM:
return true; return true;
@ -1814,34 +1860,6 @@ static bool Prj_CheckIfICanEditProject (long PrjCod)
} }
} }
/*****************************************************************************/
/*********************** Am I member of a given project? *********************/
/*****************************************************************************/
static bool Prj_GetIfIAmMemberOfProject (long PrjCod)
{
char Query[256];
sprintf (Query,"SELECT COUNT(*) FROM prj_usr"
" WHERE PrjCod=%ld AND UsrCod=%ld",
PrjCod,Gbl.Usrs.Me.UsrDat.UsrCod);
return (bool) (DB_QueryCOUNT (Query,"can not check if I am a member of a project") != 0);
}
/*****************************************************************************/
/*********************** Am I tutor in a given project? **********************/
/*****************************************************************************/
static bool Prj_GetIfIAmTutorInProject (long PrjCod)
{
char Query[256];
sprintf (Query,"SELECT COUNT(*) FROM prj_usr"
" WHERE PrjCod=%ld AND RoleInProject=%u AND UsrCod=%ld",
PrjCod,Prj_ROLE_TUT,Gbl.Usrs.Me.UsrDat.UsrCod);
return (bool) (DB_QueryCOUNT (Query,"can not check if I am a tutor in a project") != 0);
}
/*****************************************************************************/ /*****************************************************************************/
/********************** Params used to edit a project ************************/ /********************** Params used to edit a project ************************/
/*****************************************************************************/ /*****************************************************************************/
@ -2310,6 +2328,9 @@ void Prj_RemoveProject (void)
Prj.PrjCod,Gbl.CurrentCrs.Crs.CrsCod); Prj.PrjCod,Gbl.CurrentCrs.Crs.CrsCod);
DB_QueryDELETE (Query,"can not remove project"); DB_QueryDELETE (Query,"can not remove project");
/***** Flush cache *****/
Prj_FlushCacheMyRoleInProject ();
/***** Remove project *****/ /***** Remove project *****/
sprintf (Query,"DELETE FROM projects" sprintf (Query,"DELETE FROM projects"
" WHERE PrjCod=%ld AND CrsCod=%ld", " WHERE PrjCod=%ld AND CrsCod=%ld",
@ -2912,6 +2933,9 @@ static void Prj_CreateProject (struct Project *Prj)
(unsigned) Prj_ROLE_TUT, (unsigned) Prj_ROLE_TUT,
Gbl.Usrs.Me.UsrDat.UsrCod); Gbl.Usrs.Me.UsrDat.UsrCod);
DB_QueryINSERT (Query,"can not add tutor"); DB_QueryINSERT (Query,"can not add tutor");
/***** Flush cache *****/
Prj_FlushCacheMyRoleInProject ();
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2967,6 +2991,9 @@ void Prj_RemoveCrsProjects (long CrsCod)
CrsCod); CrsCod);
DB_QueryDELETE (Query,"can not remove all the projects of a course"); DB_QueryDELETE (Query,"can not remove all the projects of a course");
/***** Flush cache *****/
Prj_FlushCacheMyRoleInProject ();
/***** Remove projects *****/ /***** Remove projects *****/
sprintf (Query,"DELETE FROM projects WHERE CrsCod=%ld",CrsCod); sprintf (Query,"DELETE FROM projects WHERE CrsCod=%ld",CrsCod);
DB_QueryDELETE (Query,"can not remove all the projects of a course"); DB_QueryDELETE (Query,"can not remove all the projects of a course");
@ -2983,6 +3010,10 @@ void Prj_RemoveUsrFromProjects (long UsrCod)
/***** Remove user from projects *****/ /***** Remove user from projects *****/
sprintf (Query,"DELETE FROM prj_usr WHERE UsrCod=%ld",UsrCod); sprintf (Query,"DELETE FROM prj_usr WHERE UsrCod=%ld",UsrCod);
DB_QueryDELETE (Query,"can not remove user from projects"); DB_QueryDELETE (Query,"can not remove user from projects");
/***** Flush cache *****/
if (UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod) // It's me
Prj_FlushCacheMyRoleInProject ();
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -115,6 +115,7 @@ void Prj_ShowOneUniqueProject (struct Project *Prj);
void Prj_PrintOneProject (void); void Prj_PrintOneProject (void);
void Prj_FlushCacheMyRoleInProject (void);
Prj_RoleInProject_t Prj_GetMyRoleInProject (long PrjCod); Prj_RoleInProject_t Prj_GetMyRoleInProject (long PrjCod);
void Prj_ReqAddStd (void); void Prj_ReqAddStd (void);
@ -135,7 +136,7 @@ void Prj_RemEva (void);
void Prj_PutHiddenParamPrjOrder (void); void Prj_PutHiddenParamPrjOrder (void);
bool Prj_CheckIfICanAdminDocsProject (long PrjCod); bool Prj_CheckIfICanViewProjectFiles (Prj_RoleInProject_t MyRoleInProject);
void Prj_RequestCreatePrj (void); void Prj_RequestCreatePrj (void);
void Prj_RequestEditPrj (void); void Prj_RequestEditPrj (void);

View File

@ -1733,7 +1733,7 @@ const char *Txt_accessible_for_reading_and_writing_by_project_members =
#elif L==4 #elif L==4
"accesible para lectura y escritura por miembros del proyecto"; "accesible para lectura y escritura por miembros del proyecto";
#elif L==5 #elif L==5
"accessible pour la lecture et l'écriture par les membres du projet"; "accessible pour la lecture et l'&eacute;criture par les membres du projet";
#elif L==6 #elif L==6
"accesible para lectura y escritura por miembros del proyecto"; // Okoteve traducción "accesible para lectura y escritura por miembros del proyecto"; // Okoteve traducción
#elif L==7 #elif L==7
@ -1744,6 +1744,27 @@ const char *Txt_accessible_for_reading_and_writing_by_project_members =
"acess&iacute;vel para leitura e escrita por membros do projeto"; "acess&iacute;vel para leitura e escrita por membros do projeto";
#endif #endif
const char *Txt_accessible_for_reading_and_writing_by_project_tutors_and_evaluators =
#if L==1
"accessible per a lectura i escriptura per tutors i avaluadors del projecte";
#elif L==2
"zug&auml;nglich zum Lesen und Schreiben f&uuml;r Tutoren und Auswerter der Projekt";
#elif L==3
"accessible for reading and writing by project tutors and evaluators";
#elif L==4
"accesible para lectura y escritura por tutores y evaluadores del proyecto";
#elif L==5
"accessible pour la lecture et l'&eacute;criture par tuteurs et &eacute;valuateurs du projet";
#elif L==6
"accesible para lectura y escritura por tutores y evaluadores del proyecto"; // Okoteve traducción
#elif L==7
"accessibile per la lettura e la scrittura da parte dei precettori e dei valutatori del progetto";
#elif L==8
"dost&eogon;pne do czytania i pisania przez nauczyciele i ewaluator&oacute;w projektu";
#elif L==9
"acess&iacute;vel para leitura e escrita por tutores e avaliadores do projeto";
#endif
const char *Txt_accessible_for_reading_and_writing_by_students_and_teachers_of_the_centre = const char *Txt_accessible_for_reading_and_writing_by_students_and_teachers_of_the_centre =
#if L==1 #if L==1
"accessible per a lectura i escriptura per estudiants i professors del centre"; "accessible per a lectura i escriptura per estudiants i professors del centre";
@ -30831,6 +30852,48 @@ const char *Txt_project =
"projeto"; "projeto";
#endif #endif
const char *Txt_Project_assessment =
#if L==1
"Avaluaci&oacute; del projecte";
#elif L==2
"Projektbewertung";
#elif L==3
"Project assessment";
#elif L==4
"Evaluaci&oacute;n del proyecto";
#elif L==5
"&Eacute;valuation du project";
#elif L==6
"Evaluaci&oacute;n del proyecto"; // Okoteve traducción
#elif L==7
"Valutazione di progetto";
#elif L==8
"Ocena projektowe";
#elif L==9
"Avalia&ccedil;&atilde;o do projeto";
#endif
const char *Txt_project_assessment =
#if L==1
"avaluaci&oacute; del projecte";
#elif L==2
"Projektbewertung";
#elif L==3
"project assessment";
#elif L==4
"evaluaci&oacute;n del proyecto";
#elif L==5
"&eacute;valuation du project";
#elif L==6
"evaluaci&oacute;n del proyecto"; // Okoteve traducción
#elif L==7
"valutazione di progetto";
#elif L==8
"ocena projektowe";
#elif L==9
"avalia&ccedil;&atilde;o do projeto";
#endif
const char *Txt_Project_documents = const char *Txt_Project_documents =
#if L==1 #if L==1
"Documents del projecte"; "Documents del projecte";
@ -30873,6 +30936,27 @@ const char *Txt_project_documents =
"documentos do projeto"; "documentos do projeto";
#endif #endif
const char *Txt_Project_files =
#if L==1
"Fitxers del projecte";
#elif L==2
"Projektdateien";
#elif L==3
"Project files";
#elif L==4
"Archivos del proyecto";
#elif L==5
"Fichiers du project";
#elif L==6
"Archivos del proyecto"; // Okoteve traducción
#elif L==7
"File di progetto";
#elif L==8
"Pliki projektowe";
#elif L==9
"Arquivos do projeto";
#endif
const char *Txt_Project_X_is_now_hidden = // Warning: it is very important to include %s in the following sentences const char *Txt_Project_X_is_now_hidden = // Warning: it is very important to include %s in the following sentences
#if L==1 #if L==1
"El projecte <strong>%s</strong> ara est&agrave; ocult."; "El projecte <strong>%s</strong> ara est&agrave; ocult.";
@ -38080,6 +38164,27 @@ const char *Txt_ROOT_FOLDER_EXTERNAL_NAMES[Brw_NUM_TYPES_FILE_BROWSER] =
"dokumenty" "dokumenty"
#elif L==9 #elif L==9
"documentos" "documentos"
#endif
,
// Brw_ADMI_ASS_PRJ
#if L==1
"avaluacio"
#elif L==2
"Bewertung"
#elif L==3
"assessment"
#elif L==4
"evaluacion"
#elif L==5
"evaluation"
#elif L==6
"mbohepy"
#elif L==7
"valutazione"
#elif L==8
"ocena"
#elif L==9
"avaliacao"
#endif #endif
}; };

View File

@ -84,6 +84,7 @@ const Act_Action_t ZIP_ActZIPFolder[Brw_NUM_TYPES_FILE_BROWSER] =
ActZIPTchCrs, // Brw_ADMI_TCH_CRS ActZIPTchCrs, // Brw_ADMI_TCH_CRS
ActZIPTchGrp, // Brw_ADMI_TCH_GRP ActZIPTchGrp, // Brw_ADMI_TCH_GRP
ActZIPDocPrj, // Brw_ADMI_DOC_PRJ ActZIPDocPrj, // Brw_ADMI_DOC_PRJ
ActZIPAssPrj, // Brw_ADMI_ASS_PRJ
}; };
/*****************************************************************************/ /*****************************************************************************/