diff --git a/swad_action.c b/swad_action.c index 192ab23e8..9b246f4c8 100644 --- a/swad_action.c +++ b/swad_action.c @@ -1017,6 +1017,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = [ActConSeeDocCrs ] = { 476,-1,TabUnk,ActSeeAdmDocCrsGrp ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NO_CONT,Brw_ContractFileTree ,NULL ,NULL}, [ActZIPSeeDocCrs ] = {1124,-1,TabUnk,ActSeeAdmDocCrsGrp ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ZIP_CompressFileTree ,NULL}, [ActReqDatSeeDocCrs ] = {1033,-1,TabUnk,ActSeeAdmDocCrsGrp ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ShowFileMetadata ,NULL}, + [ActReqLnkSeeDocCrs ] = {1930,-1,TabUnk,ActSeeAdmDocCrsGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_GetLinkToFile ,NULL}, [ActDowSeeDocCrs ] = {1111,-1,TabUnk,ActSeeAdmDocCrsGrp ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_DOWNLD_FILE,Brw_DownloadFile ,NULL ,NULL}, [ActSeeDocGrp ] = {1200,-1,TabUnk,ActSeeAdmDocCrsGrp ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ShowFileBrowserOrWorks ,NULL}, @@ -1048,6 +1049,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = [ActHidDocCrs ] = { 465,-1,TabUnk,ActSeeAdmDocCrsGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_SetDocumentAsHidden ,NULL}, [ActReqDatAdmDocCrs ] = {1029,-1,TabUnk,ActSeeAdmDocCrsGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ShowFileMetadata ,NULL}, [ActChgDatAdmDocCrs ] = { 996,-1,TabUnk,ActSeeAdmDocCrsGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ChgFileMetadata ,NULL}, + [ActReqLnkAdmDocCrs ] = {1931,-1,TabUnk,ActSeeAdmDocCrsGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_GetLinkToFile ,NULL}, [ActDowAdmDocCrs ] = {1113,-1,TabUnk,ActSeeAdmDocCrsGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_DOWNLD_FILE,Brw_DownloadFile ,NULL ,NULL}, [ActAdmDocGrp ] = {1201,-1,TabUnk,ActSeeAdmDocCrsGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ShowFileBrowserOrWorks ,NULL}, @@ -3769,6 +3771,8 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un ActSeePrgItm, // #1927 ActRenPrgRsc, // #1928 ActNewPrgRsc, // #1929 + ActReqLnkSeeDocCrs, // #1930 + ActReqLnkAdmDocCrs, // #1931 }; /*****************************************************************************/ diff --git a/swad_action.h b/swad_action.h index f107c9ddf..e31e2dfa5 100644 --- a/swad_action.h +++ b/swad_action.h @@ -65,7 +65,7 @@ typedef enum typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action -#define Act_MAX_ACTION_COD 1929 +#define Act_MAX_ACTION_COD 1931 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13 @@ -962,304 +962,306 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to #define ActConSeeDocCrs (ActRemSvyQst + 158) #define ActZIPSeeDocCrs (ActRemSvyQst + 159) #define ActReqDatSeeDocCrs (ActRemSvyQst + 160) -#define ActDowSeeDocCrs (ActRemSvyQst + 161) +#define ActReqLnkSeeDocCrs (ActRemSvyQst + 161) +#define ActDowSeeDocCrs (ActRemSvyQst + 162) -#define ActSeeDocGrp (ActRemSvyQst + 162) -#define ActExpSeeDocGrp (ActRemSvyQst + 163) -#define ActConSeeDocGrp (ActRemSvyQst + 164) -#define ActZIPSeeDocGrp (ActRemSvyQst + 165) -#define ActReqDatSeeDocGrp (ActRemSvyQst + 166) -#define ActDowSeeDocGrp (ActRemSvyQst + 167) +#define ActSeeDocGrp (ActRemSvyQst + 163) +#define ActExpSeeDocGrp (ActRemSvyQst + 164) +#define ActConSeeDocGrp (ActRemSvyQst + 165) +#define ActZIPSeeDocGrp (ActRemSvyQst + 166) +#define ActReqDatSeeDocGrp (ActRemSvyQst + 167) +#define ActDowSeeDocGrp (ActRemSvyQst + 168) -#define ActChgToAdmDocCrs (ActRemSvyQst + 168) -#define ActAdmDocCrs (ActRemSvyQst + 169) -#define ActReqRemFilDocCrs (ActRemSvyQst + 170) -#define ActRemFilDocCrs (ActRemSvyQst + 171) -#define ActRemFolDocCrs (ActRemSvyQst + 172) -#define ActCopDocCrs (ActRemSvyQst + 173) -#define ActPasDocCrs (ActRemSvyQst + 174) -#define ActRemTreDocCrs (ActRemSvyQst + 175) -#define ActFrmCreDocCrs (ActRemSvyQst + 176) -#define ActCreFolDocCrs (ActRemSvyQst + 177) -#define ActCreLnkDocCrs (ActRemSvyQst + 178) -#define ActRenFolDocCrs (ActRemSvyQst + 179) -#define ActRcvFilDocCrsDZ (ActRemSvyQst + 180) -#define ActRcvFilDocCrsCla (ActRemSvyQst + 181) -#define ActExpAdmDocCrs (ActRemSvyQst + 182) -#define ActConAdmDocCrs (ActRemSvyQst + 183) -#define ActZIPAdmDocCrs (ActRemSvyQst + 184) -#define ActUnhDocCrs (ActRemSvyQst + 185) -#define ActHidDocCrs (ActRemSvyQst + 186) -#define ActReqDatAdmDocCrs (ActRemSvyQst + 187) -#define ActChgDatAdmDocCrs (ActRemSvyQst + 188) -#define ActDowAdmDocCrs (ActRemSvyQst + 189) +#define ActChgToAdmDocCrs (ActRemSvyQst + 169) +#define ActAdmDocCrs (ActRemSvyQst + 170) +#define ActReqRemFilDocCrs (ActRemSvyQst + 171) +#define ActRemFilDocCrs (ActRemSvyQst + 172) +#define ActRemFolDocCrs (ActRemSvyQst + 173) +#define ActCopDocCrs (ActRemSvyQst + 174) +#define ActPasDocCrs (ActRemSvyQst + 175) +#define ActRemTreDocCrs (ActRemSvyQst + 176) +#define ActFrmCreDocCrs (ActRemSvyQst + 177) +#define ActCreFolDocCrs (ActRemSvyQst + 178) +#define ActCreLnkDocCrs (ActRemSvyQst + 179) +#define ActRenFolDocCrs (ActRemSvyQst + 180) +#define ActRcvFilDocCrsDZ (ActRemSvyQst + 181) +#define ActRcvFilDocCrsCla (ActRemSvyQst + 182) +#define ActExpAdmDocCrs (ActRemSvyQst + 183) +#define ActConAdmDocCrs (ActRemSvyQst + 184) +#define ActZIPAdmDocCrs (ActRemSvyQst + 185) +#define ActUnhDocCrs (ActRemSvyQst + 186) +#define ActHidDocCrs (ActRemSvyQst + 187) +#define ActReqDatAdmDocCrs (ActRemSvyQst + 188) +#define ActChgDatAdmDocCrs (ActRemSvyQst + 189) +#define ActReqLnkAdmDocCrs (ActRemSvyQst + 190) +#define ActDowAdmDocCrs (ActRemSvyQst + 191) -#define ActAdmDocGrp (ActRemSvyQst + 190) -#define ActReqRemFilDocGrp (ActRemSvyQst + 191) -#define ActRemFilDocGrp (ActRemSvyQst + 192) -#define ActRemFolDocGrp (ActRemSvyQst + 193) -#define ActCopDocGrp (ActRemSvyQst + 194) -#define ActPasDocGrp (ActRemSvyQst + 195) -#define ActRemTreDocGrp (ActRemSvyQst + 196) -#define ActFrmCreDocGrp (ActRemSvyQst + 197) -#define ActCreFolDocGrp (ActRemSvyQst + 198) -#define ActCreLnkDocGrp (ActRemSvyQst + 199) -#define ActRenFolDocGrp (ActRemSvyQst + 200) -#define ActRcvFilDocGrpDZ (ActRemSvyQst + 201) -#define ActRcvFilDocGrpCla (ActRemSvyQst + 202) -#define ActExpAdmDocGrp (ActRemSvyQst + 203) -#define ActConAdmDocGrp (ActRemSvyQst + 204) -#define ActZIPAdmDocGrp (ActRemSvyQst + 205) -#define ActUnhDocGrp (ActRemSvyQst + 206) -#define ActHidDocGrp (ActRemSvyQst + 207) -#define ActReqDatAdmDocGrp (ActRemSvyQst + 208) -#define ActChgDatAdmDocGrp (ActRemSvyQst + 209) -#define ActDowAdmDocGrp (ActRemSvyQst + 210) +#define ActAdmDocGrp (ActRemSvyQst + 192) +#define ActReqRemFilDocGrp (ActRemSvyQst + 193) +#define ActRemFilDocGrp (ActRemSvyQst + 194) +#define ActRemFolDocGrp (ActRemSvyQst + 195) +#define ActCopDocGrp (ActRemSvyQst + 196) +#define ActPasDocGrp (ActRemSvyQst + 197) +#define ActRemTreDocGrp (ActRemSvyQst + 198) +#define ActFrmCreDocGrp (ActRemSvyQst + 199) +#define ActCreFolDocGrp (ActRemSvyQst + 200) +#define ActCreLnkDocGrp (ActRemSvyQst + 201) +#define ActRenFolDocGrp (ActRemSvyQst + 202) +#define ActRcvFilDocGrpDZ (ActRemSvyQst + 203) +#define ActRcvFilDocGrpCla (ActRemSvyQst + 204) +#define ActExpAdmDocGrp (ActRemSvyQst + 205) +#define ActConAdmDocGrp (ActRemSvyQst + 206) +#define ActZIPAdmDocGrp (ActRemSvyQst + 207) +#define ActUnhDocGrp (ActRemSvyQst + 208) +#define ActHidDocGrp (ActRemSvyQst + 209) +#define ActReqDatAdmDocGrp (ActRemSvyQst + 210) +#define ActChgDatAdmDocGrp (ActRemSvyQst + 211) +#define ActDowAdmDocGrp (ActRemSvyQst + 212) -#define ActChgToAdmTch (ActRemSvyQst + 211) +#define ActChgToAdmTch (ActRemSvyQst + 213) -#define ActAdmTchCrs (ActRemSvyQst + 212) -#define ActReqRemFilTchCrs (ActRemSvyQst + 213) -#define ActRemFilTchCrs (ActRemSvyQst + 214) -#define ActRemFolTchCrs (ActRemSvyQst + 215) -#define ActCopTchCrs (ActRemSvyQst + 216) -#define ActPasTchCrs (ActRemSvyQst + 217) -#define ActRemTreTchCrs (ActRemSvyQst + 218) -#define ActFrmCreTchCrs (ActRemSvyQst + 219) -#define ActCreFolTchCrs (ActRemSvyQst + 220) -#define ActCreLnkTchCrs (ActRemSvyQst + 221) -#define ActRenFolTchCrs (ActRemSvyQst + 222) -#define ActRcvFilTchCrsDZ (ActRemSvyQst + 223) -#define ActRcvFilTchCrsCla (ActRemSvyQst + 224) -#define ActExpTchCrs (ActRemSvyQst + 225) -#define ActConTchCrs (ActRemSvyQst + 226) -#define ActZIPTchCrs (ActRemSvyQst + 227) -#define ActReqDatTchCrs (ActRemSvyQst + 228) -#define ActChgDatTchCrs (ActRemSvyQst + 229) -#define ActDowTchCrs (ActRemSvyQst + 230) +#define ActAdmTchCrs (ActRemSvyQst + 214) +#define ActReqRemFilTchCrs (ActRemSvyQst + 215) +#define ActRemFilTchCrs (ActRemSvyQst + 216) +#define ActRemFolTchCrs (ActRemSvyQst + 217) +#define ActCopTchCrs (ActRemSvyQst + 218) +#define ActPasTchCrs (ActRemSvyQst + 219) +#define ActRemTreTchCrs (ActRemSvyQst + 220) +#define ActFrmCreTchCrs (ActRemSvyQst + 221) +#define ActCreFolTchCrs (ActRemSvyQst + 222) +#define ActCreLnkTchCrs (ActRemSvyQst + 223) +#define ActRenFolTchCrs (ActRemSvyQst + 224) +#define ActRcvFilTchCrsDZ (ActRemSvyQst + 225) +#define ActRcvFilTchCrsCla (ActRemSvyQst + 226) +#define ActExpTchCrs (ActRemSvyQst + 227) +#define ActConTchCrs (ActRemSvyQst + 228) +#define ActZIPTchCrs (ActRemSvyQst + 229) +#define ActReqDatTchCrs (ActRemSvyQst + 230) +#define ActChgDatTchCrs (ActRemSvyQst + 231) +#define ActDowTchCrs (ActRemSvyQst + 232) -#define ActAdmTchGrp (ActRemSvyQst + 231) -#define ActReqRemFilTchGrp (ActRemSvyQst + 232) -#define ActRemFilTchGrp (ActRemSvyQst + 233) -#define ActRemFolTchGrp (ActRemSvyQst + 234) -#define ActCopTchGrp (ActRemSvyQst + 235) -#define ActPasTchGrp (ActRemSvyQst + 236) -#define ActRemTreTchGrp (ActRemSvyQst + 237) -#define ActFrmCreTchGrp (ActRemSvyQst + 238) -#define ActCreFolTchGrp (ActRemSvyQst + 239) -#define ActCreLnkTchGrp (ActRemSvyQst + 240) -#define ActRenFolTchGrp (ActRemSvyQst + 241) -#define ActRcvFilTchGrpDZ (ActRemSvyQst + 242) -#define ActRcvFilTchGrpCla (ActRemSvyQst + 243) -#define ActExpTchGrp (ActRemSvyQst + 244) -#define ActConTchGrp (ActRemSvyQst + 245) -#define ActZIPTchGrp (ActRemSvyQst + 246) -#define ActReqDatTchGrp (ActRemSvyQst + 247) -#define ActChgDatTchGrp (ActRemSvyQst + 248) -#define ActDowTchGrp (ActRemSvyQst + 249) +#define ActAdmTchGrp (ActRemSvyQst + 233) +#define ActReqRemFilTchGrp (ActRemSvyQst + 234) +#define ActRemFilTchGrp (ActRemSvyQst + 235) +#define ActRemFolTchGrp (ActRemSvyQst + 236) +#define ActCopTchGrp (ActRemSvyQst + 237) +#define ActPasTchGrp (ActRemSvyQst + 238) +#define ActRemTreTchGrp (ActRemSvyQst + 239) +#define ActFrmCreTchGrp (ActRemSvyQst + 240) +#define ActCreFolTchGrp (ActRemSvyQst + 241) +#define ActCreLnkTchGrp (ActRemSvyQst + 242) +#define ActRenFolTchGrp (ActRemSvyQst + 243) +#define ActRcvFilTchGrpDZ (ActRemSvyQst + 244) +#define ActRcvFilTchGrpCla (ActRemSvyQst + 245) +#define ActExpTchGrp (ActRemSvyQst + 246) +#define ActConTchGrp (ActRemSvyQst + 247) +#define ActZIPTchGrp (ActRemSvyQst + 248) +#define ActReqDatTchGrp (ActRemSvyQst + 249) +#define ActChgDatTchGrp (ActRemSvyQst + 250) +#define ActDowTchGrp (ActRemSvyQst + 251) -#define ActChgToAdmSha (ActRemSvyQst + 250) +#define ActChgToAdmSha (ActRemSvyQst + 252) -#define ActAdmShaCrs (ActRemSvyQst + 251) -#define ActReqRemFilShaCrs (ActRemSvyQst + 252) -#define ActRemFilShaCrs (ActRemSvyQst + 253) -#define ActRemFolShaCrs (ActRemSvyQst + 254) -#define ActCopShaCrs (ActRemSvyQst + 255) -#define ActPasShaCrs (ActRemSvyQst + 256) -#define ActRemTreShaCrs (ActRemSvyQst + 257) -#define ActFrmCreShaCrs (ActRemSvyQst + 258) -#define ActCreFolShaCrs (ActRemSvyQst + 259) -#define ActCreLnkShaCrs (ActRemSvyQst + 260) -#define ActRenFolShaCrs (ActRemSvyQst + 261) -#define ActRcvFilShaCrsDZ (ActRemSvyQst + 262) -#define ActRcvFilShaCrsCla (ActRemSvyQst + 263) -#define ActExpShaCrs (ActRemSvyQst + 264) -#define ActConShaCrs (ActRemSvyQst + 265) -#define ActZIPShaCrs (ActRemSvyQst + 266) -#define ActReqDatShaCrs (ActRemSvyQst + 267) -#define ActChgDatShaCrs (ActRemSvyQst + 268) -#define ActDowShaCrs (ActRemSvyQst + 269) +#define ActAdmShaCrs (ActRemSvyQst + 253) +#define ActReqRemFilShaCrs (ActRemSvyQst + 254) +#define ActRemFilShaCrs (ActRemSvyQst + 255) +#define ActRemFolShaCrs (ActRemSvyQst + 256) +#define ActCopShaCrs (ActRemSvyQst + 257) +#define ActPasShaCrs (ActRemSvyQst + 258) +#define ActRemTreShaCrs (ActRemSvyQst + 259) +#define ActFrmCreShaCrs (ActRemSvyQst + 260) +#define ActCreFolShaCrs (ActRemSvyQst + 261) +#define ActCreLnkShaCrs (ActRemSvyQst + 262) +#define ActRenFolShaCrs (ActRemSvyQst + 263) +#define ActRcvFilShaCrsDZ (ActRemSvyQst + 264) +#define ActRcvFilShaCrsCla (ActRemSvyQst + 265) +#define ActExpShaCrs (ActRemSvyQst + 266) +#define ActConShaCrs (ActRemSvyQst + 267) +#define ActZIPShaCrs (ActRemSvyQst + 268) +#define ActReqDatShaCrs (ActRemSvyQst + 269) +#define ActChgDatShaCrs (ActRemSvyQst + 270) +#define ActDowShaCrs (ActRemSvyQst + 271) -#define ActAdmShaGrp (ActRemSvyQst + 270) -#define ActReqRemFilShaGrp (ActRemSvyQst + 271) -#define ActRemFilShaGrp (ActRemSvyQst + 272) -#define ActRemFolShaGrp (ActRemSvyQst + 273) -#define ActCopShaGrp (ActRemSvyQst + 274) -#define ActPasShaGrp (ActRemSvyQst + 275) -#define ActRemTreShaGrp (ActRemSvyQst + 276) -#define ActFrmCreShaGrp (ActRemSvyQst + 277) -#define ActCreFolShaGrp (ActRemSvyQst + 278) -#define ActCreLnkShaGrp (ActRemSvyQst + 279) -#define ActRenFolShaGrp (ActRemSvyQst + 280) -#define ActRcvFilShaGrpDZ (ActRemSvyQst + 281) -#define ActRcvFilShaGrpCla (ActRemSvyQst + 282) -#define ActExpShaGrp (ActRemSvyQst + 283) -#define ActConShaGrp (ActRemSvyQst + 284) -#define ActZIPShaGrp (ActRemSvyQst + 285) -#define ActReqDatShaGrp (ActRemSvyQst + 286) -#define ActChgDatShaGrp (ActRemSvyQst + 287) -#define ActDowShaGrp (ActRemSvyQst + 288) +#define ActAdmShaGrp (ActRemSvyQst + 272) +#define ActReqRemFilShaGrp (ActRemSvyQst + 273) +#define ActRemFilShaGrp (ActRemSvyQst + 274) +#define ActRemFolShaGrp (ActRemSvyQst + 275) +#define ActCopShaGrp (ActRemSvyQst + 276) +#define ActPasShaGrp (ActRemSvyQst + 277) +#define ActRemTreShaGrp (ActRemSvyQst + 278) +#define ActFrmCreShaGrp (ActRemSvyQst + 279) +#define ActCreFolShaGrp (ActRemSvyQst + 280) +#define ActCreLnkShaGrp (ActRemSvyQst + 281) +#define ActRenFolShaGrp (ActRemSvyQst + 282) +#define ActRcvFilShaGrpDZ (ActRemSvyQst + 283) +#define ActRcvFilShaGrpCla (ActRemSvyQst + 284) +#define ActExpShaGrp (ActRemSvyQst + 285) +#define ActConShaGrp (ActRemSvyQst + 286) +#define ActZIPShaGrp (ActRemSvyQst + 287) +#define ActReqDatShaGrp (ActRemSvyQst + 288) +#define ActChgDatShaGrp (ActRemSvyQst + 289) +#define ActDowShaGrp (ActRemSvyQst + 290) -#define ActAdmAsgWrkCrs (ActRemSvyQst + 289) +#define ActAdmAsgWrkCrs (ActRemSvyQst + 291) -#define ActReqRemFilAsgUsr (ActRemSvyQst + 290) -#define ActRemFilAsgUsr (ActRemSvyQst + 291) -#define ActRemFolAsgUsr (ActRemSvyQst + 292) -#define ActCopAsgUsr (ActRemSvyQst + 293) -#define ActPasAsgUsr (ActRemSvyQst + 294) -#define ActRemTreAsgUsr (ActRemSvyQst + 295) -#define ActFrmCreAsgUsr (ActRemSvyQst + 296) -#define ActCreFolAsgUsr (ActRemSvyQst + 297) -#define ActCreLnkAsgUsr (ActRemSvyQst + 298) -#define ActRenFolAsgUsr (ActRemSvyQst + 299) -#define ActRcvFilAsgUsrDZ (ActRemSvyQst + 300) -#define ActRcvFilAsgUsrCla (ActRemSvyQst + 301) -#define ActExpAsgUsr (ActRemSvyQst + 302) -#define ActConAsgUsr (ActRemSvyQst + 303) -#define ActZIPAsgUsr (ActRemSvyQst + 304) -#define ActReqDatAsgUsr (ActRemSvyQst + 305) -#define ActChgDatAsgUsr (ActRemSvyQst + 306) -#define ActDowAsgUsr (ActRemSvyQst + 307) +#define ActReqRemFilAsgUsr (ActRemSvyQst + 292) +#define ActRemFilAsgUsr (ActRemSvyQst + 293) +#define ActRemFolAsgUsr (ActRemSvyQst + 294) +#define ActCopAsgUsr (ActRemSvyQst + 295) +#define ActPasAsgUsr (ActRemSvyQst + 296) +#define ActRemTreAsgUsr (ActRemSvyQst + 297) +#define ActFrmCreAsgUsr (ActRemSvyQst + 298) +#define ActCreFolAsgUsr (ActRemSvyQst + 299) +#define ActCreLnkAsgUsr (ActRemSvyQst + 300) +#define ActRenFolAsgUsr (ActRemSvyQst + 301) +#define ActRcvFilAsgUsrDZ (ActRemSvyQst + 302) +#define ActRcvFilAsgUsrCla (ActRemSvyQst + 303) +#define ActExpAsgUsr (ActRemSvyQst + 304) +#define ActConAsgUsr (ActRemSvyQst + 305) +#define ActZIPAsgUsr (ActRemSvyQst + 306) +#define ActReqDatAsgUsr (ActRemSvyQst + 307) +#define ActChgDatAsgUsr (ActRemSvyQst + 308) +#define ActDowAsgUsr (ActRemSvyQst + 309) -#define ActReqRemFilWrkUsr (ActRemSvyQst + 308) -#define ActRemFilWrkUsr (ActRemSvyQst + 309) -#define ActRemFolWrkUsr (ActRemSvyQst + 310) -#define ActCopWrkUsr (ActRemSvyQst + 311) -#define ActPasWrkUsr (ActRemSvyQst + 312) -#define ActRemTreWrkUsr (ActRemSvyQst + 313) -#define ActFrmCreWrkUsr (ActRemSvyQst + 314) -#define ActCreFolWrkUsr (ActRemSvyQst + 315) -#define ActCreLnkWrkUsr (ActRemSvyQst + 316) -#define ActRenFolWrkUsr (ActRemSvyQst + 317) -#define ActRcvFilWrkUsrDZ (ActRemSvyQst + 318) -#define ActRcvFilWrkUsrCla (ActRemSvyQst + 319) -#define ActExpWrkUsr (ActRemSvyQst + 320) -#define ActConWrkUsr (ActRemSvyQst + 321) -#define ActZIPWrkUsr (ActRemSvyQst + 322) -#define ActReqDatWrkUsr (ActRemSvyQst + 323) -#define ActChgDatWrkUsr (ActRemSvyQst + 324) -#define ActDowWrkUsr (ActRemSvyQst + 325) +#define ActReqRemFilWrkUsr (ActRemSvyQst + 310) +#define ActRemFilWrkUsr (ActRemSvyQst + 311) +#define ActRemFolWrkUsr (ActRemSvyQst + 312) +#define ActCopWrkUsr (ActRemSvyQst + 313) +#define ActPasWrkUsr (ActRemSvyQst + 314) +#define ActRemTreWrkUsr (ActRemSvyQst + 315) +#define ActFrmCreWrkUsr (ActRemSvyQst + 316) +#define ActCreFolWrkUsr (ActRemSvyQst + 317) +#define ActCreLnkWrkUsr (ActRemSvyQst + 318) +#define ActRenFolWrkUsr (ActRemSvyQst + 319) +#define ActRcvFilWrkUsrDZ (ActRemSvyQst + 320) +#define ActRcvFilWrkUsrCla (ActRemSvyQst + 321) +#define ActExpWrkUsr (ActRemSvyQst + 322) +#define ActConWrkUsr (ActRemSvyQst + 323) +#define ActZIPWrkUsr (ActRemSvyQst + 324) +#define ActReqDatWrkUsr (ActRemSvyQst + 325) +#define ActChgDatWrkUsr (ActRemSvyQst + 326) +#define ActDowWrkUsr (ActRemSvyQst + 327) -#define ActReqRemFilAsgCrs (ActRemSvyQst + 326) -#define ActRemFilAsgCrs (ActRemSvyQst + 327) -#define ActRemFolAsgCrs (ActRemSvyQst + 328) -#define ActCopAsgCrs (ActRemSvyQst + 329) -#define ActPasAsgCrs (ActRemSvyQst + 330) -#define ActRemTreAsgCrs (ActRemSvyQst + 331) -#define ActFrmCreAsgCrs (ActRemSvyQst + 332) -#define ActCreFolAsgCrs (ActRemSvyQst + 333) -#define ActCreLnkAsgCrs (ActRemSvyQst + 334) -#define ActRenFolAsgCrs (ActRemSvyQst + 335) -#define ActRcvFilAsgCrsDZ (ActRemSvyQst + 336) -#define ActRcvFilAsgCrsCla (ActRemSvyQst + 337) -#define ActExpAsgCrs (ActRemSvyQst + 338) -#define ActConAsgCrs (ActRemSvyQst + 339) -#define ActZIPAsgCrs (ActRemSvyQst + 340) -#define ActReqDatAsgCrs (ActRemSvyQst + 341) -#define ActChgDatAsgCrs (ActRemSvyQst + 342) -#define ActDowAsgCrs (ActRemSvyQst + 343) +#define ActReqRemFilAsgCrs (ActRemSvyQst + 328) +#define ActRemFilAsgCrs (ActRemSvyQst + 329) +#define ActRemFolAsgCrs (ActRemSvyQst + 330) +#define ActCopAsgCrs (ActRemSvyQst + 331) +#define ActPasAsgCrs (ActRemSvyQst + 332) +#define ActRemTreAsgCrs (ActRemSvyQst + 333) +#define ActFrmCreAsgCrs (ActRemSvyQst + 334) +#define ActCreFolAsgCrs (ActRemSvyQst + 335) +#define ActCreLnkAsgCrs (ActRemSvyQst + 336) +#define ActRenFolAsgCrs (ActRemSvyQst + 337) +#define ActRcvFilAsgCrsDZ (ActRemSvyQst + 338) +#define ActRcvFilAsgCrsCla (ActRemSvyQst + 339) +#define ActExpAsgCrs (ActRemSvyQst + 340) +#define ActConAsgCrs (ActRemSvyQst + 341) +#define ActZIPAsgCrs (ActRemSvyQst + 342) +#define ActReqDatAsgCrs (ActRemSvyQst + 343) +#define ActChgDatAsgCrs (ActRemSvyQst + 344) +#define ActDowAsgCrs (ActRemSvyQst + 345) -#define ActReqRemFilWrkCrs (ActRemSvyQst + 344) -#define ActRemFilWrkCrs (ActRemSvyQst + 345) -#define ActRemFolWrkCrs (ActRemSvyQst + 346) -#define ActCopWrkCrs (ActRemSvyQst + 347) -#define ActPasWrkCrs (ActRemSvyQst + 348) -#define ActRemTreWrkCrs (ActRemSvyQst + 349) -#define ActFrmCreWrkCrs (ActRemSvyQst + 350) -#define ActCreFolWrkCrs (ActRemSvyQst + 351) -#define ActCreLnkWrkCrs (ActRemSvyQst + 352) -#define ActRenFolWrkCrs (ActRemSvyQst + 353) -#define ActRcvFilWrkCrsDZ (ActRemSvyQst + 354) -#define ActRcvFilWrkCrsCla (ActRemSvyQst + 355) -#define ActExpWrkCrs (ActRemSvyQst + 356) -#define ActConWrkCrs (ActRemSvyQst + 357) -#define ActZIPWrkCrs (ActRemSvyQst + 358) -#define ActReqDatWrkCrs (ActRemSvyQst + 359) -#define ActChgDatWrkCrs (ActRemSvyQst + 360) -#define ActDowWrkCrs (ActRemSvyQst + 361) +#define ActReqRemFilWrkCrs (ActRemSvyQst + 346) +#define ActRemFilWrkCrs (ActRemSvyQst + 347) +#define ActRemFolWrkCrs (ActRemSvyQst + 348) +#define ActCopWrkCrs (ActRemSvyQst + 349) +#define ActPasWrkCrs (ActRemSvyQst + 350) +#define ActRemTreWrkCrs (ActRemSvyQst + 351) +#define ActFrmCreWrkCrs (ActRemSvyQst + 352) +#define ActCreFolWrkCrs (ActRemSvyQst + 353) +#define ActCreLnkWrkCrs (ActRemSvyQst + 354) +#define ActRenFolWrkCrs (ActRemSvyQst + 355) +#define ActRcvFilWrkCrsDZ (ActRemSvyQst + 356) +#define ActRcvFilWrkCrsCla (ActRemSvyQst + 357) +#define ActExpWrkCrs (ActRemSvyQst + 358) +#define ActConWrkCrs (ActRemSvyQst + 359) +#define ActZIPWrkCrs (ActRemSvyQst + 360) +#define ActReqDatWrkCrs (ActRemSvyQst + 361) +#define ActChgDatWrkCrs (ActRemSvyQst + 362) +#define ActDowWrkCrs (ActRemSvyQst + 363) -#define ActChgToSeeMrk (ActRemSvyQst + 362) +#define ActChgToSeeMrk (ActRemSvyQst + 364) -#define ActSeeMrkCrs (ActRemSvyQst + 363) -#define ActExpSeeMrkCrs (ActRemSvyQst + 364) -#define ActConSeeMrkCrs (ActRemSvyQst + 365) -#define ActReqDatSeeMrkCrs (ActRemSvyQst + 366) -#define ActSeeMyMrkCrs (ActRemSvyQst + 367) +#define ActSeeMrkCrs (ActRemSvyQst + 365) +#define ActExpSeeMrkCrs (ActRemSvyQst + 366) +#define ActConSeeMrkCrs (ActRemSvyQst + 367) +#define ActReqDatSeeMrkCrs (ActRemSvyQst + 368) +#define ActSeeMyMrkCrs (ActRemSvyQst + 369) -#define ActSeeMrkGrp (ActRemSvyQst + 368) -#define ActExpSeeMrkGrp (ActRemSvyQst + 369) -#define ActConSeeMrkGrp (ActRemSvyQst + 370) -#define ActReqDatSeeMrkGrp (ActRemSvyQst + 371) -#define ActSeeMyMrkGrp (ActRemSvyQst + 372) +#define ActSeeMrkGrp (ActRemSvyQst + 370) +#define ActExpSeeMrkGrp (ActRemSvyQst + 371) +#define ActConSeeMrkGrp (ActRemSvyQst + 372) +#define ActReqDatSeeMrkGrp (ActRemSvyQst + 373) +#define ActSeeMyMrkGrp (ActRemSvyQst + 374) -#define ActChgToAdmMrk (ActRemSvyQst + 373) +#define ActChgToAdmMrk (ActRemSvyQst + 375) -#define ActAdmMrkCrs (ActRemSvyQst + 374) -#define ActReqRemFilMrkCrs (ActRemSvyQst + 375) -#define ActRemFilMrkCrs (ActRemSvyQst + 376) -#define ActRemFolMrkCrs (ActRemSvyQst + 377) -#define ActCopMrkCrs (ActRemSvyQst + 378) -#define ActPasMrkCrs (ActRemSvyQst + 379) -#define ActRemTreMrkCrs (ActRemSvyQst + 380) -#define ActFrmCreMrkCrs (ActRemSvyQst + 381) -#define ActCreFolMrkCrs (ActRemSvyQst + 382) -#define ActRenFolMrkCrs (ActRemSvyQst + 383) -#define ActRcvFilMrkCrsDZ (ActRemSvyQst + 384) -#define ActRcvFilMrkCrsCla (ActRemSvyQst + 385) -#define ActExpAdmMrkCrs (ActRemSvyQst + 386) -#define ActConAdmMrkCrs (ActRemSvyQst + 387) -#define ActZIPAdmMrkCrs (ActRemSvyQst + 388) -#define ActUnhMrkCrs (ActRemSvyQst + 389) -#define ActHidMrkCrs (ActRemSvyQst + 390) -#define ActReqDatAdmMrkCrs (ActRemSvyQst + 391) -#define ActChgDatAdmMrkCrs (ActRemSvyQst + 392) -#define ActDowAdmMrkCrs (ActRemSvyQst + 393) -#define ActChgNumRowHeaCrs (ActRemSvyQst + 394) -#define ActChgNumRowFooCrs (ActRemSvyQst + 395) +#define ActAdmMrkCrs (ActRemSvyQst + 376) +#define ActReqRemFilMrkCrs (ActRemSvyQst + 377) +#define ActRemFilMrkCrs (ActRemSvyQst + 378) +#define ActRemFolMrkCrs (ActRemSvyQst + 379) +#define ActCopMrkCrs (ActRemSvyQst + 380) +#define ActPasMrkCrs (ActRemSvyQst + 381) +#define ActRemTreMrkCrs (ActRemSvyQst + 382) +#define ActFrmCreMrkCrs (ActRemSvyQst + 383) +#define ActCreFolMrkCrs (ActRemSvyQst + 384) +#define ActRenFolMrkCrs (ActRemSvyQst + 385) +#define ActRcvFilMrkCrsDZ (ActRemSvyQst + 386) +#define ActRcvFilMrkCrsCla (ActRemSvyQst + 387) +#define ActExpAdmMrkCrs (ActRemSvyQst + 388) +#define ActConAdmMrkCrs (ActRemSvyQst + 389) +#define ActZIPAdmMrkCrs (ActRemSvyQst + 390) +#define ActUnhMrkCrs (ActRemSvyQst + 391) +#define ActHidMrkCrs (ActRemSvyQst + 392) +#define ActReqDatAdmMrkCrs (ActRemSvyQst + 393) +#define ActChgDatAdmMrkCrs (ActRemSvyQst + 394) +#define ActDowAdmMrkCrs (ActRemSvyQst + 395) +#define ActChgNumRowHeaCrs (ActRemSvyQst + 396) +#define ActChgNumRowFooCrs (ActRemSvyQst + 397) -#define ActAdmMrkGrp (ActRemSvyQst + 396) -#define ActReqRemFilMrkGrp (ActRemSvyQst + 397) -#define ActRemFilMrkGrp (ActRemSvyQst + 398) -#define ActRemFolMrkGrp (ActRemSvyQst + 399) -#define ActCopMrkGrp (ActRemSvyQst + 400) -#define ActPasMrkGrp (ActRemSvyQst + 401) -#define ActRemTreMrkGrp (ActRemSvyQst + 402) -#define ActFrmCreMrkGrp (ActRemSvyQst + 403) -#define ActCreFolMrkGrp (ActRemSvyQst + 404) -#define ActRenFolMrkGrp (ActRemSvyQst + 405) -#define ActRcvFilMrkGrpDZ (ActRemSvyQst + 406) -#define ActRcvFilMrkGrpCla (ActRemSvyQst + 407) -#define ActExpAdmMrkGrp (ActRemSvyQst + 408) -#define ActConAdmMrkGrp (ActRemSvyQst + 409) -#define ActZIPAdmMrkGrp (ActRemSvyQst + 410) -#define ActUnhMrkGrp (ActRemSvyQst + 411) -#define ActHidMrkGrp (ActRemSvyQst + 412) -#define ActReqDatAdmMrkGrp (ActRemSvyQst + 413) -#define ActChgDatAdmMrkGrp (ActRemSvyQst + 414) -#define ActDowAdmMrkGrp (ActRemSvyQst + 415) -#define ActChgNumRowHeaGrp (ActRemSvyQst + 416) -#define ActChgNumRowFooGrp (ActRemSvyQst + 417) +#define ActAdmMrkGrp (ActRemSvyQst + 398) +#define ActReqRemFilMrkGrp (ActRemSvyQst + 399) +#define ActRemFilMrkGrp (ActRemSvyQst + 400) +#define ActRemFolMrkGrp (ActRemSvyQst + 401) +#define ActCopMrkGrp (ActRemSvyQst + 402) +#define ActPasMrkGrp (ActRemSvyQst + 403) +#define ActRemTreMrkGrp (ActRemSvyQst + 404) +#define ActFrmCreMrkGrp (ActRemSvyQst + 405) +#define ActCreFolMrkGrp (ActRemSvyQst + 406) +#define ActRenFolMrkGrp (ActRemSvyQst + 407) +#define ActRcvFilMrkGrpDZ (ActRemSvyQst + 408) +#define ActRcvFilMrkGrpCla (ActRemSvyQst + 409) +#define ActExpAdmMrkGrp (ActRemSvyQst + 410) +#define ActConAdmMrkGrp (ActRemSvyQst + 411) +#define ActZIPAdmMrkGrp (ActRemSvyQst + 412) +#define ActUnhMrkGrp (ActRemSvyQst + 413) +#define ActHidMrkGrp (ActRemSvyQst + 414) +#define ActReqDatAdmMrkGrp (ActRemSvyQst + 415) +#define ActChgDatAdmMrkGrp (ActRemSvyQst + 416) +#define ActDowAdmMrkGrp (ActRemSvyQst + 417) +#define ActChgNumRowHeaGrp (ActRemSvyQst + 418) +#define ActChgNumRowFooGrp (ActRemSvyQst + 419) -#define ActReqRemFilBrf (ActRemSvyQst + 418) -#define ActRemFilBrf (ActRemSvyQst + 419) -#define ActRemFolBrf (ActRemSvyQst + 420) -#define ActCopBrf (ActRemSvyQst + 421) -#define ActPasBrf (ActRemSvyQst + 422) -#define ActRemTreBrf (ActRemSvyQst + 423) -#define ActFrmCreBrf (ActRemSvyQst + 424) -#define ActCreFolBrf (ActRemSvyQst + 425) -#define ActCreLnkBrf (ActRemSvyQst + 426) -#define ActRenFolBrf (ActRemSvyQst + 427) -#define ActRcvFilBrfDZ (ActRemSvyQst + 428) -#define ActRcvFilBrfCla (ActRemSvyQst + 429) -#define ActExpBrf (ActRemSvyQst + 430) -#define ActConBrf (ActRemSvyQst + 431) -#define ActZIPBrf (ActRemSvyQst + 432) -#define ActReqDatBrf (ActRemSvyQst + 433) -#define ActChgDatBrf (ActRemSvyQst + 434) -#define ActDowBrf (ActRemSvyQst + 435) -#define ActReqRemOldBrf (ActRemSvyQst + 436) -#define ActRemOldBrf (ActRemSvyQst + 437) +#define ActReqRemFilBrf (ActRemSvyQst + 420) +#define ActRemFilBrf (ActRemSvyQst + 421) +#define ActRemFolBrf (ActRemSvyQst + 422) +#define ActCopBrf (ActRemSvyQst + 423) +#define ActPasBrf (ActRemSvyQst + 424) +#define ActRemTreBrf (ActRemSvyQst + 425) +#define ActFrmCreBrf (ActRemSvyQst + 426) +#define ActCreFolBrf (ActRemSvyQst + 427) +#define ActCreLnkBrf (ActRemSvyQst + 428) +#define ActRenFolBrf (ActRemSvyQst + 429) +#define ActRcvFilBrfDZ (ActRemSvyQst + 430) +#define ActRcvFilBrfCla (ActRemSvyQst + 431) +#define ActExpBrf (ActRemSvyQst + 432) +#define ActConBrf (ActRemSvyQst + 433) +#define ActZIPBrf (ActRemSvyQst + 434) +#define ActReqDatBrf (ActRemSvyQst + 435) +#define ActChgDatBrf (ActRemSvyQst + 436) +#define ActDowBrf (ActRemSvyQst + 437) +#define ActReqRemOldBrf (ActRemSvyQst + 438) +#define ActRemOldBrf (ActRemSvyQst + 439) /*****************************************************************************/ /******************************* Users tab ***********************************/ diff --git a/swad_browser.c b/swad_browser.c index 9c8d77a9c..e1c95bbc1 100644 --- a/swad_browser.c +++ b/swad_browser.c @@ -449,6 +449,39 @@ static const Act_Action_t Brw_ActReqDatFile[Brw_NUM_TYPES_FILE_BROWSER] = [Brw_ADMI_ASS_PRJ] = ActReqDatAssPrj, }; +static const Act_Action_t Brw_ActReqLnk[Brw_NUM_TYPES_FILE_BROWSER] = + { + [Brw_UNKNOWN ] = ActUnk, + [Brw_SHOW_DOC_CRS] = ActReqLnkSeeDocCrs, + [Brw_SHOW_MRK_CRS] = ActUnk, // ActReqLnkSeeMrkCrs, + [Brw_ADMI_DOC_CRS] = ActReqLnkAdmDocCrs, + [Brw_ADMI_SHR_CRS] = ActUnk, + [Brw_ADMI_SHR_GRP] = ActUnk, + [Brw_ADMI_WRK_USR] = ActUnk, + [Brw_ADMI_WRK_CRS] = ActUnk, + [Brw_ADMI_MRK_CRS] = ActUnk, // ActReqLnkAdmMrkCrs, + [Brw_ADMI_BRF_USR] = ActUnk, + [Brw_SHOW_DOC_GRP] = ActUnk, + [Brw_ADMI_DOC_GRP] = ActUnk, + [Brw_SHOW_MRK_GRP] = ActUnk, // ActReqLnkSeeMrkGrp, + [Brw_ADMI_MRK_GRP] = ActUnk, // ActReqLnkAdmMrkGrp, + [Brw_ADMI_ASG_USR] = ActUnk, + [Brw_ADMI_ASG_CRS] = ActUnk, + [Brw_SHOW_DOC_DEG] = ActUnk, + [Brw_ADMI_DOC_DEG] = ActUnk, + [Brw_SHOW_DOC_CTR] = ActUnk, + [Brw_ADMI_DOC_CTR] = ActUnk, + [Brw_SHOW_DOC_INS] = ActUnk, + [Brw_ADMI_DOC_INS] = ActUnk, + [Brw_ADMI_SHR_DEG] = ActUnk, + [Brw_ADMI_SHR_CTR] = ActUnk, + [Brw_ADMI_SHR_INS] = ActUnk, + [Brw_ADMI_TCH_CRS] = ActUnk, + [Brw_ADMI_TCH_GRP] = ActUnk, + [Brw_ADMI_DOC_PRJ] = ActUnk, + [Brw_ADMI_ASS_PRJ] = ActUnk, + }; + static const Act_Action_t Brw_ActDowFile[Brw_NUM_TYPES_FILE_BROWSER] = { [Brw_UNKNOWN ] = ActUnk, @@ -1260,6 +1293,9 @@ static void Brw_PutFormToCreateALink (const char *FileNameToShow); static bool Brw_RcvFileInFileBrw (Brw_UploadType_t UploadType); static bool Brw_CheckIfUploadIsAllowed (const char *FileType); +static void Brw_PutIconToGetLinkToFile (void *FileMetadata); +static void Brw_PutParamsToGetLinkToFile (void *FileMetadata); + static bool Brw_CheckIfICanEditFileMetadata (long IAmTheOwner); static bool Brw_CheckIfIAmOwnerOfFile (long PublisherUsrCod); static void Brw_WriteBigLinkToDownloadFile (const char *URL, @@ -1523,6 +1559,7 @@ void Brw_GetParAndInitFileBrowser (void) case ActConSeeDocCrs: case ActZIPSeeDocCrs: case ActReqDatSeeDocCrs: + case ActReqLnkSeeDocCrs: case ActDowSeeDocCrs: Gbl.FileBrowser.Type = Brw_SHOW_DOC_CRS; break; @@ -1559,6 +1596,7 @@ void Brw_GetParAndInitFileBrowser (void) case ActHidDocCrs: case ActReqDatAdmDocCrs: case ActChgDatAdmDocCrs: + case ActReqLnkAdmDocCrs: case ActDowAdmDocCrs: Gbl.FileBrowser.Type = Brw_ADMI_DOC_CRS; break; @@ -7842,6 +7880,7 @@ void Brw_ShowFileMetadata (void) bool ICanEdit; bool ICanChangePublic = false; bool FileHasPublisher; + bool PutIconToGetLink; Brw_License_t License; unsigned LicenseUnsigned; @@ -7928,6 +7967,23 @@ void Brw_ShowFileMetadata (void) FileMetadata.FilFolLnk.Name, FileNameToShow); + /***** Begin box *****/ + PutIconToGetLink = (Gbl.FileBrowser.Type == Brw_SHOW_DOC_CRS || // Only document zone + Gbl.FileBrowser.Type == Brw_ADMI_DOC_CRS) && + (FileMetadata.FilFolLnk.Type == Brw_IS_FILE || // Only files or links + FileMetadata.FilFolLnk.Type == Brw_IS_LINK) && + (Gbl.Usrs.Me.Role.Logged == Rol_TCH || // Only if I am teacher or superuser + Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM); + if (PutIconToGetLink) + Box_BoxShadowBegin (NULL,NULL, + Brw_PutIconToGetLinkToFile,&FileMetadata, + NULL); + else + Box_BoxShadowBegin (NULL,NULL, + NULL,NULL, + NULL); + + /***** Begin form to update the metadata of a file *****/ if (ICanEdit) // I can edit file properties { @@ -7950,16 +8006,14 @@ void Brw_ShowFileMetadata (void) } Frm_BeginForm (Brw_ActRecDatFile[Gbl.FileBrowser.Type]); - Brw_PutParamsFileBrowser (NULL, // Not used - NULL, // Not used + Brw_PutParamsFileBrowser (NULL, // Not used + NULL, // Not used Brw_IS_UNKNOWN, // Not used FileMetadata.FilCod); } - /***** Begin box and table *****/ - Box_BoxTableShadowBegin (NULL,NULL, - NULL,NULL, - NULL,2); + /***** Begin table *****/ + HTM_TABLE_BeginWidePadding (2); /***** Link to download the file *****/ HTM_TR_Begin (NULL); @@ -7976,7 +8030,7 @@ void Brw_ShowFileMetadata (void) Frm_LabelColumn ("RT",NULL,Txt_Filename); HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", - The_GetSuffix ()); + The_GetSuffix ()); Brw_WriteSmallLinkToDownloadFile (URL,&FileMetadata,FileNameToShow); HTM_TD_End (); @@ -7988,13 +8042,13 @@ void Brw_ShowFileMetadata (void) Frm_LabelColumn ("RT",NULL,Txt_Uploaded_by); HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", - The_GetSuffix ()); + The_GetSuffix ()); if (FileHasPublisher) { /* Show photo */ Pho_ShowUsrPhotoIfAllowed (&PublisherUsrDat, - ClassPhoto[Gbl.Prefs.PhotoShape],Pho_ZOOM, - false); + ClassPhoto[Gbl.Prefs.PhotoShape],Pho_ZOOM, + false); /* Write name */ HTM_NBSP (); @@ -8018,7 +8072,7 @@ void Brw_ShowFileMetadata (void) Frm_LabelColumn ("RT",NULL,Txt_File_size); HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", - The_GetSuffix ()); + The_GetSuffix ()); HTM_Txt (FileSizeStr); HTM_TD_End (); @@ -8030,7 +8084,7 @@ void Brw_ShowFileMetadata (void) Frm_LabelColumn ("RT",NULL,Txt_Date_of_creation); HTM_TD_Begin ("id=\"filedate\" class=\"LB DAT_STRONG_%s\"", - The_GetSuffix ()); + The_GetSuffix ()); Dat_WriteLocalDateHMSFromUTC ("filedate",FileMetadata.Time, Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA, true,true,true,0x7); @@ -8043,12 +8097,12 @@ void Brw_ShowFileMetadata (void) /* Label */ Frm_LabelColumn ("RT",ICanChangePublic ? "PublicFile" : - NULL, - Txt_Availability); + NULL, + Txt_Availability); /* Data */ HTM_TD_Begin ("class=\"LT DAT_STRONG_%s\"", - The_GetSuffix ()); + The_GetSuffix ()); if (ICanChangePublic) // I can change file to public { HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE, @@ -8073,12 +8127,12 @@ void Brw_ShowFileMetadata (void) /* Label */ Frm_LabelColumn ("RT",ICanEdit ? "License" : - NULL, - Txt_License); + NULL, + Txt_License); /* Data */ HTM_TD_Begin ("class=\"LT DAT_STRONG_%s\"", - The_GetSuffix ()); + The_GetSuffix ()); if (ICanEdit) // I can edit file properties { HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE, @@ -8105,10 +8159,10 @@ void Brw_ShowFileMetadata (void) { HTM_TR_Begin (NULL); - Frm_LabelColumn ("RT",NULL,Txt_My_views); + Frm_LabelColumn ("RT",NULL,Txt_My_views); HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", - The_GetSuffix ()); + The_GetSuffix ()); HTM_Unsigned (FileMetadata.NumMyViews); HTM_TD_End (); @@ -8121,7 +8175,7 @@ void Brw_ShowFileMetadata (void) Frm_LabelColumn ("RT",NULL,Txt_Identified_views); HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", - The_GetSuffix ()); + The_GetSuffix ()); HTM_TxtF ("%u ",FileMetadata.NumViewsFromLoggedUsrs); HTM_TxtF ("(%u %s)", FileMetadata.NumLoggedUsrs, @@ -8137,24 +8191,24 @@ void Brw_ShowFileMetadata (void) Frm_LabelColumn ("RT",NULL,Txt_Public_views); HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", - The_GetSuffix ()); + The_GetSuffix ()); HTM_Unsigned (FileMetadata.NumPublicViews); HTM_TD_End (); HTM_TR_End (); - /***** End box *****/ + /***** End table *****/ + HTM_TABLE_End (); + + /***** End form *****/ if (ICanEdit) // I can edit file properties { - /* End table, send button and end box */ - Box_BoxTableWithButtonEnd (Btn_CONFIRM_BUTTON,Txt_Save_file_properties); - - /* End form */ + Btn_PutButton (Btn_CONFIRM_BUTTON,Txt_Save_file_properties); Frm_EndForm (); } - else - /* End table and box */ - Box_BoxTableEnd (); + + /***** End box *****/ + Box_BoxEnd (); /***** Mark possible notifications as seen *****/ switch (Gbl.FileBrowser.Type) @@ -8231,6 +8285,57 @@ void Brw_ShowFileMetadata (void) Brw_ShowAgainFileBrowserOrWorks (); } +/*****************************************************************************/ +/*********************** Put icon to get link to file ************************/ +/*****************************************************************************/ + +static void Brw_PutIconToGetLinkToFile (void *FileMetadata) + { + Ico_PutContextualIconToGetLink (Brw_ActReqLnk[Gbl.FileBrowser.Type], + Brw_PutParamsToGetLinkToFile,FileMetadata); + } + +static void Brw_PutParamsToGetLinkToFile (void *FileMetadata) + { + if (FileMetadata) + Brw_PutParamsFileBrowser (NULL, // Not used + NULL, // Not used + Brw_IS_UNKNOWN, // Not used + ((struct FileMetadata *) FileMetadata)->FilCod); + } + +/*****************************************************************************/ +/*********************** Put icon to get link to file ************************/ +/*****************************************************************************/ + +void Brw_GetLinkToFile (void) + { + extern const char *Txt_Link_to_resource_X_copied_into_clipboard; + struct FileMetadata FileMetadata; + bool Found; + + /***** Get parameters related to file browser *****/ + Brw_GetParAndInitFileBrowser (); + + /***** Get file metadata *****/ + FileMetadata.FilCod = Brw_GetParamFilCod (); + Brw_GetFileMetadataByCod (&FileMetadata); + Found = Brw_GetFileTypeSizeAndDate (&FileMetadata); + + if (Found) + { + /***** Copy link to file into resource clipboard *****/ + // Prg_DB_CopyToClipboard (&FileMetadata); + + /***** Write sucess message *****/ + Ale_ShowAlert (Ale_SUCCESS,Txt_Link_to_resource_X_copied_into_clipboard, + FileMetadata.FilFolLnk.Name); + } + + /***** Show again the file browser *****/ + Brw_ShowAgainFileBrowserOrWorks (); + } + /*****************************************************************************/ /******************* Download a file from a file browser *********************/ /*****************************************************************************/ @@ -8717,7 +8822,7 @@ void Brw_ChgFileMetadata (void) /***** Write sucess message *****/ Ale_ShowAlert (Ale_SUCCESS,Txt_The_properties_of_file_X_have_been_saved, - Gbl.FileBrowser.FilFolLnk.Name); + FileMetadata.FilFolLnk.Name); } else /***** Write error message and exit *****/ diff --git a/swad_browser.h b/swad_browser.h index 75330c4ba..7c7d7c639 100644 --- a/swad_browser.h +++ b/swad_browser.h @@ -225,6 +225,9 @@ void Brw_SetDocumentAsVisible (void); void Brw_SetDocumentAsHidden (void); bool Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_FileType_t FileType,const char *Path); void Brw_ShowFileMetadata (void); + +void Brw_GetLinkToFile (void); + void Brw_DownloadFile (void); void Brw_GetLinkToDownloadFile (const char *PathInTree,const char *FileName,char *URL); void Brw_ChgFileMetadata (void); diff --git a/swad_changelog.h b/swad_changelog.h index 295256074..165bec6f5 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -606,13 +606,15 @@ TODO: Fix bug: error al enviar un mensaje a dos recipientes, error on duplicate TODO: Attach pdf files in multimedia. */ -#define Log_PLATFORM_VERSION "SWAD 21.116.3 (2022-09-10)" +#define Log_PLATFORM_VERSION "SWAD 21.117 (2022-09-12)" #define CSS_FILE "swad21.107.1.css" #define JS_FILE "swad21.100.js" /* - Version 21.117: Sep 10, 2022 New database table with clipboards for program resources. (? lines) + Version 21.117: Sep 12, 2022 New database table with clipboards for program resources. + New actions to get link to file in course document area. (329514 lines) 1 change necessary in database: -CREATE TABLE IF NOT EXISTS prg_clipboards... +ALTER TABLE prg_resources ADD COLUMN Type ENUM('none','asg','cfe','exa','gam','svy','doc','mrk','att','for') NOT NULL DEFAULT 'none' AFTER Hidden; +CREATE TABLE IF NOT EXISTS prg_clipboards (UsrCod INT NOT NULL,CrsCod INT NOT NULL,Type ENUM('none','asg','cfe','exa','gam','svy','doc','mrk','att','for') NOT NULL DEFAULT 'none',Cod INT NOT NULL DEFAULT -1,CopyTime TIMESTAMP,INDEX(UsrCod,CrsCod,CopyTime),INDEX(CrsCod,Type,Cod),INDEX(CopyTime)); If you want to use MyISAM: ALTER TABLE prg_clipboards ENGINE=MyISAM; diff --git a/swad_database.c b/swad_database.c index 0a6362bc0..3ff7fc75f 100644 --- a/swad_database.c +++ b/swad_database.c @@ -727,7 +727,15 @@ mysql> DESCRIBE crs_info_read; DB_CreateTable ("CREATE TABLE IF NOT EXISTS crs_info_read (" "UsrCod INT NOT NULL," "CrsCod INT NOT NULL," - "InfoType ENUM('intro','description','theory','practices','bibliography','FAQ','links','assessment') NOT NULL," + "InfoType ENUM(" + "'intro'," + "'description'," + "'theory'," + "'practices'," + "'bibliography'," + "'FAQ'," + "'links'," + "'assessment') NOT NULL," "UNIQUE INDEX(UsrCod,CrsCod,InfoType))"); /***** Table crs_info_src *****/ @@ -745,7 +753,15 @@ mysql> DESCRIBE crs_info_src; */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS crs_info_src (" "CrsCod INT NOT NULL DEFAULT -1," - "InfoType ENUM('intro','description','theory','practices','bibliography','FAQ','links','assessment') NOT NULL," + "InfoType ENUM(" + "'intro'," + "'description'," + "'theory'," + "'practices'," + "'bibliography'," + "'FAQ'," + "'links'," + "'assessment') NOT NULL," "InfoSrc ENUM('none','editor','plain_text','rich_text','page','URL') NOT NULL," "MustBeRead ENUM('N','Y') NOT NULL DEFAULT 'N'," "UNIQUE INDEX(CrsCod,InfoType))"); @@ -765,7 +781,15 @@ mysql> DESCRIBE crs_info_txt; */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS crs_info_txt (" "CrsCod INT NOT NULL DEFAULT -1," - "InfoType ENUM('intro','description','theory','practices','bibliography','FAQ','links','assessment') NOT NULL," + "InfoType ENUM(" + "'intro'," + "'description'," + "'theory'," + "'practices'," + "'bibliography'," + "'FAQ'," + "'links'," + "'assessment') NOT NULL," "InfoTxtHTML LONGTEXT NOT NULL," "InfoTxtMD LONGTEXT NOT NULL," "UNIQUE INDEX(CrsCod,InfoType))"); @@ -2094,7 +2118,15 @@ mysql> DESCRIBE med_media; */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS med_media (" "MedCod INT NOT NULL AUTO_INCREMENT," - "Type ENUM('none','jpg','gif','mp4','webm','ogg','youtube','embed') NOT NULL DEFAULT 'none'," + "Type ENUM(" + "'none'," + "'jpg'," + "'gif'," + "'mp4'," + "'webm'," + "'ogg'," + "'youtube'," + "'embed') NOT NULL DEFAULT 'none'," "Name VARCHAR(43) NOT NULL DEFAULT ''," // Med_BYTES_NAME "URL VARCHAR(255) NOT NULL DEFAULT ''," // Cns_MAX_BYTES_WWW "Title VARCHAR(2047) NOT NULL DEFAULT ''," // Med_MAX_BYTES_TITLE @@ -2421,26 +2453,36 @@ mysql> DESCRIBE plg_plugins; /***** Table prg_clipboards *****/ /* mysql> DESCRIBE prg_clipboards; -+-------------+------------+------+-----+-------------------+-----------------------------+ -| Field | Type | Null | Key | Default | Extra | -+-------------+------------+------+-----+-------------------+-----------------------------+ -| UsrCod | int(11) | NO | PRI | NULL | | -| FileBrowser | tinyint(4) | NO | MUL | NULL | | -| Cod | int(11) | NO | | -1 | | -| WorksUsrCod | int(11) | NO | MUL | NULL | | -| FileType | tinyint(4) | NO | | 0 | | -| Path | text | NO | | NULL | | -| CopyTime | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | -+-------------+------------+------+-----+-------------------+-----------------------------+ -7 rows in set (0.00 sec) ++----------+--------------------------------------------------------------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++----------+--------------------------------------------------------------------+------+-----+---------+-------+ +| UsrCod | int | NO | MUL | NULL | | +| CrsCod | int | NO | MUL | NULL | | +| Type | enum('none','asg','cfe','exa','gam','svy','doc','mrk','att','for') | NO | | none | | +| Cod | int | NO | | -1 | | +| CopyTime | timestamp | YES | MUL | NULL | | ++----------+--------------------------------------------------------------------+------+-----+---------+-------+ +5 rows in set (0,00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS prg_clipboards (" "UsrCod INT NOT NULL," - "RscType TINYINT NOT NULL DEFAULT 0," + "CrsCod INT NOT NULL," + "Type ENUM(" + "'none'," + "'asg'," + "'cfe'," + "'exa'," + "'gam'," + "'svy'," + "'doc'," + "'mrk'," + "'att'," + "'for') NOT NULL DEFAULT 'none'," "Cod INT NOT NULL DEFAULT -1," "CopyTime TIMESTAMP," - "INDEX(UsrCod)," - "INDEX(RscType,Cod)))"); + "INDEX(UsrCod,CrsCod,CopyTime)," + "INDEX(CrsCod,Type,Cod)," + "INDEX(CopyTime))"); /***** Table prg_items *****/ /* @@ -2478,22 +2520,34 @@ mysql> DESCRIBE prg_items; /***** Table prg_resources *****/ /* mysql> DESCRIBE prg_resources; -+--------+---------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+--------+---------------+------+-----+---------+----------------+ -| RscCod | int | NO | PRI | NULL | auto_increment | -| ItmCod | int | NO | MUL | -1 | | -| RscInd | int | NO | | 0 | | -| Hidden | enum('N','Y') | NO | | N | | -| Title | varchar(2047) | NO | | NULL | | -+--------+---------------+------+-----+---------+----------------+ -5 rows in set (0,00 sec) ++--------+--------------------------------------------------------------------+------+-----+---------+----------------+ +| Field | Type | Null | Key | Default | Extra | ++--------+--------------------------------------------------------------------+------+-----+---------+----------------+ +| RscCod | int | NO | PRI | NULL | auto_increment | +| ItmCod | int | NO | MUL | -1 | | +| RscInd | int | NO | | 0 | | +| Hidden | enum('N','Y') | NO | | N | | +| Type | enum('none','asg','cfe','exa','gam','svy','doc','mrk','att','for') | NO | | none | | +| Title | varchar(2047) | NO | | NULL | | ++--------+--------------------------------------------------------------------+------+-----+---------+----------------+ +6 rows in set (0,00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS prg_resources (" "RscCod INT NOT NULL AUTO_INCREMENT," "ItmCod INT NOT NULL DEFAULT -1," "RscInd INT NOT NULL DEFAULT 0," "Hidden ENUM('N','Y') NOT NULL DEFAULT 'N'," + "Type ENUM(" + "'none'," + "'asg'," + "'cfe'," + "'exa'," + "'gam'," + "'svy'," + "'doc'," + "'mrk'," + "'att'," + "'for') NOT NULL DEFAULT 'none'," "Title VARCHAR(2047) NOT NULL," // PrgRsc_MAX_BYTES_PROGRAM_RESOURCE_TITLE "UNIQUE INDEX(RscCod)," "UNIQUE INDEX(ItmCod,RscInd))"); diff --git a/swad_icon.c b/swad_icon.c index f62ce4c9f..b0bdd126c 100644 --- a/swad_icon.c +++ b/swad_icon.c @@ -307,6 +307,14 @@ void Ico_PutContextualIconToPrint (Act_Action_t NextAction, "print.svg",Ico_BLACK); } +void Ico_PutContextualIconToGetLink (Act_Action_t NextAction, + void (*FuncParams) (void *Args),void *Args) + { + Lay_PutContextualLinkOnlyIcon (NextAction,NULL, + FuncParams,Args, + "link.svg",Ico_BLACK); + } + void Ico_PutContextualIconToCopy (Act_Action_t NextAction, void (*FuncParams) (void *Args),void *Args) { diff --git a/swad_icon.h b/swad_icon.h index 1b0ddd56f..0085c1901 100644 --- a/swad_icon.h +++ b/swad_icon.h @@ -81,6 +81,8 @@ void Ico_PutContextualIconToHideUnhide (const Act_Action_t NextAction[2],const c bool Hidden); void Ico_PutContextualIconToPrint (Act_Action_t NextAction, void (*FuncParams) (void *Args),void *Args); +void Ico_PutContextualIconToGetLink (Act_Action_t NextAction, + void (*FuncParams) (void *Args),void *Args); void Ico_PutContextualIconToCopy (Act_Action_t NextAction, void (*FuncParams) (void *Args),void *Args); void Ico_PutContextualIconToPaste (Act_Action_t NextAction, diff --git a/swad_program_resource.c b/swad_program_resource.c index c6f80a08d..8b807864c 100644 --- a/swad_program_resource.c +++ b/swad_program_resource.c @@ -49,6 +49,51 @@ typedef enum PrgRsc_MOVE_DOWN, } PrgRsc_MoveUpDown_t; +#define PrgRsc_NUM_TYPES 10 +typedef enum + { + PrgRsc_NONE, + // gui TEACHING_GUIDE // Link to teaching guide + // bib BIBLIOGRAPHY // Link to bibliography + // faq FAQ // Link to FAQ + // lnk LINKS // Link to links + // tmt TIMETABLE // Link to timetable + PrgRsc_ASSIGNMENT, + // prj PROJECT // A project is only for some students + PrgRsc_CALL_FOR_EXAM, + // tst TEST // User selects tags, teacher should select + PrgRsc_EXAM, + PrgRsc_GAME, + PrgRsc_SURVEY, + PrgRsc_DOCUMENT, + PrgRsc_MARKS, + // grp GROUPS // ??? User select groups + PrgRsc_ATTENDANCE_EVENT, + PrgRsc_FORUM_THREAD, + } PrgRsc_Type_t; + +const char *PrgRsc_TypesDB[PrgRsc_NUM_TYPES] = + { + [PrgRsc_NONE ] = "non", + // gui TEACHING_GUIDE // Link to teaching guide + // bib BIBLIOGRAPHY // Link to bibliography + // faq FAQ // Link to FAQ + // lnk LINKS // Link to links + // tmt TIMETABLE // Link to timetable + [PrgRsc_ASSIGNMENT ] = "asg", + // prj PROJECT // A project is only for some students + [PrgRsc_CALL_FOR_EXAM ] = "cfe", + // tst TEST // User selects tags, teacher should select + [PrgRsc_EXAM ] = "exa", + [PrgRsc_GAME ] = "gam", + [PrgRsc_SURVEY ] = "svy", + [PrgRsc_DOCUMENT ] = "doc", + [PrgRsc_MARKS ] = "mrk", + // grp GROUPS // ??? User select groups + [PrgRsc_ATTENDANCE_EVENT] = "att", + [PrgRsc_FORUM_THREAD ] = "for", + }; + /*****************************************************************************/ /***************************** Private variables *****************************/ /*****************************************************************************/ diff --git a/swad_text.c b/swad_text.c index 6c30de821..55419f500 100644 --- a/swad_text.c +++ b/swad_text.c @@ -19798,6 +19798,29 @@ const char *Txt_Link_to_call_for_exam = "Link to call for exam"; // Çeviri lazim! #endif +const char *Txt_Link_to_resource_X_copied_into_clipboard = // Warning: it is very important to include %s in the following sentences +#if L==1 // ca + "Enllaç al recurs %s copiat al porta-retalls."; +#elif L==2 // de + "Link zu Ressource %s in die Zwischenablage kopiert."; +#elif L==3 // en + "Link to resource %s copied into clipboard."; +#elif L==4 // es + "Enlace al recurso %s copiado en el portapapeles."; +#elif L==5 // fr + "Lien vers la ressource %s copié dans le presse-papiers."; +#elif L==6 // gn + "Enlace al recurso %s copiado en el portapapeles."; // Okoteve traducción +#elif L==7 // it + "Collegamento alla risorsa %s copiata negli appunti."; +#elif L==8 // pl + "Link do zasobu %s skopiowany do schowka."; +#elif L==9 // pt + "Link para o recurso %s copiado para a área de transferência."; +#elif L==10 // tr + "Panoya kopyalanan %s kaynağına bağlantı."; +#endif + const char *Txt_List_of_detailed_clicks = #if L==1 // ca "Llistat de clics detallats"; diff --git a/swad_text_action.c b/swad_text_action.c index 487fc2863..ca8715bf3 100644 --- a/swad_text_action.c +++ b/swad_text_action.c @@ -17586,6 +17586,29 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = "See file metadata in documents zone of course" // Precisa de tradução #elif L==10 // tr "See file metadata in documents zone of course" // Çeviri lazim! +#endif + , + [ActReqLnkSeeDocCrs] = +#if L==1 // ca + "Copy link to file when showing course documents area" // Necessita traducció +#elif L==2 // de + "Copy link to file when showing course documents area" // Need Übersetzung +#elif L==3 // en + "Copy link to file when showing course documents area" +#elif L==4 // es + "Copiar enlace a archivo viendo zona de documentos de asignatura" +#elif L==5 // fr + "Copy link to file when showing course documents area" // Besoin de traduction +#elif L==6 // gn + "Copiar enlace a archivo viendo zona de documentos de asignatura" // Okoteve traducción +#elif L==7 // it + "Copy link to file when showing course documents area" // Bisogno di traduzione +#elif L==8 // pl + "Copy link to file when showing course documents area" // Potrzebujesz tlumaczenie +#elif L==9 // pt + "Copy link to file when showing course documents area" // Precisa de tradução +#elif L==10 // tr + "Copy link to file when showing course documents area" // Çeviri lazim! #endif , [ActDowSeeDocCrs] = @@ -18230,6 +18253,29 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = "Change file metadata in documents zone of course" // Precisa de tradução #elif L==10 // tr "Change file metadata in documents zone of course" // Çeviri lazim! +#endif + , + [ActReqLnkAdmDocCrs] = +#if L==1 // ca + "Copy link to file when managing course documents area" // Necessita traducció +#elif L==2 // de + "Copy link to file when managing course documents area" // Need Übersetzung +#elif L==3 // en + "Copy link to file when managing course documents area" +#elif L==4 // es + "Copiar enlace a archivo administrando zona de documentos de asignatura" +#elif L==5 // fr + "Copy link to file when managing course documents area" // Besoin de traduction +#elif L==6 // gn + "Copiar enlace a archivo administrando zona de documentos de asignatura" // Okoteve traducción +#elif L==7 // it + "Copy link to file when managing course documents area" // Bisogno di traduzione +#elif L==8 // pl + "Copy link to file when managing course documents area" // Potrzebujesz tlumaczenie +#elif L==9 // pt + "Copy link to file when managing course documents area" // Precisa de tradução +#elif L==10 // tr + "Copy link to file when managing course documents area" // Çeviri lazim! #endif , [ActDowAdmDocCrs] = diff --git a/swad_timeline_note.c b/swad_timeline_note.c index 923d6b49d..59b79c66b 100644 --- a/swad_timeline_note.c +++ b/swad_timeline_note.c @@ -1052,7 +1052,7 @@ static void TmlNot_RequestRemovalNote (struct Tml_Timeline *Timeline) /* End alert */ Timeline->NotCod = Not.NotCod; // Note to be removed TmlFrm_EndAlertRemove (Timeline,TmlFrm_REM_NOTE, - TmlNot_PutParamsRemoveNote); + TmlNot_PutParamsRemoveNote); } /*****************************************************************************/