mirror of https://github.com/acanas/swad-core.git
Version 17.22
This commit is contained in:
parent
23e78e9294
commit
468a8d1c30
|
@ -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
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
164
swad_action.h
164
swad_action.h
|
@ -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 **********************************/
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -464,6 +464,7 @@ void Gbl_InitializeGlobals (void)
|
|||
Usr_FlushCacheUsrHasAcceptedInCurrentCrs ();
|
||||
Usr_FlushCacheUsrSharesAnyOfMyCrs ();
|
||||
Rol_FlushCacheRoleUsrInCrs ();
|
||||
Prj_FlushCacheMyRoleInProject ();
|
||||
Grp_FlushCacheIBelongToGrp ();
|
||||
Grp_FlushCacheUsrSharesAnyOfMyGrpsInCurrentCrs ();
|
||||
}
|
||||
|
|
|
@ -856,6 +856,11 @@ struct Globals
|
|||
long CrsCod;
|
||||
Rol_Role_t Role;
|
||||
} RoleUsrInCrs;
|
||||
struct
|
||||
{
|
||||
long PrjCod;
|
||||
Prj_RoleInProject_t RoleInProject;
|
||||
} MyRoleInProject;
|
||||
} Cache;
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
137
swad_project.c
137
swad_project.c
|
@ -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 ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -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);
|
||||
|
|
107
swad_text.c
107
swad_text.c
|
@ -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'é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í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änglich zum Lesen und Schreiben fü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'écriture par tuteurs et é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ępne do czytania i pisania przez nauczyciele i ewaluatorów projektu";
|
||||
#elif L==9
|
||||
"acessí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ó del projecte";
|
||||
#elif L==2
|
||||
"Projektbewertung";
|
||||
#elif L==3
|
||||
"Project assessment";
|
||||
#elif L==4
|
||||
"Evaluación del proyecto";
|
||||
#elif L==5
|
||||
"Évaluation du project";
|
||||
#elif L==6
|
||||
"Evaluación del proyecto"; // Okoteve traducción
|
||||
#elif L==7
|
||||
"Valutazione di progetto";
|
||||
#elif L==8
|
||||
"Ocena projektowe";
|
||||
#elif L==9
|
||||
"Avaliação do projeto";
|
||||
#endif
|
||||
|
||||
const char *Txt_project_assessment =
|
||||
#if L==1
|
||||
"avaluació del projecte";
|
||||
#elif L==2
|
||||
"Projektbewertung";
|
||||
#elif L==3
|
||||
"project assessment";
|
||||
#elif L==4
|
||||
"evaluación del proyecto";
|
||||
#elif L==5
|
||||
"évaluation du project";
|
||||
#elif L==6
|
||||
"evaluación del proyecto"; // Okoteve traducción
|
||||
#elif L==7
|
||||
"valutazione di progetto";
|
||||
#elif L==8
|
||||
"ocena projektowe";
|
||||
#elif L==9
|
||||
"avaliaçã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à 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
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
Loading…
Reference in New Issue