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
NEW. ActAdmDocPrj Admin. project documents
NEW. ActReqRemFilBrf Request removal of a file from project documents
NEW. ActRemFilBrf Remove a file from project documents
NEW. ActRemFolBrf Remove an empty folder from project documents
NEW. ActCopBrf Set source of copy in project documents
NEW. ActPasBrf Paste a folder or file into project documents
NEW. ActRemTreBrf Remove a non empty folder from project documents
NEW. ActFrmCreBrf Form to create a folder or file in project documents
NEW. ActCreFolBrf Create a new folder in project documents
NEW. ActCreLnkBrf Create a new link in project documents
NEW. ActRenFolBrf Rename a folder in project documents
NEW. ActRcvFilBrfDZ Receive a file in project documents using Dropzone.js
NEW. ActRcvFilBrfCla Receive a file in project documents using the classic way
NEW. ActExpBrf Expand a folder in project documents
NEW. ActConBrf Contract a folder in project documents
NEW. ActZIPBrf Compress a folder in project documents
NEW. ActReqDatBrf Ask for metadata of a file in project documents
NEW. ActChgDatBrf Change metadata of a file in project documents
NEW. ActDowBrf Download a file from project documents
NEW. ActReqRemFilDocPrj Request removal of a file from project documents
NEW. ActRemFilDocPrj Remove a file from project documents
NEW. ActRemFolDocPrj Remove an empty folder from project documents
NEW. ActCopDocPrj Set source of copy in project documents
NEW. ActPasDocPrj Paste a folder or file into project documents
NEW. ActRemTreDocPrj Remove a non empty folder from project documents
NEW. ActFrmCreDocPrj Form to create a folder or file in project documents
NEW. ActCreFolDocPrj Create a new folder in project documents
NEW. ActCreLnkDocPrj Create a new link in project documents
NEW. ActRenFolDocPrj Rename a folder in project documents
NEW. ActRcvFilDocPrjDZ Receive a file in project documents using Dropzone.js
NEW. ActRcvFilDocPrjCla Receive a file in project documents using the classic way
NEW. ActExpDocPrj Expand a folder in project documents
NEW. ActConDocPrj Contract a folder in project documents
NEW. ActZIPDocPrj Compress a folder in project documents
NEW. ActReqDatDocPrj Ask for metadata of a file in project documents
NEW. ActChgDatDocPrj Change metadata of a file in 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
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},
/* 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},
/* 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
ActChgDatDocPrj, // #1714
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
#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
@ -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 ActDowDocPrj (ActChgCalCrs1stDay + 68)
#define ActSeeTst (ActChgCalCrs1stDay + 69)
#define ActAssTst (ActChgCalCrs1stDay + 70)
#define ActEdiTstQst (ActChgCalCrs1stDay + 71)
#define ActEdiOneTstQst (ActChgCalCrs1stDay + 72)
#define ActReqImpTstQst (ActChgCalCrs1stDay + 73)
#define ActImpTstQst (ActChgCalCrs1stDay + 74)
#define ActLstTstQst (ActChgCalCrs1stDay + 75)
#define ActRcvTstQst (ActChgCalCrs1stDay + 76)
#define ActReqRemTstQst (ActChgCalCrs1stDay + 77)
#define ActRemTstQst (ActChgCalCrs1stDay + 78)
#define ActShfTstQst (ActChgCalCrs1stDay + 79)
#define ActCfgTst (ActChgCalCrs1stDay + 80)
#define ActEnableTag (ActChgCalCrs1stDay + 81)
#define ActDisableTag (ActChgCalCrs1stDay + 82)
#define ActRenTag (ActChgCalCrs1stDay + 83)
#define ActRcvCfgTst (ActChgCalCrs1stDay + 84)
#define ActAdmAssPrj (ActChgCalCrs1stDay + 69)
#define ActReqRemFilAssPrj (ActChgCalCrs1stDay + 70)
#define ActRemFilAssPrj (ActChgCalCrs1stDay + 71)
#define ActRemFolAssPrj (ActChgCalCrs1stDay + 72)
#define ActCopAssPrj (ActChgCalCrs1stDay + 73)
#define ActPasAssPrj (ActChgCalCrs1stDay + 74)
#define ActRemTreAssPrj (ActChgCalCrs1stDay + 75)
#define ActFrmCreAssPrj (ActChgCalCrs1stDay + 76)
#define ActCreFolAssPrj (ActChgCalCrs1stDay + 77)
#define ActCreLnkAssPrj (ActChgCalCrs1stDay + 78)
#define ActRenFolAssPrj (ActChgCalCrs1stDay + 79)
#define ActRcvFilAssPrjDZ (ActChgCalCrs1stDay + 80)
#define ActRcvFilAssPrjCla (ActChgCalCrs1stDay + 81)
#define ActExpAssPrj (ActChgCalCrs1stDay + 82)
#define ActConAssPrj (ActChgCalCrs1stDay + 83)
#define ActZIPAssPrj (ActChgCalCrs1stDay + 84)
#define ActReqDatAssPrj (ActChgCalCrs1stDay + 85)
#define ActChgDatAssPrj (ActChgCalCrs1stDay + 86)
#define ActDowAssPrj (ActChgCalCrs1stDay + 87)
#define ActReqSeeMyTstRes (ActChgCalCrs1stDay + 85)
#define ActSeeMyTstRes (ActChgCalCrs1stDay + 86)
#define ActSeeOneTstResMe (ActChgCalCrs1stDay + 87)
#define ActReqSeeUsrTstRes (ActChgCalCrs1stDay + 88)
#define ActSeeUsrTstRes (ActChgCalCrs1stDay + 89)
#define ActSeeOneTstResOth (ActChgCalCrs1stDay + 90)
#define ActSeeTst (ActChgCalCrs1stDay + 88)
#define ActAssTst (ActChgCalCrs1stDay + 89)
#define ActEdiTstQst (ActChgCalCrs1stDay + 90)
#define ActEdiOneTstQst (ActChgCalCrs1stDay + 91)
#define ActReqImpTstQst (ActChgCalCrs1stDay + 92)
#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 ActPlyGam (ActChgCalCrs1stDay + 92)
#define ActPlyGam1stQst (ActChgCalCrs1stDay + 93)
#define ActPlyGamNxtQst (ActChgCalCrs1stDay + 94)
#define ActPlyGamAns (ActChgCalCrs1stDay + 95)
#define ActAnsGam (ActChgCalCrs1stDay + 96)
#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 ActReqSeeMyTstRes (ActChgCalCrs1stDay + 104)
#define ActSeeMyTstRes (ActChgCalCrs1stDay + 105)
#define ActSeeOneTstResMe (ActChgCalCrs1stDay + 106)
#define ActReqSeeUsrTstRes (ActChgCalCrs1stDay + 107)
#define ActSeeUsrTstRes (ActChgCalCrs1stDay + 108)
#define ActSeeOneTstResOth (ActChgCalCrs1stDay + 109)
#define ActSeeOneSvy (ActChgCalCrs1stDay + 114)
#define ActAnsSvy (ActChgCalCrs1stDay + 115)
#define ActFrmNewSvy (ActChgCalCrs1stDay + 116)
#define ActEdiOneSvy (ActChgCalCrs1stDay + 117)
#define ActNewSvy (ActChgCalCrs1stDay + 118)
#define ActChgSvy (ActChgCalCrs1stDay + 119)
#define ActReqRemSvy (ActChgCalCrs1stDay + 120)
#define ActRemSvy (ActChgCalCrs1stDay + 121)
#define ActReqRstSvy (ActChgCalCrs1stDay + 122)
#define ActRstSvy (ActChgCalCrs1stDay + 123)
#define ActHidSvy (ActChgCalCrs1stDay + 124)
#define ActShoSvy (ActChgCalCrs1stDay + 125)
#define ActEdiOneSvyQst (ActChgCalCrs1stDay + 126)
#define ActRcvSvyQst (ActChgCalCrs1stDay + 127)
#define ActReqRemSvyQst (ActChgCalCrs1stDay + 128)
#define ActRemSvyQst (ActChgCalCrs1stDay + 129)
#define ActSeeOneGam (ActChgCalCrs1stDay + 110)
#define ActPlyGam (ActChgCalCrs1stDay + 111)
#define ActPlyGam1stQst (ActChgCalCrs1stDay + 112)
#define ActPlyGamNxtQst (ActChgCalCrs1stDay + 113)
#define ActPlyGamAns (ActChgCalCrs1stDay + 114)
#define ActAnsGam (ActChgCalCrs1stDay + 115)
#define ActFrmNewGam (ActChgCalCrs1stDay + 116)
#define ActEdiOneGam (ActChgCalCrs1stDay + 117)
#define ActNewGam (ActChgCalCrs1stDay + 118)
#define ActChgGam (ActChgCalCrs1stDay + 119)
#define ActReqRemGam (ActChgCalCrs1stDay + 120)
#define ActRemGam (ActChgCalCrs1stDay + 121)
#define ActReqRstGam (ActChgCalCrs1stDay + 122)
#define ActRstGam (ActChgCalCrs1stDay + 123)
#define ActHidGam (ActChgCalCrs1stDay + 124)
#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 ActSeeDatExaAnn (ActChgCalCrs1stDay + 131)
#define ActEdiExaAnn (ActChgCalCrs1stDay + 132)
#define ActRcvExaAnn (ActChgCalCrs1stDay + 133)
#define ActPrnExaAnn (ActChgCalCrs1stDay + 134)
#define ActReqRemExaAnn (ActChgCalCrs1stDay + 135)
#define ActRemExaAnn (ActChgCalCrs1stDay + 136)
#define ActHidExaAnn (ActChgCalCrs1stDay + 137)
#define ActShoExaAnn (ActChgCalCrs1stDay + 138)
#define ActSeeOneSvy (ActChgCalCrs1stDay + 133)
#define ActAnsSvy (ActChgCalCrs1stDay + 134)
#define ActFrmNewSvy (ActChgCalCrs1stDay + 135)
#define ActEdiOneSvy (ActChgCalCrs1stDay + 136)
#define ActNewSvy (ActChgCalCrs1stDay + 137)
#define ActChgSvy (ActChgCalCrs1stDay + 138)
#define ActReqRemSvy (ActChgCalCrs1stDay + 139)
#define ActRemSvy (ActChgCalCrs1stDay + 140)
#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 **********************************/

