diff --git a/swad_API.c b/swad_API.c index e0bbb50e..bc9e8ed3 100644 --- a/swad_API.c +++ b/swad_API.c @@ -2309,8 +2309,8 @@ int swad__getAttendanceEvents (struct soap *soap, Att_GetEventDataFromRow (row,&Event); getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].attendanceEventCode = (int) Event.AttCod; - getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].hidden = Event.Hidden ? 1 : - 0; + getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].hidden = (Event.HiddenOrVisible == Cns_HIDDEN) ? 1 : + 0; Gbl.Usrs.Other.UsrDat.UsrCod = Event.UsrCod; if (API_GetSomeUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,Gbl.Hierarchy.Crs.CrsCod)) // Get some user's data from database { @@ -2485,8 +2485,8 @@ int swad__sendAttendanceEvent (struct soap *soap, } /* Is event hidden? */ - Event.Hidden = (hidden ? true : - false); + Event.HiddenOrVisible = (hidden ? Cns_HIDDEN : + Cns_VISIBLE); /* User's code (really not used) */ Event.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod; @@ -4703,8 +4703,8 @@ int swad__getDirectoryTree (struct soap *soap, /* Get directory tree into XML file */ XML_WriteStartFile (XML,"tree",false); - if (!Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_IS_FOLDER, - Gbl.FileBrowser.FilFolLnk.Full)) // If root folder is visible + if (Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_IS_FOLDER, + Gbl.FileBrowser.FilFolLnk.Full) == Cns_VISIBLE) API_ListDir (XML,1, Gbl.FileBrowser.Priv.PathRootFolder, Brw_RootFolderInternalNames[Gbl.FileBrowser.Type]); @@ -4818,7 +4818,7 @@ static bool API_WriteRowFileBrowser (FILE *XML,unsigned Level, if (Gbl.FileBrowser.Type == Brw_SHOW_DOC_CRS || Gbl.FileBrowser.Type == Brw_SHOW_DOC_GRP) if (Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (FileType, - Gbl.FileBrowser.FilFolLnk.Full)) + Gbl.FileBrowser.FilFolLnk.Full) == Cns_HIDDEN) return false; /***** XML row *****/ diff --git a/swad_action_list.c b/swad_action_list.c index fb1ae1ac..63077c30 100644 --- a/swad_action_list.c +++ b/swad_action_list.c @@ -233,7 +233,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] = [ActEdiBan ] = {1138,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Ban_EditBanners ,NULL}, [ActNewBan ] = {1139,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,Ban_ReceiveFormNewBanner ,Ban_ContEditAfterChgBan ,NULL}, [ActRemBan ] = {1140,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,Ban_RemoveBanner ,Ban_ContEditAfterChgBan ,NULL}, - [ActUnhBan ] = {1212,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,Ban_ShowBanner ,Ban_ContEditAfterChgBan ,NULL}, + [ActUnhBan ] = {1212,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,Ban_UnhideBanner ,Ban_ContEditAfterChgBan ,NULL}, [ActHidBan ] = {1213,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,Ban_HideBanner ,Ban_ContEditAfterChgBan ,NULL}, [ActRenBanSho ] = {1141,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,Ban_RenameBannerShort ,Ban_ContEditAfterChgBan ,NULL}, [ActRenBanFul ] = {1142,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,Ban_RenameBannerFull ,Ban_ContEditAfterChgBan ,NULL}, diff --git a/swad_agenda.c b/swad_agenda.c index a84aa0cc..5936e3fb 100644 --- a/swad_agenda.c +++ b/swad_agenda.c @@ -206,9 +206,9 @@ static void Agd_ShowMyAgenda (struct Agd_Agenda *Agenda) static void Agd_ShowFormToSelPast__FutureEvents (const struct Agd_Agenda *Agenda) { - extern const char *Txt_AGENDA_PAST___FUTURE_EVENTS[2]; + extern const char *Txt_AGENDA_PAST___FUTURE_EVENTS[Agd_NUM_PAST_FUTURE_EVENTS]; Agd_Past__FutureEvents_t PstFut; - static const char *Icon[2] = + static const char *Icon[Agd_NUM_PAST_FUTURE_EVENTS] = { [Agd_PAST___EVENTS] = "calendar-minus.svg", [Agd_FUTURE_EVENTS] = "calendar-plus.svg", @@ -247,7 +247,7 @@ static void Agd_ShowFormToSelPrivatPublicEvents (const struct Agd_Agenda *Agenda { const char *Icon; Ico_Color_t Color; - } Icon[2] = + } Icon[Agd_NUM_PRIVAT_PUBLIC_EVENTS] = { [Agd_PRIVAT_EVENTS] = {"lock.svg" ,Ico_RED }, [Agd_PUBLIC_EVENTS] = {"unlock.svg",Ico_GREEN}, @@ -280,33 +280,33 @@ static void Agd_ShowFormToSelPrivatPublicEvents (const struct Agd_Agenda *Agenda static void Agd_ShowFormToSelHiddenVisiblEvents (const struct Agd_Agenda *Agenda) { - extern const char *Txt_AGENDA_HIDDEN_VISIBL_EVENTS[2]; - Agd_HiddenVisiblEvents_t HidVis; + extern const char *Txt_AGENDA_HIDDEN_VISIBLE_EVENTS[Cns_NUM_HIDDEN_VISIBLE]; + Cns_HiddenOrVisible_t HiddenOrVisible; static const struct { const char *Icon; Ico_Color_t Color; - } Icon[2] = + } Icon[Cns_NUM_HIDDEN_VISIBLE] = { - [Agd_HIDDEN_EVENTS] = {"eye-slash.svg",Ico_RED }, - [Agd_VISIBL_EVENTS] = {"eye.svg" ,Ico_GREEN}, + [Cns_HIDDEN ] = {"eye-slash.svg",Ico_RED }, + [Cns_VISIBLE] = {"eye.svg" ,Ico_GREEN}, }; Set_BeginOneSettingSelector (); - for (HidVis = Agd_HIDDEN_EVENTS; - HidVis <= Agd_VISIBL_EVENTS; - HidVis++) + for (HiddenOrVisible = Cns_HIDDEN; + HiddenOrVisible <= Cns_VISIBLE; + HiddenOrVisible++) { - Set_BeginPref ((Agenda->HiddenVisiblEvents & (1 << HidVis))); + Set_BeginPref ((Agenda->HiddenVisiblEvents & (1 << HiddenOrVisible))); Frm_BeginForm (ActSeeMyAgd); Agd_PutParsMyAgenda (Agenda->Past__FutureEvents, Agenda->PrivatPublicEvents, - Agenda->HiddenVisiblEvents ^ (1 << HidVis), // Toggle + Agenda->HiddenVisiblEvents ^ (1 << HiddenOrVisible), // Toggle Agenda->SelectedOrder, Agenda->CurrentPage, -1L); - Ico_PutSettingIconLink (Icon[HidVis].Icon,Icon[HidVis].Color, - Txt_AGENDA_HIDDEN_VISIBL_EVENTS[HidVis]); + Ico_PutSettingIconLink (Icon[HiddenOrVisible].Icon,Icon[HiddenOrVisible].Color, + Txt_AGENDA_HIDDEN_VISIBLE_EVENTS[HiddenOrVisible]); Frm_EndForm (); Set_EndPref (); } @@ -360,8 +360,8 @@ static unsigned Agd_GetParsHiddenVisiblEvents (void) { return (unsigned) Par_GetParUnsignedLong (ParHiddenVisiblName, 0, - (1 << Agd_HIDDEN_EVENTS) | - (1 << Agd_VISIBL_EVENTS), + (1 << Cns_HIDDEN) | + (1 << Cns_VISIBLE), Agd_DEFAULT_HIDDEN_EVENTS | Agd_DEFAULT_VISIBL_EVENTS); } @@ -748,8 +748,17 @@ static void Agd_PutIconsOtherPublicAgenda (void *EncryptedUsrCod) static void Agd_ShowOneEvent (struct Agd_Agenda *Agenda, Agd_AgendaType_t AgendaType,long AgdCod) { - extern const char *Dat_TimeStatusClassVisible[Dat_NUM_TIME_STATUS]; - extern const char *Dat_TimeStatusClassHidden[Dat_NUM_TIME_STATUS]; + extern const char *Dat_TimeStatusClass[Dat_NUM_TIME_STATUS][Cns_NUM_HIDDEN_VISIBLE]; + static const char *TitleClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "ASG_TITLE_LIGHT", + [Cns_VISIBLE] = "ASG_TITLE", + }; + static const char *DataClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DAT_LIGHT", + [Cns_VISIBLE] = "DAT", + }; char *Anchor = NULL; static unsigned UniqueId = 0; char *Id; @@ -788,8 +797,7 @@ static void Agd_ShowOneEvent (struct Agd_Agenda *Agenda, Err_NotEnoughMemoryExit (); HTM_TD_Begin ("id=\"%s\" class=\"LB %s_%s %s\"", Id, - AgdEvent.Hidden ? Dat_TimeStatusClassHidden[AgdEvent.TimeStatus] : - Dat_TimeStatusClassVisible[AgdEvent.TimeStatus], + Dat_TimeStatusClass[AgdEvent.TimeStatus][AgdEvent.HiddenOrVisible], The_GetSuffix (), The_GetColorRows ()); Dat_WriteLocalDateHMSFromUTC (Id,AgdEvent.TimeUTC[StartEndTime], @@ -803,8 +811,7 @@ static void Agd_ShowOneEvent (struct Agd_Agenda *Agenda, HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ()); HTM_ARTICLE_Begin (Anchor); HTM_SPAN_Begin ("class=\"%s_%s\"", - AgdEvent.Hidden ? "ASG_TITLE_LIGHT" : - "ASG_TITLE", + TitleClass[AgdEvent.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (AgdEvent.Title); HTM_SPAN_End (); @@ -814,8 +821,7 @@ static void Agd_ShowOneEvent (struct Agd_Agenda *Agenda, /* Location */ HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ()); HTM_SPAN_Begin ("class=\"%s_%s\"", - AgdEvent.Hidden ? "ASG_TITLE_LIGHT" : - "ASG_TITLE", + TitleClass[AgdEvent.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (AgdEvent.Location); HTM_SPAN_End (); @@ -842,8 +848,7 @@ static void Agd_ShowOneEvent (struct Agd_Agenda *Agenda, /* Text of the event */ HTM_TD_Begin ("colspan=\"2\" class=\"LT %s\"",The_GetColorRows ()); HTM_DIV_Begin ("class=\"PAR %s_%s\"", - AgdEvent.Hidden ? "DAT_LIGHT" : - "DAT", + DataClass[AgdEvent.HiddenOrVisible], The_GetSuffix ()); Agd_DB_GetEventTxt (&AgdEvent,Txt); Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML, @@ -867,10 +872,10 @@ static void Agd_PutFormsToRemEditOneEvent (struct Agd_Agenda *Agenda, struct Agd_Event *AgdEvent, const char *Anchor) { - static Act_Action_t ActionHideUnhide[2] = + static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = ActHidEvtMyAgd, // Visible ==> action to hide - [true ] = ActUnhEvtMyAgd, // Hidden ==> action to unhide + [Cns_HIDDEN ] = ActUnhEvtMyAgd, // Hidden ==> action to unhide + [Cns_VISIBLE] = ActHidEvtMyAgd, // Visible ==> action to hide }; Agenda->AgdCodToEdit = AgdEvent->AgdCod; // Used as parameter in contextual links @@ -882,7 +887,7 @@ static void Agd_PutFormsToRemEditOneEvent (struct Agd_Agenda *Agenda, /***** Icon to hide/unhide event *****/ Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, Agd_PutCurrentParsMyAgenda,Agenda, - AgdEvent->Hidden); + AgdEvent->HiddenOrVisible); /***** Icon to edit event *****/ Ico_PutContextualIconToEdit (ActEdiOneEvtMyAgd,NULL, @@ -1087,7 +1092,8 @@ static void Agd_GetventDataByCod (struct Agd_Event *AgdEvent) /* Get whether the event is public or not (row[1]) and whether it is hidden or not (row[2]) */ AgdEvent->Public = (row[1][0] == 'Y'); - AgdEvent->Hidden = (row[2][0] == 'Y'); + AgdEvent->HiddenOrVisible = (row[2][0] == 'Y') ? Cns_HIDDEN : + Cns_VISIBLE; /* Get start date (row[3]) and end date (row[4]) in UTC time */ AgdEvent->TimeUTC[Dat_STR_TIME] = Dat_GetUNIXTimeFromStr (row[3]); @@ -1107,7 +1113,7 @@ static void Agd_GetventDataByCod (struct Agd_Event *AgdEvent) /***** Clear all event data *****/ AgdEvent->AgdCod = -1L; AgdEvent->Public = false; - AgdEvent->Hidden = false; + AgdEvent->HiddenOrVisible = Cns_VISIBLE; AgdEvent->TimeUTC[Dat_STR_TIME] = AgdEvent->TimeUTC[Dat_END_TIME] = (time_t) 0; AgdEvent->TimeStatus = Dat_FUTURE; diff --git a/swad_agenda.h b/swad_agenda.h index 705e34c9..d4c60604 100644 --- a/swad_agenda.h +++ b/swad_agenda.h @@ -45,13 +45,14 @@ struct Agd_Event long AgdCod; long UsrCod; bool Public; - bool Hidden; + Cns_HiddenOrVisible_t HiddenOrVisible; time_t TimeUTC[Dat_NUM_START_END_TIME]; Dat_TimeStatus_t TimeStatus; char Title[Agd_MAX_BYTES_EVENT + 1]; char Location[Agd_MAX_BYTES_LOCATION + 1]; }; +#define Agd_NUM_PAST_FUTURE_EVENTS 2 typedef enum { Agd_PAST___EVENTS = 0, // Events until yesterday (included) @@ -60,6 +61,7 @@ typedef enum #define Agd_DEFAULT_PAST___EVENTS (0 << Agd_PAST___EVENTS) // off #define Agd_DEFAULT_FUTURE_EVENTS (1 << Agd_FUTURE_EVENTS) // on +#define Agd_NUM_PRIVAT_PUBLIC_EVENTS 2 typedef enum { Agd_PRIVAT_EVENTS = 0, @@ -68,13 +70,8 @@ typedef enum #define Agd_DEFAULT_PRIVAT_EVENTS (1 << Agd_PRIVAT_EVENTS) // on #define Agd_DEFAULT_PUBLIC_EVENTS (1 << Agd_PUBLIC_EVENTS) // on -typedef enum - { - Agd_HIDDEN_EVENTS = 0, - Agd_VISIBL_EVENTS = 1, - } Agd_HiddenVisiblEvents_t; -#define Agd_DEFAULT_HIDDEN_EVENTS (0 << Agd_HIDDEN_EVENTS) // off -#define Agd_DEFAULT_VISIBL_EVENTS (1 << Agd_VISIBL_EVENTS) // on +#define Agd_DEFAULT_HIDDEN_EVENTS (0 << Cns_HIDDEN) // off +#define Agd_DEFAULT_VISIBL_EVENTS (1 << Cns_VISIBLE) // on #define Agd_ORDER_DEFAULT Dat_STR_TIME diff --git a/swad_agenda_database.c b/swad_agenda_database.c index 48079550..608fd03f 100644 --- a/swad_agenda_database.c +++ b/swad_agenda_database.c @@ -116,11 +116,11 @@ unsigned Agd_DB_GetListEvents (MYSQL_RES **mysql_res, } switch (Agenda->HiddenVisiblEvents) { - case (1 << Agd_HIDDEN_EVENTS): + case (1 << Cns_HIDDEN): Str_Copy (HiddenVisiblEventsSubQuery," AND Hidden='Y'", sizeof (HiddenVisiblEventsSubQuery) - 1); // Hidden events break; - case (1 << Agd_VISIBL_EVENTS): + case (1 << Cns_VISIBLE): Str_Copy (HiddenVisiblEventsSubQuery," AND Hidden='N'", sizeof (HiddenVisiblEventsSubQuery) - 1); // Visible events break; diff --git a/swad_announcement.c b/swad_announcement.c index 62cfb227..a2f3bf48 100644 --- a/swad_announcement.c +++ b/swad_announcement.c @@ -216,10 +216,10 @@ static void Ann_DrawAnAnnouncement (struct Ann_Announcement *Announcement, [Ann_ACTIVE_ANNOUNCEMENT ] = "NOTICE_BOX NOTICE_BOX_WIDE", [Ann_OBSOLETE_ANNOUNCEMENT] = "NOTICE_BOX NOTICE_BOX_WIDE LIGHT", }; - static Act_Action_t ActionHideUnhide[2] = + static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = ActHidAnn, // Visible ==> action to hide - [true ] = ActUnhAnn, // Hidden ==> action to unhide + [Cns_HIDDEN ] = ActUnhAnn, // Hidden ==> action to unhide + [Cns_VISIBLE] = ActHidAnn, // Visible ==> action to hide }; Rol_Role_t Role; bool SomeRolesAreSelected; @@ -236,7 +236,8 @@ static void Ann_DrawAnAnnouncement (struct Ann_Announcement *Announcement, /***** Icon to hide/unhide the announcement *****/ Ico_PutContextualIconToHideUnhide (ActionHideUnhide,NULL, // TODO: Put anchor Ann_PutParAnnCod,&Announcement->AnnCod, - Announcement->Status == Ann_OBSOLETE_ANNOUNCEMENT); + (Announcement->Status == Ann_OBSOLETE_ANNOUNCEMENT) ? Cns_HIDDEN : + Cns_VISIBLE); } /***** Write the subject of the announcement *****/ diff --git a/swad_assignment.c b/swad_assignment.c index 9d0a2158..bcf17e94 100644 --- a/swad_assignment.c +++ b/swad_assignment.c @@ -467,6 +467,16 @@ static void Asg_ShowAssignmentRow (struct Asg_Assignments *Assignments, bool PrintView) { extern const char *Txt_Actions[ActLst_NUM_ACTIONS]; + static const char *TitleClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "ASG_TITLE_LIGHT", + [Cns_VISIBLE] = "ASG_TITLE", + }; + static const char *DataClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DAT_LIGHT", + [Cns_VISIBLE] = "DAT", + }; char *Anchor = NULL; static unsigned UniqueId = 0; char *Id; @@ -500,18 +510,18 @@ static void Asg_ShowAssignmentRow (struct Asg_Assignments *Assignments, if (PrintView) HTM_TD_Begin ("id=\"%s\" class=\"LB %s_%s\"", Id, - Assignments->Asg.Hidden ? (Assignments->Asg.Open ? "DATE_GREEN_LIGHT" : - "DATE_RED_LIGHT") : - (Assignments->Asg.Open ? "DATE_GREEN" : - "DATE_RED"), + Assignments->Asg.HiddenOrVisible == Cns_HIDDEN ? (Assignments->Asg.Open ? "DATE_GREEN_LIGHT" : + "DATE_RED_LIGHT") : + (Assignments->Asg.Open ? "DATE_GREEN" : + "DATE_RED"), The_GetSuffix ()); else HTM_TD_Begin ("id=\"%s\" class=\"LB %s_%s %s\"", Id, - Assignments->Asg.Hidden ? (Assignments->Asg.Open ? "DATE_GREEN_LIGHT" : - "DATE_RED_LIGHT") : - (Assignments->Asg.Open ? "DATE_GREEN" : - "DATE_RED"), + Assignments->Asg.HiddenOrVisible == Cns_HIDDEN ? (Assignments->Asg.Open ? "DATE_GREEN_LIGHT" : + "DATE_RED_LIGHT") : + (Assignments->Asg.Open ? "DATE_GREEN" : + "DATE_RED"), The_GetSuffix (), The_GetColorRows ()); Dat_WriteLocalDateHMSFromUTC (Id,Assignments->Asg.TimeUTC[StartEndTime], @@ -532,8 +542,7 @@ static void Asg_ShowAssignmentRow (struct Asg_Assignments *Assignments, Asg_PutPars (Assignments); HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeOneAsg], "class=\"LT BT_LINK %s_%s\"", - Assignments->Asg.Hidden ? "ASG_TITLE_LIGHT" : - "ASG_TITLE", + TitleClass[Assignments->Asg.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Assignments->Asg.Title); HTM_BUTTON_End (); @@ -581,8 +590,7 @@ static void Asg_ShowAssignmentRow (struct Asg_Assignments *Assignments, Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (&Assignments->Asg); HTM_DIV_Begin ("class=\"PAR %s_%s\"", - Assignments->Asg.Hidden ? "DAT_LIGHT" : - "DAT", + DataClass[Assignments->Asg.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Txt); HTM_DIV_End (); @@ -604,7 +612,7 @@ static void Asg_ShowAssignmentRow (struct Asg_Assignments *Assignments, static void Asg_WriteAsgAuthor (struct Asg_Assignment *Asg) { - Usr_WriteAuthor1Line (Asg->UsrCod,Asg->Hidden); + Usr_WriteAuthor1Line (Asg->UsrCod,Asg->HiddenOrVisible); } /*****************************************************************************/ @@ -615,9 +623,9 @@ static void Asg_WriteAssignmentFolder (struct Asg_Assignment *Asg,bool PrintView { extern const char *Txt_Folder; Act_Action_t NextAction; - bool ICanSendFiles = !Asg->Hidden && // It's visible (not hidden) - Asg->Open && // It's open (inside dates) - Asg->IBelongToCrsOrGrps; // I belong to course or groups + bool ICanSendFiles = Asg->HiddenOrVisible == Cns_VISIBLE && // It's visible (not hidden) + Asg->Open && // It's open (inside dates) + Asg->IBelongToCrsOrGrps; // I belong to course or groups /***** Folder icon *****/ if (!PrintView && // Not print view @@ -702,10 +710,10 @@ Dat_StartEndTime_t Asg_GetParAsgOrder (void) static void Asg_PutIconsToRemEditOneAsg (struct Asg_Assignments *Assignments, const char *Anchor) { - static Act_Action_t ActionHideUnhide[2] = + static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = ActHidAsg, // Visible ==> action to hide - [true ] = ActUnhAsg, // Hidden ==> action to unhide + [Cns_HIDDEN ] = ActUnhAsg, // Hidden ==> action to unhide + [Cns_VISIBLE] = ActHidAsg, // Visible ==> action to hide }; switch (Gbl.Usrs.Me.Role.Logged) @@ -719,7 +727,7 @@ static void Asg_PutIconsToRemEditOneAsg (struct Asg_Assignments *Assignments, /***** Icon to hide/unhide assignment *****/ Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, Asg_PutPars,Assignments, - Assignments->Asg.Hidden); + Assignments->Asg.HiddenOrVisible); /***** Icon to edit assignment *****/ Ico_PutContextualIconToEdit (ActEdiOneAsg,NULL, @@ -881,7 +889,8 @@ static void Asg_GetAssignmentDataFromRow (MYSQL_RES **mysql_res, Asg->AsgCod = Str_ConvertStrCodToLongCod (row[0]); /* Get whether the assignment is hidden or not (row[1]) */ - Asg->Hidden = (row[1][0] == 'Y'); + Asg->HiddenOrVisible = (row[1][0] == 'Y') ? Cns_HIDDEN : + Cns_VISIBLE; /* Get author of the assignment (row[2]) */ Asg->UsrCod = Str_ConvertStrCodToLongCod (row[2]); @@ -915,7 +924,7 @@ static void Asg_ResetAssignment (struct Asg_Assignment *Asg) if (Asg->AsgCod <= 0) // If > 0 ==> keep value Asg->AsgCod = -1L; Asg->AsgCod = -1L; - Asg->Hidden = false; + Asg->HiddenOrVisible = Cns_VISIBLE; Asg->UsrCod = -1L; Asg->TimeUTC[Dat_STR_TIME] = Asg->TimeUTC[Dat_END_TIME] = (time_t) 0; @@ -1555,6 +1564,11 @@ static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Asg_Assignment *As extern const char *Txt_Groups; extern const char *Txt_and; extern const char *Txt_The_whole_course; + static const char *GroupClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "ASG_GRP_LIGHT", + [Cns_VISIBLE] = "ASG_GRP", + }; MYSQL_RES *mysql_res; MYSQL_ROW row; unsigned NumGrps; @@ -1565,8 +1579,7 @@ static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Asg_Assignment *As /***** Write heading *****/ HTM_DIV_Begin ("class=\"%s_%s\"", - Asg->Hidden ? "ASG_GRP_LIGHT" : - "ASG_GRP", + GroupClass[Asg->HiddenOrVisible], The_GetSuffix ()); HTM_TxtColonNBSP (NumGrps == 1 ? Txt_Group : diff --git a/swad_assignment.h b/swad_assignment.h index 1cc434a9..53d19372 100644 --- a/swad_assignment.h +++ b/swad_assignment.h @@ -49,7 +49,7 @@ typedef enum struct Asg_Assignment { long AsgCod; - bool Hidden; + Cns_HiddenOrVisible_t HiddenOrVisible; long UsrCod; time_t TimeUTC[Dat_NUM_START_END_TIME]; bool Open; diff --git a/swad_attendance.c b/swad_attendance.c index 603730ab..1cf6b6b4 100644 --- a/swad_attendance.c +++ b/swad_attendance.c @@ -427,6 +427,16 @@ static void Att_ShowOneEventRow (struct Att_Events *Events, bool ShowOnlyThisAttEventComplete) { extern const char *Txt_View_event; + static const char *TitleClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "ASG_TITLE_LIGHT", + [Cns_VISIBLE] = "ASG_TITLE", + }; + static const char *DataClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DAT_LIGHT", + [Cns_VISIBLE] = "DAT", + }; char *Anchor = NULL; static unsigned UniqueId = 0; char *Id; @@ -459,18 +469,18 @@ static void Att_ShowOneEventRow (struct Att_Events *Events, if (ShowOnlyThisAttEventComplete) HTM_TD_Begin ("id=\"%s\" class=\"LB %s_%s\"", Id, - Events->Event.Hidden ? (Events->Event.Open ? "DATE_GREEN_LIGHT" : - "DATE_RED_LIGHT") : - (Events->Event.Open ? "DATE_GREEN" : - "DATE_RED"), + Events->Event.HiddenOrVisible == Cns_HIDDEN ? (Events->Event.Open ? "DATE_GREEN_LIGHT" : + "DATE_RED_LIGHT") : + (Events->Event.Open ? "DATE_GREEN" : + "DATE_RED"), The_GetSuffix ()); else HTM_TD_Begin ("id=\"%s\" class=\"LB %s_%s %s\"", Id, - Events->Event.Hidden ? (Events->Event.Open ? "DATE_GREEN_LIGHT" : - "DATE_RED_LIGHT") : - (Events->Event.Open ? "DATE_GREEN" : - "DATE_RED"), + Events->Event.HiddenOrVisible == Cns_HIDDEN ? (Events->Event.Open ? "DATE_GREEN_LIGHT" : + "DATE_RED_LIGHT") : + (Events->Event.Open ? "DATE_GREEN" : + "DATE_RED"), The_GetSuffix (), The_GetColorRows ()); Dat_WriteLocalDateHMSFromUTC (Id,Events->Event.TimeUTC[StartEndTime], @@ -496,8 +506,7 @@ static void Att_ShowOneEventRow (struct Att_Events *Events, else HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ()); HTM_SPAN_Begin ("class=\"%s_%s\"", - Events->Event.Hidden ? "ASG_TITLE_LIGHT" : - "ASG_TITLE", + TitleClass[Events->Event.HiddenOrVisible], The_GetSuffix ()); HTM_Unsigned (Events->Event.NumStdsTotal); HTM_SPAN_End (); @@ -529,8 +538,7 @@ static void Att_ShowOneEventRow (struct Att_Events *Events, Att_GetAndWriteNamesOfGrpsAssociatedToEvent (&Events->Event); HTM_DIV_Begin ("class=\"%s_%s\"", - Events->Event.Hidden ? "DAT_LIGHT" : - "DAT", + DataClass[Events->Event.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Description); HTM_DIV_End (); @@ -549,7 +557,7 @@ static void Att_ShowOneEventRow (struct Att_Events *Events, static void Att_WriteEventAuthor (struct Att_Event *Event) { - Usr_WriteAuthor1Line (Event->UsrCod,Event->Hidden); + Usr_WriteAuthor1Line (Event->UsrCod,Event->HiddenOrVisible); } /*****************************************************************************/ @@ -572,10 +580,10 @@ static Dat_StartEndTime_t Att_GetParAttOrder (void) static void Att_PutFormsToRemEditOneEvent (struct Att_Events *Events, const char *Anchor) { - static Act_Action_t ActionHideUnhide[2] = + static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = ActHidAtt, // Visible ==> action to hide - [true ] = ActUnhAtt, // Hidden ==> action to unhide + [Cns_HIDDEN ] = ActUnhAtt, // Hidden ==> action to unhide + [Cns_VISIBLE] = ActHidAtt, // Visible ==> action to hide }; if (Att_CheckIfICanEditEvents ()) @@ -587,7 +595,7 @@ static void Att_PutFormsToRemEditOneEvent (struct Att_Events *Events, /***** Icon to hide/unhide attendance event *****/ Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, Att_PutPars,Events, - Events->Event.Hidden); + Events->Event.HiddenOrVisible); /***** Icon to edit attendance event *****/ Ico_PutContextualIconToEdit (ActEdiOneAtt,NULL, @@ -743,7 +751,7 @@ static void Att_ResetEvent (struct Att_Event *Event) Event->NumStdsTotal = 0; } Event->CrsCod = -1L; - Event->Hidden = false; + Event->HiddenOrVisible = Cns_VISIBLE; Event->UsrCod = -1L; Event->TimeUTC[Dat_STR_TIME] = Event->TimeUTC[Dat_END_TIME] = (time_t) 0; @@ -763,7 +771,8 @@ void Att_GetEventDataFromRow (MYSQL_ROW row,struct Att_Event *Event) Event->CrsCod = Str_ConvertStrCodToLongCod (row[1]); /***** Get whether the attendance event is hidden or not (row[2]) *****/ - Event->Hidden = (row[2][0] == 'Y'); + Event->HiddenOrVisible = (row[2][0] == 'Y') ? Cns_HIDDEN : + Cns_VISIBLE; /***** Get author of the attendance event (row[3]) *****/ Event->UsrCod = Str_ConvertStrCodToLongCod (row[3]); @@ -1167,7 +1176,7 @@ void Att_ReceiveFormEvent (void) /* Get data of the old (current) attendance event from database */ OldAtt.AttCod = ReceivedAtt.AttCod; Att_GetEventDataByCodAndCheckCrs (&OldAtt); - ReceivedAtt.Hidden = OldAtt.Hidden; + ReceivedAtt.HiddenOrVisible = OldAtt.HiddenOrVisible; } /***** Get start/end date-times *****/ @@ -1215,7 +1224,7 @@ void Att_ReceiveFormEvent (void) if (ItsANewAttEvent) { - ReceivedAtt.Hidden = false; // New attendance events are visible by default + ReceivedAtt.HiddenOrVisible = Cns_VISIBLE; // New attendance events are visible by default Att_CreateEvent (&ReceivedAtt,Description); // Add new attendance event to database /***** Write success message *****/ @@ -1297,6 +1306,11 @@ static void Att_GetAndWriteNamesOfGrpsAssociatedToEvent (struct Att_Event *Event extern const char *Txt_Groups; extern const char *Txt_and; extern const char *Txt_The_whole_course; + static const char *GroupClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "ASG_GRP_LIGHT", + [Cns_VISIBLE] = "ASG_GRP", + }; MYSQL_RES *mysql_res; MYSQL_ROW row; unsigned NumGrps; @@ -1307,8 +1321,7 @@ static void Att_GetAndWriteNamesOfGrpsAssociatedToEvent (struct Att_Event *Event /***** Begin container *****/ HTM_DIV_Begin ("class=\"%s_%s\"", - Event->Hidden ? "ASG_GRP_LIGHT" : - "ASG_GRP", + GroupClass[Event->HiddenOrVisible], The_GetSuffix ()); /***** Write heading *****/ @@ -1832,6 +1845,12 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr, static void Att_PutLinkEvent (struct Att_Event *Event, const char *Title,const char *Txt) { + static const char *TitleClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "ASG_TITLE_LIGHT", + [Cns_VISIBLE] = "ASG_TITLE", + }; + /***** Begin form *****/ Frm_BeginForm (ActSeeOneAtt); ParCod_PutPar (ParCod_Att,Event->AttCod); @@ -1839,8 +1858,7 @@ static void Att_PutLinkEvent (struct Att_Event *Event, /***** Link to view attendance event *****/ HTM_BUTTON_Submit_Begin (Title,"class=\"LT BT_LINK %s_%s\"", - Event->Hidden ? "ASG_TITLE_LIGHT" : - "ASG_TITLE", + TitleClass[Event->HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Txt); HTM_BUTTON_End (); diff --git a/swad_attendance.h b/swad_attendance.h index c847e61a..c6f630e6 100644 --- a/swad_attendance.h +++ b/swad_attendance.h @@ -51,7 +51,7 @@ struct Att_Event /* Fields stored in database */ long AttCod; long CrsCod; - bool Hidden; + Cns_HiddenOrVisible_t HiddenOrVisible; long UsrCod; time_t TimeUTC[Dat_NUM_START_END_TIME]; bool Open; diff --git a/swad_attendance_database.c b/swad_attendance_database.c index b48828aa..4a7cccef 100644 --- a/swad_attendance_database.c +++ b/swad_attendance_database.c @@ -254,8 +254,8 @@ long Att_DB_CreateEvent (const struct Att_Event *Event,const char *Description) "FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld)," "'%c','%s','%s')", Gbl.Hierarchy.Crs.CrsCod, - Event->Hidden ? 'Y' : - 'N', + Event->HiddenOrVisible == Cns_HIDDEN ? 'Y' : + 'N', Gbl.Usrs.Me.UsrDat.UsrCod, Event->TimeUTC[Dat_STR_TIME], Event->TimeUTC[Dat_END_TIME], @@ -281,8 +281,8 @@ void Att_DB_UpdateEvent (const struct Att_Event *Event,const char *Description) "Txt='%s'" " WHERE AttCod=%ld" " AND CrsCod=%ld", // Extra check - Event->Hidden ? 'Y' : - 'N', + Event->HiddenOrVisible == Cns_HIDDEN ? 'Y' : + 'N', Event->TimeUTC[Dat_STR_TIME], Event->TimeUTC[Dat_END_TIME], Event->CommentTchVisible ? 'Y' : diff --git a/swad_banner.c b/swad_banner.c index afa3e408..eca43077 100644 --- a/swad_banner.c +++ b/swad_banner.c @@ -93,7 +93,8 @@ static void Ban_PutIconsEditingBanners (__attribute__((unused)) void *Args); static void Ban_ListBannersForEdition (struct Ban_Banners *Banners); static void Ban_PutParBanCod (void *BanCod); -static void Ban_ShowOrHideBanner (struct Ban_Banner *Ban,bool Hide); +static void Ban_ShowOrHideBanner (struct Ban_Banner *Ban, + Cns_HiddenOrVisible_t HiddenOrVisible); static void Ban_RenameBanner (struct Ban_Banner *Ban, Cns_ShrtOrFullName_t ShrtOrFullName); @@ -293,7 +294,7 @@ void Ban_GetBannerDataByCod (struct Ban_Banner *Ban) MYSQL_RES *mysql_res; /***** Clear data *****/ - Ban->Hidden = false; + Ban->HiddenOrVisible = Cns_VISIBLE; Ban->ShrtName[0] = Ban->FullName[0] = Ban->Img[0] = Ban->WWW[0] = '\0'; /***** Check if banner code is correct *****/ @@ -340,7 +341,8 @@ static void Ban_GetBannerDataFromRow (MYSQL_RES *mysql_res, Err_WrongBannerExit (); /***** Get if the banner is hidden (row[1]) *****/ - Ban->Hidden = (row[1][0] == 'Y'); + Ban->HiddenOrVisible = (row[1][0] == 'Y') ? Cns_HIDDEN : + Cns_VISIBLE; /***** Get short name (row[2]), full name (row[3]), image (row[4]) and URL (row[5]) of the banner *****/ @@ -381,10 +383,15 @@ void Ban_PutIconToViewBanners (void) static void Ban_ListBannersForEdition (struct Ban_Banners *Banners) { - static Act_Action_t ActionHideUnhide[2] = + static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = ActHidBan, // Visible ==> action to hide - [true ] = ActUnhBan, // Hidden ==> action to unhide + [Cns_HIDDEN ] = ActUnhBan, // Hidden ==> action to unhide + [Cns_VISIBLE] = ActHidBan, // Visible ==> action to hide + }; + static const char *DataClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DAT_LIGHT", + [Cns_VISIBLE] = "DAT", }; unsigned NumBan; struct Ban_Banner *Ban; @@ -422,13 +429,12 @@ static void Ban_ListBannersForEdition (struct Ban_Banners *Banners) Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, Ban_PutParBanCod, &Banners->BanCodToEdit, - Ban->Hidden); + Ban->HiddenOrVisible); HTM_TD_End (); /* Banner code */ HTM_TD_Begin ("class=\"RM %s_%s\"", - Ban->Hidden ? "DAT_LIGHT" : - "DAT", + DataClass[Ban->HiddenOrVisible], The_GetSuffix ()); HTM_ARTICLE_Begin (Anchor); HTM_Long (Ban->BanCod); @@ -527,10 +533,10 @@ void Ban_RemoveBanner (void) } /*****************************************************************************/ -/**************************** Show a hidden banner ***************************/ +/************************** Unhide a hidden banner ***************************/ /*****************************************************************************/ -void Ban_ShowBanner (void) +void Ban_UnhideBanner (void) { struct Ban_Banner *Ban = Ban_GetEditingBanner (); @@ -538,7 +544,7 @@ void Ban_ShowBanner (void) Ban_ResetBanner (Ban); /***** Set banner as visible *****/ - Ban_ShowOrHideBanner (Ban,false); + Ban_ShowOrHideBanner (Ban,Cns_VISIBLE); } /*****************************************************************************/ @@ -553,14 +559,15 @@ void Ban_HideBanner (void) Ban_ResetBanner (Ban); /***** Set banner as hidden *****/ - Ban_ShowOrHideBanner (Ban,true); + Ban_ShowOrHideBanner (Ban,Cns_HIDDEN); } /*****************************************************************************/ /*************** Change hiddeness of banner in the database ******************/ /*****************************************************************************/ -static void Ban_ShowOrHideBanner (struct Ban_Banner *Ban,bool Hide) +static void Ban_ShowOrHideBanner (struct Ban_Banner *Ban, + Cns_HiddenOrVisible_t HiddenOrVisible) { /***** Get banner code *****/ Ban->BanCod = ParCod_GetAndCheckPar (ParCod_Ban); @@ -569,8 +576,8 @@ static void Ban_ShowOrHideBanner (struct Ban_Banner *Ban,bool Hide) Ban_GetBannerDataByCod (Ban); /***** Mark file as hidden/visible in database *****/ - if (Ban->Hidden != Hide) - Ban_DB_HideOrUnhideBanner (Ban->BanCod,Hide); + if (Ban->HiddenOrVisible != HiddenOrVisible) + Ban_DB_HideOrUnhideBanner (Ban->BanCod,HiddenOrVisible); } /*****************************************************************************/ @@ -1033,7 +1040,7 @@ static void Ban_ResetBanner (struct Ban_Banner *Ban) { /***** Reset banner *****/ Ban->BanCod = -1L; - Ban->Hidden = true; + Ban->HiddenOrVisible = Cns_HIDDEN; Ban->ShrtName[0] = '\0'; Ban->FullName[0] = '\0'; Ban->Img[0] = '\0'; diff --git a/swad_banner.h b/swad_banner.h index 407b11fb..8ea84804 100644 --- a/swad_banner.h +++ b/swad_banner.h @@ -45,7 +45,7 @@ struct Ban_Banner { long BanCod; - bool Hidden; + Cns_HiddenOrVisible_t HiddenOrVisible; char ShrtName[Ban_MAX_BYTES_SHRT_NAME + 1]; char FullName[Ban_MAX_BYTES_FULL_NAME + 1]; char Img[Ban_MAX_BYTES_IMAGE + 1]; @@ -63,7 +63,7 @@ void Ban_PutIconToViewBanners (void); void Ban_GetBannerDataByCod (struct Ban_Banner *Ban); void Ban_RemoveBanner (void); -void Ban_ShowBanner (void); +void Ban_UnhideBanner (void); void Ban_HideBanner (void); void Ban_RenameBannerShort (void); void Ban_RenameBannerFull (void); diff --git a/swad_banner_database.c b/swad_banner_database.c index 57e3d041..37216d33 100644 --- a/swad_banner_database.c +++ b/swad_banner_database.c @@ -156,14 +156,14 @@ void Ban_DB_CreateBanner (const struct Ban_Banner *Ban) /**************************** Hide/unhide a banner ***************************/ /*****************************************************************************/ -void Ban_DB_HideOrUnhideBanner (long BanCod,bool Hide) +void Ban_DB_HideOrUnhideBanner (long BanCod,Cns_HiddenOrVisible_t HiddenOrVisible) { DB_QueryUPDATE ("can not hide/unhide banner", "UPDATE ban_banners" " SET Hidden='%c'" " WHERE BanCod=%ld", - Hide ? 'Y' : - 'N', + HiddenOrVisible == Cns_HIDDEN ? 'Y' : + 'N', BanCod); } diff --git a/swad_banner_database.h b/swad_banner_database.h index 699bb335..80ed8a53 100644 --- a/swad_banner_database.h +++ b/swad_banner_database.h @@ -42,7 +42,7 @@ unsigned Ban_DB_GetBannerDataByCod (MYSQL_RES **mysql_res,long BanCod); bool Ban_DB_CheckIfBannerNameExists (const char *FldName,const char *Name,long BanCod); void Ban_DB_CreateBanner (const struct Ban_Banner *Ban); -void Ban_DB_HideOrUnhideBanner (long BanCod,bool Hide); +void Ban_DB_HideOrUnhideBanner (long BanCod,Cns_HiddenOrVisible_t HiddenOrVisible); void Ban_DB_UpdateBanName (long BanCod,const char *FldName, const char *NewBanName); void Ban_DB_UpdateBanImg (long BanCod, diff --git a/swad_browser.c b/swad_browser.c index 4b114497..38bc210e 100644 --- a/swad_browser.c +++ b/swad_browser.c @@ -354,39 +354,6 @@ static const Act_Action_t Brw_ActChgZone[Brw_NUM_TYPES_FILE_BROWSER] = [Brw_ADMI_ASS_PRJ] = ActUnk, }; -static const Act_Action_t Brw_ActHideUnhide[Brw_NUM_TYPES_FILE_BROWSER][2] = - { - [Brw_UNKNOWN ] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_SHOW_DOC_CRS] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_SHOW_MRK_CRS] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_DOC_CRS] = {[false] = ActHidDocCrs ,[true] = ActUnhDocCrs }, - [Brw_ADMI_SHR_CRS] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_SHR_GRP] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_WRK_USR] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_WRK_CRS] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_MRK_CRS] = {[false] = ActHidMrkCrs ,[true] = ActUnhMrkCrs }, - [Brw_ADMI_BRF_USR] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_SHOW_DOC_GRP] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_DOC_GRP] = {[false] = ActHidDocGrp ,[true] = ActUnhDocGrp }, - [Brw_SHOW_MRK_GRP] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_MRK_GRP] = {[false] = ActHidMrkGrp ,[true] = ActUnhMrkGrp }, - [Brw_ADMI_ASG_USR] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_ASG_CRS] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_SHOW_DOC_DEG] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_DOC_DEG] = {[false] = ActHidDocDeg ,[true] = ActUnhDocDeg }, - [Brw_SHOW_DOC_CTR] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_DOC_CTR] = {[false] = ActHidDocCtr ,[true] = ActUnhDocCtr }, - [Brw_SHOW_DOC_INS] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_DOC_INS] = {[false] = ActHidDocIns ,[true] = ActUnhDocIns }, - [Brw_ADMI_SHR_DEG] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_SHR_CTR] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_SHR_INS] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_TCH_CRS] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_TCH_GRP] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_DOC_PRJ] = {[false] = ActUnk ,[true] = ActUnk }, - [Brw_ADMI_ASS_PRJ] = {[false] = ActUnk ,[true] = ActUnk }, - }; - static const Act_Action_t Brw_ActReqDatFile[Brw_NUM_TYPES_FILE_BROWSER] = { [Brw_UNKNOWN ] = ActUnk, @@ -1110,20 +1077,21 @@ static void Brw_IndentAndWriteIconExpandContract (unsigned Level, Brw_IconTree_t IconThisRow); static void Brw_IndentDependingOnLevel (unsigned Level); static void Brw_PutIconToExpandFolder (const char *FileBrowserId,const char *RowId, - bool Hidden); + Cns_HiddenOrVisible_t HiddenOrVisible); static void Brw_PutIconToContractFolder (const char *FileBrowserId,const char *RowId, - bool Hidden); + Cns_HiddenOrVisible_t HiddenOrVisible); -static void Brw_PutIconHideUnhide (const char *Anchor,bool RowSetAsHidden); +static void Brw_PutIconHideUnhide (const char *Anchor, + Cns_HiddenOrVisible_t HiddenOrVisible); static bool Brw_CheckIfAnyHigherLevelIsHidden (unsigned CurrentLevel); static void Brw_PutIconFolder (unsigned Level, const char *FileBrowserId,const char *RowId, Brw_IconTree_t IconSubtree); static void Brw_PutIconFolderWithoutPlus (const char *FileBrowserId,const char *RowId, - bool Open,bool Hidden); + bool Open,Cns_HiddenOrVisible_t HiddenOrVisible); static void Brw_PutIconFolderWithPlus (const char *FileBrowserId,const char *RowId, - bool Open,bool Hidden); + bool Open,Cns_HiddenOrVisible_t HiddenOrVisible); static void Brw_PutIconNewFileOrFolder (void); static void Brw_PutIconFileWithLinkToViewMetadata (const struct Brw_FileMetadata *FileMetadata); @@ -4038,7 +4006,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId, Brw_IconTree_t IconThisRow) { char *Anchor; - bool RowSetAsHidden = false; + Cns_HiddenOrVisible_t HiddenOrVisible = Cns_VISIBLE; bool RowSetAsPublic = false; bool LightStyle = false; bool IsRecent = false; @@ -4075,18 +4043,23 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId, if (SeeDocsZone || AdminDocsZone || SeeMarks || AdminMarks) { - RowSetAsHidden = Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Gbl.FileBrowser.FilFolLnk.Type, - Gbl.FileBrowser.FilFolLnk.Full); - if (RowSetAsHidden && Level && (SeeDocsZone || SeeMarks)) + HiddenOrVisible = Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Gbl.FileBrowser.FilFolLnk.Type, + Gbl.FileBrowser.FilFolLnk.Full); + if (HiddenOrVisible == Cns_HIDDEN && Level && (SeeDocsZone || SeeMarks)) return false; if (AdminDocsZone || AdminMarks) { if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER) - Gbl.FileBrowser.HiddenLevels[Level] = RowSetAsHidden; - if (RowSetAsHidden) // this row is marked as hidden - LightStyle = true; - else // this row is not marked as hidden - LightStyle = Brw_CheckIfAnyHigherLevelIsHidden (Level); + Gbl.FileBrowser.HiddenLevels[Level] = (HiddenOrVisible == Cns_HIDDEN); + switch (HiddenOrVisible) + { + case Cns_HIDDEN: // this row is marked as hidden + LightStyle = true; + break; + case Cns_VISIBLE: // this row is not marked as hidden + LightStyle = Brw_CheckIfAnyHigherLevelIsHidden (Level); + break; + } } } @@ -4216,7 +4189,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId, /* Put icon to hide/unhide file or folder */ if (AdminDocsZone || AdminMarks) - Brw_PutIconHideUnhide (Anchor,RowSetAsHidden); + Brw_PutIconHideUnhide (Anchor,HiddenOrVisible); /***** File or folder icon *****/ switch (Gbl.FileBrowser.FilFolLnk.Type) @@ -4266,7 +4239,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId, HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ()); if (Gbl.Usrs.Me.Role.Logged >= Rol_STD && // Only ZIP folders if I am student, teacher... !SeeMarks && // Do not ZIP folders when seeing marks - !(SeeDocsZone && RowSetAsHidden)) // When seeing docs, if folder is not hidden (this could happen for Level == 0) + !(SeeDocsZone && HiddenOrVisible == Cns_HIDDEN)) // When seeing docs, if folder is not hidden (this could happen for Level == 0) Brw_PutButtonToDownloadZIPOfAFolder (); HTM_TD_End (); } @@ -4280,7 +4253,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId, The_ChangeRowColor (); - if (RowSetAsHidden && (SeeDocsZone || SeeMarks)) + if (HiddenOrVisible == Cns_HIDDEN && (SeeDocsZone || SeeMarks)) return false; return true; } @@ -4449,20 +4422,20 @@ static void Brw_IndentAndWriteIconExpandContract (unsigned Level, case Brw_ICON_TREE_EXPAND: /***** Visible icon to expand folder *****/ Brw_PutIconToExpandFolder (FileBrowserId,RowId, - false); // Visible + Cns_VISIBLE); /***** Hidden icon to contract folder *****/ Brw_PutIconToContractFolder (FileBrowserId,RowId, - true); // Hidden + Cns_HIDDEN); break; case Brw_ICON_TREE_CONTRACT: /***** Hidden icon to expand folder *****/ Brw_PutIconToExpandFolder (FileBrowserId,RowId, - true); // Hidden + Cns_HIDDEN); /***** Visible icon to contract folder *****/ Brw_PutIconToContractFolder (FileBrowserId,RowId, - false); // Visible + Cns_VISIBLE); break; } HTM_TD_End (); @@ -4495,17 +4468,22 @@ static void Brw_IndentDependingOnLevel (unsigned Level) /*****************************************************************************/ static void Brw_PutIconToExpandFolder (const char *FileBrowserId,const char *RowId, - bool Hidden) + Cns_HiddenOrVisible_t HiddenOrVisible) { char JavaScriptFuncToExpandFolder[256 + Brw_MAX_ROW_ID]; /***** Begin container *****/ - if (Hidden) - HTM_DIV_Begin ("id=\"expand_%s_%s\" style=\"display:none;\"", - FileBrowserId,RowId); - else - HTM_DIV_Begin ("id=\"expand_%s_%s\"", - FileBrowserId,RowId); + switch (HiddenOrVisible) + { + case Cns_HIDDEN: + HTM_DIV_Begin ("id=\"expand_%s_%s\" class=\"NOT_SHOWN\"", + FileBrowserId,RowId); + break; + case Cns_VISIBLE: + HTM_DIV_Begin ("id=\"expand_%s_%s\"", + FileBrowserId,RowId); + break; + } /***** Form and icon *****/ snprintf (JavaScriptFuncToExpandFolder,sizeof (JavaScriptFuncToExpandFolder), @@ -4528,17 +4506,22 @@ static void Brw_PutIconToExpandFolder (const char *FileBrowserId,const char *Row /*****************************************************************************/ static void Brw_PutIconToContractFolder (const char *FileBrowserId,const char *RowId, - bool Hidden) + Cns_HiddenOrVisible_t HiddenOrVisible) { char JavaScriptFuncToContractFolder[256 + Brw_MAX_ROW_ID]; /***** Begin container *****/ - if (Hidden) - HTM_DIV_Begin ("id=\"contract_%s_%s\" style=\"display:none;\"", - FileBrowserId,RowId); - else - HTM_DIV_Begin ("id=\"contract_%s_%s\"", - FileBrowserId,RowId); + switch (HiddenOrVisible) + { + case Cns_HIDDEN: + HTM_DIV_Begin ("id=\"contract_%s_%s\" style=\"display:none;\"", + FileBrowserId,RowId); + break; + case Cns_VISIBLE: + HTM_DIV_Begin ("id=\"contract_%s_%s\"", + FileBrowserId,RowId); + break; + } /***** Form and icon *****/ snprintf (JavaScriptFuncToContractFolder,sizeof (JavaScriptFuncToContractFolder), @@ -4560,12 +4543,46 @@ static void Brw_PutIconToContractFolder (const char *FileBrowserId,const char *R /************* Put link and icon to hide/unhide file or folder ***************/ /*****************************************************************************/ -static void Brw_PutIconHideUnhide (const char *Anchor,bool RowSetAsHidden) +static void Brw_PutIconHideUnhide (const char *Anchor, + Cns_HiddenOrVisible_t HiddenOrVisible) { + static const Act_Action_t Brw_ActHideUnhide[Brw_NUM_TYPES_FILE_BROWSER][Cns_NUM_HIDDEN_VISIBLE] = + { + [Brw_UNKNOWN ] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_SHOW_DOC_CRS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_SHOW_MRK_CRS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_DOC_CRS] = {[Cns_HIDDEN] = ActUnhDocCrs ,[Cns_VISIBLE] = ActHidDocCrs }, + [Brw_ADMI_SHR_CRS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_SHR_GRP] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_WRK_USR] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_WRK_CRS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_MRK_CRS] = {[Cns_HIDDEN] = ActUnhMrkCrs ,[Cns_VISIBLE] = ActHidMrkCrs }, + [Brw_ADMI_BRF_USR] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_SHOW_DOC_GRP] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_DOC_GRP] = {[Cns_HIDDEN] = ActUnhDocGrp ,[Cns_VISIBLE] = ActHidDocGrp }, + [Brw_SHOW_MRK_GRP] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_MRK_GRP] = {[Cns_HIDDEN] = ActUnhMrkGrp ,[Cns_VISIBLE] = ActHidMrkGrp }, + [Brw_ADMI_ASG_USR] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_ASG_CRS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_SHOW_DOC_DEG] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_DOC_DEG] = {[Cns_HIDDEN] = ActUnhDocDeg ,[Cns_VISIBLE] = ActHidDocDeg }, + [Brw_SHOW_DOC_CTR] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_DOC_CTR] = {[Cns_HIDDEN] = ActUnhDocCtr ,[Cns_VISIBLE] = ActHidDocCtr }, + [Brw_SHOW_DOC_INS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_DOC_INS] = {[Cns_HIDDEN] = ActUnhDocIns ,[Cns_VISIBLE] = ActHidDocIns }, + [Brw_ADMI_SHR_DEG] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_SHR_CTR] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_SHR_INS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_TCH_CRS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_TCH_GRP] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_DOC_PRJ] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + [Brw_ADMI_ASS_PRJ] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk }, + }; + HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ()); Ico_PutContextualIconToHideUnhide (Brw_ActHideUnhide[Gbl.FileBrowser.Type],Anchor, Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk, - RowSetAsHidden); + HiddenOrVisible); HTM_TD_End (); } @@ -4634,24 +4651,24 @@ static void Brw_PutIconFolder (unsigned Level, /***** Visible icon with folder closed *****/ Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, false, // Closed - false); // Visible + Cns_VISIBLE); /***** Hidden icon with folder open *****/ Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, true, // Open - true); // Hidden + Cns_HIDDEN); } else { /***** Hidden icon with folder closed *****/ Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, false, // Closed - true); // Hidden + Cns_HIDDEN); /***** Visible icon with folder open *****/ Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, true, // Open - false); // Visible + Cns_VISIBLE); } } @@ -4664,18 +4681,21 @@ static void Brw_PutIconFolder (unsigned Level, /*****************************************************************************/ static void Brw_PutIconFolderWithoutPlus (const char *FileBrowserId,const char *RowId, - bool Open,bool Hidden) + bool Open,Cns_HiddenOrVisible_t HiddenOrVisible) { extern const char *Txt_Folder; + static const char *Class[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "NOT_SHOWN ", + [Cns_VISIBLE] = "", + }; /***** Begin container *****/ - HTM_DIV_Begin ("id=\"folder_%s_%s_%s\" class=\"%s\" %s", + HTM_DIV_Begin ("id=\"folder_%s_%s_%s\" class=\"%s%s\"", Open ? "open" : "closed", FileBrowserId,RowId, - The_GetColorRows (), - Hidden ? " style=\"display:none;\"" : - ""); + Class[HiddenOrVisible],The_GetColorRows ()); /***** Icon *****/ Ico_PutIcon (Open ? "folder-open-yellow.png" : @@ -4692,16 +4712,20 @@ static void Brw_PutIconFolderWithoutPlus (const char *FileBrowserId,const char * /*****************************************************************************/ static void Brw_PutIconFolderWithPlus (const char *FileBrowserId,const char *RowId, - bool Open,bool Hidden) + bool Open,Cns_HiddenOrVisible_t HiddenOrVisible) { + static const char *Class[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "NOT_SHOWN ", + [Cns_VISIBLE] = "", + }; + /***** Begin container *****/ - HTM_DIV_Begin ("id=\"folder_%s_%s_%s\" class=\"%s\" %s", + HTM_DIV_Begin ("id=\"folder_%s_%s_%s\" class=\"%s%s\"", Open ? "open" : "closed", FileBrowserId,RowId, - The_GetColorRows (), - Hidden ? " style=\"display:none;\"" : - ""); + Class[HiddenOrVisible],The_GetColorRows ()); /***** Form and icon *****/ Ico_PutContextualIconToCreateInFolder (Brw_ActFormCreate[Gbl.FileBrowser.Type], @@ -7427,11 +7451,12 @@ void Brw_SetDocumentAsHidden (void) /** Check if a file / folder from the documents zone is set as hidden in DB **/ /*****************************************************************************/ -bool Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_FileType_t FileType,const char *Path) +Cns_HiddenOrVisible_t Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_FileType_t FileType, + const char *Path) { MYSQL_RES *mysql_res; MYSQL_ROW row; - bool IsHidden = false; + Cns_HiddenOrVisible_t HiddenOrVisible; /***** Get if a file or folder is hidden from database *****/ if (Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingPath (&mysql_res,Path)) @@ -7440,16 +7465,20 @@ bool Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_FileType_t FileType,const cha row = mysql_fetch_row (mysql_res); /* File is hidden? (row[0]) */ - IsHidden = (row[0][0] == 'Y'); + HiddenOrVisible = (row[0][0] == 'Y') ? Cns_HIDDEN : + Cns_VISIBLE; } else + { Brw_DB_AddPath (-1L,FileType, Gbl.FileBrowser.FilFolLnk.Full,false,Brw_LICENSE_DEFAULT); + HiddenOrVisible = Cns_VISIBLE; + } /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); - return IsHidden; + return HiddenOrVisible; } /*****************************************************************************/ @@ -8936,7 +8965,7 @@ static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level) if (Gbl.FileBrowser.Asg.AsgCod <= 0) // If folder does not correspond to any assignment return true; // Folder can be removed or renamed - if (Gbl.FileBrowser.Asg.Hidden) // If assignment is hidden + if (Gbl.FileBrowser.Asg.HiddenOrVisible == Cns_HIDDEN) return false; // Do not edit anything in hidden assigments if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER && // The main folder of an assignment @@ -9023,7 +9052,7 @@ static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level) if (Gbl.FileBrowser.Asg.AsgCod <= 0) // If folder does not correspond to any assignment return false; // Do not create anything out of assignments - if (Gbl.FileBrowser.Asg.Hidden) // If assignment is hidden + if (Gbl.FileBrowser.Asg.HiddenOrVisible == Cns_HIDDEN) return false; // Do not create anything in hidden assigments if (!Gbl.FileBrowser.Asg.IBelongToCrsOrGrps) // If I do not belong to course / groups of this assignment diff --git a/swad_browser.h b/swad_browser.h index dc6a6485..6acba14d 100644 --- a/swad_browser.h +++ b/swad_browser.h @@ -29,6 +29,7 @@ #include // For PATH_MAX +#include "swad_constant.h" #include "swad_course.h" #include "swad_form.h" #include "swad_group.h" @@ -219,7 +220,8 @@ void Brw_RcvFileInFileBrwClassic (void); void Brw_RecLinkFileBrowser (void); void Brw_SetDocumentAsVisible (void); void Brw_SetDocumentAsHidden (void); -bool Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_FileType_t FileType,const char *Path); +Cns_HiddenOrVisible_t Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_FileType_t FileType, + const char *Path); void Brw_ShowFileMetadata (void); void Brw_GetLinkToDownloadFile (const char *PathInTree,const char *FileName,char *URL); diff --git a/swad_call_for_exam.c b/swad_call_for_exam.c index bb8b7aae..c5a8fd28 100644 --- a/swad_call_for_exam.c +++ b/swad_call_for_exam.c @@ -1472,10 +1472,10 @@ static void Cfe_ShowCallForExam (struct Cfe_CallsForExams *CallsForExams, static void Cfe_PutIconsCallForExam (void *CallsForExams) { - static Act_Action_t ActionHideUnhide[2] = + static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = ActHidCfe, // Visible ==> action to hide - [true ] = ActUnhCfe, // Hidden ==> action to unhide + [Cns_HIDDEN ] = ActUnhCfe, // Hidden ==> action to unhide + [Cns_VISIBLE] = ActHidCfe, // Visible ==> action to hide }; if (CallsForExams) diff --git a/swad_changelog.h b/swad_changelog.h index a474c78c..7200a5f1 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -629,10 +629,11 @@ TODO: Emilce Barrera Mesa: Podr TODO: Emilce Barrera Mesa: Mis estudiantes presentan muchas dificultades a la hora de poner la foto porque la plataforma es muy exigente respecto al fondo de la imagen. */ -#define Log_PLATFORM_VERSION "SWAD 22.118.13 (2023-05-31)" +#define Log_PLATFORM_VERSION "SWAD 22.119 (2023-06-06)" #define CSS_FILE "swad22.118.5.css" #define JS_FILE "swad22.49.js" /* + Version 22.119: Jun 06, 2023 Code refactoring related to hidden-visible. (337588 lines) Version 22.118.13:May 31, 2023 Code refactoring in forums. (337417 lines) Version 22.118.12:May 30, 2023 Code refactoring in forums and messages. (337408 lines) Version 22.118.11:May 30, 2023 Code refactoring in strings. (337391 lines) diff --git a/swad_constant.h b/swad_constant.h index a3250de8..614d544c 100644 --- a/swad_constant.h +++ b/swad_constant.h @@ -126,4 +126,11 @@ typedef enum Cns_ENABLED, } Cns_DisabledOrEnabled_t; +#define Cns_NUM_HIDDEN_VISIBLE 2 +typedef enum + { + Cns_HIDDEN, + Cns_VISIBLE, + } Cns_HiddenOrVisible_t; + #endif diff --git a/swad_date.c b/swad_date.c index cb00c56c..ece01c8e 100644 --- a/swad_date.c +++ b/swad_date.c @@ -57,17 +57,14 @@ extern struct Globals Gbl; /***************************** Public constants ******************************/ /*****************************************************************************/ -const char *Dat_TimeStatusClassVisible[Dat_NUM_TIME_STATUS] = +const char *Dat_TimeStatusClass[Dat_NUM_TIME_STATUS][Cns_NUM_HIDDEN_VISIBLE] = { - [Dat_PAST ] = "DATE_RED", - [Dat_PRESENT] = "DATE_GREEN", - [Dat_FUTURE ] = "DATE_BLUE", - }; -const char *Dat_TimeStatusClassHidden[Dat_NUM_TIME_STATUS] = - { - [Dat_PAST ] = "DATE_RED_LIGHT", - [Dat_PRESENT] = "DATE_GREEN_LIGHT", - [Dat_FUTURE ] = "DATE_BLUE_LIGHT", + [Dat_PAST ][Cns_HIDDEN ] = "DATE_RED_LIGHT", + [Dat_PAST ][Cns_VISIBLE] = "DATE_RED", + [Dat_PRESENT][Cns_HIDDEN ] = "DATE_GREEN_LIGHT", + [Dat_PRESENT][Cns_VISIBLE] = "DATE_GREEN", + [Dat_FUTURE ][Cns_HIDDEN ] = "DATE_BLUE_LIGHT", + [Dat_FUTURE ][Cns_VISIBLE] = "DATE_BLUE", }; /*****************************************************************************/ diff --git a/swad_exam.c b/swad_exam.c index c52b2d1c..8aedec4a 100644 --- a/swad_exam.c +++ b/swad_exam.c @@ -183,7 +183,7 @@ void Exa_ResetExam (struct Exa_Exam *Exam) Exam->TimeUTC[Dat_STR_TIME] = (time_t) 0; Exam->TimeUTC[Dat_END_TIME] = (time_t) 0; Exam->Title[0] = '\0'; - Exam->Hidden = false; + Exam->HiddenOrVisible = Cns_VISIBLE; Exam->NumSets = 0; Exam->NumQsts = 0; Exam->NumSess = 0; @@ -455,11 +455,36 @@ static void Exa_ShowOneExam (struct Exa_Exams *Exams,bool ShowOnlyThisExam) extern const char *Txt_Maximum_grade; extern const char *Txt_Result_visibility; extern const char *Txt_Sessions; + static const char *DateGreenClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DATE_GREEN_LIGHT", + [Cns_VISIBLE] = "DATE_GREEN", + }; + static const char *DateRedClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DATE_RED_LIGHT", + [Cns_VISIBLE] = "DATE_RED", + }; + static const char *TitleClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "ASG_TITLE_LIGHT", + [Cns_VISIBLE] = "ASG_TITLE", + }; + static const char *GroupClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "ASG_GRP_LIGHT", + [Cns_VISIBLE] = "ASG_GRP", + }; + static const char *DataClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DAT_LIGHT", + [Cns_VISIBLE] = "DAT", + }; char *Anchor; static unsigned UniqueId = 0; char *Id; Dat_StartEndTime_t StartEndTime; - const char *Color; + const char *DateClass; char Txt[Cns_MAX_BYTES_TEXT + 1]; /***** Build anchor string *****/ @@ -489,16 +514,14 @@ static void Exa_ShowOneExam (struct Exa_Exams *Exams,bool ShowOnlyThisExam) { if (asprintf (&Id,"exa_date_%u_%u",(unsigned) StartEndTime,UniqueId) < 0) Err_NotEnoughMemoryExit (); - Color = Exams->Exam.NumOpenSess ? (Exams->Exam.Hidden ? "DATE_GREEN_LIGHT": - "DATE_GREEN") : - (Exams->Exam.Hidden ? "DATE_RED_LIGHT": - "DATE_RED"); + DateClass = Exams->Exam.NumOpenSess ? DateGreenClass[Exams->Exam.HiddenOrVisible] : + DateRedClass[Exams->Exam.HiddenOrVisible]; if (ShowOnlyThisExam) HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s\"", - Id,Color,The_GetSuffix ()); + Id,DateClass,The_GetSuffix ()); else HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"", - Id,Color,The_GetSuffix (),The_GetColorRows ()); + Id,DateClass,The_GetSuffix (),The_GetColorRows ()); if (Exams->Exam.TimeUTC[Dat_STR_TIME]) Dat_WriteLocalDateHMSFromUTC (Id,Exams->Exam.TimeUTC[StartEndTime], Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK, @@ -518,8 +541,7 @@ static void Exa_ShowOneExam (struct Exa_Exams *Exams,bool ShowOnlyThisExam) Frm_BeginForm (ActSeeOneExa); Exa_PutPars (Exams); HTM_BUTTON_Submit_Begin (Txt_View_exam,"class=\"LT BT_LINK %s_%s\"", - Exams->Exam.Hidden ? "ASG_TITLE_LIGHT": - "ASG_TITLE", + TitleClass[Exams->Exam.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Exams->Exam.Title); HTM_BUTTON_End (); @@ -528,8 +550,7 @@ static void Exa_ShowOneExam (struct Exa_Exams *Exams,bool ShowOnlyThisExam) /* Number of questions, maximum grade, visibility of results */ HTM_DIV_Begin ("class=\"%s_%s\"", - Exams->Exam.Hidden ? "ASG_GRP_LIGHT" : - "ASG_GRP", + GroupClass[Exams->Exam.HiddenOrVisible], The_GetSuffix ()); HTM_TxtColonNBSP (Txt_Sets_of_questions); HTM_Unsigned (Exams->Exam.NumSets); @@ -538,7 +559,8 @@ static void Exa_ShowOneExam (struct Exa_Exams *Exams,bool ShowOnlyThisExam) HTM_Double (Exams->Exam.MaxGrade); HTM_BR (); HTM_TxtColonNBSP (Txt_Result_visibility); - TstVis_ShowVisibilityIcons (Exams->Exam.Visibility,Exams->Exam.Hidden); + TstVis_ShowVisibilityIcons (Exams->Exam.Visibility, + Exams->Exam.HiddenOrVisible); HTM_DIV_End (); /***** Number of sessions in exam *****/ @@ -550,8 +572,7 @@ static void Exa_ShowOneExam (struct Exa_Exams *Exams,bool ShowOnlyThisExam) Frm_BeginForm (ActSeeOneExa); Exa_PutPars (Exams); HTM_BUTTON_Submit_Begin (Txt_Sessions,"class=\"LT BT_LINK %s_%s\"", - Exams->Exam.Hidden ? "ASG_TITLE_LIGHT": - "ASG_TITLE", + TitleClass[Exams->Exam.HiddenOrVisible], The_GetSuffix ()); if (ShowOnlyThisExam) HTM_TxtColonNBSP (Txt_Sessions); @@ -587,8 +608,7 @@ static void Exa_ShowOneExam (struct Exa_Exams *Exams,bool ShowOnlyThisExam) Txt,Cns_MAX_BYTES_TEXT,Str_DONT_REMOVE_SPACES); ALn_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links HTM_DIV_Begin ("class=\"PAR %s_%s\"", - Exams->Exam.Hidden ? "DAT_LIGHT" : - "DAT", + DataClass[Exams->Exam.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Txt); HTM_DIV_End (); @@ -642,7 +662,7 @@ static void Exa_PutIconsEditingOneExam (void *Exams) static void Exa_WriteAuthor (struct Exa_Exam *Exam) { - Usr_WriteAuthor1Line (Exam->UsrCod,Exam->Hidden); + Usr_WriteAuthor1Line (Exam->UsrCod,Exam->HiddenOrVisible); } /*****************************************************************************/ @@ -661,10 +681,10 @@ static void Exa_PutParExamOrder (Exa_Order_t SelectedOrder) static void Exa_PutIconsToRemEditOneExam (struct Exa_Exams *Exams, const char *Anchor) { - static Act_Action_t ActionHideUnhide[2] = + static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = ActHidExa, // Visible ==> action to hide - [true ] = ActUnhExa, // Hidden ==> action to unhide + [Cns_HIDDEN ] = ActUnhExa, // Hidden ==> action to unhide + [Cns_VISIBLE] = ActHidExa, // Visible ==> action to hide }; static const Act_Action_t ActionShowResults[Rol_NUM_ROLES] = { @@ -683,7 +703,7 @@ static void Exa_PutIconsToRemEditOneExam (struct Exa_Exams *Exams, /***** Icon to hide/unhide exam *****/ Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, Exa_PutPars,Exams, - Exams->Exam.Hidden); + Exams->Exam.HiddenOrVisible); /***** Icon to edit exam *****/ Ico_PutContextualIconToEdit (ActEdiOneExa,NULL, @@ -894,7 +914,8 @@ void Exa_GetExamDataByCod (struct Exa_Exam *Exam) Exam->CrsCod = Str_ConvertStrCodToLongCod (row[1]); /* Get whether the exam is hidden (row[2]) */ - Exam->Hidden = (row[2][0] == 'Y'); + Exam->HiddenOrVisible = (row[2][0] == 'Y') ? Cns_HIDDEN : + Cns_VISIBLE; /* Get author of the exam (row[3]) */ Exam->UsrCod = Str_ConvertStrCodToLongCod (row[3]); diff --git a/swad_exam_database.c b/swad_exam_database.c index 1ff9ad79..313f770a 100644 --- a/swad_exam_database.c +++ b/swad_exam_database.c @@ -1303,8 +1303,8 @@ long Exa_DB_CreateSession (const struct ExaSes_Session *Session) "'%s'," // Title "'N')", // ShowUsrResults: Don't show user results initially Session->ExaCod, - Session->Hidden ? 'Y' : - 'N', + Session->HiddenOrVisible == Cns_HIDDEN ? 'Y' : + 'N', Gbl.Usrs.Me.UsrDat.UsrCod, // Session creator Session->TimeUTC[Dat_STR_TIME], // Start time Session->TimeUTC[Dat_END_TIME], // End time @@ -1330,8 +1330,8 @@ void Exa_DB_UpdateSession (const struct ExaSes_Session *Session) " AND exa_sessions.ExaCod=%ld" // Extra check " AND exa_sessions.ExaCod=exa_exams.ExaCod" " AND exa_exams.CrsCod=%ld", // Extra check - Session->Hidden ? 'Y' : - 'N', + Session->HiddenOrVisible == Cns_HIDDEN ? 'Y' : + 'N', Session->TimeUTC[Dat_STR_TIME], // Start time Session->TimeUTC[Dat_END_TIME], // End time Session->Title, diff --git a/swad_exam_result.c b/swad_exam_result.c index 1a3f73ac..80a85886 100644 --- a/swad_exam_result.c +++ b/swad_exam_result.c @@ -1408,10 +1408,10 @@ static void ExaRes_CheckIfICanViewResult (const struct Exa_Exam *Exam, { case Rol_STD: // Depends on visibility of exam, session and result (eye icons) - ICanView->Result = (Usr_ItsMe (UsrCod) == Usr_ME && // The result is mine - !Exam->Hidden && // The exam is visible - !Session->Hidden && // The session is visible - Session->ShowUsrResults); // The results of the session are visible to users + ICanView->Result = (Usr_ItsMe (UsrCod) == Usr_ME && // The result is mine + Exam->HiddenOrVisible == Cns_VISIBLE && // The exam is visible + Session->HiddenOrVisible == Cns_VISIBLE && // The session is visible + Session->ShowUsrResults); // The results of the session are visible to users // Whether I belong or not to groups of session is not checked here... // ...because I should be able to see old exams made in old groups to which I belonged diff --git a/swad_exam_session.c b/swad_exam_session.c index dc244fc1..4b4a0914 100644 --- a/swad_exam_session.c +++ b/swad_exam_session.c @@ -123,7 +123,7 @@ void ExaSes_ResetSession (struct ExaSes_Session *Session) StartEndTime++) Session->TimeUTC[StartEndTime] = (time_t) 0; Session->Title[0] = '\0'; - Session->Hidden = false; + Session->HiddenOrVisible = Cns_VISIBLE; Session->Open = false; Session->ShowUsrResults = false; }; @@ -426,10 +426,10 @@ static void ExaSes_ListOneOrMoreSessionsIcons (struct Exa_Exams *Exams, const struct ExaSes_Session *Session, const char *Anchor) { - static Act_Action_t ActionHideUnhide[2] = + static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = ActHidExaSes, // Visible ==> action to hide - [true ] = ActUnhExaSes, // Hidden ==> action to unhide + [Cns_HIDDEN ] = ActUnhExaSes, // Hidden ==> action to unhide + [Cns_VISIBLE] = ActHidExaSes, // Visible ==> action to hide }; Exams->Exam.ExaCod = Session->ExaCod; @@ -447,7 +447,7 @@ static void ExaSes_ListOneOrMoreSessionsIcons (struct Exa_Exams *Exams, /***** Icon to hide/unhide the exam session *****/ Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, ExaSes_PutParsEdit,Exams, - Session->Hidden); + Session->HiddenOrVisible); /***** Icon to edit the exam session *****/ Ico_PutContextualIconToEdit (ActEdiOneExaSes,Anchor, @@ -466,7 +466,7 @@ static void ExaSes_ListOneOrMoreSessionsAuthor (const struct ExaSes_Session *Ses { /***** Session author (teacher) *****/ HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ()); - Usr_WriteAuthor1Line (Session->UsrCod,Session->Hidden); + Usr_WriteAuthor1Line (Session->UsrCod,Session->HiddenOrVisible); HTM_TD_End (); } @@ -477,23 +477,31 @@ static void ExaSes_ListOneOrMoreSessionsAuthor (const struct ExaSes_Session *Ses static void ExaSes_ListOneOrMoreSessionsTimes (const struct ExaSes_Session *Session, unsigned UniqueId) { + static const char *DateGreenClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DATE_GREEN_LIGHT", + [Cns_VISIBLE] = "DATE_GREEN", + }; + static const char *DateRedClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DATE_RED_LIGHT", + [Cns_VISIBLE] = "DATE_RED", + }; Dat_StartEndTime_t StartEndTime; - const char *Color; + const char *DateClass; char *Id; for (StartEndTime = (Dat_StartEndTime_t) 0; StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1); StartEndTime++) { - Color = Session->Open ? (Session->Hidden ? "DATE_GREEN_LIGHT": - "DATE_GREEN") : - (Session->Hidden ? "DATE_RED_LIGHT": - "DATE_RED"); + DateClass = Session->Open ? DateGreenClass[Session->HiddenOrVisible] : + DateRedClass[Session->HiddenOrVisible]; if (asprintf (&Id,"exa_time_%u_%u",(unsigned) StartEndTime,UniqueId) < 0) Err_NotEnoughMemoryExit (); HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"", - Id,Color,The_GetSuffix (),The_GetColorRows ()); + Id,DateClass,The_GetSuffix (),The_GetColorRows ()); Dat_WriteLocalDateHMSFromUTC (Id,Session->TimeUTC[StartEndTime], Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK, true,true,true,0x6); @@ -512,6 +520,11 @@ static void ExaSes_ListOneOrMoreSessionsTitleGrps (struct Exa_Exams *Exams, { extern const char *Txt_Play; extern const char *Txt_Resume; + static const char *TitleClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "ASG_TITLE_LIGHT", + [Cns_VISIBLE] = "ASG_TITLE", + }; HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ()); @@ -525,8 +538,7 @@ static void ExaSes_ListOneOrMoreSessionsTitleGrps (struct Exa_Exams *Exams, HTM_BUTTON_Submit_Begin (Gbl.Usrs.Me.Role.Logged == Rol_STD ? Txt_Play : Txt_Resume, "class=\"LT BT_LINK %s_%s\"", - Session->Hidden ? "ASG_TITLE_LIGHT" : - "ASG_TITLE", + TitleClass[Session->HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Session->Title); HTM_BUTTON_End (); @@ -535,8 +547,7 @@ static void ExaSes_ListOneOrMoreSessionsTitleGrps (struct Exa_Exams *Exams, else { HTM_SPAN_Begin ("class=\"%s_%s\"", - Session->Hidden ? "ASG_TITLE_LIGHT" : - "ASG_TITLE", + TitleClass[Session->HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Session->Title); HTM_SPAN_End (); @@ -560,6 +571,11 @@ static void ExaSes_GetAndWriteNamesOfGrpsAssociatedToSession (const struct ExaSe extern const char *Txt_Groups; extern const char *Txt_and; extern const char *Txt_The_whole_course; + static const char *GroupClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "ASG_GRP_LIGHT", + [Cns_VISIBLE] = "ASG_GRP", + }; MYSQL_RES *mysql_res; MYSQL_ROW row; unsigned NumGrps; @@ -570,9 +586,7 @@ static void ExaSes_GetAndWriteNamesOfGrpsAssociatedToSession (const struct ExaSe /***** Write heading *****/ HTM_DIV_Begin ("class=\"%s_%s\"", - Session->Hidden ? "ASG_GRP_LIGHT": - "ASG_GRP", - The_GetSuffix ()); + GroupClass[Session->HiddenOrVisible],The_GetSuffix ()); HTM_TxtColonNBSP (NumGrps == 1 ? Txt_Group : Txt_Groups); @@ -757,7 +771,8 @@ static void ExaSes_GetSessionDataFromRow (MYSQL_RES *mysql_res, Err_WrongExamExit (); /* Get whether the session is hidden (row[2]) */ - Session->Hidden = (row[2][0] == 'Y'); + Session->HiddenOrVisible = (row[2][0] == 'Y') ? Cns_HIDDEN : + Cns_VISIBLE; /* Get session teacher (row[3]) */ Session->UsrCod = Str_ConvertStrCodToLongCod (row[3]); @@ -1261,8 +1276,8 @@ bool ExaSes_CheckIfICanAnswerThisSession (const struct Exa_Exam *Exam, { /***** 1. Sessions in hidden exams are not accesible 2. Hidden or closed sessions are not accesible *****/ - if (Exam->Hidden || - Session->Hidden || + if (Exam->HiddenOrVisible == Cns_HIDDEN || + Session->HiddenOrVisible == Cns_HIDDEN || !Session->Open) return false; diff --git a/swad_exam_type.h b/swad_exam_type.h index 6181cce6..a1588a41 100644 --- a/swad_exam_type.h +++ b/swad_exam_type.h @@ -85,7 +85,7 @@ struct Exa_Exam unsigned Visibility; // Visibility of results char Title[Exa_MAX_BYTES_TITLE + 1]; time_t TimeUTC[Dat_NUM_START_END_TIME]; - bool Hidden; // Exam is hidden + Cns_HiddenOrVisible_t HiddenOrVisible; // Exam is hidden or visible? unsigned NumSets; // Number of sets in the exam unsigned NumQsts; // Number of questions in the exam unsigned NumSess; // Number of sessions in the exam @@ -146,7 +146,7 @@ struct ExaSes_Session long UsrCod; time_t TimeUTC[Dat_NUM_START_END_TIME]; char Title[ExaSes_MAX_BYTES_TITLE + 1]; - bool Hidden; + Cns_HiddenOrVisible_t HiddenOrVisible; bool Open; // If now is between start and end dates bool ShowUsrResults; // Show exam with results of all questions for the student }; diff --git a/swad_game.c b/swad_game.c index a0a7b9c8..3fc2c416 100644 --- a/swad_game.c +++ b/swad_game.c @@ -198,7 +198,7 @@ void Gam_ResetGame (struct Gam_Game *Game) Game->NumQsts = 0; Game->NumMchs = 0; Game->NumUnfinishedMchs = 0; - Game->Hidden = false; + Game->HiddenOrVisible = Cns_VISIBLE; } /*****************************************************************************/ @@ -499,11 +499,36 @@ static void Gam_ShowGameMainData (struct Gam_Games *Games, extern const char *Txt_Maximum_grade; extern const char *Txt_Result_visibility; extern const char *Txt_Matches; + static const char *DateGreenClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DATE_GREEN_LIGHT", + [Cns_VISIBLE] = "DATE_GREEN", + }; + static const char *DateRedClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DATE_RED_LIGHT", + [Cns_VISIBLE] = "DATE_RED", + }; + static const char *TitleClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "ASG_TITLE_LIGHT", + [Cns_VISIBLE] = "ASG_TITLE", + }; + static const char *GroupClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "ASG_GRP_LIGHT", + [Cns_VISIBLE] = "ASG_GRP", + }; + static const char *DataClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DAT_LIGHT", + [Cns_VISIBLE] = "DAT", + }; char *Anchor = NULL; static unsigned UniqueId = 0; char *Id; Dat_StartEndTime_t StartEndTime; - const char *Color; + const char *DateClass; char Txt[Cns_MAX_BYTES_TEXT + 1]; /***** Set anchor string *****/ @@ -533,16 +558,14 @@ static void Gam_ShowGameMainData (struct Gam_Games *Games, { if (asprintf (&Id,"gam_date_%u_%u",(unsigned) StartEndTime,UniqueId) < 0) Err_NotEnoughMemoryExit (); - Color = Games->Game.NumUnfinishedMchs ? (Games->Game.Hidden ? "DATE_GREEN_LIGHT": - "DATE_GREEN") : - (Games->Game.Hidden ? "DATE_RED_LIGHT": - "DATE_RED"); + DateClass = Games->Game.NumUnfinishedMchs ? DateGreenClass[Games->Game.HiddenOrVisible] : + DateRedClass[Games->Game.HiddenOrVisible]; if (ShowOnlyThisGame) HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s\"", - Id,Color,The_GetSuffix ()); + Id,DateClass,The_GetSuffix ()); else HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"", - Id,Color,The_GetSuffix (),The_GetColorRows ()); + Id,DateClass,The_GetSuffix (),The_GetColorRows ()); if (Games->Game.TimeUTC[Dat_STR_TIME]) Dat_WriteLocalDateHMSFromUTC (Id,Games->Game.TimeUTC[StartEndTime], Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK, @@ -562,8 +585,7 @@ static void Gam_ShowGameMainData (struct Gam_Games *Games, Frm_BeginForm (ActSeeOneGam); Gam_PutPars (Games); HTM_BUTTON_Submit_Begin (Txt_View_game,"class=\"LT BT_LINK %s_%s\"", - Games->Game.Hidden ? "ASG_TITLE_LIGHT": - "ASG_TITLE", + TitleClass[Games->Game.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Games->Game.Title); HTM_BUTTON_End (); @@ -572,9 +594,7 @@ static void Gam_ShowGameMainData (struct Gam_Games *Games, /* Number of questions, maximum grade, visibility of results */ HTM_DIV_Begin ("class=\"%s_%s\"", - Games->Game.Hidden ? "ASG_GRP_LIGHT" : - "ASG_GRP", - The_GetSuffix ()); + GroupClass[Games->Game.HiddenOrVisible],The_GetSuffix ()); HTM_TxtColonNBSP (Txt_Number_of_questions); HTM_Unsigned (Games->Game.NumQsts); HTM_BR (); @@ -582,7 +602,8 @@ static void Gam_ShowGameMainData (struct Gam_Games *Games, HTM_Double (Games->Game.MaxGrade); HTM_BR (); HTM_TxtColonNBSP (Txt_Result_visibility); - TstVis_ShowVisibilityIcons (Games->Game.Visibility,Games->Game.Hidden); + TstVis_ShowVisibilityIcons (Games->Game.Visibility, + Games->Game.HiddenOrVisible); HTM_DIV_End (); /***** Number of matches in game *****/ @@ -594,8 +615,7 @@ static void Gam_ShowGameMainData (struct Gam_Games *Games, Frm_BeginForm (ActSeeOneGam); Gam_PutPars (Games); HTM_BUTTON_Submit_Begin (Txt_Matches,"class=\"LT BT_LINK %s_%s\"", - Games->Game.Hidden ? "ASG_TITLE_LIGHT": - "ASG_TITLE", + TitleClass[Games->Game.HiddenOrVisible], The_GetSuffix ()); if (ShowOnlyThisGame) HTM_TxtColonNBSP (Txt_Matches); @@ -631,9 +651,7 @@ static void Gam_ShowGameMainData (struct Gam_Games *Games, Txt,Cns_MAX_BYTES_TEXT,Str_DONT_REMOVE_SPACES); ALn_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links HTM_DIV_Begin ("class=\"PAR %s_%s\"", - Games->Game.Hidden ? "DAT_LIGHT" : - "DAT", - The_GetSuffix ()); + DataClass[Games->Game.HiddenOrVisible],The_GetSuffix ()); HTM_Txt (Txt); HTM_DIV_End (); HTM_TD_End (); @@ -686,7 +704,7 @@ static void Gam_PutIconsEditingOneGame (void *Games) static void Gam_WriteAuthor (struct Gam_Game *Game) { - Usr_WriteAuthor1Line (Game->UsrCod,Game->Hidden); + Usr_WriteAuthor1Line (Game->UsrCod,Game->HiddenOrVisible); } /*****************************************************************************/ @@ -705,10 +723,10 @@ static void Gam_PutParGameOrder (Gam_Order_t SelectedOrder) static void Gam_PutIconsToRemEditOneGame (struct Gam_Games *Games, const char *Anchor) { - static Act_Action_t ActionHideUnhide[2] = + static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = ActHidGam, // Visible ==> action to hide - [true ] = ActUnhGam, // Hidden ==> action to unhide + [Cns_HIDDEN ] = ActUnhGam, // Hidden ==> action to unhide + [Cns_VISIBLE] = ActHidGam, // Visible ==> action to hide }; static const Act_Action_t ActionShowResults[Rol_NUM_ROLES] = { @@ -727,7 +745,7 @@ static void Gam_PutIconsToRemEditOneGame (struct Gam_Games *Games, /***** Icon to unhide/hide game *****/ Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, Gam_PutPars,Games, - Games->Game.Hidden); + Games->Game.HiddenOrVisible); /***** Icon to edit game *****/ Ico_PutContextualIconToEdit (ActEdiOneGam,NULL, @@ -950,7 +968,8 @@ void Gam_GetGameDataByCod (struct Gam_Game *Game) Game->CrsCod = Str_ConvertStrCodToLongCod (row[1]); /* Get whether the game is hidden (row[2]) */ - Game->Hidden = (row[2][0] == 'Y'); + Game->HiddenOrVisible = (row[2][0] == 'Y') ? Cns_HIDDEN : + Cns_VISIBLE; /* Get author of the game (row[3]) */ Game->UsrCod = Str_ConvertStrCodToLongCod (row[3]); diff --git a/swad_game.h b/swad_game.h index e46e783c..5abea2dd 100644 --- a/swad_game.h +++ b/swad_game.h @@ -79,7 +79,7 @@ struct Gam_Game unsigned Visibility; // Visibility of results char Title[Gam_MAX_BYTES_TITLE + 1]; time_t TimeUTC[Dat_NUM_START_END_TIME]; - bool Hidden; // Game is hidden + Cns_HiddenOrVisible_t HiddenOrVisible; // Game is hidden or visible? unsigned NumQsts; // Number of questions in the game unsigned NumMchs; // Number of matches in the game unsigned NumUnfinishedMchs; // Number of unfinished matches in the game diff --git a/swad_icon.c b/swad_icon.c index a527e492..df62976f 100644 --- a/swad_icon.c +++ b/swad_icon.c @@ -296,24 +296,25 @@ void Ico_PutContextualIconToConfigure (Act_Action_t NextAction, "cog.svg",Ico_BLACK); } -void Ico_PutContextualIconToHideUnhide (const Act_Action_t NextAction[2],const char *Anchor, +void Ico_PutContextualIconToHideUnhide (const Act_Action_t NextAction[Cns_NUM_HIDDEN_VISIBLE], + const char *Anchor, void (*FuncPars) (void *Args),void *Args, - bool Hidden) + Cns_HiddenOrVisible_t HiddenOrVisible) { - static const char *Icon[2] = + static const char *Icon[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = "eye.svg", // visible ==> icon to hide - [true ] = "eye-slash.svg", // hidden ==> icon to unhide + [Cns_HIDDEN ] = "eye-slash.svg", // hidden ==> icon to unhide + [Cns_VISIBLE] = "eye.svg", // visible ==> icon to hide }; - static Ico_Color_t Color[2] = + static Ico_Color_t Color[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = Ico_GREEN, // visible ==> green icon to hide - [true ] = Ico_RED, // hidden ==> red icon to unhide + [Cns_HIDDEN ] = Ico_RED, // hidden ==> red icon to unhide + [Cns_VISIBLE] = Ico_GREEN, // visible ==> green icon to hide }; - Lay_PutContextualLinkOnlyIcon (NextAction[Hidden],Anchor, + Lay_PutContextualLinkOnlyIcon (NextAction[HiddenOrVisible],Anchor, FuncPars,Args, - Icon[Hidden],Color[Hidden]); + Icon[HiddenOrVisible],Color[HiddenOrVisible]); } void Ico_PutContextualIconToExpand (const Act_Action_t NextAction,const char *Anchor, diff --git a/swad_icon.h b/swad_icon.h index c5178cd6..c8fd5583 100644 --- a/swad_icon.h +++ b/swad_icon.h @@ -80,9 +80,10 @@ void Ico_PutContextualIconToView (Act_Action_t NextAction,const char *Anchor, void (*FuncPars) (void *Args),void *Args); void Ico_PutContextualIconToConfigure (Act_Action_t NextAction, void (*FuncPars) (void *Args),void *Args); -void Ico_PutContextualIconToHideUnhide (const Act_Action_t NextAction[2],const char *Anchor, +void Ico_PutContextualIconToHideUnhide (const Act_Action_t NextAction[Cns_NUM_HIDDEN_VISIBLE], + const char *Anchor, void (*FuncPars) (void *Args),void *Args, - bool Hidden); + Cns_HiddenOrVisible_t HiddenOrVisible); void Ico_PutContextualIconToExpand (const Act_Action_t NextAction,const char *Anchor, void (*FuncPars) (void *Args),void *Args); void Ico_PutContextualIconToContract (const Act_Action_t NextAction,const char *Anchor, diff --git a/swad_match_result.c b/swad_match_result.c index 907001a3..08bc1e83 100644 --- a/swad_match_result.c +++ b/swad_match_result.c @@ -1284,9 +1284,9 @@ static void MchRes_CheckIfICanViewMatchResult (const struct Gam_Game *Game, { case Rol_STD: // Depends on visibility of game and result (eye icons) - ICanView->Result = (!Game->Hidden && // The game is visible - Match->Status.ShowUsrResults && // The results of the match are visible to users - Usr_ItsMe (UsrCod) == Usr_ME); // The result is mine + ICanView->Result = (Game->HiddenOrVisible == Cns_VISIBLE && // The game is visible + Match->Status.ShowUsrResults && // The results of the match are visible to users + Usr_ItsMe (UsrCod) == Usr_ME); // The result is mine // Whether I belong or not to groups of match is not checked here... // ...because I should be able to see old matches made in old groups to which I belonged diff --git a/swad_notice.c b/swad_notice.c index 0f333ca3..5a79a7b5 100644 --- a/swad_notice.c +++ b/swad_notice.c @@ -504,10 +504,10 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing, bool Highlight) { extern const char *Txt_See_full_notice; - static Act_Action_t ActionHideUnhide[2] = + static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = ActHidNot, // Visible ==> action to hide - [true ] = ActUnhNot, // Hidden ==> action to unhide + [Cns_HIDDEN ] = ActUnhNot, // Hidden ==> action to unhide + [Cns_VISIBLE] = ActHidNot, // Visible ==> action to hide }; static const char *ContainerClass[Not_NUM_STATUS] = { diff --git a/swad_program.c b/swad_program.c index e8aded5c..8fcb8955 100644 --- a/swad_program.c +++ b/swad_program.c @@ -74,7 +74,9 @@ struct Level { unsigned Number; // Numbers for each level from 1 to maximum level bool Expanded; // If each level from 1 to maximum level is expanded - bool Hidden; // If each level from 1 to maximum level is hidden + Cns_HiddenOrVisible_t HiddenOrVisible; // If each level... + // ...from 1 to maximum level... + // ...is hidden or visible }; /*****************************************************************************/ @@ -125,7 +127,7 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType, long SelectedRscCod); static void Prg_PutIconToContractExpandItem (struct Prg_Item *Item, bool Expanded,bool Editing); -static void Prg_WriteItemText (long ItmCod,bool IsHidden); +static void Prg_WriteItemText (long ItmCod,Cns_HiddenOrVisible_t HiddenOrVisible); static void Prg_WriteRowToCreateItem (long ParentItmCod,unsigned FormLevel); static void Prg_SetTitleClass (char **TitleClass,unsigned Level); static void Prg_FreeTitleClass (char *TitleClass); @@ -141,12 +143,12 @@ static void Prg_WriteNumItem (unsigned Level); static void Prg_WriteNumNewItem (unsigned Level); static void Prg_SetExpandedLevel (unsigned Level,bool Expanded); -static void Prg_SetHiddenLevel (unsigned Level,bool Hidden); +static void Prg_SetHiddenLevel (unsigned Level,Cns_HiddenOrVisible_t HiddenOrVisible); static bool Prg_GetExpandedLevel (unsigned Level); -static bool Prg_GetHiddenLevel (unsigned Level); +static Cns_HiddenOrVisible_t Prg_GetHiddenLevel (unsigned Level); static bool Prg_CheckIfAllHigherLevelsAreExpanded (unsigned CurrentLevel); -static bool Prg_CheckIfAnyHigherLevelIsHidden (unsigned CurrentLevel); +static Cns_HiddenOrVisible_t Prg_CheckIfAnyHigherLevelIsHidden (unsigned CurrentLevel); static void Prg_PutFormsToRemEditOneItem (Prg_ListingType_t ListingType, unsigned NumItem, @@ -485,7 +487,12 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType, [false] = "", // Not expanded [true ] = " rowspan=\"2\"", // Expanded }; - bool IsHidden; + static const char *PrgClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = " PRG_HIDDEN", + [Cns_VISIBLE] = "", + }; + Cns_HiddenOrVisible_t HiddenOrVisible = Cns_HIDDEN; // Initialized to avoid warning char *Id; unsigned ColSpan; unsigned NumCol; @@ -494,13 +501,18 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType, bool HighlightItem; /***** Check if this item should be shown as hidden *****/ - Prg_SetHiddenLevel (Item->Hierarchy.Level,Item->Hierarchy.Hidden); - if (Item->Hierarchy.Hidden) // this item is marked as hidden - IsHidden = true; - else // this item is not marked as hidden - IsHidden = Prg_CheckIfAnyHigherLevelIsHidden (Item->Hierarchy.Level); + Prg_SetHiddenLevel (Item->Hierarchy.Level,Item->Hierarchy.HiddenOrVisible); + switch (Item->Hierarchy.HiddenOrVisible) + { + case Cns_HIDDEN: // this item is marked as hidden + HiddenOrVisible = Cns_HIDDEN; + break; + case Cns_VISIBLE: // this item is not marked as hidden + HiddenOrVisible = Prg_CheckIfAnyHigherLevelIsHidden (Item->Hierarchy.Level); + break; + } - if (EditingProgram[ListingType] || !IsHidden) + if (EditingProgram[ListingType] || HiddenOrVisible == Cns_VISIBLE) { /***** Increase number in level *****/ Prg_IncreaseNumberInLevel (Item->Hierarchy.Level); @@ -545,9 +557,7 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType, HTM_TD_Begin ("class=\"PRG_NUM %s\"%s", The_GetColorRows (),RowSpan[Expanded]); HTM_DIV_Begin ("class=\"RT %s%s\"", - TitleClass, - IsHidden ? " PRG_HIDDEN" : - ""); + TitleClass,PrgClass[HiddenOrVisible]); Prg_WriteNumItem (Item->Hierarchy.Level); HTM_DIV_End (); HTM_TD_End (); @@ -569,9 +579,7 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType, if (HighlightItem) HTM_ARTICLE_Begin (Prg_ITEM_SECTION_ID); HTM_DIV_Begin ("class=\"LT %s%s\"", - TitleClass, - IsHidden ? " PRG_HIDDEN" : - ""); + TitleClass,PrgClass[HiddenOrVisible]); HTM_Txt (Item->Title); HTM_DIV_End (); if (HighlightItem) @@ -599,9 +607,7 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType, Id, Item->Open ? "DATE_GREEN" : "DATE_RED", - The_GetSuffix (), - IsHidden ? " PRG_HIDDEN" : - ""); + The_GetSuffix (),PrgClass[HiddenOrVisible]); Dat_WriteLocalDateHMSFromUTC (Id,Item->TimeUTC[StartEndTime], Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA, true,true,false,0x6); @@ -639,7 +645,7 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType, Prg_ShowFormToChangeItem (Item->Hierarchy.ItmCod); else /* Text */ - Prg_WriteItemText (Item->Hierarchy.ItmCod,IsHidden); + Prg_WriteItemText (Item->Hierarchy.ItmCod,HiddenOrVisible); /* List of resources */ PrgRsc_ListItemResources (ListingType,Item,SelectedItmCod,SelectedRscCod); @@ -682,8 +688,13 @@ static void Prg_PutIconToContractExpandItem (struct Prg_Item *Item, /**************************** Show item text *********************************/ /*****************************************************************************/ -static void Prg_WriteItemText (long ItmCod,bool IsHidden) +static void Prg_WriteItemText (long ItmCod,Cns_HiddenOrVisible_t HiddenOrVisible) { + static const char *PrgClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = " PRG_HIDDEN", + [Cns_VISIBLE] = "", + }; char Txt[Cns_MAX_BYTES_TEXT + 1]; /* Text */ @@ -692,9 +703,7 @@ static void Prg_WriteItemText (long ItmCod,bool IsHidden) Txt,Cns_MAX_BYTES_TEXT,Str_DONT_REMOVE_SPACES); ALn_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links HTM_DIV_Begin ("class=\"PAR PRG_TXT_%s%s\"", - The_GetSuffix (), - IsHidden ? " PRG_HIDDEN" : - ""); + The_GetSuffix (),PrgClass[HiddenOrVisible]); HTM_Txt (Txt); HTM_DIV_End (); } @@ -900,10 +909,10 @@ static void Prg_SetExpandedLevel (unsigned Level,bool Expanded) Prg_Gbl.Levels[Level].Expanded = Expanded; } -static void Prg_SetHiddenLevel (unsigned Level,bool Hidden) +static void Prg_SetHiddenLevel (unsigned Level,Cns_HiddenOrVisible_t HiddenOrVisible) { if (Prg_Gbl.Levels) - Prg_Gbl.Levels[Level].Hidden = Hidden; + Prg_Gbl.Levels[Level].HiddenOrVisible = HiddenOrVisible; } static bool Prg_GetExpandedLevel (unsigned Level) @@ -918,16 +927,16 @@ static bool Prg_GetExpandedLevel (unsigned Level) return false; } -static bool Prg_GetHiddenLevel (unsigned Level) +static Cns_HiddenOrVisible_t Prg_GetHiddenLevel (unsigned Level) { /* Level 0 (root) is always visible */ if (Level == 0) - return false; + return Cns_VISIBLE; if (Prg_Gbl.Levels) - return Prg_Gbl.Levels[Level].Hidden; + return Prg_Gbl.Levels[Level].HiddenOrVisible; - return false; + return Cns_VISIBLE; } /*****************************************************************************/ @@ -947,17 +956,17 @@ static bool Prg_CheckIfAllHigherLevelsAreExpanded (unsigned CurrentLevel) return true; // None is contracted. All are expanded } -static bool Prg_CheckIfAnyHigherLevelIsHidden (unsigned CurrentLevel) +static Cns_HiddenOrVisible_t Prg_CheckIfAnyHigherLevelIsHidden (unsigned CurrentLevel) { unsigned Level; for (Level = 1; Level < CurrentLevel; Level++) - if (Prg_GetHiddenLevel (Level)) // Hidden? - return true; + if (Prg_GetHiddenLevel (Level) == Cns_HIDDEN) + return Cns_HIDDEN; - return false; // None is hidden. All are visible. + return Cns_VISIBLE; // None is hidden. All are visible. } /*****************************************************************************/ @@ -970,10 +979,10 @@ static void Prg_PutFormsToRemEditOneItem (Prg_ListingType_t ListingType, bool HighlightItem) { extern const char *Txt_Movement_not_allowed; - static Act_Action_t ActionHideUnhide[2] = + static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = ActHidPrgItm, // Visible ==> action to hide - [true ] = ActUnhPrgItm, // Hidden ==> action to unhide + [Cns_HIDDEN ] = ActUnhPrgItm, // Hidden ==> action to unhide + [Cns_VISIBLE] = ActHidPrgItm, // Visible ==> action to hide }; char StrItemIndex[Cns_MAX_DECIMAL_DIGITS_UINT + 1]; @@ -991,7 +1000,7 @@ static void Prg_PutFormsToRemEditOneItem (Prg_ListingType_t ListingType, /***** Icon to hide/unhide program item *****/ Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Prg_HIGHLIGHTED_SECTION_ID, Prg_PutParItmCod,&Item->Hierarchy.ItmCod, - Item->Hierarchy.Hidden); + Item->Hierarchy.HiddenOrVisible); /***** Icon to edit program item *****/ if (ListingType == Prg_FORM_EDIT_ITEM && HighlightItem) @@ -1182,7 +1191,8 @@ void Prg_GetListItems (void) Prg_Gbl.List.Items[NumItem].Level = Str_ConvertStrToUnsigned (row[2]); /* Get whether the program item is hidden or not (row[3]) */ - Prg_Gbl.List.Items[NumItem].Hidden = (row[3][0] == 'Y'); + Prg_Gbl.List.Items[NumItem].HiddenOrVisible = (row[3][0] == 'Y') ? Cns_HIDDEN : + Cns_VISIBLE; } } @@ -1250,7 +1260,8 @@ static void Prg_GetItemDataFromRow (MYSQL_RES **mysql_res, Item->Hierarchy.Level = Str_ConvertStrToUnsigned (row[2]); /* Get whether the program item is hidden or not (row[3]) */ - Item->Hierarchy.Hidden = (row[3][0] == 'Y'); + Item->Hierarchy.HiddenOrVisible = (row[3][0] == 'Y') ? Cns_HIDDEN : + Cns_VISIBLE; /* Get author of the program item (row[4]) */ Item->UsrCod = Str_ConvertStrCodToLongCod (row[4]); @@ -1299,7 +1310,7 @@ void Prg_ResetItem (struct Prg_Item *Item) Item->Hierarchy.ItmCod = -1L; Item->Hierarchy.ItmInd = 0; Item->Hierarchy.Level = 0; - Item->Hierarchy.Hidden = false; + Item->Hierarchy.HiddenOrVisible = Cns_VISIBLE; Item->UsrCod = -1L; Item->TimeUTC[Dat_STR_TIME] = Item->TimeUTC[Dat_END_TIME] = (time_t) 0; @@ -1312,7 +1323,7 @@ void Prg_ResetResource (struct Prg_Item *Item) { Item->Resource.Hierarchy.RscCod = -1L; Item->Resource.Hierarchy.RscInd = 0; - Item->Resource.Hierarchy.Hidden = false; + Item->Resource.Hierarchy.HiddenOrVisible = Cns_VISIBLE; Item->Resource.Link.Type = Rsc_NONE; Item->Resource.Link.Cod = -1L; Item->Resource.Title[0] = '\0'; diff --git a/swad_program.h b/swad_program.h index a4661db8..dff4fbc9 100644 --- a/swad_program.h +++ b/swad_program.h @@ -42,7 +42,7 @@ struct Prg_ResourceHierarchy { long RscCod; unsigned RscInd; // 1, 2, 3... - bool Hidden; + Cns_HiddenOrVisible_t HiddenOrVisible; }; #define Prg_MAX_CHARS_PROGRAM_ITEM_TITLE (128 - 1) // 127 @@ -53,7 +53,7 @@ struct Prg_ItemHierarchy long ItmCod; unsigned ItmInd; // 1, 2, 3... unsigned Level; - bool Hidden; + Cns_HiddenOrVisible_t HiddenOrVisible; }; struct Prg_Item diff --git a/swad_program_resource.c b/swad_program_resource.c index d2e79987..2f219906 100644 --- a/swad_program_resource.c +++ b/swad_program_resource.c @@ -351,7 +351,8 @@ static void PrgRsc_GetResourceDataFromRow (MYSQL_RES *mysql_res, Item->Resource.Hierarchy.RscInd = Str_ConvertStrToUnsigned (row[2]); /***** Get whether the program item is hidden (row(3)) *****/ - Item->Resource.Hierarchy.Hidden = (row[3][0] == 'Y'); + Item->Resource.Hierarchy.HiddenOrVisible = (row[3][0] == 'Y') ? Cns_HIDDEN : + Cns_VISIBLE; /***** Get link type and code (row[4], row[5]) *****/ Item->Resource.Link.Type = Rsc_GetTypeFromString (row[4]); @@ -507,10 +508,10 @@ static void PrgRsc_PutFormsToRemEditOneResource (struct Prg_Item *Item, unsigned NumRsc, unsigned NumResources) { - static Act_Action_t ActionHideUnhide[2] = + static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = ActHidPrgRsc, // Visible ==> action to hide - [true ] = ActUnhPrgRsc, // Hidden ==> action to unhide + [Cns_HIDDEN ] = ActUnhPrgRsc, // Hidden ==> action to unhide + [Cns_VISIBLE] = ActHidPrgRsc, // Visible ==> action to hide }; extern const char *Txt_Movement_not_allowed; extern const char *Txt_Visible; @@ -530,7 +531,7 @@ static void PrgRsc_PutFormsToRemEditOneResource (struct Prg_Item *Item, if (NumRsc < NumResources) Ico_PutContextualIconToHideUnhide (ActionHideUnhide,PrgRsc_RESOURCE_SECTION_ID, PrgRsc_PutParRscCod,&Item->Resource.Hierarchy.RscCod, - Item->Resource.Hierarchy.Hidden); + Item->Resource.Hierarchy.HiddenOrVisible); else Ico_PutIconOff ("eye.svg",Ico_GREEN,Txt_Visible); diff --git a/swad_project.c b/swad_project.c index 430e056e..8382e765 100644 --- a/swad_project.c +++ b/swad_project.c @@ -3155,10 +3155,10 @@ static Prj_Order_t Prj_GetParPrjOrder (void) static void Prj_PutIconsToRemEditOnePrj (struct Prj_Projects *Projects, const char *Anchor) { - static Act_Action_t ActionHideUnhide[2] = + static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = ActHidPrj, // Visible ==> action to hide - [true ] = ActUnhPrj, // Hidden ==> action to unhide + [Cns_HIDDEN ] = ActUnhPrj, // Hidden ==> action to unhide + [Cns_VISIBLE] = ActHidPrj, // Visible ==> action to hide }; if (Prj_CheckIfICanEditProject (&Projects->Prj)) diff --git a/swad_survey.c b/swad_survey.c index a0a8bccb..e345be90 100644 --- a/swad_survey.c +++ b/swad_survey.c @@ -402,6 +402,31 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys, extern const char *Txt_Users; extern const char *Txt_Answer_survey; extern const char *Txt_View_results; + static const char *DateGreenClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DATE_GREEN_LIGHT", + [Cns_VISIBLE] = "DATE_GREEN", + }; + static const char *DateRedClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DATE_RED_LIGHT", + [Cns_VISIBLE] = "DATE_RED", + }; + static const char *TitleClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "ASG_TITLE_LIGHT", + [Cns_VISIBLE] = "ASG_TITLE", + }; + static const char *GroupClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "ASG_GRP_LIGHT", + [Cns_VISIBLE] = "ASG_GRP", + }; + static const char *DataClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DAT_LIGHT", + [Cns_VISIBLE] = "DAT", + }; char *Anchor = NULL; static unsigned UniqueId = 0; char *Id; @@ -446,18 +471,14 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys, if (ShowOnlyThisSvyComplete) HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s\"", Id, - Surveys->Svy.Status.Hidden ? (Surveys->Svy.Status.Open ? "DATE_GREEN_LIGHT" : - "DATE_RED_LIGHT") : - (Surveys->Svy.Status.Open ? "DATE_GREEN" : - "DATE_RED"), + Surveys->Svy.Status.Open ? DateGreenClass[Surveys->Svy.Status.HiddenOrVisible] : + DateRedClass[Surveys->Svy.Status.HiddenOrVisible], The_GetSuffix ()); else HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"", Id, - Surveys->Svy.Status.Hidden ? (Surveys->Svy.Status.Open ? "DATE_GREEN_LIGHT" : - "DATE_RED_LIGHT") : - (Surveys->Svy.Status.Open ? "DATE_GREEN" : - "DATE_RED"), + Surveys->Svy.Status.Open ? DateGreenClass[Surveys->Svy.Status.HiddenOrVisible] : + DateRedClass[Surveys->Svy.Status.HiddenOrVisible], The_GetSuffix (), The_GetColorRows ()); Dat_WriteLocalDateHMSFromUTC (Id,Surveys->Svy.TimeUTC[Dat_STR_TIME], @@ -472,18 +493,14 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys, if (ShowOnlyThisSvyComplete) HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s\"", Id, - Surveys->Svy.Status.Hidden ? (Surveys->Svy.Status.Open ? "DATE_GREEN_LIGHT" : - "DATE_RED_LIGHT") : - (Surveys->Svy.Status.Open ? "DATE_GREEN" : - "DATE_RED"), + Surveys->Svy.Status.Open ? DateGreenClass[Surveys->Svy.Status.HiddenOrVisible] : + DateRedClass[Surveys->Svy.Status.HiddenOrVisible], The_GetSuffix ()); else HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"", Id, - Surveys->Svy.Status.Hidden ? (Surveys->Svy.Status.Open ? "DATE_GREEN_LIGHT" : - "DATE_RED_LIGHT") : - (Surveys->Svy.Status.Open ? "DATE_GREEN" : - "DATE_RED"), + Surveys->Svy.Status.Open ? DateGreenClass[Surveys->Svy.Status.HiddenOrVisible] : + DateRedClass[Surveys->Svy.Status.HiddenOrVisible], The_GetSuffix (), The_GetColorRows ()); Dat_WriteLocalDateHMSFromUTC (Id,Surveys->Svy.TimeUTC[Dat_END_TIME], @@ -506,8 +523,7 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys, Grp_PutParWhichGroups (&WhichGroups); Pag_PutParPagNum (Pag_SURVEYS,Surveys->CurrentPage); HTM_BUTTON_Submit_Begin (Txt_View_survey,"class=\"LT BT_LINK %s_%s\"", - Surveys->Svy.Status.Hidden ? "ASG_TITLE_LIGHT" : - "ASG_TITLE", + TitleClass[Surveys->Svy.Status.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Surveys->Svy.Title); HTM_BUTTON_End (); @@ -516,8 +532,7 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys, /* Number of questions and number of distinct users who have already answered this survey */ HTM_DIV_Begin ("class=\"%s_%s\"", - Surveys->Svy.Status.Hidden ? "ASG_GRP_LIGHT" : - "ASG_GRP", + GroupClass[Surveys->Svy.Status.HiddenOrVisible], The_GetSuffix ()); HTM_TxtColonNBSP (Txt_Number_of_questions); HTM_Unsigned (Surveys->Svy.NumQsts); @@ -595,8 +610,7 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys, /* Scope of the survey */ HTM_DIV_Begin ("class=\"%s_%s\"", - Surveys->Svy.Status.Hidden ? "ASG_GRP_LIGHT" : - "ASG_GRP", + GroupClass[Surveys->Svy.Status.HiddenOrVisible], The_GetSuffix ()); HTM_TxtColonNBSP (Txt_Scope); switch (Surveys->Svy.Scope) @@ -627,8 +641,7 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys, /* Users' roles who can answer the survey */ HTM_DIV_Begin ("class=\"%s_%s\"", - Surveys->Svy.Status.Hidden ? "ASG_GRP_LIGHT" : - "ASG_GRP", + GroupClass[Surveys->Svy.Status.HiddenOrVisible], The_GetSuffix ()); HTM_TxtColon (Txt_Users); HTM_BR (); @@ -650,8 +663,7 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys, Txt,Cns_MAX_BYTES_TEXT,Str_DONT_REMOVE_SPACES); ALn_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links HTM_DIV_Begin ("class=\"PAR %s_%s\"", - Surveys->Svy.Status.Hidden ? "DAT_LIGHT" : - "DAT", + DataClass[Surveys->Svy.Status.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Txt); HTM_DIV_End (); @@ -715,7 +727,7 @@ static void Svy_PutIconsOneSvy (void *Surveys) static void Svy_WriteAuthor (struct Svy_Survey *Svy) { - Usr_WriteAuthor1Line (Svy->UsrCod,Svy->Status.Hidden); + Usr_WriteAuthor1Line (Svy->UsrCod,Svy->Status.HiddenOrVisible); } /*****************************************************************************/ @@ -734,37 +746,48 @@ static void Svy_WriteStatus (struct Svy_Survey *Svy) extern const char *Txt_SURVEY_You_dont_belong_to_the_scope_of_the_survey; extern const char *Txt_SURVEY_You_have_already_answered; extern const char *Txt_SURVEY_You_have_not_answered; + static const char *Class[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "STATUS_RED_LIGHT", + [Cns_VISIBLE] = "STATUS_GREEN", + }; + static const char **TxtHiddenOrVisible[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = &Txt_Hidden_survey, + [Cns_VISIBLE] = &Txt_Visible_survey, + }; + static const char *StatusGreenClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DATE_GREEN_LIGHT", + [Cns_VISIBLE] = "DATE_GREEN", + }; + static const char *StatusRedClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "DATE_RED_LIGHT", + [Cns_VISIBLE] = "DATE_RED", + }; /***** Begin list with items of status *****/ HTM_UL_Begin (NULL); /* Write whether survey is visible or hidden */ - if (Svy->Status.Hidden) - { - HTM_LI_Begin ("class=\"STATUS_RED_LIGHT_%s\"",The_GetSuffix ()); - HTM_Txt (Txt_Hidden_survey); - } - else - { - HTM_LI_Begin ("class=\"STATUS_GREEN_%s\"",The_GetSuffix ()); - HTM_Txt (Txt_Visible_survey); - } + HTM_LI_Begin ("class=\"%s_%s\"", + Class[Svy->Status.HiddenOrVisible],The_GetSuffix ()); + HTM_Txt (*TxtHiddenOrVisible[Svy->Status.HiddenOrVisible]); HTM_LI_End (); /* Write whether survey is open or closed */ if (Svy->Status.Open) { HTM_LI_Begin ("class=\"%s_%s\"", - Svy->Status.Hidden ? "STATUS_GREEN_LIGHT" : - "STATUS_GREEN", + StatusGreenClass[Svy->Status.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Txt_Open_survey); } else { HTM_LI_Begin ("class=\"%s_%s\"", - Svy->Status.Hidden ? "STATUS_RED_LIGHT" : - "STATUS_RED", + StatusRedClass[Svy->Status.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Txt_Closed_survey); } @@ -774,16 +797,14 @@ static void Svy_WriteStatus (struct Svy_Survey *Svy) if (Svy->Status.IAmLoggedWithAValidRoleToAnswer) { HTM_LI_Begin ("class=\"%s_%s\"", - Svy->Status.Hidden ? "STATUS_GREEN_LIGHT" : - "STATUS_GREEN", + StatusGreenClass[Svy->Status.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Txt_SURVEY_Type_of_user_allowed); } else { HTM_LI_Begin ("class=\"%s_%s\"", - Svy->Status.Hidden ? "STATUS_RED_LIGHT" : - "STATUS_RED", + StatusRedClass[Svy->Status.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Txt_SURVEY_Type_of_user_not_allowed); } @@ -793,16 +814,14 @@ static void Svy_WriteStatus (struct Svy_Survey *Svy) if (Svy->Status.IBelongToScope) { HTM_LI_Begin ("class=\"%s_%s\"", - Svy->Status.Hidden ? "STATUS_GREEN_LIGHT" : - "STATUS_GREEN", + StatusGreenClass[Svy->Status.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Txt_SURVEY_You_belong_to_the_scope_of_the_survey); } else { HTM_LI_Begin ("class=\"%s_%s\"", - Svy->Status.Hidden ? "STATUS_RED_LIGHT" : - "STATUS_RED", + StatusRedClass[Svy->Status.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Txt_SURVEY_You_dont_belong_to_the_scope_of_the_survey); } @@ -812,16 +831,14 @@ static void Svy_WriteStatus (struct Svy_Survey *Svy) if (Svy->Status.IHaveAnswered) { HTM_LI_Begin ("class=\"%s_%s\"", - Svy->Status.Hidden ? "STATUS_GREEN_LIGHT" : - "STATUS_GREEN", + StatusGreenClass[Svy->Status.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Txt_SURVEY_You_have_already_answered); } else { HTM_LI_Begin ("class=\"%s_%s\"", - Svy->Status.Hidden ? "STATUS_RED_LIGHT" : - "STATUS_RED", + StatusRedClass[Svy->Status.HiddenOrVisible], The_GetSuffix ()); HTM_Txt (Txt_SURVEY_You_have_not_answered); } @@ -860,10 +877,10 @@ void Svy_PutParSvyOrder (Dat_StartEndTime_t SelectedOrder) static void Svy_PutFormsToRemEditOneSvy (struct Svy_Surveys *Surveys, const char *Anchor) { - static Act_Action_t ActionHideUnhide[2] = + static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] = { - [false] = ActHidSvy, // Visible ==> action to hide - [true ] = ActUnhSvy, // Hidden ==> action to unhide + [Cns_HIDDEN ] = ActUnhSvy, // Hidden ==> action to unhide + [Cns_VISIBLE] = ActHidSvy, // Visible ==> action to hide }; if (Surveys->Svy.Status.ICanEdit) @@ -879,7 +896,7 @@ static void Svy_PutFormsToRemEditOneSvy (struct Svy_Surveys *Surveys, /***** Icon to hide/unhide survey *****/ Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, Svy_PutPars,Surveys, - Surveys->Svy.Status.Hidden); + Surveys->Svy.Status.HiddenOrVisible); /***** Icon to edit survey *****/ Ico_PutContextualIconToEdit (ActEdiOneSvy,NULL, @@ -1147,7 +1164,8 @@ void Svy_GetSurveyDataByCod (struct Svy_Survey *Svy) Svy->Cod = Str_ConvertStrCodToLongCod (row[2]); /* Get whether the survey is hidden (row[3]) */ - Svy->Status.Hidden = (row[3][0] == 'Y'); + Svy->Status.HiddenOrVisible = (row[3][0] == 'Y') ? Cns_HIDDEN : + Cns_VISIBLE; /* Get roles (row[4]) */ if (sscanf (row[4],"%u",&Svy->Roles) != 1) @@ -1206,7 +1224,7 @@ void Svy_GetSurveyDataByCod (struct Svy_Survey *Svy) /* Can I answer survey? */ Svy->Status.ICanAnswer = ( Svy->NumQsts != 0) && - !Svy->Status.Hidden && + Svy->Status.HiddenOrVisible == Cns_VISIBLE && Svy->Status.Open && Svy->Status.IAmLoggedWithAValidRoleToAnswer && Svy->Status.IBelongToScope && @@ -1217,18 +1235,18 @@ void Svy_GetSurveyDataByCod (struct Svy_Survey *Svy) switch (Gbl.Usrs.Me.Role.Logged) { case Rol_STD: - Svy->Status.ICanViewResults = ( Svy->Scope == HieLvl_CRS || - Svy->Scope == HieLvl_DEG || - Svy->Scope == HieLvl_CTR || - Svy->Scope == HieLvl_INS || - Svy->Scope == HieLvl_CTY || - Svy->Scope == HieLvl_SYS) && - ( Svy->NumQsts != 0) && - !Svy->Status.Hidden && - Svy->Status.Open && - Svy->Status.IAmLoggedWithAValidRoleToAnswer && - Svy->Status.IBelongToScope && - Svy->Status.IHaveAnswered; + Svy->Status.ICanViewResults = (Svy->Scope == HieLvl_CRS || + Svy->Scope == HieLvl_DEG || + Svy->Scope == HieLvl_CTR || + Svy->Scope == HieLvl_INS || + Svy->Scope == HieLvl_CTY || + Svy->Scope == HieLvl_SYS) && + (Svy->NumQsts != 0) && + Svy->Status.HiddenOrVisible == Cns_VISIBLE && + Svy->Status.Open && + Svy->Status.IAmLoggedWithAValidRoleToAnswer && + Svy->Status.IBelongToScope && + Svy->Status.IHaveAnswered; Svy->Status.ICanViewComments = false; Svy->Status.ICanEdit = false; break; @@ -1313,7 +1331,7 @@ void Svy_GetSurveyDataByCod (struct Svy_Survey *Svy) Svy->Title[0] = '\0'; Svy->NumQsts = 0; Svy->NumUsrs = 0; - Svy->Status.Hidden = false; + Svy->Status.HiddenOrVisible = Cns_VISIBLE; Svy->Status.Open = false; Svy->Status.IAmLoggedWithAValidRoleToAnswer = false; Svy->Status.IBelongToScope = false; @@ -1659,13 +1677,13 @@ void Svy_ReqCreatOrEditSvy (void) Surveys.Svy.Title[0] = '\0'; Surveys.Svy.NumQsts = 0; Surveys.Svy.NumUsrs = 0; - Surveys.Svy.Status.Hidden = false; - Surveys.Svy.Status.Open = true; + Surveys.Svy.Status.HiddenOrVisible = Cns_VISIBLE; + Surveys.Svy.Status.Open = true; Surveys.Svy.Status.IAmLoggedWithAValidRoleToAnswer = false; - Surveys.Svy.Status.IBelongToScope = false; - Surveys.Svy.Status.IHaveAnswered = false; - Surveys.Svy.Status.ICanAnswer = false; - Surveys.Svy.Status.ICanViewResults = false; + Surveys.Svy.Status.IBelongToScope = false; + Surveys.Svy.Status.IHaveAnswered = false; + Surveys.Svy.Status.ICanAnswer = false; + Surveys.Svy.Status.ICanViewResults = false; Surveys.Svy.Status.ICanViewComments = false; } else @@ -2144,6 +2162,11 @@ static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Svy_Survey *Svy) extern const char *Txt_Groups; extern const char *Txt_and; extern const char *Txt_The_whole_course; + static const char *GroupClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "ASG_GRP_LIGHT", + [Cns_VISIBLE] = "ASG_GRP", + }; MYSQL_RES *mysql_res; MYSQL_ROW row; unsigned NumGrps; @@ -2154,9 +2177,7 @@ static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Svy_Survey *Svy) /***** Write heading *****/ HTM_DIV_Begin ("class=\"%s_%s\"", - Svy->Status.Hidden ? "ASG_GRP_LIGHT" : - "ASG_GRP", - The_GetSuffix ()); + GroupClass[Svy->Status.HiddenOrVisible],The_GetSuffix ()); HTM_TxtColonNBSP (NumGrps == 1 ? Txt_Group : Txt_Groups); diff --git a/swad_survey.h b/swad_survey.h index 79607307..f8ba004e 100644 --- a/swad_survey.h +++ b/swad_survey.h @@ -53,7 +53,7 @@ struct Svy_Survey unsigned NumUsrs; // Number of distinct users who have already answered the survey struct { - bool Hidden; // Survey is hidden + Cns_HiddenOrVisible_t HiddenOrVisible; // Survey is hidden or visible? bool Open; // Start date <= now <= end date bool IAmLoggedWithAValidRoleToAnswer; // I am logged with a valid role to answer this survey bool IBelongToScope; // I belong to the scope of this survey diff --git a/swad_test_visibility.c b/swad_test_visibility.c index d73d58f2..d0e09c75 100644 --- a/swad_test_visibility.c +++ b/swad_test_visibility.c @@ -39,7 +39,8 @@ /******************************* Show visibility *****************************/ /*****************************************************************************/ -void TstVis_ShowVisibilityIcons (unsigned SelectedVisibility,bool Hidden) +void TstVis_ShowVisibilityIcons (unsigned SelectedVisibility, + Cns_HiddenOrVisible_t HiddenOrVisible) { extern const char *Txt_TST_STR_VISIBILITY[TstVis_NUM_ITEMS_VISIBILITY]; extern const char *Txt_TST_HIDDEN_VISIBLE[2]; @@ -51,6 +52,7 @@ void TstVis_ShowVisibilityIcons (unsigned SelectedVisibility,bool Hidden) [TstVis_VISIBLE_EACH_QST_SCORE] = "tasks.svg", [TstVis_VISIBLE_TOTAL_SCORE ] = "check-circle-regular.svg", }; + static void (*Ico_PutIcon[Cns_NUM_HIDDEN_VISIBLE]) (const char *Icon,Ico_Color_t Color,const char *Title); TstVis_Visibility_t Visibility; bool ItemVisible; char *Title; @@ -64,12 +66,9 @@ void TstVis_ShowVisibilityIcons (unsigned SelectedVisibility,bool Hidden) Txt_TST_STR_VISIBILITY[Visibility], Txt_TST_HIDDEN_VISIBLE[ItemVisible]) < 0) Err_NotEnoughMemoryExit (); - if (Hidden) - Ico_PutIconOff (Icons[Visibility],ItemVisible ? Ico_GREEN : - Ico_RED ,Title); - else - Ico_PutIconOn (Icons[Visibility],ItemVisible ? Ico_GREEN : - Ico_RED ,Title); + + Ico_PutIcon[HiddenOrVisible] (Icons[Visibility],ItemVisible ? Ico_GREEN : + Ico_RED ,Title); free (Title); } } diff --git a/swad_test_visibility.h b/swad_test_visibility.h index 0106ae1f..93e16de8 100644 --- a/swad_test_visibility.h +++ b/swad_test_visibility.h @@ -50,7 +50,8 @@ typedef enum /***************************** Public prototypes *****************************/ /*****************************************************************************/ -void TstVis_ShowVisibilityIcons (unsigned SelectedVisibility,bool Hidden); +void TstVis_ShowVisibilityIcons (unsigned SelectedVisibility, + Cns_HiddenOrVisible_t HiddenOrVisible); void TstVis_PutVisibilityCheckboxes (unsigned SelectedVisibility); unsigned TstVis_GetVisibilityFromForm (void); unsigned TstVis_GetVisibilityFromStr (const char *Str); diff --git a/swad_text.c b/swad_text.c index e448ca46..502bdc1d 100644 --- a/swad_text.c +++ b/swad_text.c @@ -57,6 +57,7 @@ #include // For NULL #include "swad_action.h" +#include "swad_agenda.h" #include "swad_assignment.h" #include "swad_browser.h" #include "swad_building.h" @@ -1270,7 +1271,7 @@ const char *Txt_Administer_one_user = "Administer one user"; // Çeviri lazim! #endif -const char *Txt_AGENDA_PAST___FUTURE_EVENTS[2] = +const char *Txt_AGENDA_PAST___FUTURE_EVENTS[Agd_NUM_PAST_FUTURE_EVENTS] = { // Agd_PAST___EVENTS #if L==1 // ca @@ -1368,9 +1369,9 @@ const char *Txt_AGENDA_PRIVAT_PUBLIC_EVENTS[2] = #endif }; -const char *Txt_AGENDA_HIDDEN_VISIBL_EVENTS[2] = +const char *Txt_AGENDA_HIDDEN_VISIBLE_EVENTS[Cns_NUM_HIDDEN_VISIBLE] = { - // Agd_HIDDEN_EVENTS + // Cns_HIDDEN #if L==1 // ca "Esdeveniments ocults" #elif L==2 // de @@ -1393,7 +1394,7 @@ const char *Txt_AGENDA_HIDDEN_VISIBL_EVENTS[2] = "Gizli etkinlikler" #endif , - // Agd_VISIBL_EVENTS + // Cns_VISIBLE #if L==1 // ca "Esdeveniments visibles" #elif L==2 // de diff --git a/swad_user.c b/swad_user.c index cfe733ce..86e37646 100644 --- a/swad_user.c +++ b/swad_user.c @@ -6374,7 +6374,8 @@ void Usr_WriteAuthor (struct Usr_Data *UsrDat, ClassPhoto[Gbl.Prefs.PhotoShape]); HTM_TD_End (); - /***** Second column with user name (if author has a web page, put a link to it) *****/ + /***** Second column with user name + (if author has a web page, put a link to it) *****/ if (WriteAuthor) { HTM_TD_Begin ("class=\"LT\""); @@ -6384,8 +6385,6 @@ void Usr_WriteAuthor (struct Usr_Data *UsrDat, } else HTM_TD_Begin ("class=\"LM\""); - - /***** End second column *****/ HTM_TD_End (); /***** End row and table *****/ @@ -6397,7 +6396,7 @@ void Usr_WriteAuthor (struct Usr_Data *UsrDat, /********************* Write the author of an assignment *********************/ /*****************************************************************************/ -void Usr_WriteAuthor1Line (long UsrCod,bool Hidden) +void Usr_WriteAuthor1Line (long UsrCod,Cns_HiddenOrVisible_t HiddenOrVisible) { static const char *ClassPhoto[PhoSha_NUM_SHAPES] = { @@ -6406,6 +6405,11 @@ void Usr_WriteAuthor1Line (long UsrCod,bool Hidden) [PhoSha_SHAPE_OVAL ] = "PHOTOO15x20", [PhoSha_SHAPE_RECTANGLE] = "PHOTOR15x20", }; + static const char *MsgClass[Cns_NUM_HIDDEN_VISIBLE] = + { + [Cns_HIDDEN ] = "MSG_AUT_LIGHT", + [Cns_VISIBLE] = "MSG_AUT", + }; bool ShowPhoto = false; char PhotoURL[Cns_MAX_BYTES_WWW + 1]; struct Usr_Data UsrDat; @@ -6427,9 +6431,7 @@ void Usr_WriteAuthor1Line (long UsrCod,bool Hidden) /***** Write name *****/ HTM_DIV_Begin ("class=\"AUTHOR_1_LINE %s_%s\"", - Hidden ? "MSG_AUT_LIGHT" : - "MSG_AUT", - The_GetSuffix ()); + MsgClass[HiddenOrVisible],The_GetSuffix ()); HTM_Txt (UsrDat.FullName); HTM_DIV_End (); diff --git a/swad_user.h b/swad_user.h index daf15ada..530f7e86 100644 --- a/swad_user.h +++ b/swad_user.h @@ -435,7 +435,7 @@ unsigned Usr_GetTotalNumberOfUsers (void); void Usr_WriteAuthor (struct Usr_Data *UsrDat, Cns_DisabledOrEnabled_t DisabledOrEnabled); -void Usr_WriteAuthor1Line (long UsrCod,bool Hidden); +void Usr_WriteAuthor1Line (long UsrCod,Cns_HiddenOrVisible_t HiddenOrVisible); void Usr_ShowTableCellWithUsrData (struct Usr_Data *UsrDat,unsigned NumRows); diff --git a/swad_zip.c b/swad_zip.c index b81b975f..f9a86b96 100644 --- a/swad_zip.c +++ b/swad_zip.c @@ -443,7 +443,7 @@ static unsigned long long ZIP_CloneDir (const char *Path,const char *PathClone,c char PathFileInTree[PATH_MAX + 1]; struct stat FileStatus; Brw_FileType_t FileType; - bool Hidden; + Cns_HiddenOrVisible_t HiddenOrVisible; bool SeeDocsZone = Gbl.FileBrowser.Type == Brw_SHOW_DOC_INS || Gbl.FileBrowser.Type == Brw_SHOW_DOC_CTR || Gbl.FileBrowser.Type == Brw_SHOW_DOC_DEG || @@ -479,35 +479,38 @@ static unsigned long long ZIP_CloneDir (const char *Path,const char *PathClone,c FileType = Str_FileIs (FileList[NumFile]->d_name,"url") ? Brw_IS_LINK : // It's a link (URL inside a .url file) Brw_IS_FILE; // It's a file - Hidden = (SeeDocsZone || SeeMarks) ? Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (FileType,PathFileInTree) : - false; + HiddenOrVisible = (SeeDocsZone || + SeeMarks) ? Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (FileType, + PathFileInTree) : + Cns_VISIBLE; - if (!Hidden) // If file/folder is not hidden - { - if (FileType == Brw_IS_FOLDER) // It's a directory - { - FullSize += (unsigned long long) FileStatus.st_size; + if (HiddenOrVisible == Cns_VISIBLE) // If file/folder is visible + switch (FileType) + { + case Brw_IS_FOLDER: + FullSize += (unsigned long long) FileStatus.st_size; - /***** Create clone of subdirectory *****/ - if (mkdir (PathFileClone,(mode_t) 0xFFF)) - Err_ShowErrorAndExit ("Can not create temporary subfolder for compression."); + /***** Create clone of subdirectory *****/ + if (mkdir (PathFileClone,(mode_t) 0xFFF)) + Err_ShowErrorAndExit ("Can not create temporary subfolder for compression."); - /***** Clone subtree starting at this this directory *****/ - FullSize += ZIP_CloneDir (PathFile,PathFileClone,PathFileInTree); - } - else if (FileType == Brw_IS_FILE || - FileType == Brw_IS_LINK) // It's a regular file - { - FullSize += (unsigned long long) FileStatus.st_size; + /***** Clone subtree starting at this this directory *****/ + FullSize += ZIP_CloneDir (PathFile,PathFileClone,PathFileInTree); + break; + case Brw_IS_FILE: + case Brw_IS_LINK: + FullSize += (unsigned long long) FileStatus.st_size; - /***** Create a symbolic link (clone) to original file *****/ - if (symlink (PathFile,PathFileClone) != 0) - Err_ShowErrorAndExit ("Can not create temporary link for compression."); + /***** Create a symbolic link (clone) to original file *****/ + if (symlink (PathFile,PathFileClone) != 0) + Err_ShowErrorAndExit ("Can not create temporary link for compression."); - /***** Update number of my views of this file *****/ - Brw_UpdateMyFileViews (Brw_DB_GetFilCodByPath (PathFileInTree,false)); // Any file, public or not - } - } + /***** Update number of my views of this file *****/ + Brw_UpdateMyFileViews (Brw_DB_GetFilCodByPath (PathFileInTree,false)); // Any file, public or not + break; + default: + break; + } } } else