diff --git a/swad_action.c b/swad_action.c index 0f3027b9..bbe63768 100644 --- a/swad_action.c +++ b/swad_action.c @@ -446,6 +446,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = [ActFrmSeePrgRsc ] = {1925,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_ViewResourcesAfterEdit ,NULL}, [ActFrmEdiPrgRsc ] = {1918,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_EditResources ,NULL}, + [ActRenPrgRsc ] = {1928,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_RenameResource ,NULL}, [ActReqRemPrgRsc ] = {1919,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_ReqRemResource ,NULL}, [ActRemPrgRsc ] = {1920,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_RemoveResource ,NULL}, [ActHidPrgRsc ] = {1921,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrgRsc_HideResource ,NULL}, @@ -3765,6 +3766,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un ActFrmSeePrgRsc, // #1925 ActEdiPrg, // #1926 ActSeePrgItm, // #1927 + ActRenPrgRsc, // #1928 }; /*****************************************************************************/ diff --git a/swad_action.h b/swad_action.h index a8a9cca9..7d48b43e 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 1927 +#define Act_MAX_ACTION_COD 1928 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13 @@ -412,113 +412,114 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to #define ActRgtPrgItm (ActChgCrsSta + 29) #define ActFrmSeePrgRsc (ActChgCrsSta + 30) #define ActFrmEdiPrgRsc (ActChgCrsSta + 31) -#define ActReqRemPrgRsc (ActChgCrsSta + 32) -#define ActRemPrgRsc (ActChgCrsSta + 33) -#define ActHidPrgRsc (ActChgCrsSta + 34) -#define ActUnhPrgRsc (ActChgCrsSta + 35) -#define ActUp_PrgRsc (ActChgCrsSta + 36) -#define ActDwnPrgRsc (ActChgCrsSta + 37) -#define ActEdiTchGui (ActChgCrsSta + 38) -#define ActSeeSylLec (ActChgCrsSta + 39) -#define ActSeeSylPra (ActChgCrsSta + 40) -#define ActEdiSylLec (ActChgCrsSta + 41) -#define ActEdiSylPra (ActChgCrsSta + 42) -#define ActDelItmSylLec (ActChgCrsSta + 43) -#define ActDelItmSylPra (ActChgCrsSta + 44) -#define ActUp_IteSylLec (ActChgCrsSta + 45) -#define ActUp_IteSylPra (ActChgCrsSta + 46) -#define ActDwnIteSylLec (ActChgCrsSta + 47) -#define ActDwnIteSylPra (ActChgCrsSta + 48) -#define ActRgtIteSylLec (ActChgCrsSta + 49) -#define ActRgtIteSylPra (ActChgCrsSta + 50) -#define ActLftIteSylLec (ActChgCrsSta + 51) -#define ActLftIteSylPra (ActChgCrsSta + 52) -#define ActInsIteSylLec (ActChgCrsSta + 53) -#define ActInsIteSylPra (ActChgCrsSta + 54) -#define ActModIteSylLec (ActChgCrsSta + 55) -#define ActModIteSylPra (ActChgCrsSta + 56) +#define ActRenPrgRsc (ActChgCrsSta + 32) +#define ActReqRemPrgRsc (ActChgCrsSta + 33) +#define ActRemPrgRsc (ActChgCrsSta + 34) +#define ActHidPrgRsc (ActChgCrsSta + 35) +#define ActUnhPrgRsc (ActChgCrsSta + 36) +#define ActUp_PrgRsc (ActChgCrsSta + 37) +#define ActDwnPrgRsc (ActChgCrsSta + 38) +#define ActEdiTchGui (ActChgCrsSta + 39) +#define ActSeeSylLec (ActChgCrsSta + 40) +#define ActSeeSylPra (ActChgCrsSta + 41) +#define ActEdiSylLec (ActChgCrsSta + 42) +#define ActEdiSylPra (ActChgCrsSta + 43) +#define ActDelItmSylLec (ActChgCrsSta + 44) +#define ActDelItmSylPra (ActChgCrsSta + 45) +#define ActUp_IteSylLec (ActChgCrsSta + 46) +#define ActUp_IteSylPra (ActChgCrsSta + 47) +#define ActDwnIteSylLec (ActChgCrsSta + 48) +#define ActDwnIteSylPra (ActChgCrsSta + 49) +#define ActRgtIteSylLec (ActChgCrsSta + 50) +#define ActRgtIteSylPra (ActChgCrsSta + 51) +#define ActLftIteSylLec (ActChgCrsSta + 52) +#define ActLftIteSylPra (ActChgCrsSta + 53) +#define ActInsIteSylLec (ActChgCrsSta + 54) +#define ActInsIteSylPra (ActChgCrsSta + 55) +#define ActModIteSylLec (ActChgCrsSta + 56) +#define ActModIteSylPra (ActChgCrsSta + 57) -#define ActEdiBib (ActChgCrsSta + 57) -#define ActEdiFAQ (ActChgCrsSta + 58) -#define ActEdiCrsLnk (ActChgCrsSta + 59) +#define ActEdiBib (ActChgCrsSta + 58) +#define ActEdiFAQ (ActChgCrsSta + 59) +#define ActEdiCrsLnk (ActChgCrsSta + 60) -#define ActChgFrcReaCrsInf (ActChgCrsSta + 60) -#define ActChgFrcReaTchGui (ActChgCrsSta + 61) -#define ActChgFrcReaSylLec (ActChgCrsSta + 62) -#define ActChgFrcReaSylPra (ActChgCrsSta + 63) -#define ActChgFrcReaBib (ActChgCrsSta + 64) -#define ActChgFrcReaFAQ (ActChgCrsSta + 65) -#define ActChgFrcReaCrsLnk (ActChgCrsSta + 66) +#define ActChgFrcReaCrsInf (ActChgCrsSta + 61) +#define ActChgFrcReaTchGui (ActChgCrsSta + 62) +#define ActChgFrcReaSylLec (ActChgCrsSta + 63) +#define ActChgFrcReaSylPra (ActChgCrsSta + 64) +#define ActChgFrcReaBib (ActChgCrsSta + 65) +#define ActChgFrcReaFAQ (ActChgCrsSta + 66) +#define ActChgFrcReaCrsLnk (ActChgCrsSta + 67) -#define ActChgHavReaCrsInf (ActChgCrsSta + 67) -#define ActChgHavReaTchGui (ActChgCrsSta + 68) -#define ActChgHavReaSylLec (ActChgCrsSta + 69) -#define ActChgHavReaSylPra (ActChgCrsSta + 70) -#define ActChgHavReaBib (ActChgCrsSta + 71) -#define ActChgHavReaFAQ (ActChgCrsSta + 72) -#define ActChgHavReaCrsLnk (ActChgCrsSta + 73) +#define ActChgHavReaCrsInf (ActChgCrsSta + 68) +#define ActChgHavReaTchGui (ActChgCrsSta + 69) +#define ActChgHavReaSylLec (ActChgCrsSta + 70) +#define ActChgHavReaSylPra (ActChgCrsSta + 71) +#define ActChgHavReaBib (ActChgCrsSta + 72) +#define ActChgHavReaFAQ (ActChgCrsSta + 73) +#define ActChgHavReaCrsLnk (ActChgCrsSta + 74) -#define ActSelInfSrcCrsInf (ActChgCrsSta + 74) -#define ActSelInfSrcTchGui (ActChgCrsSta + 75) -#define ActSelInfSrcSylLec (ActChgCrsSta + 76) -#define ActSelInfSrcSylPra (ActChgCrsSta + 77) -#define ActSelInfSrcBib (ActChgCrsSta + 78) -#define ActSelInfSrcFAQ (ActChgCrsSta + 79) -#define ActSelInfSrcCrsLnk (ActChgCrsSta + 80) -#define ActRcvURLCrsInf (ActChgCrsSta + 81) -#define ActRcvURLTchGui (ActChgCrsSta + 82) -#define ActRcvURLSylLec (ActChgCrsSta + 83) -#define ActRcvURLSylPra (ActChgCrsSta + 84) -#define ActRcvURLBib (ActChgCrsSta + 85) -#define ActRcvURLFAQ (ActChgCrsSta + 86) -#define ActRcvURLCrsLnk (ActChgCrsSta + 87) -#define ActRcvPagCrsInf (ActChgCrsSta + 88) -#define ActRcvPagTchGui (ActChgCrsSta + 89) -#define ActRcvPagSylLec (ActChgCrsSta + 90) -#define ActRcvPagSylPra (ActChgCrsSta + 91) -#define ActRcvPagBib (ActChgCrsSta + 92) -#define ActRcvPagFAQ (ActChgCrsSta + 93) -#define ActRcvPagCrsLnk (ActChgCrsSta + 94) -#define ActEditorCrsInf (ActChgCrsSta + 95) -#define ActEditorTchGui (ActChgCrsSta + 96) -#define ActEditorSylLec (ActChgCrsSta + 97) -#define ActEditorSylPra (ActChgCrsSta + 98) -#define ActEditorBib (ActChgCrsSta + 99) -#define ActEditorFAQ (ActChgCrsSta + 100) -#define ActEditorCrsLnk (ActChgCrsSta + 101) -#define ActPlaTxtEdiCrsInf (ActChgCrsSta + 102) -#define ActPlaTxtEdiTchGui (ActChgCrsSta + 103) -#define ActPlaTxtEdiSylLec (ActChgCrsSta + 104) -#define ActPlaTxtEdiSylPra (ActChgCrsSta + 105) -#define ActPlaTxtEdiBib (ActChgCrsSta + 106) -#define ActPlaTxtEdiFAQ (ActChgCrsSta + 107) -#define ActPlaTxtEdiCrsLnk (ActChgCrsSta + 108) -#define ActRchTxtEdiCrsInf (ActChgCrsSta + 109) -#define ActRchTxtEdiTchGui (ActChgCrsSta + 110) -#define ActRchTxtEdiSylLec (ActChgCrsSta + 111) -#define ActRchTxtEdiSylPra (ActChgCrsSta + 112) -#define ActRchTxtEdiBib (ActChgCrsSta + 113) -#define ActRchTxtEdiFAQ (ActChgCrsSta + 114) -#define ActRchTxtEdiCrsLnk (ActChgCrsSta + 115) -#define ActRcvPlaTxtCrsInf (ActChgCrsSta + 116) -#define ActRcvPlaTxtTchGui (ActChgCrsSta + 117) -#define ActRcvPlaTxtSylLec (ActChgCrsSta + 118) -#define ActRcvPlaTxtSylPra (ActChgCrsSta + 119) -#define ActRcvPlaTxtBib (ActChgCrsSta + 120) -#define ActRcvPlaTxtFAQ (ActChgCrsSta + 121) -#define ActRcvPlaTxtCrsLnk (ActChgCrsSta + 122) -#define ActRcvRchTxtCrsInf (ActChgCrsSta + 123) -#define ActRcvRchTxtTchGui (ActChgCrsSta + 124) -#define ActRcvRchTxtSylLec (ActChgCrsSta + 125) -#define ActRcvRchTxtSylPra (ActChgCrsSta + 126) -#define ActRcvRchTxtBib (ActChgCrsSta + 127) -#define ActRcvRchTxtFAQ (ActChgCrsSta + 128) -#define ActRcvRchTxtCrsLnk (ActChgCrsSta + 129) +#define ActSelInfSrcCrsInf (ActChgCrsSta + 75) +#define ActSelInfSrcTchGui (ActChgCrsSta + 76) +#define ActSelInfSrcSylLec (ActChgCrsSta + 77) +#define ActSelInfSrcSylPra (ActChgCrsSta + 78) +#define ActSelInfSrcBib (ActChgCrsSta + 79) +#define ActSelInfSrcFAQ (ActChgCrsSta + 80) +#define ActSelInfSrcCrsLnk (ActChgCrsSta + 81) +#define ActRcvURLCrsInf (ActChgCrsSta + 82) +#define ActRcvURLTchGui (ActChgCrsSta + 83) +#define ActRcvURLSylLec (ActChgCrsSta + 84) +#define ActRcvURLSylPra (ActChgCrsSta + 85) +#define ActRcvURLBib (ActChgCrsSta + 86) +#define ActRcvURLFAQ (ActChgCrsSta + 87) +#define ActRcvURLCrsLnk (ActChgCrsSta + 88) +#define ActRcvPagCrsInf (ActChgCrsSta + 89) +#define ActRcvPagTchGui (ActChgCrsSta + 90) +#define ActRcvPagSylLec (ActChgCrsSta + 91) +#define ActRcvPagSylPra (ActChgCrsSta + 92) +#define ActRcvPagBib (ActChgCrsSta + 93) +#define ActRcvPagFAQ (ActChgCrsSta + 94) +#define ActRcvPagCrsLnk (ActChgCrsSta + 95) +#define ActEditorCrsInf (ActChgCrsSta + 96) +#define ActEditorTchGui (ActChgCrsSta + 97) +#define ActEditorSylLec (ActChgCrsSta + 98) +#define ActEditorSylPra (ActChgCrsSta + 99) +#define ActEditorBib (ActChgCrsSta + 100) +#define ActEditorFAQ (ActChgCrsSta + 101) +#define ActEditorCrsLnk (ActChgCrsSta + 102) +#define ActPlaTxtEdiCrsInf (ActChgCrsSta + 103) +#define ActPlaTxtEdiTchGui (ActChgCrsSta + 104) +#define ActPlaTxtEdiSylLec (ActChgCrsSta + 105) +#define ActPlaTxtEdiSylPra (ActChgCrsSta + 106) +#define ActPlaTxtEdiBib (ActChgCrsSta + 107) +#define ActPlaTxtEdiFAQ (ActChgCrsSta + 108) +#define ActPlaTxtEdiCrsLnk (ActChgCrsSta + 109) +#define ActRchTxtEdiCrsInf (ActChgCrsSta + 110) +#define ActRchTxtEdiTchGui (ActChgCrsSta + 111) +#define ActRchTxtEdiSylLec (ActChgCrsSta + 112) +#define ActRchTxtEdiSylPra (ActChgCrsSta + 113) +#define ActRchTxtEdiBib (ActChgCrsSta + 114) +#define ActRchTxtEdiFAQ (ActChgCrsSta + 115) +#define ActRchTxtEdiCrsLnk (ActChgCrsSta + 116) +#define ActRcvPlaTxtCrsInf (ActChgCrsSta + 117) +#define ActRcvPlaTxtTchGui (ActChgCrsSta + 118) +#define ActRcvPlaTxtSylLec (ActChgCrsSta + 119) +#define ActRcvPlaTxtSylPra (ActChgCrsSta + 120) +#define ActRcvPlaTxtBib (ActChgCrsSta + 121) +#define ActRcvPlaTxtFAQ (ActChgCrsSta + 122) +#define ActRcvPlaTxtCrsLnk (ActChgCrsSta + 123) +#define ActRcvRchTxtCrsInf (ActChgCrsSta + 124) +#define ActRcvRchTxtTchGui (ActChgCrsSta + 125) +#define ActRcvRchTxtSylLec (ActChgCrsSta + 126) +#define ActRcvRchTxtSylPra (ActChgCrsSta + 127) +#define ActRcvRchTxtBib (ActChgCrsSta + 128) +#define ActRcvRchTxtFAQ (ActChgCrsSta + 129) +#define ActRcvRchTxtCrsLnk (ActChgCrsSta + 130) -#define ActPrnCrsTT (ActChgCrsSta + 130) -#define ActEdiCrsTT (ActChgCrsSta + 131) -#define ActChgCrsTT (ActChgCrsSta + 132) -#define ActChgCrsTT1stDay (ActChgCrsSta + 133) +#define ActPrnCrsTT (ActChgCrsSta + 131) +#define ActEdiCrsTT (ActChgCrsSta + 132) +#define ActChgCrsTT (ActChgCrsSta + 133) +#define ActChgCrsTT1stDay (ActChgCrsSta + 134) /*****************************************************************************/ /***************************** Assessment tab ********************************/ diff --git a/swad_changelog.h b/swad_changelog.h index 0dac0dc3..031bb759 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -606,10 +606,11 @@ 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.112.1 (2022-07-22)" +#define Log_PLATFORM_VERSION "SWAD 21.113 (2022-07-22)" #define CSS_FILE "swad21.107.1.css" #define JS_FILE "swad21.100.js" /* + Version 21.113: Jul 22, 2022 New form and action to rename item resource. (329151 lines) Version 21.112.1: Jul 22, 2022 Changes in edition of program items. (329058 lines) Version 21.112: Jul 21, 2022 Code refactoring in hide/unhide icons. Fixed bugs in edition of banners. diff --git a/swad_program_database.c b/swad_program_database.c index d095cce0..0da352e4 100644 --- a/swad_program_database.c +++ b/swad_program_database.c @@ -425,45 +425,67 @@ void Prg_DB_RemoveCrsItems (long CrsCod) CrsCod); } +/*****************************************************************************/ +/**************************** Update resource title **************************/ +/*****************************************************************************/ + +void Prg_DB_UpdateResourceTitle (long RscCod,long ItmCod, + const char NewTitle[PrgRsc_MAX_BYTES_PROGRAM_RESOURCE_TITLE + 1]) + { + Ale_ShowAlert (Ale_INFO, + "can not update the title of a resource", + "UPDATE prg_resources,prg_items" + " SET prg_resources.Title='%s'" + " WHERE prg_resources.RscCod=%ld" + " AND prg_resources.ItmCod=%ld" + " AND prg_resources.ItmCod=prg_items.ItmCod" + " AND prg_items.CrsCod=%ld", + NewTitle, + RscCod, + ItmCod, + Gbl.Hierarchy.Crs.CrsCod); + DB_QueryUPDATE ("can not update the title of a resource", + "UPDATE prg_resources,prg_items" + " SET prg_resources.Title='%s'" + " WHERE prg_resources.RscCod=%ld" + " AND prg_resources.ItmCod=%ld" + " AND prg_resources.ItmCod=prg_items.ItmCod" + " AND prg_items.CrsCod=%ld", + NewTitle, + RscCod, + ItmCod, + Gbl.Hierarchy.Crs.CrsCod); + } + /*****************************************************************************/ /****************** Get list of item resources from database *****************/ /*****************************************************************************/ unsigned Prg_DB_GetListResources (MYSQL_RES **mysql_res,long ItmCod, bool ShowHiddenResources) - {/* - static const char *HiddenSubQuery[Rol_NUM_ROLES] = - { - [Rol_UNK ] = " AND Hidden='N'", - [Rol_GST ] = " AND Hidden='N'", - [Rol_USR ] = " AND Hidden='N'", - [Rol_STD ] = " AND Hidden='N'", - [Rol_NET ] = " AND Hidden='N'", - [Rol_TCH ] = "", - [Rol_DEG_ADM] = " AND Hidden='N'", - [Rol_CTR_ADM] = " AND Hidden='N'", - [Rol_INS_ADM] = " AND Hidden='N'", - [Rol_SYS_ADM] = "", - }; */ + { static const char *HiddenSubQuery[2] = { - [false] = " AND Hidden='N'", + [false] = " AND prg_resources.Hidden='N'", [true ] = "", }; return (unsigned) DB_QuerySELECT (mysql_res,"can not get item resources", - "SELECT ItmCod," // row[0] - "RscCod," // row[1] - "RscInd," // row[2] - "Hidden," // row[3] - "Title" // row[4] - " FROM prg_resources" - " WHERE ItmCod=%ld" + "SELECT prg_resources.ItmCod," // row[0] + "prg_resources.RscCod," // row[1] + "prg_resources.RscInd," // row[2] + "prg_resources.Hidden," // row[3] + "prg_resources.Title" // row[4] + " FROM prg_resources,prg_items" + " WHERE prg_resources.ItmCod=%ld" "%s" - " ORDER BY RscInd", + " AND prg_resources.ItmCod=prg_items.ItmCod" + " AND prg_items.CrsCod=%ld" // Extra check + " ORDER BY prg_resources.RscInd", ItmCod, - HiddenSubQuery[ShowHiddenResources]); + HiddenSubQuery[ShowHiddenResources], + Gbl.Hierarchy.Crs.CrsCod); } /*****************************************************************************/ @@ -474,14 +496,17 @@ unsigned Prg_DB_GetDataOfResourceByCod (MYSQL_RES **mysql_res,long RscCod) { return (unsigned) DB_QuerySELECT (mysql_res,"can not get item resource data", - "SELECT ItmCod," // row[0] - "RscCod," // row[1] - "RscInd," // row[2] - "Hidden," // row[3] - "Title" // row[4] - " FROM prg_resources" - " WHERE RscCod=%ld", - RscCod); + "SELECT prg_resources.ItmCod," // row[0] + "prg_resources.RscCod," // row[1] + "prg_resources.RscInd," // row[2] + "prg_resources.Hidden," // row[3] + "prg_resources.Title" // row[4] + " FROM prg_resources,prg_items" + " WHERE prg_resources.RscCod=%ld" + " AND prg_resources.ItmCod=prg_items.ItmCod" + " AND prg_items.CrsCod=%ld", // Extra check + RscCod, + Gbl.Hierarchy.Crs.CrsCod); } /*****************************************************************************/ @@ -493,15 +518,18 @@ unsigned Prg_DB_GetDataOfResourceByInd (MYSQL_RES **mysql_res, { return (unsigned) DB_QuerySELECT (mysql_res,"can not get item resource data", - "SELECT ItmCod," // row[0] - "RscCod," // row[1] - "RscInd," // row[2] - "Hidden," // row[3] - "Title" // row[4] - " FROM prg_resources" - " WHERE ItmCod=%ld" - " AND RscInd=%u", - ItmCod,RscInd); + "SELECT prg_resources.ItmCod," // row[0] + "prg_resources.RscCod," // row[1] + "prg_resources.RscInd," // row[2] + "prg_resources.Hidden," // row[3] + "prg_resources.Title" // row[4] + " FROM prg_resources,prg_items" + " WHERE prg_resources.ItmCod=%ld" + " AND prg_resources.RscInd=%u" + " AND prg_resources.ItmCod=prg_items.ItmCod" + " AND prg_items.CrsCod=%ld", // Extra check + ItmCod,RscInd, + Gbl.Hierarchy.Crs.CrsCod); } /*****************************************************************************/ @@ -557,10 +585,14 @@ void Prg_DB_RemoveResource (const struct PrgRsc_Resource *Resource) { DB_QueryDELETE ("can not remove item resource", "DELETE FROM prg_resources" - " WHERE RscCod=%ld" - " AND ItmCod=%ld", // Extra check + "USING prg_resources,prg_items" + " WHERE prg_resources.RscCod=%ld" + " AND prg_resources.ItmCod=%ld" + " AND prg_resources.ItmCod=prg_items.ItmCod" + " AND prg_items.CrsCod=%ld", // Extra check Resource->Rsc.Cod, - Resource->ItmCod); + Resource->ItmCod, + Gbl.Hierarchy.Crs.CrsCod); } /*****************************************************************************/ diff --git a/swad_program_database.h b/swad_program_database.h index 9c0333ad..ac0dce6d 100644 --- a/swad_program_database.h +++ b/swad_program_database.h @@ -56,6 +56,9 @@ void Prg_DB_RemoveItemRange (const struct Prg_ItemRange *ToRemove); void Prg_DB_RemoveCrsItems (long CrsCod); //------------------------------ Resources ------------------------------------ +void Prg_DB_UpdateResourceTitle (long RscCod,long ItmCod, + const char NewTitle[PrgRsc_MAX_BYTES_PROGRAM_RESOURCE_TITLE + 1]); + unsigned Prg_DB_GetListResources (MYSQL_RES **mysql_res,long ItmCod, bool ShowHiddenResources); unsigned Prg_DB_GetDataOfResourceByCod (MYSQL_RES **mysql_res,long RscCod); diff --git a/swad_program_resource.c b/swad_program_resource.c index 0f715a3b..7c95303b 100644 --- a/swad_program_resource.c +++ b/swad_program_resource.c @@ -427,9 +427,14 @@ static void PrgRsc_WriteRowEditResource (unsigned NumRsc,unsigned NumResources, HTM_TD_End (); /***** Title *****/ - HTM_TD_Begin ("class=\"PRG_MAIN PRG_RSC_%s %s\"", - The_GetSuffix (),The_GetColorRows ()); - HTM_Txt (Resource->Title); + HTM_TD_Begin ("class=\"PRG_MAIN %s\"",The_GetColorRows ()); + Frm_BeginFormAnchor (ActRenPrgRsc,PrgRsc_RESOURCE_SECTION_ID); + PrgRsc_PutParamRscCod (Resource->Rsc.Cod); + HTM_INPUT_TEXT ("Title",PrgRsc_MAX_CHARS_PROGRAM_RESOURCE_TITLE,Resource->Title, + HTM_SUBMIT_ON_CHANGE, + "class=\"INPUT_FULL_NAME INPUT_%s\"", + The_GetSuffix ()); + Frm_EndForm (); HTM_TD_End (); /***** End row *****/ @@ -525,6 +530,44 @@ static long PrgRsc_GetParamRscCod (void) return Par_GetParToLong ("RscCod"); } +/*****************************************************************************/ +/******************************** Rename resource ****************************/ +/*****************************************************************************/ + +void PrgRsc_RenameResource (void) + { + struct PrgRsc_Resource Resource; + char NewTitle[PrgRsc_MAX_BYTES_PROGRAM_RESOURCE_TITLE + 1]; + long ItmCod; + unsigned FormLevel; + + /***** Get list of program items *****/ + Prg_GetListItems (); + + /***** Get data of the item resource from database *****/ + Resource.Rsc.Cod = PrgRsc_GetParamRscCod (); + PrgRsc_GetDataOfResourceByCod (&Resource); + if (Resource.ItmCod <= 0) + Err_WrongResourceExit (); + + /***** Rename resource *****/ + /* Get the new title for the resource */ + Par_GetParToText ("Title",NewTitle,PrgRsc_MAX_BYTES_PROGRAM_RESOURCE_TITLE); + + /* Update database changing old title by new title */ + Prg_DB_UpdateResourceTitle (Resource.Rsc.Cod,Resource.ItmCod,NewTitle); + + /***** Get the code of the program item *****/ + ItmCod = Resource.ItmCod; + FormLevel = Prg_GetLevelFromNumItem (Prg_GetNumItemFromItmCod (Resource.ItmCod)); + + /***** Show current program items, if any *****/ + Prg_ShowAllItems (Prg_EDIT_RESOURCES,NULL,-1L,ItmCod,FormLevel); + + /***** Free list of program items *****/ + Prg_FreeListItems (); + } + /*****************************************************************************/ /************ Ask for confirmation of removing an item resource **************/ /*****************************************************************************/ diff --git a/swad_program_resource.h b/swad_program_resource.h index 6833e483..9d55d36e 100644 --- a/swad_program_resource.h +++ b/swad_program_resource.h @@ -57,7 +57,7 @@ void PrgRsc_EditResources (void); void PrgRsc_ListItemResources (Prg_ListingType_t ListingType,long ItmCod); -void PrgRsc_RequestCreateResource (void); +void PrgRsc_RenameResource (void); void PrgRsc_ReqRemResource (void); void PrgRsc_RemoveResource (void); diff --git a/swad_text_action.c b/swad_text_action.c index f21c858f..903f18ab 100644 --- a/swad_text_action.c +++ b/swad_text_action.c @@ -2017,25 +2017,25 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = , [ActRemBan] = #if L==1 // ca - "Request removal of a banner" // Necessita traducció + "Request removal of banner" // Necessita traducció #elif L==2 // de - "Request removal of a banner" // Need Übersetzung + "Request removal of banner" // Need Übersetzung #elif L==3 // en - "Request removal of a banner" + "Request removal of banner" #elif L==4 // es - "Solicitar eliminaci&ocute;n de un banner" + "Solicitar eliminaci&ocute;n de banner" #elif L==5 // fr - "Request removal of a banner" // Besoin de traduction + "Request removal of banner" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminaci&ocute;n de un banner" // Okoteve traducción + "Solicitar eliminaci&ocute;n de banner" // Okoteve traducción #elif L==7 // it - "Request removal of a banner" // Bisogno di traduzione + "Request removal of banner" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a banner" // Potrzebujesz tlumaczenie + "Request removal of banner" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a banner" // Precisa de tradução + "Request removal of banner" // Precisa de tradução #elif L==10 // tr - "Request removal of a banner" // Çeviri lazim! + "Request removal of banner" // Çeviri lazim! #endif , [ActUnhBan] = @@ -6086,29 +6086,52 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = "Editar recursos" #elif L==10 // tr "Kaynakları düzenle" +#endif + , + [ActRenPrgRsc] = +#if L==1 // ca + "Rename resource" // Necessita traducció +#elif L==2 // de + "Rename resource" // Need Übersetzung +#elif L==3 // en + "Rename resource" +#elif L==4 // es + "Renombrar recurso" +#elif L==5 // fr + "Rename resource" // Besoin de traduction +#elif L==6 // gn + "Renombrar recurso" // Okoteve traducción +#elif L==7 // it + "Rename resource" // Bisogno di traduzione +#elif L==8 // pl + "Rename resource" // Potrzebujesz tlumaczenie +#elif L==9 // pt + "Rename resource" // Precisa de tradução +#elif L==10 // tr + "Rename resource" // Çeviri lazim! #endif , [ActReqRemPrgRsc] = #if L==1 // ca - "Request removal of resource" // Necessita traducció + "Request removal of resource" // Necessita traducció #elif L==2 // de - "Request removal of resource" // Need Übersetzung + "Request removal of resource" // Need Übersetzung #elif L==3 // en "Request removal of resource" #elif L==4 // es "Solicitar eliminación de recurso" #elif L==5 // fr - "Request removal of resource" // Besoin de traduction + "Request removal of resource" // Besoin de traduction #elif L==6 // gn "Solicitar eliminación de recurso" // Okoteve traducción #elif L==7 // it - "Request removal of resource" // Bisogno di traduzione + "Request removal of resource" // Bisogno di traduzione #elif L==8 // pl - "Request removal of resource" // Potrzebujesz tlumaczenie + "Request removal of resource" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of resource" // Precisa de tradução + "Request removal of resource" // Precisa de tradução #elif L==10 // tr - "Request removal of resource" // Çeviri lazim! + "Request removal of resource" // Çeviri lazim! #endif , [ActRemPrgRsc] = @@ -9011,25 +9034,25 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = , [ActReqRemAsg] = #if L==1 // ca - "Request removal of an assignment" // Necessita traducció + "Request removal of assignment" // Necessita traducció #elif L==2 // de - "Request removal of an assignment" // Need Übersetzung + "Request removal of assignment" // Need Übersetzung #elif L==3 // en - "Request removal of an assignment" + "Request removal of assignment" #elif L==4 // es - "Solicitar eliminación de una actividad" + "Solicitar eliminación de actividad" #elif L==5 // fr - "Request removal of an assignment" // Besoin de traduction + "Request removal of assignment" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de una actividad" // Okoteve traducción + "Solicitar eliminación de actividad" // Okoteve traducción #elif L==7 // it - "Request removal of an assignment" // Bisogno di traduzione + "Request removal of assignment" // Bisogno di traduzione #elif L==8 // pl - "Request removal of an assignment" // Potrzebujesz tlumaczenie + "Request removal of assignment" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of an assignment" // Precisa de tradução + "Request removal of assignment" // Precisa de tradução #elif L==10 // tr - "Request removal of an assignment" // Çeviri lazim! + "Request removal of assignment" // Çeviri lazim! #endif , [ActRemAsg] = @@ -9402,25 +9425,25 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = , [ActReqRemPrj] = #if L==1 // ca - "Request removal of a project" // Necessita traducció + "Request removal of project" // Necessita traducció #elif L==2 // de - "Request removal of a project" // Need Übersetzung + "Request removal of project" // Need Übersetzung #elif L==3 // en - "Request removal of a project" + "Request removal of project" #elif L==4 // es - "Solicitar eliminación de un proyecto" + "Solicitar eliminación de proyecto" #elif L==5 // fr - "Request removal of a project" // Besoin de traduction + "Request removal of project" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un proyecto" // Okoteve traducción + "Solicitar eliminación de proyecto" // Okoteve traducción #elif L==7 // it - "Request removal of a project" // Bisogno di traduzione + "Request removal of project" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a project" // Potrzebujesz tlumaczenie + "Request removal of project" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a project" // Precisa de tradução + "Request removal of project" // Precisa de tradução #elif L==10 // tr - "Request removal of a project" // Çeviri lazim! + "Request removal of project" // Çeviri lazim! #endif , [ActRemPrj] = @@ -10805,25 +10828,25 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = , [ActReqRemCfe] = #if L==1 // ca - "Request removal of an exam announcement" // Necessita traducció + "Request removal of exam announcement" // Necessita traducció #elif L==2 // de - "Request removal of an exam announcement" // Need Übersetzung + "Request removal of exam announcement" // Need Übersetzung #elif L==3 // en - "Request removal of an exam announcement" + "Request removal of exam announcement" #elif L==4 // es - "Solicitar eliminación de una convocatoria de examen" + "Solicitar eliminación de convocatoria de examen" #elif L==5 // fr - "Request removal of an exam announcement" // Besoin de traduction + "Request removal of exam announcement" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de una convocatoria de examen" // Okoteve traducción + "Solicitar eliminación de convocatoria de examen" // Okoteve traducción #elif L==7 // it - "Request removal of an exam announcement" // Bisogno di traduzione + "Request removal of exam announcement" // Bisogno di traduzione #elif L==8 // pl - "Request removal of an exam announcement" // Potrzebujesz tlumaczenie + "Request removal of exam announcement" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of an exam announcement" // Precisa de tradução + "Request removal of exam announcement" // Precisa de tradução #elif L==10 // tr - "Request removal of an exam announcement" // Çeviri lazim! + "Request removal of exam announcement" // Çeviri lazim! #endif , [ActRemCfe] = @@ -19637,25 +19660,25 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = , [ActReqRemFilShaCrs] = #if L==1 // ca - "Request removal of a shared file of course" // Necessita traducció + "Request removal of shared file of course" // Necessita traducció #elif L==2 // de - "Request removal of a shared file of course" // Need Übersetzung + "Request removal of shared file of course" // Need Übersetzung #elif L==3 // en - "Request removal of a shared file of course" + "Request removal of shared file of course" #elif L==4 // es "Solicitar eliminación de archivo compartido de asignatura" #elif L==5 // fr - "Request removal of a shared file of course" // Besoin de traduction + "Request removal of shared file of course" // Besoin de traduction #elif L==6 // gn "Solicitar eliminación de archivo compartido de asignatura" // Okoteve traducción #elif L==7 // it - "Request removal of a shared file of course" // Bisogno di traduzione + "Request removal of shared file of course" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a shared file of course" // Potrzebujesz tlumaczenie + "Request removal of shared file of course" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a shared file of course" // Precisa de tradução + "Request removal of shared file of course" // Precisa de tradução #elif L==10 // tr - "Request removal of a shared file of course" // Çeviri lazim! + "Request removal of shared file of course" // Çeviri lazim! #endif , [ActRemFilShaCrs] = @@ -21339,25 +21362,25 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = , [ActReqRemFilAsgCrs] = #if L==1 // ca - "Request removal of file in assignments zone of course" // Necessita traducció + "Request removal of file from assignments zone of course" // Necessita traducció #elif L==2 // de - "Request removal of file in assignments zone of course" // Need Übersetzung + "Request removal of file from assignments zone of course" // Need Übersetzung #elif L==3 // en - "Request removal of file in assignments zone of course" + "Request removal of file from assignments zone of course" #elif L==4 // es - "Solicitar eliminación de archivo en zona de actividades de asignatura" + "Solicitar eliminación de archivo de zona de actividades de asignatura" #elif L==5 // fr - "Request removal of file in assignments zone of course" // Besoin de traduction + "Request removal of file from assignments zone of course" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de archivo en zona de actividades de asignatura" // Okoteve traducción + "Solicitar eliminación de archivo de zona de actividades de asignatura" // Okoteve traducción #elif L==7 // it - "Request removal of file in assignments zone of course" // Bisogno di traduzione + "Request removal of file from assignments zone of course" // Bisogno di traduzione #elif L==8 // pl - "Request removal of file in assignments zone of course" // Potrzebujesz tlumaczenie + "Request removal of file from assignments zone of course" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of file in assignments zone of course" // Precisa de tradução + "Request removal of file from assignments zone of course" // Precisa de tradução #elif L==10 // tr - "Request removal of file in assignments zone of course" // Çeviri lazim! + "Request removal of file from assignments zone of course" // Çeviri lazim! #endif , [ActRemFilAsgCrs] = @@ -22466,25 +22489,25 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = , [ActReqRemFilMrkCrs] = #if L==1 // ca - "Request removal of file in marks in course" // Necessita traducció + "Request removal of file from marks in course" // Necessita traducció #elif L==2 // de - "Request removal of file in marks in course" // Need Übersetzung + "Request removal of file from marks in course" // Need Übersetzung #elif L==3 // en - "Request removal of file in marks in course" + "Request removal of file from marks in course" #elif L==4 // es "Solicitar eliminación de archivo de calificaciones de asignatura" #elif L==5 // fr - "Request removal of file in marks in course" // Besoin de traduction + "Request removal of file from marks in course" // Besoin de traduction #elif L==6 // gn "Solicitar eliminación de archivo de calificaciones de asignatura" // Okoteve traducción #elif L==7 // it - "Request removal of file in marks in course" // Bisogno di traduzione + "Request removal of file from marks in course" // Bisogno di traduzione #elif L==8 // pl - "Request removal of file in marks in course" // Potrzebujesz tlumaczenie + "Request removal of file from marks in course" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of file in marks in course" // Precisa de tradução + "Request removal of file from marks in course" // Precisa de tradução #elif L==10 // tr - "Request removal of file in marks in course" // Çeviri lazim! + "Request removal of file from marks in course" // Çeviri lazim! #endif , [ActRemFilMrkCrs] = @@ -24168,25 +24191,25 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = , [ActReqRemGrpTyp] = #if L==1 // ca - "Request removal of a type of group" // Necessita traducció + "Request removal of type of group" // Necessita traducció #elif L==2 // de - "Request removal of a type of group" // Need Übersetzung + "Request removal of type of group" // Need Übersetzung #elif L==3 // en - "Request removal of a type of group" + "Request removal of type of group" #elif L==4 // es - "Solicitar eliminación de un tipo de grupo" + "Solicitar eliminación de tipo de grupo" #elif L==5 // fr - "Request removal of a type of group" // Besoin de traduction + "Request removal of type of group" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un tipo de grupo" // Okoteve traducción + "Solicitar eliminación de tipo de grupo" // Okoteve traducción #elif L==7 // it - "Request removal of a type of group" // Bisogno di traduzione + "Request removal of type of group" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a type of group" // Potrzebujesz tlumaczenie + "Request removal of type of group" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a type of group" // Precisa de tradução + "Request removal of type of group" // Precisa de tradução #elif L==10 // tr - "Request removal of a type of group" // Çeviri lazim! + "Request removal of type of group" // Çeviri lazim! #endif , [ActRemGrpTyp] = @@ -25548,25 +25571,25 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = , [ActReqRemAtt] = #if L==1 // ca - "Request removal of an attendance event" // Necessita traducció + "Request removal of attendance event" // Necessita traducció #elif L==2 // de - "Request removal of an attendance event" // Need Übersetzung + "Request removal of attendance event" // Need Übersetzung #elif L==3 // en - "Request removal of an attendance event" + "Request removal of attendance event" #elif L==4 // es - "Solicitar eliminación de un evento de asistencia" + "Solicitar eliminación de evento de asistencia" #elif L==5 // fr - "Request removal of an attendance event" // Besoin de traduction + "Request removal of attendance event" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un evento de asistencia" // Okoteve traducción + "Solicitar eliminación de evento de asistencia" // Okoteve traducción #elif L==7 // it - "Request removal of an attendance event" // Bisogno di traduzione + "Request removal of attendance event" // Bisogno di traduzione #elif L==8 // pl - "Request removal of an attendance event" // Potrzebujesz tlumaczenie + "Request removal of attendance event" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of an attendance event" // Precisa de tradução + "Request removal of attendance event" // Precisa de tradução #elif L==10 // tr - "Request removal of an attendance event" // Çeviri lazim! + "Request removal of attendance event" // Çeviri lazim! #endif , [ActRemAtt] = @@ -26169,71 +26192,71 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = , [ActReqRemOthPho] = #if L==1 // ca - "Request removal of a user's photo" // Necessita traducció + "Request removal of user's photo" // Necessita traducció #elif L==2 // de - "Request removal of a user's photo" // Need Übersetzung + "Request removal of user's photo" // Need Übersetzung #elif L==3 // en - "Request removal of a user's photo" + "Request removal of user's photo" #elif L==4 // es "Solicitar eliminación de foto de usuario" #elif L==5 // fr - "Request removal of a user's photo" // Besoin de traduction + "Request removal of user's photo" // Besoin de traduction #elif L==6 // gn "Solicitar eliminación de foto de usuario" // Okoteve traducción #elif L==7 // it - "Request removal of a user's photo" // Bisogno di traduzione + "Request removal of user's photo" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a user's photo" // Potrzebujesz tlumaczenie + "Request removal of user's photo" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a user's photo" // Precisa de tradução + "Request removal of user's photo" // Precisa de tradução #elif L==10 // tr - "Request removal of a user's photo" // Çeviri lazim! + "Request removal of user's photo" // Çeviri lazim! #endif , [ActReqRemStdPho] = #if L==1 // ca - "Request removal of a student's photo" // Necessita traducció + "Request removal of student's photo" // Necessita traducció #elif L==2 // de - "Request removal of a student's photo" // Need Übersetzung + "Request removal of student's photo" // Need Übersetzung #elif L==3 // en - "Request removal of a student's photo" + "Request removal of student's photo" #elif L==4 // es "Solicitar eliminación de foto de estudiante" #elif L==5 // fr - "Request removal of a student's photo" // Besoin de traduction + "Request removal of student's photo" // Besoin de traduction #elif L==6 // gn "Solicitar eliminación de foto de estudiante" // Okoteve traducción #elif L==7 // it - "Request removal of a student's photo" // Bisogno di traduzione + "Request removal of student's photo" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a student's photo" // Potrzebujesz tlumaczenie + "Request removal of student's photo" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a student's photo" // Precisa de tradução + "Request removal of student's photo" // Precisa de tradução #elif L==10 // tr - "Request removal of a student's photo" // Çeviri lazim! + "Request removal of student's photo" // Çeviri lazim! #endif , [ActReqRemTchPho] = #if L==1 // ca - "Request removal of a teacher's photo" // Necessita traducció + "Request removal of teacher's photo" // Necessita traducció #elif L==2 // de - "Request removal of a teacher's photo" // Need Übersetzung + "Request removal of teacher's photo" // Need Übersetzung #elif L==3 // en - "Request removal of a teacher's photo" + "Request removal of teacher's photo" #elif L==4 // es "Solicitar eliminación de foto de profesor" #elif L==5 // fr - "Request removal of a teacher's photo" // Besoin de traduction + "Request removal of teacher's photo" // Besoin de traduction #elif L==6 // gn "Solicitar eliminación de foto de profesor" // Okoteve traducción #elif L==7 // it - "Request removal of a teacher's photo" // Bisogno di traduzione + "Request removal of teacher's photo" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a teacher's photo" // Potrzebujesz tlumaczenie + "Request removal of teacher's photo" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a teacher's photo" // Precisa de tradução + "Request removal of teacher's photo" // Precisa de tradução #elif L==10 // tr - "Request removal of a teacher's photo" // Çeviri lazim! + "Request removal of teacher's photo" // Çeviri lazim! #endif , [ActRemOthPho] = @@ -28331,25 +28354,25 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = , [ActReqRemNot] = #if L==1 // ca - "Request removal of a notice" // Necessita traducció + "Request removal of notice" // Necessita traducció #elif L==2 // de - "Request removal of a notice" // Need Übersetzung + "Request removal of notice" // Need Übersetzung #elif L==3 // en - "Request removal of a notice" + "Request removal of notice" #elif L==4 // es - "Solicitar eliminación de un aviso" + "Solicitar eliminación de aviso" #elif L==5 // fr - "Request removal of a notice" // Besoin de traduction + "Request removal of notice" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un aviso" // Okoteve traducción + "Solicitar eliminación de aviso" // Okoteve traducción #elif L==7 // it - "Request removal of a notice" // Bisogno di traduzione + "Request removal of notice" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a notice" // Potrzebujesz tlumaczenie + "Request removal of notice" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a notice" // Precisa de tradução + "Request removal of notice" // Precisa de tradução #elif L==10 // tr - "Request removal of a notice" // Çeviri lazim! + "Request removal of notice" // Çeviri lazim! #endif , [ActRemNot] = @@ -29481,278 +29504,278 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = , [ActReqDelThrCrsUsr] = #if L==1 // ca - "Request removal of a thread of forum of users of course" // Necessita traducció + "Request removal of thread of forum of users of course" // Necessita traducció #elif L==2 // de - "Request removal of a thread of forum of users of course" // Need Übersetzung + "Request removal of thread of forum of users of course" // Need Übersetzung #elif L==3 // en - "Request removal of a thread of forum of users of course" + "Request removal of thread of forum of users of course" #elif L==4 // es - "Solicitar eliminación de un hilo del foro de usuarios de asignatura" + "Solicitar eliminación de hilo del foro de usuarios de asignatura" #elif L==5 // fr - "Request removal of a thread of forum of users of course" // Besoin de traduction + "Request removal of thread of forum of users of course" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un hilo del foro de usuarios de asignatura" // Okoteve traducción + "Solicitar eliminación de hilo del foro de usuarios de asignatura" // Okoteve traducción #elif L==7 // it - "Request removal of a thread of forum of users of course" // Bisogno di traduzione + "Request removal of thread of forum of users of course" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a thread of forum of users of course" // Potrzebujesz tlumaczenie + "Request removal of thread of forum of users of course" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a thread of forum of users of course" // Precisa de tradução + "Request removal of thread of forum of users of course" // Precisa de tradução #elif L==10 // tr - "Request removal of a thread of forum of users of course" // Çeviri lazim! + "Request removal of thread of forum of users of course" // Çeviri lazim! #endif , [ActReqDelThrCrsTch] = #if L==1 // ca - "Request removal of a thread of forum of teachers of course" // Necessita traducció + "Request removal of thread of forum of teachers of course" // Necessita traducció #elif L==2 // de - "Request removal of a thread of forum of teachers of course" // Need Übersetzung + "Request removal of thread of forum of teachers of course" // Need Übersetzung #elif L==3 // en - "Request removal of a thread of forum of teachers of course" + "Request removal of thread of forum of teachers of course" #elif L==4 // es - "Solicitar eliminación de un hilo del foro de profesores de asignatura" + "Solicitar eliminación de hilo del foro de profesores de asignatura" #elif L==5 // fr - "Request removal of a thread of forum of teachers of course" // Besoin de traduction + "Request removal of thread of forum of teachers of course" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un hilo del foro de profesores de asignatura" // Okoteve traducción + "Solicitar eliminación de hilo del foro de profesores de asignatura" // Okoteve traducción #elif L==7 // it - "Request removal of a thread of forum of teachers of course" // Bisogno di traduzione + "Request removal of thread of forum of teachers of course" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a thread of forum of teachers of course" // Potrzebujesz tlumaczenie + "Request removal of thread of forum of teachers of course" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a thread of forum of teachers of course" // Precisa de tradução + "Request removal of thread of forum of teachers of course" // Precisa de tradução #elif L==10 // tr - "Request removal of a thread of forum of teachers of course" // Çeviri lazim! + "Request removal of thread of forum of teachers of course" // Çeviri lazim! #endif , [ActReqDelThrDegUsr] = #if L==1 // ca - "Request removal of a thread of forum of users of degree" // Necessita traducció + "Request removal of thread of forum of users of degree" // Necessita traducció #elif L==2 // de - "Request removal of a thread of forum of users of degree" // Need Übersetzung + "Request removal of thread of forum of users of degree" // Need Übersetzung #elif L==3 // en - "Request removal of a thread of forum of users of degree" + "Request removal of thread of forum of users of degree" #elif L==4 // es - "Solicitar eliminación de un hilo del foro de usuarios de titulación" + "Solicitar eliminación de hilo del foro de usuarios de titulación" #elif L==5 // fr - "Request removal of a thread of forum of users of degree" // Besoin de traduction + "Request removal of thread of forum of users of degree" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un hilo del foro de usuarios de titulación" // Okoteve traducción + "Solicitar eliminación de hilo del foro de usuarios de titulación" // Okoteve traducción #elif L==7 // it - "Request removal of a thread of forum of users of degree" // Bisogno di traduzione + "Request removal of thread of forum of users of degree" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a thread of forum of users of degree" // Potrzebujesz tlumaczenie + "Request removal of thread of forum of users of degree" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a thread of forum of users of degree" // Precisa de tradução + "Request removal of thread of forum of users of degree" // Precisa de tradução #elif L==10 // tr - "Request removal of a thread of forum of users of degree" // Çeviri lazim! + "Request removal of thread of forum of users of degree" // Çeviri lazim! #endif , [ActReqDelThrDegTch] = #if L==1 // ca - "Request removal of a thread of forum of teachers of degree" // Necessita traducció + "Request removal of thread of forum of teachers of degree" // Necessita traducció #elif L==2 // de - "Request removal of a thread of forum of teachers of degree" // Need Übersetzung + "Request removal of thread of forum of teachers of degree" // Need Übersetzung #elif L==3 // en - "Request removal of a thread of forum of teachers of degree" + "Request removal of thread of forum of teachers of degree" #elif L==4 // es - "Solicitar eliminación de un hilo del foro de profesores de titulación" + "Solicitar eliminación de hilo del foro de profesores de titulación" #elif L==5 // fr - "Request removal of a thread of forum of teachers of degree" // Besoin de traduction + "Request removal of thread of forum of teachers of degree" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un hilo del foro de profesores de titulación" // Okoteve traducción + "Solicitar eliminación de hilo del foro de profesores de titulación" // Okoteve traducción #elif L==7 // it - "Request removal of a thread of forum of teachers of degree" // Bisogno di traduzione + "Request removal of thread of forum of teachers of degree" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a thread of forum of teachers of degree" // Potrzebujesz tlumaczenie + "Request removal of thread of forum of teachers of degree" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a thread of forum of teachers of degree" // Precisa de tradução + "Request removal of thread of forum of teachers of degree" // Precisa de tradução #elif L==10 // tr - "Request removal of a thread of forum of teachers of degree" // Çeviri lazim! + "Request removal of thread of forum of teachers of degree" // Çeviri lazim! #endif , [ActReqDelThrCtrUsr] = #if L==1 // ca - "Request removal of a thread of forum of users of center" // Necessita traducció + "Request removal of thread of forum of users of center" // Necessita traducció #elif L==2 // de - "Request removal of a thread of forum of users of center" // Need Übersetzung + "Request removal of thread of forum of users of center" // Need Übersetzung #elif L==3 // en - "Request removal of a thread of forum of users of center" + "Request removal of thread of forum of users of center" #elif L==4 // es - "Solicitar eliminación de un hilo del foro de usuarios de centro" + "Solicitar eliminación de hilo del foro de usuarios de centro" #elif L==5 // fr - "Request removal of a thread of forum of users of center" // Besoin de traduction + "Request removal of thread of forum of users of center" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un hilo del foro de usuarios de centro" // Okoteve traducción + "Solicitar eliminación de hilo del foro de usuarios de centro" // Okoteve traducción #elif L==7 // it - "Request removal of a thread of forum of users of center" // Bisogno di traduzione + "Request removal of thread of forum of users of center" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a thread of forum of users of center" // Potrzebujesz tlumaczenie + "Request removal of thread of forum of users of center" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a thread of forum of users of center" // Precisa de tradução + "Request removal of thread of forum of users of center" // Precisa de tradução #elif L==10 // tr - "Request removal of a thread of forum of users of center" // Çeviri lazim! + "Request removal of thread of forum of users of center" // Çeviri lazim! #endif , [ActReqDelThrCtrTch] = #if L==1 // ca - "Request removal of a thread of forum of teachers of center" // Necessita traducció + "Request removal of thread of forum of teachers of center" // Necessita traducció #elif L==2 // de - "Request removal of a thread of forum of teachers of center" // Need Übersetzung + "Request removal of thread of forum of teachers of center" // Need Übersetzung #elif L==3 // en - "Request removal of a thread of forum of teachers of center" + "Request removal of thread of forum of teachers of center" #elif L==4 // es - "Solicitar eliminación de un hilo del foro de profesores de centro" + "Solicitar eliminación de hilo del foro de profesores de centro" #elif L==5 // fr - "Request removal of a thread of forum of teachers of center" // Besoin de traduction + "Request removal of thread of forum of teachers of center" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un hilo del foro de profesores de centro" // Okoteve traducción + "Solicitar eliminación de hilo del foro de profesores de centro" // Okoteve traducción #elif L==7 // it - "Request removal of a thread of forum of teachers of center" // Bisogno di traduzione + "Request removal of thread of forum of teachers of center" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a thread of forum of teachers of center" // Potrzebujesz tlumaczenie + "Request removal of thread of forum of teachers of center" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a thread of forum of teachers of center" // Precisa de tradução + "Request removal of thread of forum of teachers of center" // Precisa de tradução #elif L==10 // tr - "Request removal of a thread of forum of teachers of center" // Çeviri lazim! + "Request removal of thread of forum of teachers of center" // Çeviri lazim! #endif , [ActReqDelThrInsUsr] = #if L==1 // ca - "Request removal of a thread of forum of users of institution" // Necessita traducció + "Request removal of thread of forum of users of institution" // Necessita traducció #elif L==2 // de - "Request removal of a thread of forum of users of institution" // Need Übersetzung + "Request removal of thread of forum of users of institution" // Need Übersetzung #elif L==3 // en - "Request removal of a thread of forum of users of institution" + "Request removal of thread of forum of users of institution" #elif L==4 // es - "Solicitar eliminación de un hilo del foro de usuarios de institución" + "Solicitar eliminación de hilo del foro de usuarios de institución" #elif L==5 // fr - "Request removal of a thread of forum of users of institution" // Besoin de traduction + "Request removal of thread of forum of users of institution" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un hilo del foro de usuarios de institución" // Okoteve traducción + "Solicitar eliminación de hilo del foro de usuarios de institución" // Okoteve traducción #elif L==7 // it - "Request removal of a thread of forum of users of institution" // Bisogno di traduzione + "Request removal of thread of forum of users of institution" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a thread of forum of users of institution" // Potrzebujesz tlumaczenie + "Request removal of thread of forum of users of institution" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a thread of forum of users of institution" // Precisa de tradução + "Request removal of thread of forum of users of institution" // Precisa de tradução #elif L==10 // tr - "Request removal of a thread of forum of users of institution" // Çeviri lazim! + "Request removal of thread of forum of users of institution" // Çeviri lazim! #endif , [ActReqDelThrInsTch] = #if L==1 // ca - "Request removal of a thread of forum of teachers of institution" // Necessita traducció + "Request removal of thread of forum of teachers of institution" // Necessita traducció #elif L==2 // de - "Request removal of a thread of forum of teachers of institution" // Need Übersetzung + "Request removal of thread of forum of teachers of institution" // Need Übersetzung #elif L==3 // en - "Request removal of a thread of forum of teachers of institution" + "Request removal of thread of forum of teachers of institution" #elif L==4 // es - "Solicitar eliminación de un hilo del foro de profesores de institución" + "Solicitar eliminación de hilo del foro de profesores de institución" #elif L==5 // fr - "Request removal of a thread of forum of teachers of institution" // Besoin de traduction + "Request removal of thread of forum of teachers of institution" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un hilo del foro de profesores de institución" // Okoteve traducción + "Solicitar eliminación de hilo del foro de profesores de institución" // Okoteve traducción #elif L==7 // it - "Request removal of a thread of forum of teachers of institution" // Bisogno di traduzione + "Request removal of thread of forum of teachers of institution" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a thread of forum of teachers of institution" // Potrzebujesz tlumaczenie + "Request removal of thread of forum of teachers of institution" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a thread of forum of teachers of institution" // Precisa de tradução + "Request removal of thread of forum of teachers of institution" // Precisa de tradução #elif L==10 // tr - "Request removal of a thread of forum of teachers of institution" // Çeviri lazim! + "Request removal of thread of forum of teachers of institution" // Çeviri lazim! #endif , [ActReqDelThrGenUsr] = #if L==1 // ca - "Request removal of a thread of general forum of users" // Necessita traducció + "Request removal of thread of general forum of users" // Necessita traducció #elif L==2 // de - "Request removal of a thread of general forum of users" // Need Übersetzung + "Request removal of thread of general forum of users" // Need Übersetzung #elif L==3 // en - "Request removal of a thread of general forum of users" + "Request removal of thread of general forum of users" #elif L==4 // es - "Solicitar eliminación de un hilo del foro de usuarios general" + "Solicitar eliminación de hilo del foro de usuarios general" #elif L==5 // fr - "Request removal of a thread of general forum of users" // Besoin de traduction + "Request removal of thread of general forum of users" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un hilo del foro de usuarios general" // Okoteve traducción + "Solicitar eliminación de hilo del foro de usuarios general" // Okoteve traducción #elif L==7 // it - "Request removal of a thread of general forum of users" // Bisogno di traduzione + "Request removal of thread of general forum of users" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a thread of general forum of users" // Potrzebujesz tlumaczenie + "Request removal of thread of general forum of users" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a thread of general forum of users" // Precisa de tradução + "Request removal of thread of general forum of users" // Precisa de tradução #elif L==10 // tr - "Request removal of a thread of general forum of users" // Çeviri lazim! + "Request removal of thread of general forum of users" // Çeviri lazim! #endif , [ActReqDelThrGenTch] = #if L==1 // ca - "Request removal of a thread of general forum of teachers" // Necessita traducció + "Request removal of thread of general forum of teachers" // Necessita traducció #elif L==2 // de - "Request removal of a thread of general forum of teachers" // Need Übersetzung + "Request removal of thread of general forum of teachers" // Need Übersetzung #elif L==3 // en - "Request removal of a thread of general forum of teachers" + "Request removal of thread of general forum of teachers" #elif L==4 // es - "Solicitar eliminación de un hilo del foro de profesores general" + "Solicitar eliminación de hilo del foro de profesores general" #elif L==5 // fr - "Request removal of a thread of general forum of teachers" // Besoin de traduction + "Request removal of thread of general forum of teachers" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un hilo del foro de profesores general" // Okoteve traducción + "Solicitar eliminación de hilo del foro de profesores general" // Okoteve traducción #elif L==7 // it - "Request removal of a thread of general forum of teachers" // Bisogno di traduzione + "Request removal of thread of general forum of teachers" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a thread of general forum of teachers" // Potrzebujesz tlumaczenie + "Request removal of thread of general forum of teachers" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a thread of general forum of teachers" // Precisa de tradução + "Request removal of thread of general forum of teachers" // Precisa de tradução #elif L==10 // tr - "Request removal of a thread of general forum of teachers" // Çeviri lazim! + "Request removal of thread of general forum of teachers" // Çeviri lazim! #endif , [ActReqDelThrSWAUsr] = #if L==1 // ca - "Request removal of a thread of forum of users of the platform" // Necessita traducció + "Request removal of thread of forum of users of the platform" // Necessita traducció #elif L==2 // de - "Request removal of a thread of forum of users of the platform" // Need Übersetzung + "Request removal of thread of forum of users of the platform" // Need Übersetzung #elif L==3 // en - "Request removal of a thread of forum of users of the platform" + "Request removal of thread of forum of users of the platform" #elif L==4 // es - "Solicitar eliminación de un hilo del foro de usuarios de la plataforma" + "Solicitar eliminación de hilo del foro de usuarios de la plataforma" #elif L==5 // fr - "Request removal of a thread of forum of users of the platform" // Besoin de traduction + "Request removal of thread of forum of users of the platform" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un hilo del foro de usuarios de la plataforma" // Okoteve traducción + "Solicitar eliminación de hilo del foro de usuarios de la plataforma" // Okoteve traducción #elif L==7 // it - "Request removal of a thread of forum of users of the platform" // Bisogno di traduzione + "Request removal of thread of forum of users of the platform" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a thread of forum of users of the platform" // Potrzebujesz tlumaczenie + "Request removal of thread of forum of users of the platform" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a thread of forum of users of the platform" // Precisa de tradução + "Request removal of thread of forum of users of the platform" // Precisa de tradução #elif L==10 // tr - "Request removal of a thread of forum of users of the platform" // Çeviri lazim! + "Request removal of thread of forum of users of the platform" // Çeviri lazim! #endif , [ActReqDelThrSWATch] = #if L==1 // ca - "Request removal of a thread of forum of teachers of the platform" // Necessita traducció + "Request removal of thread of forum of teachers of the platform" // Necessita traducció #elif L==2 // de - "Request removal of a thread of forum of teachers of the platform" // Need Übersetzung + "Request removal of thread of forum of teachers of the platform" // Need Übersetzung #elif L==3 // en - "Request removal of a thread of forum of teachers of the platform" + "Request removal of thread of forum of teachers of the platform" #elif L==4 // es - "Solicitar eliminación de un hilo del foro de profesores de la plataforma" + "Solicitar eliminación de hilo del foro de profesores de la plataforma" #elif L==5 // fr - "Request removal of a thread of forum of teachers of the platform" // Besoin de traduction + "Request removal of thread of forum of teachers of the platform" // Besoin de traduction #elif L==6 // gn - "Solicitar eliminación de un hilo del foro de profesores de la plataforma" // Okoteve traducción + "Solicitar eliminación de hilo del foro de profesores de la plataforma" // Okoteve traducción #elif L==7 // it - "Request removal of a thread of forum of teachers of the platform" // Bisogno di traduzione + "Request removal of thread of forum of teachers of the platform" // Bisogno di traduzione #elif L==8 // pl - "Request removal of a thread of forum of teachers of the platform" // Potrzebujesz tlumaczenie + "Request removal of thread of forum of teachers of the platform" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of a thread of forum of teachers of the platform" // Precisa de tradução + "Request removal of thread of forum of teachers of the platform" // Precisa de tradução #elif L==10 // tr - "Request removal of a thread of forum of teachers of the platform" // Çeviri lazim! + "Request removal of thread of forum of teachers of the platform" // Çeviri lazim! #endif , [ActDelThrForCrsUsr] = @@ -32494,25 +32517,25 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = , [ActReqRemEvtMyAgd] = #if L==1 // ca - "Request removal of an event from my agenda" // Necessita traducció + "Request removal of event from my agenda" // Necessita traducció #elif L==2 // de - "Request removal of an event from my agenda" // Need Übersetzung + "Request removal of event from my agenda" // Need Übersetzung #elif L==3 // en - "Request removal of an event from my agenda" + "Request removal of event from my agenda" #elif L==4 // es "Solicitar eliminación de un evento de mi agenda" #elif L==5 // fr - "Request removal of an event from my agenda" // Besoin de traduction + "Request removal of event from my agenda" // Besoin de traduction #elif L==6 // gn "Solicitar eliminación de un evento de mi agenda" // Okoteve traducción #elif L==7 // it - "Request removal of an event from my agenda" // Bisogno di traduzione + "Request removal of event from my agenda" // Bisogno di traduzione #elif L==8 // pl - "Request removal of an event from my agenda" // Potrzebujesz tlumaczenie + "Request removal of event from my agenda" // Potrzebujesz tlumaczenie #elif L==9 // pt - "Request removal of an event from my agenda" // Precisa de tradução + "Request removal of event from my agenda" // Precisa de tradução #elif L==10 // tr - "Request removal of an event from my agenda" // Çeviri lazim! + "Request removal of event from my agenda" // Çeviri lazim! #endif , [ActRemEvtMyAgd] =