View File

@ -256,13 +256,35 @@
/****************************** 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 JS_FILE "swad17.17.1.js"
// Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
/*
Version 17.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.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.

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_GRP, // Brw_ADMI_TCH_GRP = 26
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
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_GRP, // Brw_ADMI_TCH_GRP = 26
Brw_ADMI_DOC_PRJ, // Brw_ADMI_DOC_PRJ = 27
Brw_ADMI_ASS_PRJ, // Brw_ADMI_ASS_PRJ = 28
};
// Browsers types for database "clipboard" table
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_GRP, // Brw_ADMI_TCH_GRP = 26
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
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_GRP, // Brw_ADMI_TCH_GRP = 26
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
// 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_GRP, // Brw_ADMI_TCH_GRP = 26
Brw_ADMI_DOC_PRJ, // Brw_ADMI_DOC_PRJ = 27
Brw_ADMI_ASS_PRJ, // Brw_ADMI_ASS_PRJ = 28
};
// 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_GRP
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] =
@ -326,6 +332,7 @@ static const bool Brw_FileBrowserIsEditable[Brw_NUM_TYPES_FILE_BROWSER] =
true, // Brw_ADMI_TCH_CRS
true, // Brw_ADMI_TCH_GRP
true, // Brw_ADMI_DOC_PRJ
true, // Brw_ADMI_ASS_PRJ
};
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
ActAdmTchGrp, // Brw_ADMI_TCH_GRP
ActAdmDocPrj, // Brw_ADMI_DOC_PRJ
ActAdmAssPrj, // Brw_ADMI_ASS_PRJ
};
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_GRP
ActUnk, // Brw_ADMI_DOC_PRJ
ActUnk, // Brw_ADMI_ASS_PRJ
};
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_GRP
ActUnk, // Brw_ADMI_DOC_PRJ
ActUnk, // Brw_ADMI_ASS_PRJ
};
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_GRP
ActUnk, // Brw_ADMI_DOC_PRJ
ActUnk, // Brw_ADMI_ASS_PRJ
};
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_GRP
ActUnk, // Brw_ADMI_DOC_PRJ
ActUnk, // Brw_ADMI_ASS_PRJ
};
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_GRP
ActUnk, // Brw_ADMI_DOC_PRJ
ActUnk, // Brw_ADMI_ASS_PRJ
};
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
ActReqDatTchGrp, // Brw_ADMI_TCH_GRP
ActReqDatDocPrj, // Brw_ADMI_DOC_PRJ
ActReqDatAssPrj, // Brw_ADMI_ASS_PRJ
};
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
ActDowTchGrp, // Brw_ADMI_TCH_GRP
ActDowDocPrj, // Brw_ADMI_DOC_PRJ
ActDowAssPrj, // Brw_ADMI_ASS_PRJ
};
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
ActReqRemFilTchGrp, // Brw_ADMI_TCH_GRP
ActReqRemFilDocPrj, // Brw_ADMI_DOC_PRJ
ActReqRemFilAssPrj, // Brw_ADMI_ASS_PRJ
};
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
ActRemFilTchGrp, // Brw_ADMI_TCH_GRP
ActRemFilDocPrj, // Brw_ADMI_DOC_PRJ
ActRemFilAssPrj, // Brw_ADMI_ASS_PRJ
};
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
ActRemFolTchGrp, // Brw_ADMI_TCH_GRP
ActRemFolDocPrj, // Brw_ADMI_DOC_PRJ
ActRemFolAssPrj, // Brw_ADMI_ASS_PRJ
};
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
ActRemTreTchGrp, // Brw_ADMI_TCH_GRP
ActRemTreDocPrj, // Brw_ADMI_DOC_PRJ
ActRemTreAssPrj, // Brw_ADMI_ASS_PRJ
};
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
ActCopTchGrp, // Brw_ADMI_TCH_GRP
ActCopDocPrj, // Brw_ADMI_DOC_PRJ
ActCopAssPrj, // Brw_ADMI_ASS_PRJ
};
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
ActPasTchGrp, // Brw_ADMI_TCH_GRP
ActPasDocPrj, // Brw_ADMI_DOC_PRJ
ActPasAssPrj, // Brw_ADMI_ASS_PRJ
};
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
ActFrmCreTchGrp, // Brw_ADMI_TCH_GRP
ActFrmCreDocPrj, // Brw_ADMI_DOC_PRJ
ActFrmCreAssPrj, // Brw_ADMI_ASS_PRJ
};
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
ActCreFolTchGrp, // Brw_ADMI_TCH_GRP
ActCreFolDocPrj, // Brw_ADMI_DOC_PRJ
ActCreFolAssPrj, // Brw_ADMI_ASS_PRJ
};
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
ActCreLnkTchGrp, // Brw_ADMI_TCH_GRP
ActCreLnkDocPrj, // Brw_ADMI_DOC_PRJ
ActCreLnkAssPrj, // Brw_ADMI_ASS_PRJ
};
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
ActRenFolTchGrp, // Brw_ADMI_TCH_GRP
ActRenFolDocPrj, // Brw_ADMI_DOC_PRJ
ActRenFolAssPrj, // Brw_ADMI_ASS_PRJ
};
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
ActRcvFilTchGrpDZ, // Brw_ADMI_TCH_GRP
ActRcvFilDocPrjDZ, // Brw_ADMI_DOC_PRJ
ActRcvFilAssPrjDZ, // Brw_ADMI_ASS_PRJ
};
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
ActRcvFilTchGrpCla, // Brw_ADMI_TCH_GRP
ActRcvFilDocPrjCla, // Brw_ADMI_DOC_PRJ
ActRcvFilAssPrjCla, // Brw_ADMI_ASS_PRJ
};
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
ActAdmTchGrp, // Brw_ADMI_TCH_GRP
ActAdmDocPrj, // Brw_ADMI_DOC_PRJ
ActAdmAssPrj, // Brw_ADMI_ASS_PRJ
};
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
ActExpTchGrp, // Brw_ADMI_TCH_GRP
ActExpDocPrj, // Brw_ADMI_DOC_PRJ
ActExpAssPrj, // Brw_ADMI_ASS_PRJ
};
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
ActConTchGrp, // Brw_ADMI_TCH_GRP
ActConDocPrj, // Brw_ADMI_DOC_PRJ
ActConAssPrj, // Brw_ADMI_ASS_PRJ
};
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
ActChgDatTchGrp, // Brw_ADMI_TCH_GRP
ActChgDatDocPrj, // Brw_ADMI_DOC_PRJ
ActChgDatAssPrj, // Brw_ADMI_ASS_PRJ
};
/* 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_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_FILES_MARKS_CRS 500
#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_CheckIfICanModifySharedFileOrFolder (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 void Brw_WriteRowDocData (unsigned *NumDocsNotHidden,MYSQL_ROW row);
@ -2172,6 +2210,29 @@ void Brw_GetParAndInitFileBrowser (void)
Gbl.FileBrowser.Type = Brw_ADMI_DOC_PRJ;
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 *****/
case ActSeeAdmMrk: // Access to a marks zone from menu
/* Set file browser type acording to last group accessed */
@ -2342,6 +2403,7 @@ void Brw_GetParAndInitFileBrowser (void)
case ActCreFolWrkUsr: case ActRenFolWrkUsr:
case ActCreFolDocPrj: case ActRenFolDocPrj:
case ActCreFolAssPrj: case ActRenFolAssPrj:
case ActCreFolBrf: case ActRenFolBrf:
/* Get the name of the new folder */
@ -2799,6 +2861,7 @@ static void Brw_SetPathFileBrowser (void)
}
break;
case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
/* Create a directory for projects inside the current course */
sprintf (Path,"%s/%s",
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.MaxFolds = Brw_MAX_FOLDS_DOC_PRJ;
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_ADMI_MRK_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;
struct Project Prj;
Prj_RoleInProject_t MyRoleInProject;
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Prj);
@ -3361,6 +3430,7 @@ static void Brw_ShowFileBrowserProject (void)
/***** Get project data *****/
Prj.PrjCod = Prj_GetParamPrjCod ();
Prj_GetDataOfProjectByCod (&Prj);
Gbl.CurrentCrs.Prjs.PrjCod = Prj.PrjCod;
/***** Start box *****/
Box_StartBox (NULL,Prj.Title,NULL,
@ -3370,22 +3440,29 @@ static void Brw_ShowFileBrowserProject (void)
Prj_ShowOneUniqueProject (&Prj);
/***** Show project file browsers *****/
if (Prj_CheckIfICanAdminDocsProject (Prj.PrjCod))
MyRoleInProject = Prj_GetMyRoleInProject (Gbl.CurrentCrs.Prjs.PrjCod);
if (Prj_CheckIfICanViewProjectFiles (MyRoleInProject))
{
Brw_WriteTopBeforeShowingFileBrowser ();
/***** Show the tree with the project documents *****/
Gbl.FileBrowser.Type = Brw_ADMI_DOC_PRJ;
Brw_InitializeFileBrowser ();
Brw_ShowFileBrowser ();
if (Brw_CheckIfICanViewProjectDocuments (MyRoleInProject))
{
/***** Show the tree with the project documents *****/
Gbl.FileBrowser.Type = Brw_ADMI_DOC_PRJ;
Brw_InitializeFileBrowser ();
Brw_ShowFileBrowser ();
}
/***** Show the tree with the project assessment *****/
Gbl.FileBrowser.Type = Brw_ADMI_DOC_PRJ;
Brw_InitializeFileBrowser ();
Brw_ShowFileBrowser ();
if (Brw_CheckIfICanViewProjectAssessment (MyRoleInProject))
{
/***** Show the tree with the project assessment *****/
Gbl.FileBrowser.Type = Brw_ADMI_ASS_PRJ;
Brw_InitializeFileBrowser ();
Brw_ShowFileBrowser ();
}
}
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 *****/
Box_EndBox ();
@ -3756,6 +3833,7 @@ static void Brw_ShowFileBrowser (void)
extern const char *Txt_Works_area;
extern const char *Txt_Temporary_private_storage_area;
extern const char *Txt_Project_documents;
extern const char *Txt_Project_assessment;
const char *Brw_TitleOfFileBrowser[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_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_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_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_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 *****/
Brw_HelpOfFileBrowser[Brw_UNKNOWN ] = NULL; // Brw_UNKNOWN
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_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_GRP] = Hlp_FILES_Shared; // Brw_ADMI_SHR_GRP
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_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_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_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_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_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_GRP] = Hlp_FILES_Private; // Brw_ADMI_TCH_GRP
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_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_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_ASS_PRJ] = Hlp_ASSESSMENT_Projects; // Brw_ADMI_ASS_PRJ
/***** Set contextual icon in box *****/
Gbl.FileBrowser.IconViewEdit = Brw_ICON_NONE;
@ -3952,6 +4032,7 @@ static void Brw_PutIconsFileBrowser (void)
case Brw_ADMI_WRK_CRS:
case Brw_ADMI_ASG_CRS:
case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
break;
default:
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_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_tutors_and_evaluators;
extern const char *Txt_nobody_else_can_access_this_content;
char Subtitle[1024];
@ -4275,6 +4357,10 @@ static void Brw_WriteSubtitleOfFileBrowser (void)
sprintf (Subtitle,"(%s)",
Txt_accessible_for_reading_and_writing_by_project_members);
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:
sprintf (Subtitle,"%s<br />(%s)",
Gbl.Usrs.Me.UsrDat.FullName,
@ -4615,10 +4701,11 @@ void Brw_RemoveCrsFilesFromDB (long CrsCod)
/* Remove from project file zones */
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.FilCod=file_view.FilCod",
(unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
SubqueryPrj);
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 */
sprintf (Query,"DELETE LOW_PRIORITY FROM expanded_folders"
" WHERE FileBrowser IN (%u)"
" WHERE FileBrowser IN (%u,%u)"
" AND Cod IN %s",
(unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
SubqueryPrj);
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 */
sprintf (Query,"DELETE FROM clipboard"
" WHERE FileBrowser IN (%u)"
" WHERE FileBrowser IN (%u,%u)"
" AND Cod IN %s",
(unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
SubqueryPrj);
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 */
sprintf (Query,"DELETE FROM file_browser_last"
" WHERE FileBrowser IN (%u)"
" WHERE FileBrowser IN (%u,%u)"
" AND Cod IN %s",
(unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
SubqueryPrj);
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 */
sprintf (Query,"DELETE FROM file_browser_size"
" WHERE FileBrowser IN (%u)"
" WHERE FileBrowser IN (%u,%u)"
" AND Cod IN %s",
(unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
SubqueryPrj);
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 */
sprintf (Query,"DELETE FROM files"
" WHERE FileBrowser IN (%u)"
" WHERE FileBrowser IN (%u,%u)"
" AND Cod IN %s",
(unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
SubqueryPrj);
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 *****/
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.FilCod=file_view.FilCod",
(unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
PrjCod);
DB_QueryDELETE (Query,"can not remove file views to files of a project");
/***** Remove from database expanded folders *****/
sprintf (Query,"DELETE LOW_PRIORITY FROM expanded_folders"
" WHERE FileBrowser IN (%u)"
" WHERE FileBrowser IN (%u,%u)"
" AND Cod=%ld",
(unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
PrjCod);
DB_QueryDELETE (Query,"can not remove expanded folders of a project");
/***** Remove from database the entries that store clipboards *****/
sprintf (Query,"DELETE FROM clipboard"
" WHERE FileBrowser IN (%u)"
" WHERE FileBrowser IN (%u,%u)"
" AND Cod=%ld",
(unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
PrjCod);
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 *****/
sprintf (Query,"DELETE FROM file_browser_last"
" WHERE FileBrowser IN (%u)"
" WHERE FileBrowser IN (%u,%u)"
" AND Cod=%ld",
(unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
PrjCod);
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 *****/
sprintf (Query,"DELETE FROM file_browser_size"
" WHERE FileBrowser IN (%u)"
" WHERE FileBrowser IN (%u,%u)"
" AND Cod=%ld",
(unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
PrjCod);
DB_QueryDELETE (Query,"can not remove sizes of file zones of a project");
/***** Remove from database the entries that store the data files *****/
sprintf (Query,"DELETE FROM files"
" WHERE FileBrowser IN (%u)"
" WHERE FileBrowser IN (%u,%u)"
" AND Cod=%ld",
(unsigned) Brw_ADMI_DOC_PRJ,
(unsigned) Brw_ADMI_ASS_PRJ,
PrjCod);
DB_QueryDELETE (Query,"can not remove files of a project");
}
@ -5206,7 +5304,14 @@ static bool Brw_GetIfGroupFileBrowser (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;
break;
case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
Cod = Gbl.CurrentCrs.Prjs.PrjCod;
break;
case Brw_ADMI_BRF_USR:
@ -7166,6 +7272,7 @@ static void Brw_WriteCurrentClipboard (void)
extern const char *Txt_assignments_area;
extern const char *Txt_works_area;
extern const char *Txt_project_documents;
extern const char *Txt_project_assessment;
extern const char *Txt_marks_management_area;
extern const char *Txt_temporary_private_storage_area;
extern const char *Txt_institution;
@ -7333,13 +7440,15 @@ static void Brw_WriteCurrentClipboard (void)
Usr_UsrDataDestructor (&UsrDat);
break;
case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
Prj_AllocMemProject (&Prj);
Prj.PrjCod = Gbl.FileBrowser.Clipboard.Cod;
Prj_GetDataOfProjectByCod (&Prj);
Crs.CrsCod = Prj.CrsCod;
Crs_GetDataOfCourseByCod (&Crs);
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_project,Prj.Title);
Prj_FreeMemProject (&Prj);
@ -7516,6 +7625,7 @@ static bool Brw_CheckIfClipboardIsInThisTree (void)
return true; // I am in the group of the clipboard
break;
case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
if (Gbl.FileBrowser.Clipboard.Cod == Gbl.CurrentCrs.Prjs.PrjCod)
return true; // I am in the project of the clipboard
break;
@ -7603,6 +7713,7 @@ static long Brw_GetCodForClipboard (void)
case Brw_ADMI_MRK_GRP:
return Gbl.CurrentCrs.Grps.GrpCod;
case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
return Gbl.CurrentCrs.Prjs.PrjCod;
default:
return -1L;
@ -8073,6 +8184,7 @@ static void Brw_RemoveAffectedClipboards (Brw_FileBrowser_t FileBrowser,
Gbl.CurrentCrs.Crs.CrsCod,WorksUsrCod);
break;
case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
sprintf (Query,"DELETE FROM clipboard"
" WHERE FileBrowser=%u AND Cod=%ld",
(unsigned) FileBrowser,
@ -8255,6 +8367,7 @@ static void Brw_PasteClipboard (void)
Lay_ShowErrorAndExit ("The copy source does not exist.");
break;
case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
PrjCod = Gbl.FileBrowser.Clipboard.Cod;
Crs.CrsCod = Prj_GetCourseOfProject (PrjCod);
if (Crs_GetDataOfCourseByCod (&Crs))
@ -10526,6 +10639,7 @@ void Brw_ChgFileMetadata (void)
case Brw_ADMI_WRK_USR:
case Brw_ADMI_WRK_CRS:
case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
case Brw_ADMI_BRF_USR:
PublicFileAfterEdition = false; // Files in these zones can not be public
License = Brw_GetParLicense ();
@ -11324,6 +11438,7 @@ long Brw_GetCodForFiles (void)
case Brw_ADMI_MRK_GRP:
return Gbl.CurrentCrs.Grps.GrpCod;
case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
return Gbl.CurrentCrs.Prjs.PrjCod;
default:
return -1L;
@ -11428,6 +11543,7 @@ void Brw_GetCrsGrpFromFileMetadata (Brw_FileBrowser_t FileBrowser,long Cod,
*InsCod = Ctr.InsCod;
break;
case Brw_ADMI_DOC_PRJ:
case Brw_ADMI_ASS_PRJ:
/* Cod stores the project code */
*GrpCod = -1L;
*CrsCod = Crs.CrsCod = Prj_GetCourseOfProject (Cod);
@ -11671,11 +11787,13 @@ static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level)
}
return false;
case Brw_ADMI_DOC_PRJ:
// Check if I am the publisher of the file/folder
return Brw_CheckIfICanModifyProjectFileOrFolder ();
return Brw_CheckIfICanModifyPrjDocFileOrFolder ();
case Brw_ADMI_ASS_PRJ:
return Brw_CheckIfICanModifyPrjAssFileOrFolder ();
default:
return Brw_FileBrowserIsEditable[Gbl.FileBrowser.Type];
}
return false;
}
/*****************************************************************************/
@ -11754,6 +11872,7 @@ static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level)
default:
return Brw_FileBrowserIsEditable[Gbl.FileBrowser.Type];
}
return false;
}
/*****************************************************************************/
@ -11780,6 +11899,7 @@ static bool Brw_CheckIfICanModifySharedFileOrFolder (void)
default:
return false;
}
return false;
}
static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void)
@ -11798,8 +11918,66 @@ static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void)
default:
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 ************/
@ -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 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)
{
case Rol_STD: // If I am a student or a non-editing teacher...
case Rol_NET: // ...I can modify the file/folder if I am the publisher
case Rol_STD:
case Rol_NET:
case Rol_TCH:
MyRoleInProject = Prj_GetMyRoleInProject (Gbl.CurrentCrs.Prjs.PrjCod);
switch (MyRoleInProject)
switch (Prj_GetMyRoleInProject (Gbl.CurrentCrs.Prjs.PrjCod))
{
case Prj_ROLE_UNK: // I am not a member
return false;
@ -11828,12 +12003,46 @@ static bool Brw_CheckIfICanModifyProjectFileOrFolder (void)
case Prj_ROLE_EVA:
return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_GetPublisherOfSubtree ()); // Am I the publisher of subtree?
}
return false;
break;
case Rol_SYS_ADM:
return true;
default:
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_Works_area;
extern const char *Txt_Project_documents;
extern const char *Txt_Project_assessment;
extern const char *Txt_Marks_area;
extern const char *Txt_Temporary_private_storage_area;
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:
Title = Txt_Project_documents;
break;
case Brw_ADMI_ASS_PRJ:
Title = Txt_Project_assessment;
break;
case Brw_ADMI_MRK_CRS:
case Brw_ADMI_MRK_GRP:
Title = Txt_Marks_area;

