diff --git a/swad_action.c b/swad_action.c index 242ae0b45..a7e2cc31c 100644 --- a/swad_action.c +++ b/swad_action.c @@ -444,6 +444,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = [ActFrmNewPrgRsc ] = {1918,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RequestChangeItem ,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}, [ActEdiTchGui ] = { 785,-1,TabUnk,ActSeeTchGui ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Inf_FormsToSelSendInfo ,NULL}, @@ -3749,6 +3750,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un ActChgUsrPho, // #1917 ActFrmNewPrgRsc, // #1918 ActReqRemPrgRsc, // #1919 + ActRemPrgRsc, // #1920 }; /*****************************************************************************/ diff --git a/swad_action.h b/swad_action.h index f0982c75c..278f77f01 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 1919 +#define Act_MAX_ACTION_COD 1920 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13 @@ -410,107 +410,108 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to #define ActRgtPrgItm (ActChgCrsSta + 27) #define ActFrmNewPrgRsc (ActChgCrsSta + 28) #define ActReqRemPrgRsc (ActChgCrsSta + 29) -#define ActEdiTchGui (ActChgCrsSta + 30) -#define ActSeeSylLec (ActChgCrsSta + 31) -#define ActSeeSylPra (ActChgCrsSta + 32) -#define ActEdiSylLec (ActChgCrsSta + 33) -#define ActEdiSylPra (ActChgCrsSta + 34) -#define ActDelItmSylLec (ActChgCrsSta + 35) -#define ActDelItmSylPra (ActChgCrsSta + 36) -#define ActUp_IteSylLec (ActChgCrsSta + 37) -#define ActUp_IteSylPra (ActChgCrsSta + 38) -#define ActDwnIteSylLec (ActChgCrsSta + 39) -#define ActDwnIteSylPra (ActChgCrsSta + 40) -#define ActRgtIteSylLec (ActChgCrsSta + 41) -#define ActRgtIteSylPra (ActChgCrsSta + 42) -#define ActLftIteSylLec (ActChgCrsSta + 43) -#define ActLftIteSylPra (ActChgCrsSta + 44) -#define ActInsIteSylLec (ActChgCrsSta + 45) -#define ActInsIteSylPra (ActChgCrsSta + 46) -#define ActModIteSylLec (ActChgCrsSta + 47) -#define ActModIteSylPra (ActChgCrsSta + 48) +#define ActRemPrgRsc (ActChgCrsSta + 30) +#define ActEdiTchGui (ActChgCrsSta + 31) +#define ActSeeSylLec (ActChgCrsSta + 32) +#define ActSeeSylPra (ActChgCrsSta + 33) +#define ActEdiSylLec (ActChgCrsSta + 34) +#define ActEdiSylPra (ActChgCrsSta + 35) +#define ActDelItmSylLec (ActChgCrsSta + 36) +#define ActDelItmSylPra (ActChgCrsSta + 37) +#define ActUp_IteSylLec (ActChgCrsSta + 38) +#define ActUp_IteSylPra (ActChgCrsSta + 39) +#define ActDwnIteSylLec (ActChgCrsSta + 40) +#define ActDwnIteSylPra (ActChgCrsSta + 41) +#define ActRgtIteSylLec (ActChgCrsSta + 42) +#define ActRgtIteSylPra (ActChgCrsSta + 43) +#define ActLftIteSylLec (ActChgCrsSta + 44) +#define ActLftIteSylPra (ActChgCrsSta + 45) +#define ActInsIteSylLec (ActChgCrsSta + 46) +#define ActInsIteSylPra (ActChgCrsSta + 47) +#define ActModIteSylLec (ActChgCrsSta + 48) +#define ActModIteSylPra (ActChgCrsSta + 49) -#define ActEdiBib (ActChgCrsSta + 49) -#define ActEdiFAQ (ActChgCrsSta + 50) -#define ActEdiCrsLnk (ActChgCrsSta + 51) +#define ActEdiBib (ActChgCrsSta + 50) +#define ActEdiFAQ (ActChgCrsSta + 51) +#define ActEdiCrsLnk (ActChgCrsSta + 52) -#define ActChgFrcReaCrsInf (ActChgCrsSta + 52) -#define ActChgFrcReaTchGui (ActChgCrsSta + 53) -#define ActChgFrcReaSylLec (ActChgCrsSta + 54) -#define ActChgFrcReaSylPra (ActChgCrsSta + 55) -#define ActChgFrcReaBib (ActChgCrsSta + 56) -#define ActChgFrcReaFAQ (ActChgCrsSta + 57) -#define ActChgFrcReaCrsLnk (ActChgCrsSta + 58) +#define ActChgFrcReaCrsInf (ActChgCrsSta + 53) +#define ActChgFrcReaTchGui (ActChgCrsSta + 54) +#define ActChgFrcReaSylLec (ActChgCrsSta + 55) +#define ActChgFrcReaSylPra (ActChgCrsSta + 56) +#define ActChgFrcReaBib (ActChgCrsSta + 57) +#define ActChgFrcReaFAQ (ActChgCrsSta + 58) +#define ActChgFrcReaCrsLnk (ActChgCrsSta + 59) -#define ActChgHavReaCrsInf (ActChgCrsSta + 59) -#define ActChgHavReaTchGui (ActChgCrsSta + 60) -#define ActChgHavReaSylLec (ActChgCrsSta + 61) -#define ActChgHavReaSylPra (ActChgCrsSta + 62) -#define ActChgHavReaBib (ActChgCrsSta + 63) -#define ActChgHavReaFAQ (ActChgCrsSta + 64) -#define ActChgHavReaCrsLnk (ActChgCrsSta + 65) +#define ActChgHavReaCrsInf (ActChgCrsSta + 60) +#define ActChgHavReaTchGui (ActChgCrsSta + 61) +#define ActChgHavReaSylLec (ActChgCrsSta + 62) +#define ActChgHavReaSylPra (ActChgCrsSta + 63) +#define ActChgHavReaBib (ActChgCrsSta + 64) +#define ActChgHavReaFAQ (ActChgCrsSta + 65) +#define ActChgHavReaCrsLnk (ActChgCrsSta + 66) -#define ActSelInfSrcCrsInf (ActChgCrsSta + 66) -#define ActSelInfSrcTchGui (ActChgCrsSta + 67) -#define ActSelInfSrcSylLec (ActChgCrsSta + 68) -#define ActSelInfSrcSylPra (ActChgCrsSta + 69) -#define ActSelInfSrcBib (ActChgCrsSta + 70) -#define ActSelInfSrcFAQ (ActChgCrsSta + 71) -#define ActSelInfSrcCrsLnk (ActChgCrsSta + 72) -#define ActRcvURLCrsInf (ActChgCrsSta + 73) -#define ActRcvURLTchGui (ActChgCrsSta + 74) -#define ActRcvURLSylLec (ActChgCrsSta + 75) -#define ActRcvURLSylPra (ActChgCrsSta + 76) -#define ActRcvURLBib (ActChgCrsSta + 77) -#define ActRcvURLFAQ (ActChgCrsSta + 78) -#define ActRcvURLCrsLnk (ActChgCrsSta + 79) -#define ActRcvPagCrsInf (ActChgCrsSta + 80) -#define ActRcvPagTchGui (ActChgCrsSta + 81) -#define ActRcvPagSylLec (ActChgCrsSta + 82) -#define ActRcvPagSylPra (ActChgCrsSta + 83) -#define ActRcvPagBib (ActChgCrsSta + 84) -#define ActRcvPagFAQ (ActChgCrsSta + 85) -#define ActRcvPagCrsLnk (ActChgCrsSta + 86) -#define ActEditorCrsInf (ActChgCrsSta + 87) -#define ActEditorTchGui (ActChgCrsSta + 88) -#define ActEditorSylLec (ActChgCrsSta + 89) -#define ActEditorSylPra (ActChgCrsSta + 90) -#define ActEditorBib (ActChgCrsSta + 91) -#define ActEditorFAQ (ActChgCrsSta + 92) -#define ActEditorCrsLnk (ActChgCrsSta + 93) -#define ActPlaTxtEdiCrsInf (ActChgCrsSta + 94) -#define ActPlaTxtEdiTchGui (ActChgCrsSta + 95) -#define ActPlaTxtEdiSylLec (ActChgCrsSta + 96) -#define ActPlaTxtEdiSylPra (ActChgCrsSta + 97) -#define ActPlaTxtEdiBib (ActChgCrsSta + 98) -#define ActPlaTxtEdiFAQ (ActChgCrsSta + 99) -#define ActPlaTxtEdiCrsLnk (ActChgCrsSta + 100) -#define ActRchTxtEdiCrsInf (ActChgCrsSta + 101) -#define ActRchTxtEdiTchGui (ActChgCrsSta + 102) -#define ActRchTxtEdiSylLec (ActChgCrsSta + 103) -#define ActRchTxtEdiSylPra (ActChgCrsSta + 104) -#define ActRchTxtEdiBib (ActChgCrsSta + 105) -#define ActRchTxtEdiFAQ (ActChgCrsSta + 106) -#define ActRchTxtEdiCrsLnk (ActChgCrsSta + 107) -#define ActRcvPlaTxtCrsInf (ActChgCrsSta + 108) -#define ActRcvPlaTxtTchGui (ActChgCrsSta + 109) -#define ActRcvPlaTxtSylLec (ActChgCrsSta + 110) -#define ActRcvPlaTxtSylPra (ActChgCrsSta + 111) -#define ActRcvPlaTxtBib (ActChgCrsSta + 112) -#define ActRcvPlaTxtFAQ (ActChgCrsSta + 113) -#define ActRcvPlaTxtCrsLnk (ActChgCrsSta + 114) -#define ActRcvRchTxtCrsInf (ActChgCrsSta + 115) -#define ActRcvRchTxtTchGui (ActChgCrsSta + 116) -#define ActRcvRchTxtSylLec (ActChgCrsSta + 117) -#define ActRcvRchTxtSylPra (ActChgCrsSta + 118) -#define ActRcvRchTxtBib (ActChgCrsSta + 119) -#define ActRcvRchTxtFAQ (ActChgCrsSta + 120) -#define ActRcvRchTxtCrsLnk (ActChgCrsSta + 121) +#define ActSelInfSrcCrsInf (ActChgCrsSta + 67) +#define ActSelInfSrcTchGui (ActChgCrsSta + 68) +#define ActSelInfSrcSylLec (ActChgCrsSta + 69) +#define ActSelInfSrcSylPra (ActChgCrsSta + 70) +#define ActSelInfSrcBib (ActChgCrsSta + 71) +#define ActSelInfSrcFAQ (ActChgCrsSta + 72) +#define ActSelInfSrcCrsLnk (ActChgCrsSta + 73) +#define ActRcvURLCrsInf (ActChgCrsSta + 74) +#define ActRcvURLTchGui (ActChgCrsSta + 75) +#define ActRcvURLSylLec (ActChgCrsSta + 76) +#define ActRcvURLSylPra (ActChgCrsSta + 77) +#define ActRcvURLBib (ActChgCrsSta + 78) +#define ActRcvURLFAQ (ActChgCrsSta + 79) +#define ActRcvURLCrsLnk (ActChgCrsSta + 80) +#define ActRcvPagCrsInf (ActChgCrsSta + 81) +#define ActRcvPagTchGui (ActChgCrsSta + 82) +#define ActRcvPagSylLec (ActChgCrsSta + 83) +#define ActRcvPagSylPra (ActChgCrsSta + 84) +#define ActRcvPagBib (ActChgCrsSta + 85) +#define ActRcvPagFAQ (ActChgCrsSta + 86) +#define ActRcvPagCrsLnk (ActChgCrsSta + 87) +#define ActEditorCrsInf (ActChgCrsSta + 88) +#define ActEditorTchGui (ActChgCrsSta + 89) +#define ActEditorSylLec (ActChgCrsSta + 90) +#define ActEditorSylPra (ActChgCrsSta + 91) +#define ActEditorBib (ActChgCrsSta + 92) +#define ActEditorFAQ (ActChgCrsSta + 93) +#define ActEditorCrsLnk (ActChgCrsSta + 94) +#define ActPlaTxtEdiCrsInf (ActChgCrsSta + 95) +#define ActPlaTxtEdiTchGui (ActChgCrsSta + 96) +#define ActPlaTxtEdiSylLec (ActChgCrsSta + 97) +#define ActPlaTxtEdiSylPra (ActChgCrsSta + 98) +#define ActPlaTxtEdiBib (ActChgCrsSta + 99) +#define ActPlaTxtEdiFAQ (ActChgCrsSta + 100) +#define ActPlaTxtEdiCrsLnk (ActChgCrsSta + 101) +#define ActRchTxtEdiCrsInf (ActChgCrsSta + 102) +#define ActRchTxtEdiTchGui (ActChgCrsSta + 103) +#define ActRchTxtEdiSylLec (ActChgCrsSta + 104) +#define ActRchTxtEdiSylPra (ActChgCrsSta + 105) +#define ActRchTxtEdiBib (ActChgCrsSta + 106) +#define ActRchTxtEdiFAQ (ActChgCrsSta + 107) +#define ActRchTxtEdiCrsLnk (ActChgCrsSta + 108) +#define ActRcvPlaTxtCrsInf (ActChgCrsSta + 109) +#define ActRcvPlaTxtTchGui (ActChgCrsSta + 110) +#define ActRcvPlaTxtSylLec (ActChgCrsSta + 111) +#define ActRcvPlaTxtSylPra (ActChgCrsSta + 112) +#define ActRcvPlaTxtBib (ActChgCrsSta + 113) +#define ActRcvPlaTxtFAQ (ActChgCrsSta + 114) +#define ActRcvPlaTxtCrsLnk (ActChgCrsSta + 115) +#define ActRcvRchTxtCrsInf (ActChgCrsSta + 116) +#define ActRcvRchTxtTchGui (ActChgCrsSta + 117) +#define ActRcvRchTxtSylLec (ActChgCrsSta + 118) +#define ActRcvRchTxtSylPra (ActChgCrsSta + 119) +#define ActRcvRchTxtBib (ActChgCrsSta + 120) +#define ActRcvRchTxtFAQ (ActChgCrsSta + 121) +#define ActRcvRchTxtCrsLnk (ActChgCrsSta + 122) -#define ActPrnCrsTT (ActChgCrsSta + 122) -#define ActEdiCrsTT (ActChgCrsSta + 123) -#define ActChgCrsTT (ActChgCrsSta + 124) -#define ActChgCrsTT1stDay (ActChgCrsSta + 125) +#define ActPrnCrsTT (ActChgCrsSta + 123) +#define ActEdiCrsTT (ActChgCrsSta + 124) +#define ActChgCrsTT (ActChgCrsSta + 125) +#define ActChgCrsTT1stDay (ActChgCrsSta + 126) /*****************************************************************************/ /***************************** Assessment tab ********************************/ diff --git a/swad_alert.c b/swad_alert.c index dd61dea54..15ac2ba79 100644 --- a/swad_alert.c +++ b/swad_alert.c @@ -137,7 +137,7 @@ void Ale_ResetAllAlerts (void) static void Ale_ResetLastAlert (void) { - if (Gbl.Alerts.Num) // There are pending alerts no shown + if (Gbl.Alerts.Num) // There are pending alerts not shown Ale_ResetAlert (Gbl.Alerts.Num - 1); // Reset the last one } diff --git a/swad_call_for_exam.c b/swad_call_for_exam.c index 80f580136..2a7f50ddc 100644 --- a/swad_call_for_exam.c +++ b/swad_call_for_exam.c @@ -341,7 +341,7 @@ void Cfe_ReceiveCallForExam1 (void) Frm_SetAnchorStr (ExaCod,&Anchor); Ale_CreateAlert (Ale_SUCCESS,Anchor, NewCallForExam ? Txt_Created_new_call_for_exam : - Txt_The_call_for_exam_has_been_successfully_updated); + Txt_The_call_for_exam_has_been_successfully_updated); Frm_FreeAnchorStr (Anchor); /***** Set exam to be highlighted *****/ diff --git a/swad_changelog.h b/swad_changelog.h index 59f3d10d0..ae195b5a6 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.104.1 (2022-07-13)" +#define Log_PLATFORM_VERSION "SWAD 21.105 (2022-07-14)" #define CSS_FILE "swad21.103.6.css" #define JS_FILE "swad21.100.js" /* + Version 21.105: Jul 14, 2022 Removing resource from program item. (328617 lines) Version 21.104.1: Jul 13, 2022 Adding resources to program items. (328504 lines) Version 21.104: Jul 12, 2022 Adding resources to program items. (328263 lines) 1 change necessary in database: diff --git a/swad_program.c b/swad_program.c index aaf4476ed..18526cf1c 100644 --- a/swad_program.c +++ b/swad_program.c @@ -546,11 +546,7 @@ static void Prg_WriteRowWithItemForm (Prg_CreateOrChangeItem_t CreateOrChangeIte /* List of item resources */ if (CreateOrChangeItem == Prg_PUT_FORM_CHANGE_ITEM) - { - HTM_ARTICLE_Begin ("rsc_form"); - PrgRsc_EditResources (ItmCod); - HTM_ARTICLE_End (); - } + PrgRsc_EditResources (ItmCod); HTM_TD_End (); /***** End row *****/ @@ -1706,7 +1702,7 @@ static void Prg_ShowFormToChangeItem (long ItmCod) Prg_DB_GetItemTxt (Item.Hierarchy.ItmCod,Txt); /***** Show pending alerts */ - Ale_ShowAlerts (NULL); + // Ale_ShowAlerts (NULL); /***** Begin form *****/ Frm_BeginFormAnchor (ActChgPrgItm,"prg_highlighted"); diff --git a/swad_program_database.c b/swad_program_database.c index 5f62afde8..e87a14dd5 100644 --- a/swad_program_database.c +++ b/swad_program_database.c @@ -28,6 +28,7 @@ #include "swad_error.h" #include "swad_global.h" #include "swad_program.h" +#include "swad_program_resource.h" /*****************************************************************************/ /************** External global variables from others modules ****************/ @@ -486,3 +487,17 @@ void Prg_DB_RemoveCrsItems (long CrsCod) " WHERE CrsCod=%ld", CrsCod); } + +/*****************************************************************************/ +/************************** Remove an item resource **************************/ +/*****************************************************************************/ + +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 + Resource->RscCod, + Resource->ItmCod); + } diff --git a/swad_program_database.h b/swad_program_database.h index 6dfe2f03a..865fb07fb 100644 --- a/swad_program_database.h +++ b/swad_program_database.h @@ -29,11 +29,13 @@ #include "swad_hierarchy_level.h" #include "swad_program.h" +#include "swad_program_resource.h" /*****************************************************************************/ /***************************** Public prototypes *****************************/ /*****************************************************************************/ +//--------------------------------- Items ------------------------------------- long Prg_DB_InsertItem (const struct Prg_Item *Item,const char *Txt); void Prg_DB_UpdateItem (const struct Prg_Item *Item,const char *Txt); void Prg_DB_HideOrUnhideItem (long ItmCod,bool Hide); @@ -57,4 +59,7 @@ unsigned Prg_DB_GetNumItems (HieLvl_Level_t Scope); void Prg_DB_RemoveItemRange (const struct Prg_ItemRange *ToRemove); void Prg_DB_RemoveCrsItems (long CrsCod); +//------------------------------ Resources ------------------------------------ +void Prg_DB_RemoveResource (const struct PrgRsc_Resource *Resource); + #endif diff --git a/swad_program_resource.c b/swad_program_resource.c index d0caa57c8..8829112e6 100644 --- a/swad_program_resource.c +++ b/swad_program_resource.c @@ -109,6 +109,11 @@ static struct .Levels = NULL }; */ + +static long PrgSrc_RscCodToBeRemoved = -1L; + +static const char *PrgRsc_RESOURCE_SECTION_ID = "rsc_section"; + /*****************************************************************************/ /***************************** Private prototypes ****************************/ /*****************************************************************************/ @@ -185,6 +190,7 @@ void PrgRsc_ShowResources (long ItmCod) void PrgRsc_EditResources (long ItmCod) { extern const char *Hlp_COURSE_Program; + extern const char *Txt_Remove_resource; extern const char *Txt_Resources; MYSQL_RES *mysql_res; unsigned NumRsc; @@ -198,44 +204,64 @@ void PrgRsc_EditResources (long ItmCod) /***** Get list of item resources from database *****/ NumResources = Prg_DB_GetListResources (&mysql_res,ItmCod); // Resources found... - /***** Begin box *****/ - Box_BoxBegin ("100%",Txt_Resources, - PrgRsc_PutIconsListResources,&ItmCod, - Hlp_COURSE_Program,Box_NOT_CLOSABLE); + /***** Begin section *****/ + HTM_SECTION_Begin (PrgRsc_RESOURCE_SECTION_ID); - /***** Table *****/ - HTM_TABLE_BeginWideMarginPadding (2); - HTM_TBODY_Begin (NULL); // 1st tbody start + /***** Show possible alerts *****/ + switch (Gbl.Action.Act) + { + case ActReqRemPrgRsc: + /* Alert with button to remove resource */ + Ale_ShowLastAlertAndButton (ActRemPrgRsc,PrgRsc_RESOURCE_SECTION_ID,NULL, + PrgRsc_PutParams,&PrgSrc_RscCodToBeRemoved, + Btn_REMOVE_BUTTON,Txt_Remove_resource); + break; + default: + Ale_ShowAlerts (PrgRsc_RESOURCE_SECTION_ID); + break; + } - /***** Write all item resources *****/ - for (NumRsc = 1; - NumRsc <= NumResources; - NumRsc++) - { - /* Get data of this item resource */ - PrgRsc_GetDataOfResource (&Resource,&mysql_res); + /***** Begin box *****/ + Box_BoxBegin ("100%",Txt_Resources, + PrgRsc_PutIconsListResources,&ItmCod, + Hlp_COURSE_Program,Box_NOT_CLOSABLE); - /* Show item */ - PrgRsc_WriteRowEditResource (NumRsc,&Resource); + /***** Table *****/ + HTM_TABLE_BeginWideMarginPadding (2); + HTM_TBODY_Begin (NULL); - The_ChangeRowColor (); - } + /***** Write all item resources *****/ + for (NumRsc = 1; + NumRsc <= NumResources; + NumRsc++) + { + /* Get data of this item resource */ + PrgRsc_GetDataOfResource (&Resource,&mysql_res); - /***** Create item at the end? *****/ - /* - if (ItmCodBeforeForm <= 0 && CreateOrChangeItem == Prg_PUT_FORM_CREATE_ITEM) - Prg_WriteRowWithItemForm (Prg_PUT_FORM_CREATE_ITEM,-1L,1); - */ + /* Show item */ + PrgRsc_WriteRowEditResource (NumRsc,&Resource); - /***** End table *****/ - HTM_TBODY_End (); // 3rd tbody end - HTM_TABLE_End (); + The_ChangeRowColor (); + } - /***** Button to create a new program item *****/ - PrgRsc_PutButtonToCreateNewResource (ItmCod); + /***** Create item at the end? *****/ + /* + if (ItmCodBeforeForm <= 0 && CreateOrChangeItem == Prg_PUT_FORM_CREATE_ITEM) + Prg_WriteRowWithItemForm (Prg_PUT_FORM_CREATE_ITEM,-1L,1); + */ - /***** End box *****/ - Box_BoxEnd (); + /***** End table *****/ + HTM_TBODY_End (); + HTM_TABLE_End (); + + /***** Button to create a new program item *****/ + PrgRsc_PutButtonToCreateNewResource (ItmCod); + + /***** End box *****/ + Box_BoxEnd (); + + /***** End section *****/ + HTM_SECTION_End (); } /*****************************************************************************/ @@ -257,7 +283,7 @@ static void PrgRsc_PutIconsListResources (void *ItmCod) static void PrgSrc_PutIconToCreateNewResource (long ItmCod) { - Ico_PutContextualIconToAdd (ActFrmNewPrgRsc,"rsc_form", + Ico_PutContextualIconToAdd (ActFrmNewPrgRsc,PrgRsc_RESOURCE_SECTION_ID, Prg_PutParams,&ItmCod); } @@ -269,7 +295,7 @@ static void PrgRsc_PutButtonToCreateNewResource (long ItmCod) { extern const char *Txt_New_resource; - Frm_BeginFormAnchor (ActFrmNewPrgRsc,"rsc_form"); + Frm_BeginFormAnchor (ActFrmNewPrgRsc,PrgRsc_RESOURCE_SECTION_ID); Prg_PutParams (&ItmCod); Btn_PutConfirmButton (Txt_New_resource); Frm_EndForm (); @@ -441,7 +467,7 @@ static void PrgRsc_PutFormsToRemEditOneResource (struct PrgRsc_Resource *Resourc case Rol_TCH: case Rol_SYS_ADM: /***** Put form to remove program item *****/ - Ico_PutContextualIconToRemove (ActReqRemPrgRsc,"rsc_form", + Ico_PutContextualIconToRemove (ActReqRemPrgRsc,PrgRsc_RESOURCE_SECTION_ID, PrgRsc_PutParams,&Resource->RscCod); /***** Put form to hide/show program item *****/ @@ -522,7 +548,6 @@ static long PrgRsc_GetParamRscCod (void) void PrgRsc_ReqRemResource (void) { extern const char *Txt_Do_you_really_want_to_remove_the_resource_X; - extern const char *Txt_Remove_resource; struct PrgRsc_Resource Resource; long ItmCodBeforeForm; unsigned FormLevel; @@ -537,12 +562,52 @@ void PrgRsc_ReqRemResource (void) if (Resource.ItmCod <= 0) Err_WrongResourceExit (); - /***** Show question and button to remove the item resource *****/ - Ale_ShowAlertAndButton (ActRemPrgItm,NULL,NULL, - PrgRsc_PutParams,&Resource.RscCod, - Btn_REMOVE_BUTTON,Txt_Remove_resource, - Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_resource_X, - Resource.Title); + /***** Create alert to remove the item resource *****/ + Ale_CreateAlert (Ale_QUESTION,PrgRsc_RESOURCE_SECTION_ID, + Txt_Do_you_really_want_to_remove_the_resource_X, + Resource.Title); + PrgSrc_RscCodToBeRemoved = Resource.RscCod; + + /***** Get the code of the program item *****/ + ItmCodBeforeForm = Resource.ItmCod; + FormLevel = Prg_GetLevelFromNumItem (Prg_GetNumItemFromItmCod (Resource.ItmCod)); + + /***** Show current program items, if any *****/ + Prg_SetItemRangeEmpty (&ToHighlight); + Prg_ShowAllItems (Prg_PUT_FORM_CHANGE_ITEM, + &ToHighlight,-1L,ItmCodBeforeForm,FormLevel); + + /***** Free list of program items *****/ + Prg_FreeListItems (); + } + +/*****************************************************************************/ +/**************************** Remove an item resource ************************/ +/*****************************************************************************/ + +void PrgRsc_RemoveResource (void) + { + extern const char *Txt_Resource_X_removed; + struct PrgRsc_Resource Resource; + long ItmCodBeforeForm; + unsigned FormLevel; + struct Prg_ItemRange ToHighlight; + + /***** Get list of program items *****/ + Prg_GetListItems (); + + /***** Get data of the item resource from database *****/ + Resource.RscCod = PrgRsc_GetParamRscCod (); + PrgRsc_GetDataOfResourceByCod (&Resource); + if (Resource.ItmCod <= 0) + Err_WrongResourceExit (); + + /***** Remove resource *****/ + Prg_DB_RemoveResource (&Resource); + + /***** Create alert to remove the item resource *****/ + Ale_CreateAlert (Ale_SUCCESS,PrgRsc_RESOURCE_SECTION_ID, + Txt_Resource_X_removed,Resource.Title); /***** Get the code of the program item *****/ ItmCodBeforeForm = Resource.ItmCod; diff --git a/swad_program_resource.h b/swad_program_resource.h index fd0e36140..abaf2fafd 100644 --- a/swad_program_resource.h +++ b/swad_program_resource.h @@ -56,5 +56,6 @@ void PrgRsc_ShowResources (long ItmCod); void PrgRsc_EditResources (long ItmCod); void PrgRsc_RequestCreateResource (void); void PrgRsc_ReqRemResource (void); +void PrgRsc_RemoveResource (void); #endif diff --git a/swad_text.c b/swad_text.c index b97e99d1e..8bbed7fc3 100644 --- a/swad_text.c +++ b/swad_text.c @@ -35648,6 +35648,29 @@ const char *Txt_Reset_survey = "Reset survey"; // Çeviri lazim! #endif +const char *Txt_Resource_X_removed = // Warning: it is very important to include %s in the following sentences +#if L==1 // ca + "Recurs %s eliminat."; +#elif L==2 // de + "Ressource %s entfernt."; +#elif L==3 // en + "Resource s removed."; +#elif L==4 // es + "Recurso %s eliminado."; +#elif L==5 // fr + "Ressource %s supprimée."; +#elif L==6 // gn + "Recurso %s eliminado."; // Okoteve traducción +#elif L==7 // it + "Risorsa %s rimossa."; +#elif L==8 // pl + "Usunięto zasób %s."; +#elif L==9 // pt + "Recurso %s removido."; +#elif L==10 // tr + "Kaynak s kaldırıldı."; +#endif + const char *Txt_Resources = #if L==1 // ca "Recursos"; diff --git a/swad_text_action.c b/swad_text_action.c index dfa721dbf..95aaec1ae 100644 --- a/swad_text_action.c +++ b/swad_text_action.c @@ -5741,6 +5741,29 @@ const char *Txt_Actions[Act_NUM_ACTIONS] = "Request removal of resource" // Precisa de tradução #elif L==10 // tr "Request removal of resource" // Çeviri lazim! +#endif + , + [ActRemPrgRsc] = +#if L==1 // ca + "Remove resource" // Necessita traducció +#elif L==2 // de + "Remove resource" // Need Übersetzung +#elif L==3 // en + "Remove resource" +#elif L==4 // es + "Eliminar recurso" +#elif L==5 // fr + "Remove resource" // Besoin de traduction +#elif L==6 // gn + "Eliminar recurso" // Okoteve traducción +#elif L==7 // it + "Remove resource" // Bisogno di traduzione +#elif L==8 // pl + "Remove resource" // Potrzebujesz tlumaczenie +#elif L==9 // pt + "Remove resource" // Precisa de tradução +#elif L==10 // tr + "Remove resource" // Çeviri lazim! #endif , [ActSeeTchGui] =