From 68e1bc6eb4f0d79cc0cc2187f9c4a84c707d9d64 Mon Sep 17 00:00:00 2001 From: acanas Date: Thu, 1 Sep 2022 22:04:33 +0200 Subject: [PATCH] Version 21.115: Sep 01, 2022 Code refactoring in edition of program items. --- swad_changelog.h | 3 +- swad_program.c | 245 ++++++++++++++++++++-------------------- swad_program.h | 14 +-- swad_program_database.c | 17 +-- swad_program_database.h | 1 - swad_program_resource.c | 93 +++++---------- 6 files changed, 158 insertions(+), 215 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index acc555fe5..c1b261989 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.114.1 (2022-07-25)" +#define Log_PLATFORM_VERSION "SWAD 21.115 (2022-09-01)" #define CSS_FILE "swad21.107.1.css" #define JS_FILE "swad21.100.js" /* + Version 21.115: Sep 01, 2022 Code refactoring in edition of program items. (329212 lines) Version 21.114.1: Jul 25, 2022 Fixed bug removing an item resource. (329264 lines) Version 21.114: Jul 25, 2022 New form and action to create item resource. (329258 lines) Version 21.113: Jul 22, 2022 New form and action to rename item resource. (329151 lines) diff --git a/swad_program.c b/swad_program.c index 7f4b5e0c4..58991d418 100644 --- a/swad_program.c +++ b/swad_program.c @@ -117,7 +117,7 @@ static void Prg_PutButtonToCreateNewItem (void); static void Prg_WriteRowItem (Prg_ListingType_t ListingType, unsigned NumItem,struct Prg_Item *Item); static void Prg_WriteItemText (long ItmCod,bool LightStyle); -static void Prg_WriteRowToCreateItem (long ItmCod,unsigned FormLevel); +static void Prg_WriteRowToCreateItem (long ParentItmCod,unsigned FormLevel); static void Prg_SetTitleClass (char **TitleClass,unsigned Level,bool LightStyle); static void Prg_FreeTitleClass (char *TitleClass); @@ -158,7 +158,7 @@ static int Prg_GetNextBrother (int NumItem); static void Prg_MoveLeftRightItem (Prg_MoveLeftRight_t LeftRight); -static void Prg_SetItemRangeOnlyItem (unsigned Index,struct Prg_ItemRange *ItemRange); +static void Prg_SetItemRangeOnlyItem (unsigned NumItem,struct Prg_ItemRange *ItemRange); static void Prg_SetItemRangeWithAllChildren (unsigned NumItem,struct Prg_ItemRange *ItemRange); static unsigned Prg_GetLastChild (int NumItem); @@ -181,7 +181,7 @@ void Prg_ShowCourseProgram (void) Prg_GetListItems (); /***** Show course program without highlighting any item *****/ - Prg_ShowAllItems (Prg_VIEW,NULL,-1L,-1L,0); + Prg_ShowAllItems (Prg_VIEW,-1L); /***** Free list of program items *****/ Prg_FreeListItems (); @@ -193,39 +193,35 @@ void Prg_EditCourseProgram (void) Prg_GetListItems (); /***** Show course program without highlighting any item *****/ - Prg_EditCourseProgramHighlightingItem (NULL); + Prg_ShowAllItems (Prg_EDIT_ITEMS,-1L); /***** Free list of program items *****/ Prg_FreeListItems (); } -void Prg_EditCourseProgramHighlightingItem (const struct Prg_ItemRange *ToHighlight) - { - /***** Show all program items *****/ - Prg_ShowAllItems (Prg_EDIT_LIST,ToHighlight,-1L,-1L,0); - } - /*****************************************************************************/ /************************* Show all program items ****************************/ /*****************************************************************************/ -void Prg_ShowAllItems (Prg_ListingType_t ListingType, - const struct Prg_ItemRange *ToHighlight, - long ParentItmCod,long ItmCod,unsigned FormLevel) +void Prg_ShowAllItems (Prg_ListingType_t ListingType,long ItmCod) { extern const char *Hlp_COURSE_Program; extern const char *Txt_Course_program; + long ParentItmCod = -1L; // Initialized to avoid warning unsigned NumItem; + unsigned FormLevel = 0; // Initialized to avoid warning struct Prg_Item Item; + struct Prg_ItemRange ToHighlight; static bool FirstTBodyOpen = false; static void (*FunctionToDrawContextualIcons[Prg_NUM_LISTING_TYPES]) (void *Args) = { [Prg_PRINT ] = NULL, [Prg_VIEW ] = Prg_PutIconsListItems, - [Prg_EDIT_LIST ] = Prg_PutIconsEditItems, - [Prg_NEW_ITEM ] = Prg_PutIconsEditItems, - [Prg_EDIT_ITEM ] = Prg_PutIconsEditItems, + [Prg_EDIT_ITEMS ] = Prg_PutIconsEditItems, + [Prg_FORM_NEW_ITEM ] = Prg_PutIconsEditItems, + [Prg_FORM_EDIT_ITEM ] = Prg_PutIconsEditItems, [Prg_END_EDIT_ITEM ] = Prg_PutIconsEditItems, + [Prg_RECEIVE_ITEM ] = Prg_PutIconsEditItems, [Prg_EDIT_RESOURCES] = Prg_PutIconsEditItems, [Prg_END_EDIT_RES ] = Prg_PutIconsEditItems, }; @@ -234,6 +230,45 @@ void Prg_ShowAllItems (Prg_ListingType_t ListingType, Prg_SetMaxItemLevel (Prg_CalculateMaxItemLevel ()); Prg_CreateLevels (); + /***** Compute form level *****/ + ToHighlight.Begin = + ToHighlight.End = 0; + switch (ListingType) + { + case Prg_EDIT_ITEMS: + if (ItmCod > 0) + Prg_SetItemRangeWithAllChildren (Prg_GetNumItemFromItmCod (ItmCod), + &ToHighlight); + break; + case Prg_RECEIVE_ITEM: + // case Prg_EDIT_RESOURCES: // Uncomment to higlight item + // case Prg_END_EDIT_RES: // Uncomment to higlight item + if (ItmCod > 0) + Prg_SetItemRangeOnlyItem (Prg_GetNumItemFromItmCod (ItmCod), + &ToHighlight); + break; + case Prg_FORM_NEW_ITEM: + if (ItmCod > 0) + { + ParentItmCod = ItmCod; // Item code here is the code of the parent of the item to create + NumItem = Prg_GetNumItemFromItmCod (ItmCod); + ItmCod = Prg_Gbl.List.Items[Prg_GetLastChild (NumItem)].ItmCod; + FormLevel = Prg_GetLevelFromNumItem (NumItem) + 1; + } + else + { + ParentItmCod = -1L; // No parent item (user clicked on button to add a new first-level item at the end) + if (Prg_Gbl.List.NumItems) // There are items already + ItmCod = Prg_Gbl.List.Items[Prg_Gbl.List.NumItems - 1].ItmCod; + else // No current items + ItmCod = -1L; + FormLevel = 1; + } + break; + default: + break; + } + /***** Begin box *****/ Box_BoxBegin ("100%",Txt_Course_program, FunctionToDrawContextualIcons[ListingType],NULL, @@ -259,55 +294,61 @@ void Prg_ShowAllItems (Prg_ListingType_t ListingType, Prg_GetDataOfItemByCod (&Item); /* Begin range to highlight? */ - if (ToHighlight) - if (Item.Hierarchy.Index == ToHighlight->Begin) // Begin of the highlighted range + if (Item.Hierarchy.Index == ToHighlight.Begin) // Begin of the highlighted range + { + if (FirstTBodyOpen) { - if (FirstTBodyOpen) - { - HTM_TBODY_End (); // 1st tbody end - FirstTBodyOpen = false; - } - HTM_TBODY_Begin ("id=\"prg_highlighted\""); // Highlighted tbody start + HTM_TBODY_End (); // 1st tbody end + FirstTBodyOpen = false; } + HTM_TBODY_Begin ("id=\"prg_highlighted\""); // Highlighted tbody start + } /* Show form to create item */ switch (ListingType) { case Prg_PRINT: case Prg_VIEW: - case Prg_EDIT_LIST: + case Prg_EDIT_ITEMS: Prg_WriteRowItem (ListingType,NumItem,&Item); break; - case Prg_NEW_ITEM: - Prg_WriteRowItem (Prg_EDIT_LIST,NumItem,&Item); + case Prg_FORM_NEW_ITEM: + Prg_WriteRowItem (Prg_EDIT_ITEMS,NumItem,&Item); if (Item.Hierarchy.ItmCod == ItmCod) Prg_WriteRowToCreateItem (ParentItmCod,FormLevel); break; - case Prg_EDIT_ITEM: + case Prg_FORM_EDIT_ITEM: case Prg_END_EDIT_ITEM: + case Prg_RECEIVE_ITEM: case Prg_EDIT_RESOURCES: case Prg_END_EDIT_RES: Prg_WriteRowItem (Item.Hierarchy.ItmCod == ItmCod ? ListingType : - Prg_EDIT_LIST, + Prg_EDIT_ITEMS, NumItem,&Item); break; } /* End range to highlight? */ - if (ToHighlight) - if (Item.Hierarchy.Index == ToHighlight->End) // End of the highlighted range - { - HTM_TBODY_End (); // Highlighted tbody end - if (NumItem < Prg_Gbl.List.NumItems - 1) // Not the last item - HTM_TBODY_Begin (NULL); // 3rd tbody begin - } + if (Item.Hierarchy.Index == ToHighlight.End) // End of the highlighted range + { + HTM_TBODY_End (); // Highlighted tbody end + if (NumItem < Prg_Gbl.List.NumItems - 1) // Not the last item + HTM_TBODY_Begin (NULL); // 3rd tbody begin + } The_ChangeRowColor (); } /***** Create item at the end? *****/ - if (ItmCod <= 0 && ListingType == Prg_NEW_ITEM) - Prg_WriteRowToCreateItem (-1L,1); + switch (ListingType) + { + case Prg_FORM_NEW_ITEM: + if (ParentItmCod <= 0) + Prg_WriteRowToCreateItem (-1L,1); + break; + default: + break; + } /***** End table *****/ HTM_TBODY_End (); // 3rd tbody end @@ -446,9 +487,10 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType, /***** Forms to remove/edit this program item *****/ switch (ListingType) { - case Prg_EDIT_LIST: - case Prg_EDIT_ITEM: + case Prg_EDIT_ITEMS: + case Prg_FORM_EDIT_ITEM: case Prg_END_EDIT_ITEM: + case Prg_RECEIVE_ITEM: case Prg_EDIT_RESOURCES: case Prg_END_EDIT_RES: HTM_TD_Begin ("rowspan=\"2\" class=\"PRG_COL1 LT %s\"", @@ -488,11 +530,11 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType, default: HTM_TD_Begin ("colspan=\"%u\" class=\"PRG_MAIN %s %s\"", ColSpan,TitleClass,The_GetColorRows ()); - if (ListingType == Prg_EDIT_ITEM || + if (ListingType == Prg_FORM_EDIT_ITEM || ListingType == Prg_END_EDIT_ITEM) HTM_ARTICLE_Begin (Prg_ITEM_SECTION_ID); HTM_Txt (Item->Title); - if (ListingType == Prg_EDIT_ITEM || + if (ListingType == Prg_FORM_EDIT_ITEM || ListingType == Prg_END_EDIT_ITEM) HTM_ARTICLE_End (); HTM_TD_End (); @@ -559,7 +601,7 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType, /* Item text / form */ switch (ListingType) { - case Prg_EDIT_ITEM: + case Prg_FORM_EDIT_ITEM: /* Form to change item title, dates and text */ Prg_ShowFormToChangeItem (Item->Hierarchy.ItmCod); break; @@ -607,7 +649,7 @@ static void Prg_WriteItemText (long ItmCod,bool LightStyle) /**************************** Show item form *********************************/ /*****************************************************************************/ -static void Prg_WriteRowToCreateItem (long ItmCod,unsigned FormLevel) +static void Prg_WriteRowToCreateItem (long ParentItmCod,unsigned FormLevel) { char *TitleClass; unsigned ColSpan; @@ -647,7 +689,7 @@ static void Prg_WriteRowToCreateItem (long ItmCod,unsigned FormLevel) ColSpan,The_GetColorRows ()); /* Form for item data */ HTM_ARTICLE_Begin (Prg_ITEM_SECTION_ID); - Prg_ShowFormToCreateItem (ItmCod); + Prg_ShowFormToCreateItem (ParentItmCod); HTM_ARTICLE_End (); HTM_TD_End (); @@ -865,7 +907,7 @@ static void Prg_PutFormsToRemEditOneItem (Prg_ListingType_t ListingType, /***** Icon to edit program item *****/ switch (ListingType) { - case Prg_EDIT_ITEM: + case Prg_FORM_EDIT_ITEM: Ico_PutContextualIconToView (ActSeePrgItm,Prg_ITEM_SECTION_ID, Prg_PutParams,&Item->Hierarchy.ItmCod); break; @@ -1226,7 +1268,6 @@ void Prg_ReqRemItem (void) extern const char *Txt_Do_you_really_want_to_remove_the_item_X; extern const char *Txt_Remove_item; struct Prg_Item Item; - struct Prg_ItemRange ToHighlight; /***** Get list of program items *****/ Prg_GetListItems (); @@ -1245,9 +1286,7 @@ void Prg_ReqRemItem (void) Item.Title); /***** Show program items highlighting subtree *****/ - Prg_SetItemRangeWithAllChildren (Prg_GetNumItemFromItmCod (Item.Hierarchy.ItmCod), - &ToHighlight); - Prg_EditCourseProgramHighlightingItem (&ToHighlight); + Prg_ShowAllItems (Prg_EDIT_ITEMS,Item.Hierarchy.ItmCod); /***** Free list of program items *****/ Prg_FreeListItems (); @@ -1287,7 +1326,7 @@ void Prg_RemoveItem (void) Prg_GetListItems (); /***** Show course program without highlighting any item *****/ - Prg_EditCourseProgramHighlightingItem (NULL); + Prg_ShowAllItems (Prg_EDIT_ITEMS,-1L); /***** Free list of program items *****/ Prg_FreeListItems (); @@ -1310,7 +1349,6 @@ void Prg_UnhideItem (void) static void Prg_HideOrUnhideItem (bool Hide) { struct Prg_Item Item; - struct Prg_ItemRange ToHighlight; /***** Get list of program items *****/ Prg_GetListItems (); @@ -1325,9 +1363,7 @@ static void Prg_HideOrUnhideItem (bool Hide) Prg_DB_HideOrUnhideItem (Item.Hierarchy.ItmCod,Hide); /***** Show program items highlighting subtree *****/ - Prg_SetItemRangeWithAllChildren (Prg_GetNumItemFromItmCod (Item.Hierarchy.ItmCod), - &ToHighlight); - Prg_EditCourseProgramHighlightingItem (&ToHighlight); + Prg_ShowAllItems (Prg_EDIT_ITEMS,Item.Hierarchy.ItmCod); /***** Free list of program items *****/ Prg_FreeListItems (); @@ -1353,7 +1389,6 @@ static void Prg_MoveUpDownItem (Prg_MoveUpDown_t UpDown) struct Prg_Item Item; unsigned NumItem; bool Success = false; - struct Prg_ItemRange ToHighlight; static bool (*CheckIfAllowed[Prg_NUM_MOVEMENTS_UP_DOWN])(unsigned NumItem) = { [Prg_MOVE_UP ] = Prg_CheckIfMoveUpIsAllowed, @@ -1391,15 +1426,13 @@ static void Prg_MoveUpDownItem (Prg_MoveUpDown_t UpDown) Prg_GetListItems (); /* Show program items highlighting subtree */ - Prg_SetItemRangeWithAllChildren (Prg_GetNumItemFromItmCod (Item.Hierarchy.ItmCod), - &ToHighlight); - Prg_EditCourseProgramHighlightingItem (&ToHighlight); + Prg_ShowAllItems (Prg_EDIT_ITEMS,Item.Hierarchy.ItmCod); } else { /* Show course program without highlighting any item */ Ale_ShowAlert (Ale_WARNING,Txt_Movement_not_allowed); - Prg_EditCourseProgramHighlightingItem (NULL); + Prg_ShowAllItems (Prg_EDIT_ITEMS,-1L); } /***** Free list of program items *****/ @@ -1558,7 +1591,6 @@ static void Prg_MoveLeftRightItem (Prg_MoveLeftRight_t LeftRight) struct Prg_Item Item; unsigned NumItem; struct Prg_ItemRange ToMove; - struct Prg_ItemRange ToHighlight; static bool (*CheckIfAllowed[Prg_NUM_MOVEMENTS_LEFT_RIGHT])(unsigned NumItem) = { [Prg_MOVE_LEFT ] = Prg_CheckIfMoveLeftIsAllowed, @@ -1589,15 +1621,13 @@ static void Prg_MoveLeftRightItem (Prg_MoveLeftRight_t LeftRight) Prg_GetListItems (); /* Show program items highlighting subtree */ - Prg_SetItemRangeWithAllChildren (Prg_GetNumItemFromItmCod (Item.Hierarchy.ItmCod), - &ToHighlight); - Prg_EditCourseProgramHighlightingItem (&ToHighlight); + Prg_ShowAllItems (Prg_EDIT_ITEMS,Item.Hierarchy.ItmCod); } else { /* Show course program without highlighting any item */ Ale_ShowAlert (Ale_WARNING,Txt_Movement_not_allowed); - Prg_EditCourseProgramHighlightingItem (NULL); + Prg_ShowAllItems (Prg_EDIT_ITEMS,-1L); } /***** Free list of program items *****/ @@ -1608,15 +1638,19 @@ static void Prg_MoveLeftRightItem (Prg_MoveLeftRight_t LeftRight) /****** Set subtree begin and end from number of item in course program ******/ /*****************************************************************************/ -static void Prg_SetItemRangeOnlyItem (unsigned Index,struct Prg_ItemRange *ItemRange) +static void Prg_SetItemRangeOnlyItem (unsigned NumItem,struct Prg_ItemRange *ItemRange) { /***** List of items must be filled *****/ if (!Prg_Gbl.List.IsRead) Err_WrongItemsListExit (); + /***** Number of item must be in the correct range *****/ + if (NumItem >= Prg_Gbl.List.NumItems) + Err_WrongItemExit (); + /***** Range includes only this item *****/ ItemRange->Begin = - ItemRange->End = Index; + ItemRange->End = Prg_Gbl.List.Items[NumItem].Index; } static void Prg_SetItemRangeWithAllChildren (unsigned NumItem,struct Prg_ItemRange *ItemRange) @@ -1668,19 +1702,15 @@ static unsigned Prg_GetLastChild (int NumItem) void Prg_ViewItemAfterEdit (void) { long ItmCod; - unsigned FormLevel; /***** Get list of program items *****/ Prg_GetListItems (); /***** Get the code of the program item *****/ - if ((ItmCod = Prg_GetParamItmCod ()) > 0) - FormLevel = Prg_GetLevelFromNumItem (Prg_GetNumItemFromItmCod (ItmCod)); - else - FormLevel = 0; + ItmCod = Prg_GetParamItmCod (); /***** Show current program items, if any *****/ - Prg_ShowAllItems (Prg_END_EDIT_ITEM,NULL,-1L,ItmCod,FormLevel); + Prg_ShowAllItems (Prg_END_EDIT_ITEM,ItmCod); /***** Free list of program items *****/ Prg_FreeListItems (); @@ -1693,19 +1723,15 @@ void Prg_ViewItemAfterEdit (void) void Prg_RequestChangeItem (void) { long ItmCod; - unsigned FormLevel; /***** Get list of program items *****/ Prg_GetListItems (); /***** Get the code of the program item *****/ - if ((ItmCod = Prg_GetParamItmCod ()) > 0) - FormLevel = Prg_GetLevelFromNumItem (Prg_GetNumItemFromItmCod (ItmCod)); - else - FormLevel = 0; + ItmCod = Prg_GetParamItmCod (); /***** Show current program items, if any *****/ - Prg_ShowAllItems (Prg_EDIT_ITEM,NULL,-1L,ItmCod,FormLevel); + Prg_ShowAllItems (Prg_FORM_EDIT_ITEM,ItmCod); /***** Free list of program items *****/ Prg_FreeListItems (); @@ -1718,33 +1744,15 @@ void Prg_RequestChangeItem (void) void Prg_RequestCreateItem (void) { long ParentItmCod; - unsigned NumItem; - long ItmCodBeforeForm; - unsigned FormLevel; /***** Get list of program items *****/ Prg_GetListItems (); /***** Get the code of the parent program item *****/ ParentItmCod = Prg_GetParamItmCod (); - if (ParentItmCod > 0) - { - NumItem = Prg_GetNumItemFromItmCod (ParentItmCod); - ItmCodBeforeForm = Prg_Gbl.List.Items[Prg_GetLastChild (NumItem)].ItmCod; - FormLevel = Prg_GetLevelFromNumItem (NumItem) + 1; - } - else // No parent item (user clicked on button to add a new first-level item at the end) - { - ParentItmCod = -1L; - if (Prg_Gbl.List.NumItems) // There are items already - ItmCodBeforeForm = Prg_Gbl.List.Items[Prg_Gbl.List.NumItems - 1].ItmCod; - else // No current items - ItmCodBeforeForm = -1L; - FormLevel = 1; - } /***** Show current program items, if any *****/ - Prg_ShowAllItems (Prg_NEW_ITEM,NULL,ParentItmCod,ItmCodBeforeForm,FormLevel); + Prg_ShowAllItems (Prg_FORM_NEW_ITEM,ParentItmCod); /***** Free list of program items *****/ Prg_FreeListItems (); @@ -1905,46 +1913,39 @@ static void Prg_ShowFormItem (const struct Prg_Item *Item, void Prg_ReceiveFormChgItem (void) { - // struct Prg_Item OldItem; // Current program item data in database - struct Prg_Item NewItem; // Item data received from form + struct Prg_Item Item; // Item data received from form char Description[Cns_MAX_BYTES_TEXT + 1]; - struct Prg_ItemRange ToHighlight; /***** Get list of program items *****/ Prg_GetListItems (); /***** Get data of the item from database *****/ - NewItem.Hierarchy.ItmCod = Prg_GetParamItmCod (); - Prg_GetDataOfItemByCod (&NewItem); - if (NewItem.Hierarchy.ItmCod <= 0) + Item.Hierarchy.ItmCod = Prg_GetParamItmCod (); + Prg_GetDataOfItemByCod (&Item); + if (Item.Hierarchy.ItmCod <= 0) Err_WrongItemExit (); - /***** Get data of the old (current) program item from database *****/ - // OldItem.Hierarchy.ItmCod = NewItem.Hierarchy.ItmCod; - // Prg_GetDataOfItemByCod (&OldItem); - /***** Get start/end date-times *****/ - NewItem.TimeUTC[Dat_STR_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC"); - NewItem.TimeUTC[Dat_END_TIME] = Dat_GetTimeUTCFromForm ("EndTimeUTC" ); + Item.TimeUTC[Dat_STR_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC"); + Item.TimeUTC[Dat_END_TIME] = Dat_GetTimeUTCFromForm ("EndTimeUTC" ); /***** Get program item title *****/ - Par_GetParToText ("Title",NewItem.Title,Prg_MAX_BYTES_PROGRAM_ITEM_TITLE); + Par_GetParToText ("Title",Item.Title,Prg_MAX_BYTES_PROGRAM_ITEM_TITLE); /***** Get program item text *****/ Par_GetParToHTML ("Txt",Description,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous) /***** Adjust dates *****/ - if (NewItem.TimeUTC[Dat_STR_TIME] == 0) - NewItem.TimeUTC[Dat_STR_TIME] = Gbl.StartExecutionTimeUTC; - if (NewItem.TimeUTC[Dat_END_TIME] == 0) - NewItem.TimeUTC[Dat_END_TIME] = NewItem.TimeUTC[Dat_STR_TIME] + 2 * 60 * 60; // +2 hours + if (Item.TimeUTC[Dat_STR_TIME] == 0) + Item.TimeUTC[Dat_STR_TIME] = Gbl.StartExecutionTimeUTC; + if (Item.TimeUTC[Dat_END_TIME] == 0) + Item.TimeUTC[Dat_END_TIME] = Item.TimeUTC[Dat_STR_TIME] + 2 * 60 * 60; // +2 hours /***** Update existing item *****/ - Prg_DB_UpdateItem (&NewItem,Description); + Prg_DB_UpdateItem (&Item,Description); - /***** Show program items highlighting subtree *****/ - Prg_SetItemRangeOnlyItem (NewItem.Hierarchy.Index,&ToHighlight); - Prg_EditCourseProgramHighlightingItem (&ToHighlight); + /***** Show program items highlighting the item just changed *****/ + Prg_ShowAllItems (Prg_RECEIVE_ITEM,Item.Hierarchy.ItmCod); /***** Free list of program items *****/ Prg_FreeListItems (); @@ -1959,7 +1960,6 @@ void Prg_ReceiveFormNewItem (void) struct Prg_Item ParentItem; // Parent item struct Prg_Item NewItem; // Item data received from form char Description[Cns_MAX_BYTES_TEXT + 1]; - struct Prg_ItemRange ToHighlight; /***** Get list of program items *****/ Prg_GetListItems (); @@ -1996,9 +1996,8 @@ void Prg_ReceiveFormNewItem (void) Prg_FreeListItems (); Prg_GetListItems (); - /***** Show program items highlighting subtree *****/ - Prg_SetItemRangeOnlyItem (NewItem.Hierarchy.Index,&ToHighlight); - Prg_EditCourseProgramHighlightingItem (&ToHighlight); + /***** Show program items highlighting the item just created *****/ + Prg_ShowAllItems (Prg_EDIT_ITEMS,NewItem.Hierarchy.ItmCod); /***** Free list of program items *****/ Prg_FreeListItems (); diff --git a/swad_program.h b/swad_program.h index 54054e0ba..4e564b76c 100644 --- a/swad_program.h +++ b/swad_program.h @@ -71,16 +71,17 @@ typedef enum Prg_MOVE_RIGHT, } Prg_MoveLeftRight_t; -#define Prg_NUM_LISTING_TYPES 8 +#define Prg_NUM_LISTING_TYPES 9 typedef enum { Prg_PRINT, // List items ready to be printed Prg_VIEW, // List items without any edition - Prg_EDIT_LIST, // Buttons to edit list of items - Prg_NEW_ITEM, // Form to create a new item - Prg_EDIT_ITEM, // Form to edit a selected item + Prg_EDIT_ITEMS, // Buttons to edit list of items + Prg_FORM_NEW_ITEM, // Form to create a new item + Prg_FORM_EDIT_ITEM, // Form to edit a selected item Prg_END_EDIT_ITEM, // List item after edition + Prg_RECEIVE_ITEM, // Receive item data after create/edit Prg_EDIT_RESOURCES, // List resources of a selected item for edition Prg_END_EDIT_RES, // List resources of a selected item after edition @@ -92,11 +93,8 @@ typedef enum void Prg_ShowCourseProgram (void); void Prg_EditCourseProgram (void); -void Prg_EditCourseProgramHighlightingItem (const struct Prg_ItemRange *ToHighlight); -void Prg_ShowAllItems (Prg_ListingType_t ListingType, - const struct Prg_ItemRange *ToHighlight, - long ParentItmCod,long ItmCod,unsigned FormLevel); +void Prg_ShowAllItems (Prg_ListingType_t ListingType,long ItmCod); bool Prg_CheckIfICanEditProgram (void); void Prg_PutParams (void *ItmCod); diff --git a/swad_program_database.c b/swad_program_database.c index 2b94e16d5..4d9bc9082 100644 --- a/swad_program_database.c +++ b/swad_program_database.c @@ -218,7 +218,7 @@ unsigned Prg_DB_GetDataOfItemByCod (MYSQL_RES **mysql_res,long ItmCod) "Level," // row[2] "Hidden," // row[3] "UsrCod," // row[4] - "UNIX_TIMESTAMP(StartTime)," // row[5] + "UNIX_TIMESTAMP(StartTime)," // row[5] "UNIX_TIMESTAMP(EndTime)," // row[6] "NOW() BETWEEN StartTime AND EndTime," // row[7] "Title" // row[8] @@ -542,21 +542,6 @@ unsigned Prg_DB_GetDataOfResourceByInd (MYSQL_RES **mysql_res, Gbl.Hierarchy.Crs.CrsCod); } -/*****************************************************************************/ -/******************* Get maximum resource index in an item *******************/ -/*****************************************************************************/ -// Resource index can be 1, 2, 3... -// Return 0 if no resources -/* -unsigned Prg_DB_GetMaxRscIndexInItem (long ItmCod) - { - return DB_QuerySELECTUnsigned ("can not get max resource index", - "SELECT MAX(RscInd)" - " FROM prg_resources" - " WHERE ItmCod=%ld", - ItmCod); - } -*/ /*****************************************************************************/ /************* Get the resource index before/after a given one ***************/ /*****************************************************************************/ diff --git a/swad_program_database.h b/swad_program_database.h index bab100458..8e968960c 100644 --- a/swad_program_database.h +++ b/swad_program_database.h @@ -66,7 +66,6 @@ unsigned Prg_DB_GetListResources (MYSQL_RES **mysql_res,long ItmCod, unsigned Prg_DB_GetDataOfResourceByCod (MYSQL_RES **mysql_res,long RscCod); unsigned Prg_DB_GetDataOfResourceByInd (MYSQL_RES **mysql_res, long ItmCod,unsigned RscInd); -// unsigned Prg_DB_GetMaxRscIndexInItem (long ItmCod); unsigned Prg_DB_GetRscIndBefore (long ItmCod,unsigned RscInd); unsigned Prg_DB_GetRscIndAfter (long ItmCod,unsigned RscInd); long Prg_DB_GetRscCodFromRscInd (long ItmCod,unsigned RscInd); diff --git a/swad_program_resource.c b/swad_program_resource.c index a00849b58..4f4e4b273 100644 --- a/swad_program_resource.c +++ b/swad_program_resource.c @@ -95,19 +95,15 @@ static bool PrgRsc_ExchangeResources (const struct PrgRsc_Rsc *Rsc1, void PrgRsc_ViewResourcesAfterEdit (void) { long ItmCod; - unsigned FormLevel; /***** Get list of program items *****/ Prg_GetListItems (); /***** Get the code of the program item *****/ - if ((ItmCod = Prg_GetParamItmCod ()) > 0) - FormLevel = Prg_GetLevelFromNumItem (Prg_GetNumItemFromItmCod (ItmCod)); - else - FormLevel = 0; + ItmCod = Prg_GetParamItmCod (); /***** Show current program items, if any *****/ - Prg_ShowAllItems (Prg_END_EDIT_RES,NULL,-1L,ItmCod,FormLevel); + Prg_ShowAllItems (Prg_END_EDIT_RES,ItmCod); /***** Free list of program items *****/ Prg_FreeListItems (); @@ -120,19 +116,15 @@ void PrgRsc_ViewResourcesAfterEdit (void) void PrgRsc_EditResources (void) { long ItmCod; - unsigned FormLevel; /***** Get list of program items *****/ Prg_GetListItems (); /***** Get the code of the program item *****/ - if ((ItmCod = Prg_GetParamItmCod ()) > 0) - FormLevel = Prg_GetLevelFromNumItem (Prg_GetNumItemFromItmCod (ItmCod)); - else - FormLevel = 0; + ItmCod = Prg_GetParamItmCod (); /***** Show current program items, if any *****/ - Prg_ShowAllItems (Prg_EDIT_RESOURCES,NULL,-1L,ItmCod,FormLevel); + Prg_ShowAllItems (Prg_EDIT_RESOURCES,ItmCod); /***** Free list of program items *****/ Prg_FreeListItems (); @@ -155,10 +147,11 @@ void PrgRsc_ListItemResources (Prg_ListingType_t ListingType,long ItmCod) { [Prg_PRINT ] = false, [Prg_VIEW ] = false, - [Prg_EDIT_LIST ] = false, - [Prg_NEW_ITEM ] = false, - [Prg_EDIT_ITEM ] = false, + [Prg_EDIT_ITEMS ] = false, + [Prg_FORM_NEW_ITEM ] = false, + [Prg_FORM_EDIT_ITEM ] = false, [Prg_END_EDIT_ITEM ] = false, + [Prg_RECEIVE_ITEM ] = false, [Prg_EDIT_RESOURCES] = true, [Prg_END_EDIT_RES ] = false, }; @@ -166,10 +159,11 @@ void PrgRsc_ListItemResources (Prg_ListingType_t ListingType,long ItmCod) { [Prg_PRINT ] = false, [Prg_VIEW ] = false, - [Prg_EDIT_LIST ] = true, - [Prg_NEW_ITEM ] = true, - [Prg_EDIT_ITEM ] = true, + [Prg_EDIT_ITEMS ] = true, + [Prg_FORM_NEW_ITEM ] = true, + [Prg_FORM_EDIT_ITEM ] = true, [Prg_END_EDIT_ITEM ] = true, + [Prg_RECEIVE_ITEM ] = true, [Prg_EDIT_RESOURCES] = true, [Prg_END_EDIT_RES ] = true, }; @@ -177,10 +171,11 @@ void PrgRsc_ListItemResources (Prg_ListingType_t ListingType,long ItmCod) { [Prg_PRINT ] = false, [Prg_VIEW ] = false, - [Prg_EDIT_LIST ] = false, - [Prg_NEW_ITEM ] = false, - [Prg_EDIT_ITEM ] = false, + [Prg_EDIT_ITEMS ] = false, + [Prg_FORM_NEW_ITEM ] = false, + [Prg_FORM_EDIT_ITEM ] = false, [Prg_END_EDIT_ITEM ] = false, + [Prg_RECEIVE_ITEM ] = false, [Prg_EDIT_RESOURCES] = true, [Prg_END_EDIT_RES ] = true, }; @@ -188,10 +183,11 @@ void PrgRsc_ListItemResources (Prg_ListingType_t ListingType,long ItmCod) { [Prg_PRINT ] = NULL, [Prg_VIEW ] = NULL, - [Prg_EDIT_LIST ] = PrgRsc_PutIconsEditResources, - [Prg_NEW_ITEM ] = PrgRsc_PutIconsEditResources, - [Prg_EDIT_ITEM ] = PrgRsc_PutIconsEditResources, + [Prg_EDIT_ITEMS ] = PrgRsc_PutIconsEditResources, + [Prg_FORM_NEW_ITEM ] = PrgRsc_PutIconsEditResources, + [Prg_FORM_EDIT_ITEM ] = PrgRsc_PutIconsEditResources, [Prg_END_EDIT_ITEM ] = PrgRsc_PutIconsEditResources, + [Prg_RECEIVE_ITEM ] = PrgRsc_PutIconsEditResources, [Prg_EDIT_RESOURCES] = PrgRsc_PutIconsViewResources, [Prg_END_EDIT_RES ] = PrgRsc_PutIconsEditResources, }; @@ -577,27 +573,22 @@ static long PrgRsc_GetParamRscCod (void) void PrgRsc_CreateResource (void) { struct PrgRsc_Resource Resource; - unsigned FormLevel; /***** Get list of program items *****/ Prg_GetListItems (); /***** Get parameters *****/ /* Get the code of the program item */ - if ((Resource.ItmCod = Prg_GetParamItmCod ()) > 0) - FormLevel = Prg_GetLevelFromNumItem (Prg_GetNumItemFromItmCod (Resource.ItmCod)); - else - FormLevel = 0; + Resource.ItmCod = Prg_GetParamItmCod (); /* Get the new title for the new resource */ Par_GetParToText ("Title",Resource.Title,PrgRsc_MAX_BYTES_PROGRAM_RESOURCE_TITLE); /***** Create resource *****/ - // Resource.Rsc.Ind = Prg_DB_GetMaxRscIndexInItem (Resource.ItmCod) + 1; Resource.Rsc.Cod = Prg_DB_CreateResource (&Resource); /***** Show current program items, if any *****/ - Prg_ShowAllItems (Prg_EDIT_RESOURCES,NULL,-1L,Resource.ItmCod,FormLevel); + Prg_ShowAllItems (Prg_EDIT_RESOURCES,Resource.ItmCod); /***** Free list of program items *****/ Prg_FreeListItems (); @@ -611,8 +602,6 @@ 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 (); @@ -630,12 +619,8 @@ void PrgRsc_RenameResource (void) /* 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); + Prg_ShowAllItems (Prg_EDIT_RESOURCES,Resource.ItmCod); /***** Free list of program items *****/ Prg_FreeListItems (); @@ -649,8 +634,6 @@ void PrgRsc_ReqRemResource (void) { extern const char *Txt_Do_you_really_want_to_remove_the_resource_X; struct PrgRsc_Resource Resource; - long ItmCod; - unsigned FormLevel; /***** Get list of program items *****/ Prg_GetListItems (); @@ -667,12 +650,8 @@ void PrgRsc_ReqRemResource (void) Resource.Title); PrgSrc_RscCodToBeRemoved = Resource.Rsc.Cod; - /***** 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); + Prg_ShowAllItems (Prg_EDIT_RESOURCES,Resource.ItmCod); /***** Free list of program items *****/ Prg_FreeListItems (); @@ -686,8 +665,6 @@ void PrgRsc_RemoveResource (void) { extern const char *Txt_Resource_X_removed; struct PrgRsc_Resource Resource; - long ItmCod; - unsigned FormLevel; /***** Get list of program items *****/ Prg_GetListItems (); @@ -705,12 +682,8 @@ void PrgRsc_RemoveResource (void) Ale_CreateAlert (Ale_SUCCESS,PrgRsc_RESOURCE_SECTION_ID, Txt_Resource_X_removed,Resource.Title); - /***** 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); + Prg_ShowAllItems (Prg_EDIT_RESOURCES,Resource.ItmCod); /***** Free list of program items *****/ Prg_FreeListItems (); @@ -733,8 +706,6 @@ void PrgRsc_UnhideResource (void) static void PrgRsc_HideOrUnhideResource (bool Hide) { struct PrgRsc_Resource Resource; - long ItmCod; - unsigned FormLevel; /***** Get list of program items *****/ Prg_GetListItems (); @@ -748,12 +719,8 @@ static void PrgRsc_HideOrUnhideResource (bool Hide) /***** Hide/unhide item resource *****/ Prg_DB_HideOrUnhideResource (Resource.Rsc.Cod,Hide); - /***** 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); + Prg_ShowAllItems (Prg_EDIT_RESOURCES,Resource.ItmCod); /***** Free list of program items *****/ Prg_FreeListItems (); @@ -778,8 +745,6 @@ static void PrgRsc_MoveUpDownResource (PrgRsc_MoveUpDown_t UpDown) extern const char *Txt_Movement_not_allowed; struct PrgRsc_Resource Resource; struct PrgRsc_Rsc Rsc2; - long ItmCod; - unsigned FormLevel; bool Success = false; static unsigned (*GetOtherRscInd[PrgRsc_NUM_MOVEMENTS_UP_DOWN])(long ItmCod,unsigned RscInd) = { @@ -808,12 +773,8 @@ static void PrgRsc_MoveUpDownResource (PrgRsc_MoveUpDown_t UpDown) if (!Success) Ale_ShowAlert (Ale_WARNING,Txt_Movement_not_allowed); - /***** 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); + Prg_ShowAllItems (Prg_EDIT_RESOURCES,Resource.ItmCod); /***** Free list of program items *****/ Prg_FreeListItems ();