View File

@ -39,7 +39,7 @@
#define Brw_MAX_CHARS_FOLDER 30 // 30
#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,
// so don't change numbers!
typedef enum
@ -72,6 +72,7 @@ typedef enum
Brw_ADMI_TCH_CRS = 25,
Brw_ADMI_TCH_GRP = 26,
Brw_ADMI_DOC_PRJ = 27,
Brw_ADMI_ASS_PRJ = 28,
} Brw_FileBrowser_t;
// 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_WORKS "trabajos" // TODO: It should be "wrk"
#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_BRIEF "maletin" // TODO: It should be "brf"

View File

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

View File

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

View File

@ -222,6 +222,7 @@ void Lay_WriteStartOfPage (void)
case ActFrmCreWrkUsr: // Brw_ADMI_WRK_USR
case ActFrmCreWrkCrs: // Brw_ADMI_WRK_CRS
case ActFrmCreDocPrj: // Brw_ADMI_DOC_PRJ
case ActFrmCreAssPrj: // Brw_ADMI_ASS_PRJ
case ActFrmCreMrkCrs: // Brw_ADMI_MRK_CRS
case ActFrmCreMrkGrp: // Brw_ADMI_MRK_GRP
case ActFrmCreBrf: // Brw_ADMI_BRF_USR
@ -596,6 +597,7 @@ static void Lay_WriteScripts (void)
case ActFrmCreWrkUsr: // Brw_ADMI_WRK_USR
case ActFrmCreWrkCrs: // Brw_ADMI_WRK_CRS
case ActFrmCreDocPrj: // Brw_ADMI_DOC_PRJ
case ActFrmCreAssPrj: // Brw_ADMI_ASS_PRJ
case ActFrmCreMrkCrs: // Brw_ADMI_MRK_CRS
case ActFrmCreMrkGrp: // Brw_ADMI_MRK_GRP
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,
MYSQL_RES **mysql_res);
static Prj_RoleInProject_t Prj_ConvertUnsignedStrToRoleInProject (const char *UnsignedStr);
static void Prj_ReqAnotherUsrID (Prj_RoleInProject_t RoleInProject);
static void Prj_AddUsrToProject (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_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden,
bool ICanAdminDocsProject);
bool ICanViewProjectFiles);
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_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)
{
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_Yes;
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_materials;
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 *****/
/* 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:
fprintf (Gbl.F.Out,"\">");
Prj_PutFormsToRemEditOnePrj (Prj->PrjCod,Prj->Hidden,
ICanAdminDocsProject);
ICanViewProjectFiles);
break;
default:
fprintf (Gbl.F.Out,"\">");
@ -681,11 +681,11 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
if (ProjectView == Prj_LIST_PROJECTS)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"\">");
if (ICanAdminDocsProject)
if (ICanViewProjectFiles)
{
Act_FormStart (ActAdmDocPrj);
Prj_PutParams ();
Act_LinkFormSubmit (Txt_Project_documents,
Act_LinkFormSubmit (Txt_Project_files,
Prj->Hidden ? "ASG_TITLE_LIGHT" :
"ASG_TITLE",
NULL);
@ -1410,28 +1410,57 @@ static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject,
/************************** 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)
{
char Query[128];
char Query[256];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned UnsignedNum;
Prj_RoleInProject_t RoleInProject = Prj_ROLE_UNK;
/***** Get my role in project from database *****/
sprintf (Query,"SELECT RoleInProject FROM prj_usr WHERE PrjCod=%ld",PrjCod);
/***** 1. Fast check: trivial cases *****/
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"))
{
row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%u",&UnsignedNum) == 1)
if (UnsignedNum < Prj_NUM_ROLES_IN_PROJECT)
RoleInProject = (Prj_RoleInProject_t) UnsignedNum;
Gbl.Cache.MyRoleInProject.RoleInProject = Prj_ConvertUnsignedStrToRoleInProject (row[0]);
}
/***** Free structure that stores the query result *****/
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);
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 */
sprintf (Gbl.Alert.Txt,Txt_THE_USER_X_has_been_enroled_as_a_Y_in_the_project,
Gbl.Usrs.Other.UsrDat.FullName,
@ -1703,6 +1736,10 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
Gbl.Usrs.Other.UsrDat.UsrCod);
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 *****/
sprintf (Gbl.Alert.Txt,Txt_THE_USER_X_has_been_removed_as_a_Y_from_the_project_Z,
Gbl.Usrs.Other.UsrDat.FullName,
@ -1750,7 +1787,7 @@ void Prj_PutHiddenParamPrjOrder (void)
/*****************************************************************************/
static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden,
bool ICanAdminDocsProject)
bool ICanViewProjectFiles)
{
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 *****/
if (ICanAdminDocsProject)
if (ICanViewProjectFiles)
Ico_PutContextualIconToViewFiles (ActAdmDocPrj,Prj_PutParams);
/***** 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)
{
case Rol_STD:
case Rol_NET:
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:
return true;
default:
@ -1805,7 +1851,7 @@ static bool Prj_CheckIfICanEditProject (long PrjCod)
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_NET:
return Prj_GetIfIAmTutorInProject (PrjCod);
return (Prj_GetMyRoleInProject (PrjCod) == Prj_ROLE_TUT);
case Rol_TCH:
case Rol_SYS_ADM:
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 ************************/
/*****************************************************************************/
@ -2310,6 +2328,9 @@ void Prj_RemoveProject (void)
Prj.PrjCod,Gbl.CurrentCrs.Crs.CrsCod);
DB_QueryDELETE (Query,"can not remove project");
/***** Flush cache *****/
Prj_FlushCacheMyRoleInProject ();
/***** Remove project *****/
sprintf (Query,"DELETE FROM projects"
" WHERE PrjCod=%ld AND CrsCod=%ld",
@ -2912,6 +2933,9 @@ static void Prj_CreateProject (struct Project *Prj)
(unsigned) Prj_ROLE_TUT,
Gbl.Usrs.Me.UsrDat.UsrCod);
DB_QueryINSERT (Query,"can not add tutor");
/***** Flush cache *****/
Prj_FlushCacheMyRoleInProject ();
}
/*****************************************************************************/
@ -2967,6 +2991,9 @@ void Prj_RemoveCrsProjects (long CrsCod)
CrsCod);
DB_QueryDELETE (Query,"can not remove all the projects of a course");
/***** Flush cache *****/
Prj_FlushCacheMyRoleInProject ();
/***** Remove projects *****/
sprintf (Query,"DELETE FROM projects WHERE CrsCod=%ld",CrsCod);
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 *****/
sprintf (Query,"DELETE FROM prj_usr WHERE UsrCod=%ld",UsrCod);
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_FlushCacheMyRoleInProject (void);
Prj_RoleInProject_t Prj_GetMyRoleInProject (long PrjCod);
void Prj_ReqAddStd (void);
@ -135,7 +136,7 @@ void Prj_RemEva (void);
void Prj_PutHiddenParamPrjOrder (void);
bool Prj_CheckIfICanAdminDocsProject (long PrjCod);
bool Prj_CheckIfICanViewProjectFiles (Prj_RoleInProject_t MyRoleInProject);
void Prj_RequestCreatePrj (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
"accesible para lectura y escritura por miembros del proyecto";
#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
"accesible para lectura y escritura por miembros del proyecto"; // Okoteve traducción
#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";
#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 =
#if L==1
"accessible per a lectura i escriptura per estudiants i professors del centre";
@ -30831,6 +30852,48 @@ const char *Txt_project =
"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_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 =
#if L==1
"Documents del projecte";
@ -30873,6 +30936,27 @@ const char *Txt_project_documents =
"documentos do projeto";
#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
#if L==1
"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"
#elif L==9
"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
};

View File

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