Version 22.119: Jun 06, 2023 Code refactoring related to hidden-visible.

This commit is contained in:
acanas 2023-06-06 15:16:57 +02:00
parent 31642fe486
commit 6bf4b5f2aa
44 changed files with 692 additions and 518 deletions

View File

@ -2309,8 +2309,8 @@ int swad__getAttendanceEvents (struct soap *soap,
Att_GetEventDataFromRow (row,&Event); Att_GetEventDataFromRow (row,&Event);
getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].attendanceEventCode = (int) Event.AttCod; getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].attendanceEventCode = (int) Event.AttCod;
getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].hidden = Event.Hidden ? 1 : getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].hidden = (Event.HiddenOrVisible == Cns_HIDDEN) ? 1 :
0; 0;
Gbl.Usrs.Other.UsrDat.UsrCod = Event.UsrCod; 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 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? */ /* Is event hidden? */
Event.Hidden = (hidden ? true : Event.HiddenOrVisible = (hidden ? Cns_HIDDEN :
false); Cns_VISIBLE);
/* User's code (really not used) */ /* User's code (really not used) */
Event.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod; Event.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
@ -4703,8 +4703,8 @@ int swad__getDirectoryTree (struct soap *soap,
/* Get directory tree into XML file */ /* Get directory tree into XML file */
XML_WriteStartFile (XML,"tree",false); XML_WriteStartFile (XML,"tree",false);
if (!Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_IS_FOLDER, if (Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_IS_FOLDER,
Gbl.FileBrowser.FilFolLnk.Full)) // If root folder is visible Gbl.FileBrowser.FilFolLnk.Full) == Cns_VISIBLE)
API_ListDir (XML,1, API_ListDir (XML,1,
Gbl.FileBrowser.Priv.PathRootFolder, Gbl.FileBrowser.Priv.PathRootFolder,
Brw_RootFolderInternalNames[Gbl.FileBrowser.Type]); 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 || if (Gbl.FileBrowser.Type == Brw_SHOW_DOC_CRS ||
Gbl.FileBrowser.Type == Brw_SHOW_DOC_GRP) Gbl.FileBrowser.Type == Brw_SHOW_DOC_GRP)
if (Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (FileType, if (Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (FileType,
Gbl.FileBrowser.FilFolLnk.Full)) Gbl.FileBrowser.FilFolLnk.Full) == Cns_HIDDEN)
return false; return false;
/***** XML row *****/ /***** XML row *****/

View File

@ -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}, [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}, [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}, [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}, [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}, [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}, [ActRenBanFul ] = {1142,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,Ban_RenameBannerFull ,Ban_ContEditAfterChgBan ,NULL},

View File

@ -206,9 +206,9 @@ static void Agd_ShowMyAgenda (struct Agd_Agenda *Agenda)
static void Agd_ShowFormToSelPast__FutureEvents (const 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; 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_PAST___EVENTS] = "calendar-minus.svg",
[Agd_FUTURE_EVENTS] = "calendar-plus.svg", [Agd_FUTURE_EVENTS] = "calendar-plus.svg",
@ -247,7 +247,7 @@ static void Agd_ShowFormToSelPrivatPublicEvents (const struct Agd_Agenda *Agenda
{ {
const char *Icon; const char *Icon;
Ico_Color_t Color; Ico_Color_t Color;
} Icon[2] = } Icon[Agd_NUM_PRIVAT_PUBLIC_EVENTS] =
{ {
[Agd_PRIVAT_EVENTS] = {"lock.svg" ,Ico_RED }, [Agd_PRIVAT_EVENTS] = {"lock.svg" ,Ico_RED },
[Agd_PUBLIC_EVENTS] = {"unlock.svg",Ico_GREEN}, [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) static void Agd_ShowFormToSelHiddenVisiblEvents (const struct Agd_Agenda *Agenda)
{ {
extern const char *Txt_AGENDA_HIDDEN_VISIBL_EVENTS[2]; extern const char *Txt_AGENDA_HIDDEN_VISIBLE_EVENTS[Cns_NUM_HIDDEN_VISIBLE];
Agd_HiddenVisiblEvents_t HidVis; Cns_HiddenOrVisible_t HiddenOrVisible;
static const struct static const struct
{ {
const char *Icon; const char *Icon;
Ico_Color_t Color; Ico_Color_t Color;
} Icon[2] = } Icon[Cns_NUM_HIDDEN_VISIBLE] =
{ {
[Agd_HIDDEN_EVENTS] = {"eye-slash.svg",Ico_RED }, [Cns_HIDDEN ] = {"eye-slash.svg",Ico_RED },
[Agd_VISIBL_EVENTS] = {"eye.svg" ,Ico_GREEN}, [Cns_VISIBLE] = {"eye.svg" ,Ico_GREEN},
}; };
Set_BeginOneSettingSelector (); Set_BeginOneSettingSelector ();
for (HidVis = Agd_HIDDEN_EVENTS; for (HiddenOrVisible = Cns_HIDDEN;
HidVis <= Agd_VISIBL_EVENTS; HiddenOrVisible <= Cns_VISIBLE;
HidVis++) HiddenOrVisible++)
{ {
Set_BeginPref ((Agenda->HiddenVisiblEvents & (1 << HidVis))); Set_BeginPref ((Agenda->HiddenVisiblEvents & (1 << HiddenOrVisible)));
Frm_BeginForm (ActSeeMyAgd); Frm_BeginForm (ActSeeMyAgd);
Agd_PutParsMyAgenda (Agenda->Past__FutureEvents, Agd_PutParsMyAgenda (Agenda->Past__FutureEvents,
Agenda->PrivatPublicEvents, Agenda->PrivatPublicEvents,
Agenda->HiddenVisiblEvents ^ (1 << HidVis), // Toggle Agenda->HiddenVisiblEvents ^ (1 << HiddenOrVisible), // Toggle
Agenda->SelectedOrder, Agenda->SelectedOrder,
Agenda->CurrentPage, Agenda->CurrentPage,
-1L); -1L);
Ico_PutSettingIconLink (Icon[HidVis].Icon,Icon[HidVis].Color, Ico_PutSettingIconLink (Icon[HiddenOrVisible].Icon,Icon[HiddenOrVisible].Color,
Txt_AGENDA_HIDDEN_VISIBL_EVENTS[HidVis]); Txt_AGENDA_HIDDEN_VISIBLE_EVENTS[HiddenOrVisible]);
Frm_EndForm (); Frm_EndForm ();
Set_EndPref (); Set_EndPref ();
} }
@ -360,8 +360,8 @@ static unsigned Agd_GetParsHiddenVisiblEvents (void)
{ {
return (unsigned) Par_GetParUnsignedLong (ParHiddenVisiblName, return (unsigned) Par_GetParUnsignedLong (ParHiddenVisiblName,
0, 0,
(1 << Agd_HIDDEN_EVENTS) | (1 << Cns_HIDDEN) |
(1 << Agd_VISIBL_EVENTS), (1 << Cns_VISIBLE),
Agd_DEFAULT_HIDDEN_EVENTS | Agd_DEFAULT_HIDDEN_EVENTS |
Agd_DEFAULT_VISIBL_EVENTS); Agd_DEFAULT_VISIBL_EVENTS);
} }
@ -748,8 +748,17 @@ static void Agd_PutIconsOtherPublicAgenda (void *EncryptedUsrCod)
static void Agd_ShowOneEvent (struct Agd_Agenda *Agenda, static void Agd_ShowOneEvent (struct Agd_Agenda *Agenda,
Agd_AgendaType_t AgendaType,long AgdCod) Agd_AgendaType_t AgendaType,long AgdCod)
{ {
extern const char *Dat_TimeStatusClassVisible[Dat_NUM_TIME_STATUS]; extern const char *Dat_TimeStatusClass[Dat_NUM_TIME_STATUS][Cns_NUM_HIDDEN_VISIBLE];
extern const char *Dat_TimeStatusClassHidden[Dat_NUM_TIME_STATUS]; 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; char *Anchor = NULL;
static unsigned UniqueId = 0; static unsigned UniqueId = 0;
char *Id; char *Id;
@ -788,8 +797,7 @@ static void Agd_ShowOneEvent (struct Agd_Agenda *Agenda,
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
HTM_TD_Begin ("id=\"%s\" class=\"LB %s_%s %s\"", HTM_TD_Begin ("id=\"%s\" class=\"LB %s_%s %s\"",
Id, Id,
AgdEvent.Hidden ? Dat_TimeStatusClassHidden[AgdEvent.TimeStatus] : Dat_TimeStatusClass[AgdEvent.TimeStatus][AgdEvent.HiddenOrVisible],
Dat_TimeStatusClassVisible[AgdEvent.TimeStatus],
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
Dat_WriteLocalDateHMSFromUTC (Id,AgdEvent.TimeUTC[StartEndTime], 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_TD_Begin ("class=\"LT %s\"",The_GetColorRows ());
HTM_ARTICLE_Begin (Anchor); HTM_ARTICLE_Begin (Anchor);
HTM_SPAN_Begin ("class=\"%s_%s\"", HTM_SPAN_Begin ("class=\"%s_%s\"",
AgdEvent.Hidden ? "ASG_TITLE_LIGHT" : TitleClass[AgdEvent.HiddenOrVisible],
"ASG_TITLE",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (AgdEvent.Title); HTM_Txt (AgdEvent.Title);
HTM_SPAN_End (); HTM_SPAN_End ();
@ -814,8 +821,7 @@ static void Agd_ShowOneEvent (struct Agd_Agenda *Agenda,
/* Location */ /* Location */
HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ());
HTM_SPAN_Begin ("class=\"%s_%s\"", HTM_SPAN_Begin ("class=\"%s_%s\"",
AgdEvent.Hidden ? "ASG_TITLE_LIGHT" : TitleClass[AgdEvent.HiddenOrVisible],
"ASG_TITLE",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (AgdEvent.Location); HTM_Txt (AgdEvent.Location);
HTM_SPAN_End (); HTM_SPAN_End ();
@ -842,8 +848,7 @@ static void Agd_ShowOneEvent (struct Agd_Agenda *Agenda,
/* Text of the event */ /* Text of the event */
HTM_TD_Begin ("colspan=\"2\" class=\"LT %s\"",The_GetColorRows ()); HTM_TD_Begin ("colspan=\"2\" class=\"LT %s\"",The_GetColorRows ());
HTM_DIV_Begin ("class=\"PAR %s_%s\"", HTM_DIV_Begin ("class=\"PAR %s_%s\"",
AgdEvent.Hidden ? "DAT_LIGHT" : DataClass[AgdEvent.HiddenOrVisible],
"DAT",
The_GetSuffix ()); The_GetSuffix ());
Agd_DB_GetEventTxt (&AgdEvent,Txt); Agd_DB_GetEventTxt (&AgdEvent,Txt);
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML, 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, struct Agd_Event *AgdEvent,
const char *Anchor) const char *Anchor)
{ {
static Act_Action_t ActionHideUnhide[2] = static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] =
{ {
[false] = ActHidEvtMyAgd, // Visible ==> action to hide [Cns_HIDDEN ] = ActUnhEvtMyAgd, // Hidden ==> action to unhide
[true ] = ActUnhEvtMyAgd, // Hidden ==> action to unhide [Cns_VISIBLE] = ActHidEvtMyAgd, // Visible ==> action to hide
}; };
Agenda->AgdCodToEdit = AgdEvent->AgdCod; // Used as parameter in contextual links 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 *****/ /***** Icon to hide/unhide event *****/
Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor,
Agd_PutCurrentParsMyAgenda,Agenda, Agd_PutCurrentParsMyAgenda,Agenda,
AgdEvent->Hidden); AgdEvent->HiddenOrVisible);
/***** Icon to edit event *****/ /***** Icon to edit event *****/
Ico_PutContextualIconToEdit (ActEdiOneEvtMyAgd,NULL, 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]) /* Get whether the event is public or not (row[1])
and whether it is hidden or not (row[2]) */ and whether it is hidden or not (row[2]) */
AgdEvent->Public = (row[1][0] == 'Y'); 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 */ /* Get start date (row[3]) and end date (row[4]) in UTC time */
AgdEvent->TimeUTC[Dat_STR_TIME] = Dat_GetUNIXTimeFromStr (row[3]); 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 *****/ /***** Clear all event data *****/
AgdEvent->AgdCod = -1L; AgdEvent->AgdCod = -1L;
AgdEvent->Public = false; AgdEvent->Public = false;
AgdEvent->Hidden = false; AgdEvent->HiddenOrVisible = Cns_VISIBLE;
AgdEvent->TimeUTC[Dat_STR_TIME] = AgdEvent->TimeUTC[Dat_STR_TIME] =
AgdEvent->TimeUTC[Dat_END_TIME] = (time_t) 0; AgdEvent->TimeUTC[Dat_END_TIME] = (time_t) 0;
AgdEvent->TimeStatus = Dat_FUTURE; AgdEvent->TimeStatus = Dat_FUTURE;

View File

@ -45,13 +45,14 @@ struct Agd_Event
long AgdCod; long AgdCod;
long UsrCod; long UsrCod;
bool Public; bool Public;
bool Hidden; Cns_HiddenOrVisible_t HiddenOrVisible;
time_t TimeUTC[Dat_NUM_START_END_TIME]; time_t TimeUTC[Dat_NUM_START_END_TIME];
Dat_TimeStatus_t TimeStatus; Dat_TimeStatus_t TimeStatus;
char Title[Agd_MAX_BYTES_EVENT + 1]; char Title[Agd_MAX_BYTES_EVENT + 1];
char Location[Agd_MAX_BYTES_LOCATION + 1]; char Location[Agd_MAX_BYTES_LOCATION + 1];
}; };
#define Agd_NUM_PAST_FUTURE_EVENTS 2
typedef enum typedef enum
{ {
Agd_PAST___EVENTS = 0, // Events until yesterday (included) 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_PAST___EVENTS (0 << Agd_PAST___EVENTS) // off
#define Agd_DEFAULT_FUTURE_EVENTS (1 << Agd_FUTURE_EVENTS) // on #define Agd_DEFAULT_FUTURE_EVENTS (1 << Agd_FUTURE_EVENTS) // on
#define Agd_NUM_PRIVAT_PUBLIC_EVENTS 2
typedef enum typedef enum
{ {
Agd_PRIVAT_EVENTS = 0, Agd_PRIVAT_EVENTS = 0,
@ -68,13 +70,8 @@ typedef enum
#define Agd_DEFAULT_PRIVAT_EVENTS (1 << Agd_PRIVAT_EVENTS) // on #define Agd_DEFAULT_PRIVAT_EVENTS (1 << Agd_PRIVAT_EVENTS) // on
#define Agd_DEFAULT_PUBLIC_EVENTS (1 << Agd_PUBLIC_EVENTS) // on #define Agd_DEFAULT_PUBLIC_EVENTS (1 << Agd_PUBLIC_EVENTS) // on
typedef enum #define Agd_DEFAULT_HIDDEN_EVENTS (0 << Cns_HIDDEN) // off
{ #define Agd_DEFAULT_VISIBL_EVENTS (1 << Cns_VISIBLE) // on
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_ORDER_DEFAULT Dat_STR_TIME #define Agd_ORDER_DEFAULT Dat_STR_TIME

View File

@ -116,11 +116,11 @@ unsigned Agd_DB_GetListEvents (MYSQL_RES **mysql_res,
} }
switch (Agenda->HiddenVisiblEvents) switch (Agenda->HiddenVisiblEvents)
{ {
case (1 << Agd_HIDDEN_EVENTS): case (1 << Cns_HIDDEN):
Str_Copy (HiddenVisiblEventsSubQuery," AND Hidden='Y'", Str_Copy (HiddenVisiblEventsSubQuery," AND Hidden='Y'",
sizeof (HiddenVisiblEventsSubQuery) - 1); // Hidden events sizeof (HiddenVisiblEventsSubQuery) - 1); // Hidden events
break; break;
case (1 << Agd_VISIBL_EVENTS): case (1 << Cns_VISIBLE):
Str_Copy (HiddenVisiblEventsSubQuery," AND Hidden='N'", Str_Copy (HiddenVisiblEventsSubQuery," AND Hidden='N'",
sizeof (HiddenVisiblEventsSubQuery) - 1); // Visible events sizeof (HiddenVisiblEventsSubQuery) - 1); // Visible events
break; break;

View File

@ -216,10 +216,10 @@ static void Ann_DrawAnAnnouncement (struct Ann_Announcement *Announcement,
[Ann_ACTIVE_ANNOUNCEMENT ] = "NOTICE_BOX NOTICE_BOX_WIDE", [Ann_ACTIVE_ANNOUNCEMENT ] = "NOTICE_BOX NOTICE_BOX_WIDE",
[Ann_OBSOLETE_ANNOUNCEMENT] = "NOTICE_BOX NOTICE_BOX_WIDE LIGHT", [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 [Cns_HIDDEN ] = ActUnhAnn, // Hidden ==> action to unhide
[true ] = ActUnhAnn, // Hidden ==> action to unhide [Cns_VISIBLE] = ActHidAnn, // Visible ==> action to hide
}; };
Rol_Role_t Role; Rol_Role_t Role;
bool SomeRolesAreSelected; bool SomeRolesAreSelected;
@ -236,7 +236,8 @@ static void Ann_DrawAnAnnouncement (struct Ann_Announcement *Announcement,
/***** Icon to hide/unhide the announcement *****/ /***** Icon to hide/unhide the announcement *****/
Ico_PutContextualIconToHideUnhide (ActionHideUnhide,NULL, // TODO: Put anchor Ico_PutContextualIconToHideUnhide (ActionHideUnhide,NULL, // TODO: Put anchor
Ann_PutParAnnCod,&Announcement->AnnCod, Ann_PutParAnnCod,&Announcement->AnnCod,
Announcement->Status == Ann_OBSOLETE_ANNOUNCEMENT); (Announcement->Status == Ann_OBSOLETE_ANNOUNCEMENT) ? Cns_HIDDEN :
Cns_VISIBLE);
} }
/***** Write the subject of the announcement *****/ /***** Write the subject of the announcement *****/

View File

@ -467,6 +467,16 @@ static void Asg_ShowAssignmentRow (struct Asg_Assignments *Assignments,
bool PrintView) bool PrintView)
{ {
extern const char *Txt_Actions[ActLst_NUM_ACTIONS]; 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; char *Anchor = NULL;
static unsigned UniqueId = 0; static unsigned UniqueId = 0;
char *Id; char *Id;
@ -500,18 +510,18 @@ static void Asg_ShowAssignmentRow (struct Asg_Assignments *Assignments,
if (PrintView) if (PrintView)
HTM_TD_Begin ("id=\"%s\" class=\"LB %s_%s\"", HTM_TD_Begin ("id=\"%s\" class=\"LB %s_%s\"",
Id, Id,
Assignments->Asg.Hidden ? (Assignments->Asg.Open ? "DATE_GREEN_LIGHT" : Assignments->Asg.HiddenOrVisible == Cns_HIDDEN ? (Assignments->Asg.Open ? "DATE_GREEN_LIGHT" :
"DATE_RED_LIGHT") : "DATE_RED_LIGHT") :
(Assignments->Asg.Open ? "DATE_GREEN" : (Assignments->Asg.Open ? "DATE_GREEN" :
"DATE_RED"), "DATE_RED"),
The_GetSuffix ()); The_GetSuffix ());
else else
HTM_TD_Begin ("id=\"%s\" class=\"LB %s_%s %s\"", HTM_TD_Begin ("id=\"%s\" class=\"LB %s_%s %s\"",
Id, Id,
Assignments->Asg.Hidden ? (Assignments->Asg.Open ? "DATE_GREEN_LIGHT" : Assignments->Asg.HiddenOrVisible == Cns_HIDDEN ? (Assignments->Asg.Open ? "DATE_GREEN_LIGHT" :
"DATE_RED_LIGHT") : "DATE_RED_LIGHT") :
(Assignments->Asg.Open ? "DATE_GREEN" : (Assignments->Asg.Open ? "DATE_GREEN" :
"DATE_RED"), "DATE_RED"),
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
Dat_WriteLocalDateHMSFromUTC (Id,Assignments->Asg.TimeUTC[StartEndTime], Dat_WriteLocalDateHMSFromUTC (Id,Assignments->Asg.TimeUTC[StartEndTime],
@ -532,8 +542,7 @@ static void Asg_ShowAssignmentRow (struct Asg_Assignments *Assignments,
Asg_PutPars (Assignments); Asg_PutPars (Assignments);
HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeOneAsg], HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeOneAsg],
"class=\"LT BT_LINK %s_%s\"", "class=\"LT BT_LINK %s_%s\"",
Assignments->Asg.Hidden ? "ASG_TITLE_LIGHT" : TitleClass[Assignments->Asg.HiddenOrVisible],
"ASG_TITLE",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Assignments->Asg.Title); HTM_Txt (Assignments->Asg.Title);
HTM_BUTTON_End (); HTM_BUTTON_End ();
@ -581,8 +590,7 @@ static void Asg_ShowAssignmentRow (struct Asg_Assignments *Assignments,
Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (&Assignments->Asg); Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (&Assignments->Asg);
HTM_DIV_Begin ("class=\"PAR %s_%s\"", HTM_DIV_Begin ("class=\"PAR %s_%s\"",
Assignments->Asg.Hidden ? "DAT_LIGHT" : DataClass[Assignments->Asg.HiddenOrVisible],
"DAT",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Txt); HTM_Txt (Txt);
HTM_DIV_End (); HTM_DIV_End ();
@ -604,7 +612,7 @@ static void Asg_ShowAssignmentRow (struct Asg_Assignments *Assignments,
static void Asg_WriteAsgAuthor (struct Asg_Assignment *Asg) 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; extern const char *Txt_Folder;
Act_Action_t NextAction; Act_Action_t NextAction;
bool ICanSendFiles = !Asg->Hidden && // It's visible (not hidden) bool ICanSendFiles = Asg->HiddenOrVisible == Cns_VISIBLE && // It's visible (not hidden)
Asg->Open && // It's open (inside dates) Asg->Open && // It's open (inside dates)
Asg->IBelongToCrsOrGrps; // I belong to course or groups Asg->IBelongToCrsOrGrps; // I belong to course or groups
/***** Folder icon *****/ /***** Folder icon *****/
if (!PrintView && // Not print view if (!PrintView && // Not print view
@ -702,10 +710,10 @@ Dat_StartEndTime_t Asg_GetParAsgOrder (void)
static void Asg_PutIconsToRemEditOneAsg (struct Asg_Assignments *Assignments, static void Asg_PutIconsToRemEditOneAsg (struct Asg_Assignments *Assignments,
const char *Anchor) const char *Anchor)
{ {
static Act_Action_t ActionHideUnhide[2] = static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] =
{ {
[false] = ActHidAsg, // Visible ==> action to hide [Cns_HIDDEN ] = ActUnhAsg, // Hidden ==> action to unhide
[true ] = ActUnhAsg, // Hidden ==> action to unhide [Cns_VISIBLE] = ActHidAsg, // Visible ==> action to hide
}; };
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
@ -719,7 +727,7 @@ static void Asg_PutIconsToRemEditOneAsg (struct Asg_Assignments *Assignments,
/***** Icon to hide/unhide assignment *****/ /***** Icon to hide/unhide assignment *****/
Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor,
Asg_PutPars,Assignments, Asg_PutPars,Assignments,
Assignments->Asg.Hidden); Assignments->Asg.HiddenOrVisible);
/***** Icon to edit assignment *****/ /***** Icon to edit assignment *****/
Ico_PutContextualIconToEdit (ActEdiOneAsg,NULL, Ico_PutContextualIconToEdit (ActEdiOneAsg,NULL,
@ -881,7 +889,8 @@ static void Asg_GetAssignmentDataFromRow (MYSQL_RES **mysql_res,
Asg->AsgCod = Str_ConvertStrCodToLongCod (row[0]); Asg->AsgCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get whether the assignment is hidden or not (row[1]) */ /* 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]) */ /* Get author of the assignment (row[2]) */
Asg->UsrCod = Str_ConvertStrCodToLongCod (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 if (Asg->AsgCod <= 0) // If > 0 ==> keep value
Asg->AsgCod = -1L; Asg->AsgCod = -1L;
Asg->AsgCod = -1L; Asg->AsgCod = -1L;
Asg->Hidden = false; Asg->HiddenOrVisible = Cns_VISIBLE;
Asg->UsrCod = -1L; Asg->UsrCod = -1L;
Asg->TimeUTC[Dat_STR_TIME] = Asg->TimeUTC[Dat_STR_TIME] =
Asg->TimeUTC[Dat_END_TIME] = (time_t) 0; 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_Groups;
extern const char *Txt_and; extern const char *Txt_and;
extern const char *Txt_The_whole_course; 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_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumGrps; unsigned NumGrps;
@ -1565,8 +1579,7 @@ static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Asg_Assignment *As
/***** Write heading *****/ /***** Write heading *****/
HTM_DIV_Begin ("class=\"%s_%s\"", HTM_DIV_Begin ("class=\"%s_%s\"",
Asg->Hidden ? "ASG_GRP_LIGHT" : GroupClass[Asg->HiddenOrVisible],
"ASG_GRP",
The_GetSuffix ()); The_GetSuffix ());
HTM_TxtColonNBSP (NumGrps == 1 ? Txt_Group : HTM_TxtColonNBSP (NumGrps == 1 ? Txt_Group :

View File

@ -49,7 +49,7 @@ typedef enum
struct Asg_Assignment struct Asg_Assignment
{ {
long AsgCod; long AsgCod;
bool Hidden; Cns_HiddenOrVisible_t HiddenOrVisible;
long UsrCod; long UsrCod;
time_t TimeUTC[Dat_NUM_START_END_TIME]; time_t TimeUTC[Dat_NUM_START_END_TIME];
bool Open; bool Open;

View File

@ -427,6 +427,16 @@ static void Att_ShowOneEventRow (struct Att_Events *Events,
bool ShowOnlyThisAttEventComplete) bool ShowOnlyThisAttEventComplete)
{ {
extern const char *Txt_View_event; 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; char *Anchor = NULL;
static unsigned UniqueId = 0; static unsigned UniqueId = 0;
char *Id; char *Id;
@ -459,18 +469,18 @@ static void Att_ShowOneEventRow (struct Att_Events *Events,
if (ShowOnlyThisAttEventComplete) if (ShowOnlyThisAttEventComplete)
HTM_TD_Begin ("id=\"%s\" class=\"LB %s_%s\"", HTM_TD_Begin ("id=\"%s\" class=\"LB %s_%s\"",
Id, Id,
Events->Event.Hidden ? (Events->Event.Open ? "DATE_GREEN_LIGHT" : Events->Event.HiddenOrVisible == Cns_HIDDEN ? (Events->Event.Open ? "DATE_GREEN_LIGHT" :
"DATE_RED_LIGHT") : "DATE_RED_LIGHT") :
(Events->Event.Open ? "DATE_GREEN" : (Events->Event.Open ? "DATE_GREEN" :
"DATE_RED"), "DATE_RED"),
The_GetSuffix ()); The_GetSuffix ());
else else
HTM_TD_Begin ("id=\"%s\" class=\"LB %s_%s %s\"", HTM_TD_Begin ("id=\"%s\" class=\"LB %s_%s %s\"",
Id, Id,
Events->Event.Hidden ? (Events->Event.Open ? "DATE_GREEN_LIGHT" : Events->Event.HiddenOrVisible == Cns_HIDDEN ? (Events->Event.Open ? "DATE_GREEN_LIGHT" :
"DATE_RED_LIGHT") : "DATE_RED_LIGHT") :
(Events->Event.Open ? "DATE_GREEN" : (Events->Event.Open ? "DATE_GREEN" :
"DATE_RED"), "DATE_RED"),
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
Dat_WriteLocalDateHMSFromUTC (Id,Events->Event.TimeUTC[StartEndTime], Dat_WriteLocalDateHMSFromUTC (Id,Events->Event.TimeUTC[StartEndTime],
@ -496,8 +506,7 @@ static void Att_ShowOneEventRow (struct Att_Events *Events,
else else
HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ());
HTM_SPAN_Begin ("class=\"%s_%s\"", HTM_SPAN_Begin ("class=\"%s_%s\"",
Events->Event.Hidden ? "ASG_TITLE_LIGHT" : TitleClass[Events->Event.HiddenOrVisible],
"ASG_TITLE",
The_GetSuffix ()); The_GetSuffix ());
HTM_Unsigned (Events->Event.NumStdsTotal); HTM_Unsigned (Events->Event.NumStdsTotal);
HTM_SPAN_End (); HTM_SPAN_End ();
@ -529,8 +538,7 @@ static void Att_ShowOneEventRow (struct Att_Events *Events,
Att_GetAndWriteNamesOfGrpsAssociatedToEvent (&Events->Event); Att_GetAndWriteNamesOfGrpsAssociatedToEvent (&Events->Event);
HTM_DIV_Begin ("class=\"%s_%s\"", HTM_DIV_Begin ("class=\"%s_%s\"",
Events->Event.Hidden ? "DAT_LIGHT" : DataClass[Events->Event.HiddenOrVisible],
"DAT",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Description); HTM_Txt (Description);
HTM_DIV_End (); HTM_DIV_End ();
@ -549,7 +557,7 @@ static void Att_ShowOneEventRow (struct Att_Events *Events,
static void Att_WriteEventAuthor (struct Att_Event *Event) 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, static void Att_PutFormsToRemEditOneEvent (struct Att_Events *Events,
const char *Anchor) const char *Anchor)
{ {
static Act_Action_t ActionHideUnhide[2] = static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] =
{ {
[false] = ActHidAtt, // Visible ==> action to hide [Cns_HIDDEN ] = ActUnhAtt, // Hidden ==> action to unhide
[true ] = ActUnhAtt, // Hidden ==> action to unhide [Cns_VISIBLE] = ActHidAtt, // Visible ==> action to hide
}; };
if (Att_CheckIfICanEditEvents ()) if (Att_CheckIfICanEditEvents ())
@ -587,7 +595,7 @@ static void Att_PutFormsToRemEditOneEvent (struct Att_Events *Events,
/***** Icon to hide/unhide attendance event *****/ /***** Icon to hide/unhide attendance event *****/
Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor,
Att_PutPars,Events, Att_PutPars,Events,
Events->Event.Hidden); Events->Event.HiddenOrVisible);
/***** Icon to edit attendance event *****/ /***** Icon to edit attendance event *****/
Ico_PutContextualIconToEdit (ActEdiOneAtt,NULL, Ico_PutContextualIconToEdit (ActEdiOneAtt,NULL,
@ -743,7 +751,7 @@ static void Att_ResetEvent (struct Att_Event *Event)
Event->NumStdsTotal = 0; Event->NumStdsTotal = 0;
} }
Event->CrsCod = -1L; Event->CrsCod = -1L;
Event->Hidden = false; Event->HiddenOrVisible = Cns_VISIBLE;
Event->UsrCod = -1L; Event->UsrCod = -1L;
Event->TimeUTC[Dat_STR_TIME] = Event->TimeUTC[Dat_STR_TIME] =
Event->TimeUTC[Dat_END_TIME] = (time_t) 0; 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]); Event->CrsCod = Str_ConvertStrCodToLongCod (row[1]);
/***** Get whether the attendance event is hidden or not (row[2]) *****/ /***** 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]) *****/ /***** Get author of the attendance event (row[3]) *****/
Event->UsrCod = Str_ConvertStrCodToLongCod (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 */ /* Get data of the old (current) attendance event from database */
OldAtt.AttCod = ReceivedAtt.AttCod; OldAtt.AttCod = ReceivedAtt.AttCod;
Att_GetEventDataByCodAndCheckCrs (&OldAtt); Att_GetEventDataByCodAndCheckCrs (&OldAtt);
ReceivedAtt.Hidden = OldAtt.Hidden; ReceivedAtt.HiddenOrVisible = OldAtt.HiddenOrVisible;
} }
/***** Get start/end date-times *****/ /***** Get start/end date-times *****/
@ -1215,7 +1224,7 @@ void Att_ReceiveFormEvent (void)
if (ItsANewAttEvent) 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 Att_CreateEvent (&ReceivedAtt,Description); // Add new attendance event to database
/***** Write success message *****/ /***** Write success message *****/
@ -1297,6 +1306,11 @@ static void Att_GetAndWriteNamesOfGrpsAssociatedToEvent (struct Att_Event *Event
extern const char *Txt_Groups; extern const char *Txt_Groups;
extern const char *Txt_and; extern const char *Txt_and;
extern const char *Txt_The_whole_course; 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_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumGrps; unsigned NumGrps;
@ -1307,8 +1321,7 @@ static void Att_GetAndWriteNamesOfGrpsAssociatedToEvent (struct Att_Event *Event
/***** Begin container *****/ /***** Begin container *****/
HTM_DIV_Begin ("class=\"%s_%s\"", HTM_DIV_Begin ("class=\"%s_%s\"",
Event->Hidden ? "ASG_GRP_LIGHT" : GroupClass[Event->HiddenOrVisible],
"ASG_GRP",
The_GetSuffix ()); The_GetSuffix ());
/***** Write heading *****/ /***** Write heading *****/
@ -1832,6 +1845,12 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
static void Att_PutLinkEvent (struct Att_Event *Event, static void Att_PutLinkEvent (struct Att_Event *Event,
const char *Title,const char *Txt) 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 *****/ /***** Begin form *****/
Frm_BeginForm (ActSeeOneAtt); Frm_BeginForm (ActSeeOneAtt);
ParCod_PutPar (ParCod_Att,Event->AttCod); ParCod_PutPar (ParCod_Att,Event->AttCod);
@ -1839,8 +1858,7 @@ static void Att_PutLinkEvent (struct Att_Event *Event,
/***** Link to view attendance event *****/ /***** Link to view attendance event *****/
HTM_BUTTON_Submit_Begin (Title,"class=\"LT BT_LINK %s_%s\"", HTM_BUTTON_Submit_Begin (Title,"class=\"LT BT_LINK %s_%s\"",
Event->Hidden ? "ASG_TITLE_LIGHT" : TitleClass[Event->HiddenOrVisible],
"ASG_TITLE",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Txt); HTM_Txt (Txt);
HTM_BUTTON_End (); HTM_BUTTON_End ();

View File

@ -51,7 +51,7 @@ struct Att_Event
/* Fields stored in database */ /* Fields stored in database */
long AttCod; long AttCod;
long CrsCod; long CrsCod;
bool Hidden; Cns_HiddenOrVisible_t HiddenOrVisible;
long UsrCod; long UsrCod;
time_t TimeUTC[Dat_NUM_START_END_TIME]; time_t TimeUTC[Dat_NUM_START_END_TIME];
bool Open; bool Open;

View File

@ -254,8 +254,8 @@ long Att_DB_CreateEvent (const struct Att_Event *Event,const char *Description)
"FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld)," "FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld),"
"'%c','%s','%s')", "'%c','%s','%s')",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
Event->Hidden ? 'Y' : Event->HiddenOrVisible == Cns_HIDDEN ? 'Y' :
'N', 'N',
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
Event->TimeUTC[Dat_STR_TIME], Event->TimeUTC[Dat_STR_TIME],
Event->TimeUTC[Dat_END_TIME], Event->TimeUTC[Dat_END_TIME],
@ -281,8 +281,8 @@ void Att_DB_UpdateEvent (const struct Att_Event *Event,const char *Description)
"Txt='%s'" "Txt='%s'"
" WHERE AttCod=%ld" " WHERE AttCod=%ld"
" AND CrsCod=%ld", // Extra check " AND CrsCod=%ld", // Extra check
Event->Hidden ? 'Y' : Event->HiddenOrVisible == Cns_HIDDEN ? 'Y' :
'N', 'N',
Event->TimeUTC[Dat_STR_TIME], Event->TimeUTC[Dat_STR_TIME],
Event->TimeUTC[Dat_END_TIME], Event->TimeUTC[Dat_END_TIME],
Event->CommentTchVisible ? 'Y' : Event->CommentTchVisible ? 'Y' :

View File

@ -93,7 +93,8 @@ static void Ban_PutIconsEditingBanners (__attribute__((unused)) void *Args);
static void Ban_ListBannersForEdition (struct Ban_Banners *Banners); static void Ban_ListBannersForEdition (struct Ban_Banners *Banners);
static void Ban_PutParBanCod (void *BanCod); 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, static void Ban_RenameBanner (struct Ban_Banner *Ban,
Cns_ShrtOrFullName_t ShrtOrFullName); Cns_ShrtOrFullName_t ShrtOrFullName);
@ -293,7 +294,7 @@ void Ban_GetBannerDataByCod (struct Ban_Banner *Ban)
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
/***** Clear data *****/ /***** Clear data *****/
Ban->Hidden = false; Ban->HiddenOrVisible = Cns_VISIBLE;
Ban->ShrtName[0] = Ban->FullName[0] = Ban->Img[0] = Ban->WWW[0] = '\0'; Ban->ShrtName[0] = Ban->FullName[0] = Ban->Img[0] = Ban->WWW[0] = '\0';
/***** Check if banner code is correct *****/ /***** Check if banner code is correct *****/
@ -340,7 +341,8 @@ static void Ban_GetBannerDataFromRow (MYSQL_RES *mysql_res,
Err_WrongBannerExit (); Err_WrongBannerExit ();
/***** Get if the banner is hidden (row[1]) *****/ /***** 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]), /***** Get short name (row[2]), full name (row[3]),
image (row[4]) and URL (row[5]) of the banner *****/ 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 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 [Cns_HIDDEN ] = ActUnhBan, // Hidden ==> action to unhide
[true ] = 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; unsigned NumBan;
struct Ban_Banner *Ban; struct Ban_Banner *Ban;
@ -422,13 +429,12 @@ static void Ban_ListBannersForEdition (struct Ban_Banners *Banners)
Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor,
Ban_PutParBanCod, Ban_PutParBanCod,
&Banners->BanCodToEdit, &Banners->BanCodToEdit,
Ban->Hidden); Ban->HiddenOrVisible);
HTM_TD_End (); HTM_TD_End ();
/* Banner code */ /* Banner code */
HTM_TD_Begin ("class=\"RM %s_%s\"", HTM_TD_Begin ("class=\"RM %s_%s\"",
Ban->Hidden ? "DAT_LIGHT" : DataClass[Ban->HiddenOrVisible],
"DAT",
The_GetSuffix ()); The_GetSuffix ());
HTM_ARTICLE_Begin (Anchor); HTM_ARTICLE_Begin (Anchor);
HTM_Long (Ban->BanCod); 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 (); struct Ban_Banner *Ban = Ban_GetEditingBanner ();
@ -538,7 +544,7 @@ void Ban_ShowBanner (void)
Ban_ResetBanner (Ban); Ban_ResetBanner (Ban);
/***** Set banner as visible *****/ /***** Set banner as visible *****/
Ban_ShowOrHideBanner (Ban,false); Ban_ShowOrHideBanner (Ban,Cns_VISIBLE);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -553,14 +559,15 @@ void Ban_HideBanner (void)
Ban_ResetBanner (Ban); Ban_ResetBanner (Ban);
/***** Set banner as hidden *****/ /***** Set banner as hidden *****/
Ban_ShowOrHideBanner (Ban,true); Ban_ShowOrHideBanner (Ban,Cns_HIDDEN);
} }
/*****************************************************************************/ /*****************************************************************************/
/*************** Change hiddeness of banner in the database ******************/ /*************** 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 *****/ /***** Get banner code *****/
Ban->BanCod = ParCod_GetAndCheckPar (ParCod_Ban); Ban->BanCod = ParCod_GetAndCheckPar (ParCod_Ban);
@ -569,8 +576,8 @@ static void Ban_ShowOrHideBanner (struct Ban_Banner *Ban,bool Hide)
Ban_GetBannerDataByCod (Ban); Ban_GetBannerDataByCod (Ban);
/***** Mark file as hidden/visible in database *****/ /***** Mark file as hidden/visible in database *****/
if (Ban->Hidden != Hide) if (Ban->HiddenOrVisible != HiddenOrVisible)
Ban_DB_HideOrUnhideBanner (Ban->BanCod,Hide); Ban_DB_HideOrUnhideBanner (Ban->BanCod,HiddenOrVisible);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1033,7 +1040,7 @@ static void Ban_ResetBanner (struct Ban_Banner *Ban)
{ {
/***** Reset banner *****/ /***** Reset banner *****/
Ban->BanCod = -1L; Ban->BanCod = -1L;
Ban->Hidden = true; Ban->HiddenOrVisible = Cns_HIDDEN;
Ban->ShrtName[0] = '\0'; Ban->ShrtName[0] = '\0';
Ban->FullName[0] = '\0'; Ban->FullName[0] = '\0';
Ban->Img[0] = '\0'; Ban->Img[0] = '\0';

View File

@ -45,7 +45,7 @@
struct Ban_Banner struct Ban_Banner
{ {
long BanCod; long BanCod;
bool Hidden; Cns_HiddenOrVisible_t HiddenOrVisible;
char ShrtName[Ban_MAX_BYTES_SHRT_NAME + 1]; char ShrtName[Ban_MAX_BYTES_SHRT_NAME + 1];
char FullName[Ban_MAX_BYTES_FULL_NAME + 1]; char FullName[Ban_MAX_BYTES_FULL_NAME + 1];
char Img[Ban_MAX_BYTES_IMAGE + 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_GetBannerDataByCod (struct Ban_Banner *Ban);
void Ban_RemoveBanner (void); void Ban_RemoveBanner (void);
void Ban_ShowBanner (void); void Ban_UnhideBanner (void);
void Ban_HideBanner (void); void Ban_HideBanner (void);
void Ban_RenameBannerShort (void); void Ban_RenameBannerShort (void);
void Ban_RenameBannerFull (void); void Ban_RenameBannerFull (void);

View File

@ -156,14 +156,14 @@ void Ban_DB_CreateBanner (const struct Ban_Banner *Ban)
/**************************** Hide/unhide a banner ***************************/ /**************************** 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", DB_QueryUPDATE ("can not hide/unhide banner",
"UPDATE ban_banners" "UPDATE ban_banners"
" SET Hidden='%c'" " SET Hidden='%c'"
" WHERE BanCod=%ld", " WHERE BanCod=%ld",
Hide ? 'Y' : HiddenOrVisible == Cns_HIDDEN ? 'Y' :
'N', 'N',
BanCod); BanCod);
} }

View File

@ -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); bool Ban_DB_CheckIfBannerNameExists (const char *FldName,const char *Name,long BanCod);
void Ban_DB_CreateBanner (const struct Ban_Banner *Ban); 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, void Ban_DB_UpdateBanName (long BanCod,const char *FldName,
const char *NewBanName); const char *NewBanName);
void Ban_DB_UpdateBanImg (long BanCod, void Ban_DB_UpdateBanImg (long BanCod,

View File

@ -354,39 +354,6 @@ static const Act_Action_t Brw_ActChgZone[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActUnk, [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] = static const Act_Action_t Brw_ActReqDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
@ -1110,20 +1077,21 @@ static void Brw_IndentAndWriteIconExpandContract (unsigned Level,
Brw_IconTree_t IconThisRow); Brw_IconTree_t IconThisRow);
static void Brw_IndentDependingOnLevel (unsigned Level); static void Brw_IndentDependingOnLevel (unsigned Level);
static void Brw_PutIconToExpandFolder (const char *FileBrowserId,const char *RowId, 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, 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 bool Brw_CheckIfAnyHigherLevelIsHidden (unsigned CurrentLevel);
static void Brw_PutIconFolder (unsigned Level, static void Brw_PutIconFolder (unsigned Level,
const char *FileBrowserId,const char *RowId, const char *FileBrowserId,const char *RowId,
Brw_IconTree_t IconSubtree); Brw_IconTree_t IconSubtree);
static void Brw_PutIconFolderWithoutPlus (const char *FileBrowserId,const char *RowId, 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, 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_PutIconNewFileOrFolder (void);
static void Brw_PutIconFileWithLinkToViewMetadata (const struct Brw_FileMetadata *FileMetadata); 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) Brw_IconTree_t IconThisRow)
{ {
char *Anchor; char *Anchor;
bool RowSetAsHidden = false; Cns_HiddenOrVisible_t HiddenOrVisible = Cns_VISIBLE;
bool RowSetAsPublic = false; bool RowSetAsPublic = false;
bool LightStyle = false; bool LightStyle = false;
bool IsRecent = false; bool IsRecent = false;
@ -4075,18 +4043,23 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
if (SeeDocsZone || AdminDocsZone || if (SeeDocsZone || AdminDocsZone ||
SeeMarks || AdminMarks) SeeMarks || AdminMarks)
{ {
RowSetAsHidden = Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Gbl.FileBrowser.FilFolLnk.Type, HiddenOrVisible = Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Gbl.FileBrowser.FilFolLnk.Type,
Gbl.FileBrowser.FilFolLnk.Full); Gbl.FileBrowser.FilFolLnk.Full);
if (RowSetAsHidden && Level && (SeeDocsZone || SeeMarks)) if (HiddenOrVisible == Cns_HIDDEN && Level && (SeeDocsZone || SeeMarks))
return false; return false;
if (AdminDocsZone || AdminMarks) if (AdminDocsZone || AdminMarks)
{ {
if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER) if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER)
Gbl.FileBrowser.HiddenLevels[Level] = RowSetAsHidden; Gbl.FileBrowser.HiddenLevels[Level] = (HiddenOrVisible == Cns_HIDDEN);
if (RowSetAsHidden) // this row is marked as hidden switch (HiddenOrVisible)
LightStyle = true; {
else // this row is not marked as hidden case Cns_HIDDEN: // this row is marked as hidden
LightStyle = Brw_CheckIfAnyHigherLevelIsHidden (Level); 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 */ /* Put icon to hide/unhide file or folder */
if (AdminDocsZone || AdminMarks) if (AdminDocsZone || AdminMarks)
Brw_PutIconHideUnhide (Anchor,RowSetAsHidden); Brw_PutIconHideUnhide (Anchor,HiddenOrVisible);
/***** File or folder icon *****/ /***** File or folder icon *****/
switch (Gbl.FileBrowser.FilFolLnk.Type) 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 ()); HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ());
if (Gbl.Usrs.Me.Role.Logged >= Rol_STD && // Only ZIP folders if I am student, teacher... if (Gbl.Usrs.Me.Role.Logged >= Rol_STD && // Only ZIP folders if I am student, teacher...
!SeeMarks && // Do not ZIP folders when seeing marks !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 (); Brw_PutButtonToDownloadZIPOfAFolder ();
HTM_TD_End (); HTM_TD_End ();
} }
@ -4280,7 +4253,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
The_ChangeRowColor (); The_ChangeRowColor ();
if (RowSetAsHidden && (SeeDocsZone || SeeMarks)) if (HiddenOrVisible == Cns_HIDDEN && (SeeDocsZone || SeeMarks))
return false; return false;
return true; return true;
} }
@ -4449,20 +4422,20 @@ static void Brw_IndentAndWriteIconExpandContract (unsigned Level,
case Brw_ICON_TREE_EXPAND: case Brw_ICON_TREE_EXPAND:
/***** Visible icon to expand folder *****/ /***** Visible icon to expand folder *****/
Brw_PutIconToExpandFolder (FileBrowserId,RowId, Brw_PutIconToExpandFolder (FileBrowserId,RowId,
false); // Visible Cns_VISIBLE);
/***** Hidden icon to contract folder *****/ /***** Hidden icon to contract folder *****/
Brw_PutIconToContractFolder (FileBrowserId,RowId, Brw_PutIconToContractFolder (FileBrowserId,RowId,
true); // Hidden Cns_HIDDEN);
break; break;
case Brw_ICON_TREE_CONTRACT: case Brw_ICON_TREE_CONTRACT:
/***** Hidden icon to expand folder *****/ /***** Hidden icon to expand folder *****/
Brw_PutIconToExpandFolder (FileBrowserId,RowId, Brw_PutIconToExpandFolder (FileBrowserId,RowId,
true); // Hidden Cns_HIDDEN);
/***** Visible icon to contract folder *****/ /***** Visible icon to contract folder *****/
Brw_PutIconToContractFolder (FileBrowserId,RowId, Brw_PutIconToContractFolder (FileBrowserId,RowId,
false); // Visible Cns_VISIBLE);
break; break;
} }
HTM_TD_End (); HTM_TD_End ();
@ -4495,17 +4468,22 @@ static void Brw_IndentDependingOnLevel (unsigned Level)
/*****************************************************************************/ /*****************************************************************************/
static void Brw_PutIconToExpandFolder (const char *FileBrowserId,const char *RowId, static void Brw_PutIconToExpandFolder (const char *FileBrowserId,const char *RowId,
bool Hidden) Cns_HiddenOrVisible_t HiddenOrVisible)
{ {
char JavaScriptFuncToExpandFolder[256 + Brw_MAX_ROW_ID]; char JavaScriptFuncToExpandFolder[256 + Brw_MAX_ROW_ID];
/***** Begin container *****/ /***** Begin container *****/
if (Hidden) switch (HiddenOrVisible)
HTM_DIV_Begin ("id=\"expand_%s_%s\" style=\"display:none;\"", {
FileBrowserId,RowId); case Cns_HIDDEN:
else HTM_DIV_Begin ("id=\"expand_%s_%s\" class=\"NOT_SHOWN\"",
HTM_DIV_Begin ("id=\"expand_%s_%s\"", FileBrowserId,RowId);
FileBrowserId,RowId); break;
case Cns_VISIBLE:
HTM_DIV_Begin ("id=\"expand_%s_%s\"",
FileBrowserId,RowId);
break;
}
/***** Form and icon *****/ /***** Form and icon *****/
snprintf (JavaScriptFuncToExpandFolder,sizeof (JavaScriptFuncToExpandFolder), 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, static void Brw_PutIconToContractFolder (const char *FileBrowserId,const char *RowId,
bool Hidden) Cns_HiddenOrVisible_t HiddenOrVisible)
{ {
char JavaScriptFuncToContractFolder[256 + Brw_MAX_ROW_ID]; char JavaScriptFuncToContractFolder[256 + Brw_MAX_ROW_ID];
/***** Begin container *****/ /***** Begin container *****/
if (Hidden) switch (HiddenOrVisible)
HTM_DIV_Begin ("id=\"contract_%s_%s\" style=\"display:none;\"", {
FileBrowserId,RowId); case Cns_HIDDEN:
else HTM_DIV_Begin ("id=\"contract_%s_%s\" style=\"display:none;\"",
HTM_DIV_Begin ("id=\"contract_%s_%s\"", FileBrowserId,RowId);
FileBrowserId,RowId); break;
case Cns_VISIBLE:
HTM_DIV_Begin ("id=\"contract_%s_%s\"",
FileBrowserId,RowId);
break;
}
/***** Form and icon *****/ /***** Form and icon *****/
snprintf (JavaScriptFuncToContractFolder,sizeof (JavaScriptFuncToContractFolder), 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 ***************/ /************* 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 ()); HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ());
Ico_PutContextualIconToHideUnhide (Brw_ActHideUnhide[Gbl.FileBrowser.Type],Anchor, Ico_PutContextualIconToHideUnhide (Brw_ActHideUnhide[Gbl.FileBrowser.Type],Anchor,
Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk, Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk,
RowSetAsHidden); HiddenOrVisible);
HTM_TD_End (); HTM_TD_End ();
} }
@ -4634,24 +4651,24 @@ static void Brw_PutIconFolder (unsigned Level,
/***** Visible icon with folder closed *****/ /***** Visible icon with folder closed *****/
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
false, // Closed false, // Closed
false); // Visible Cns_VISIBLE);
/***** Hidden icon with folder open *****/ /***** Hidden icon with folder open *****/
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
true, // Open true, // Open
true); // Hidden Cns_HIDDEN);
} }
else else
{ {
/***** Hidden icon with folder closed *****/ /***** Hidden icon with folder closed *****/
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
false, // Closed false, // Closed
true); // Hidden Cns_HIDDEN);
/***** Visible icon with folder open *****/ /***** Visible icon with folder open *****/
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
true, // Open 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, 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; extern const char *Txt_Folder;
static const char *Class[Cns_NUM_HIDDEN_VISIBLE] =
{
[Cns_HIDDEN ] = "NOT_SHOWN ",
[Cns_VISIBLE] = "",
};
/***** Begin container *****/ /***** 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" : Open ? "open" :
"closed", "closed",
FileBrowserId,RowId, FileBrowserId,RowId,
The_GetColorRows (), Class[HiddenOrVisible],The_GetColorRows ());
Hidden ? " style=\"display:none;\"" :
"");
/***** Icon *****/ /***** Icon *****/
Ico_PutIcon (Open ? "folder-open-yellow.png" : 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, 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 *****/ /***** 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" : Open ? "open" :
"closed", "closed",
FileBrowserId,RowId, FileBrowserId,RowId,
The_GetColorRows (), Class[HiddenOrVisible],The_GetColorRows ());
Hidden ? " style=\"display:none;\"" :
"");
/***** Form and icon *****/ /***** Form and icon *****/
Ico_PutContextualIconToCreateInFolder (Brw_ActFormCreate[Gbl.FileBrowser.Type], 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 **/ /** 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_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
bool IsHidden = false; Cns_HiddenOrVisible_t HiddenOrVisible;
/***** Get if a file or folder is hidden from database *****/ /***** Get if a file or folder is hidden from database *****/
if (Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingPath (&mysql_res,Path)) 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); row = mysql_fetch_row (mysql_res);
/* File is hidden? (row[0]) */ /* File is hidden? (row[0]) */
IsHidden = (row[0][0] == 'Y'); HiddenOrVisible = (row[0][0] == 'Y') ? Cns_HIDDEN :
Cns_VISIBLE;
} }
else else
{
Brw_DB_AddPath (-1L,FileType, Brw_DB_AddPath (-1L,FileType,
Gbl.FileBrowser.FilFolLnk.Full,false,Brw_LICENSE_DEFAULT); Gbl.FileBrowser.FilFolLnk.Full,false,Brw_LICENSE_DEFAULT);
HiddenOrVisible = Cns_VISIBLE;
}
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res); 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 if (Gbl.FileBrowser.Asg.AsgCod <= 0) // If folder does not correspond to any assignment
return true; // Folder can be removed or renamed 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 return false; // Do not edit anything in hidden assigments
if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER && // The main folder of an assignment 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 if (Gbl.FileBrowser.Asg.AsgCod <= 0) // If folder does not correspond to any assignment
return false; // Do not create anything out of assignments 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 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 if (!Gbl.FileBrowser.Asg.IBelongToCrsOrGrps) // If I do not belong to course / groups of this assignment

View File

@ -29,6 +29,7 @@
#include <linux/limits.h> // For PATH_MAX #include <linux/limits.h> // For PATH_MAX
#include "swad_constant.h"
#include "swad_course.h" #include "swad_course.h"
#include "swad_form.h" #include "swad_form.h"
#include "swad_group.h" #include "swad_group.h"
@ -219,7 +220,8 @@ void Brw_RcvFileInFileBrwClassic (void);
void Brw_RecLinkFileBrowser (void); void Brw_RecLinkFileBrowser (void);
void Brw_SetDocumentAsVisible (void); void Brw_SetDocumentAsVisible (void);
void Brw_SetDocumentAsHidden (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_ShowFileMetadata (void);
void Brw_GetLinkToDownloadFile (const char *PathInTree,const char *FileName,char *URL); void Brw_GetLinkToDownloadFile (const char *PathInTree,const char *FileName,char *URL);

View File

@ -1472,10 +1472,10 @@ static void Cfe_ShowCallForExam (struct Cfe_CallsForExams *CallsForExams,
static void Cfe_PutIconsCallForExam (void *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 [Cns_HIDDEN ] = ActUnhCfe, // Hidden ==> action to unhide
[true ] = ActUnhCfe, // Hidden ==> action to unhide [Cns_VISIBLE] = ActHidCfe, // Visible ==> action to hide
}; };
if (CallsForExams) if (CallsForExams)

View File

@ -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. 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 CSS_FILE "swad22.118.5.css"
#define JS_FILE "swad22.49.js" #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.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.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) Version 22.118.11:May 30, 2023 Code refactoring in strings. (337391 lines)

View File

@ -126,4 +126,11 @@ typedef enum
Cns_ENABLED, Cns_ENABLED,
} Cns_DisabledOrEnabled_t; } Cns_DisabledOrEnabled_t;
#define Cns_NUM_HIDDEN_VISIBLE 2
typedef enum
{
Cns_HIDDEN,
Cns_VISIBLE,
} Cns_HiddenOrVisible_t;
#endif #endif

View File

@ -57,17 +57,14 @@ extern struct Globals Gbl;
/***************************** Public constants ******************************/ /***************************** 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_PAST ][Cns_HIDDEN ] = "DATE_RED_LIGHT",
[Dat_PRESENT] = "DATE_GREEN", [Dat_PAST ][Cns_VISIBLE] = "DATE_RED",
[Dat_FUTURE ] = "DATE_BLUE", [Dat_PRESENT][Cns_HIDDEN ] = "DATE_GREEN_LIGHT",
}; [Dat_PRESENT][Cns_VISIBLE] = "DATE_GREEN",
const char *Dat_TimeStatusClassHidden[Dat_NUM_TIME_STATUS] = [Dat_FUTURE ][Cns_HIDDEN ] = "DATE_BLUE_LIGHT",
{ [Dat_FUTURE ][Cns_VISIBLE] = "DATE_BLUE",
[Dat_PAST ] = "DATE_RED_LIGHT",
[Dat_PRESENT] = "DATE_GREEN_LIGHT",
[Dat_FUTURE ] = "DATE_BLUE_LIGHT",
}; };
/*****************************************************************************/ /*****************************************************************************/

View File

@ -183,7 +183,7 @@ void Exa_ResetExam (struct Exa_Exam *Exam)
Exam->TimeUTC[Dat_STR_TIME] = (time_t) 0; Exam->TimeUTC[Dat_STR_TIME] = (time_t) 0;
Exam->TimeUTC[Dat_END_TIME] = (time_t) 0; Exam->TimeUTC[Dat_END_TIME] = (time_t) 0;
Exam->Title[0] = '\0'; Exam->Title[0] = '\0';
Exam->Hidden = false; Exam->HiddenOrVisible = Cns_VISIBLE;
Exam->NumSets = 0; Exam->NumSets = 0;
Exam->NumQsts = 0; Exam->NumQsts = 0;
Exam->NumSess = 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_Maximum_grade;
extern const char *Txt_Result_visibility; extern const char *Txt_Result_visibility;
extern const char *Txt_Sessions; 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; char *Anchor;
static unsigned UniqueId = 0; static unsigned UniqueId = 0;
char *Id; char *Id;
Dat_StartEndTime_t StartEndTime; Dat_StartEndTime_t StartEndTime;
const char *Color; const char *DateClass;
char Txt[Cns_MAX_BYTES_TEXT + 1]; char Txt[Cns_MAX_BYTES_TEXT + 1];
/***** Build anchor string *****/ /***** 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) if (asprintf (&Id,"exa_date_%u_%u",(unsigned) StartEndTime,UniqueId) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
Color = Exams->Exam.NumOpenSess ? (Exams->Exam.Hidden ? "DATE_GREEN_LIGHT": DateClass = Exams->Exam.NumOpenSess ? DateGreenClass[Exams->Exam.HiddenOrVisible] :
"DATE_GREEN") : DateRedClass[Exams->Exam.HiddenOrVisible];
(Exams->Exam.Hidden ? "DATE_RED_LIGHT":
"DATE_RED");
if (ShowOnlyThisExam) if (ShowOnlyThisExam)
HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s\"", HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s\"",
Id,Color,The_GetSuffix ()); Id,DateClass,The_GetSuffix ());
else else
HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"", 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]) if (Exams->Exam.TimeUTC[Dat_STR_TIME])
Dat_WriteLocalDateHMSFromUTC (Id,Exams->Exam.TimeUTC[StartEndTime], Dat_WriteLocalDateHMSFromUTC (Id,Exams->Exam.TimeUTC[StartEndTime],
Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK, Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK,
@ -518,8 +541,7 @@ static void Exa_ShowOneExam (struct Exa_Exams *Exams,bool ShowOnlyThisExam)
Frm_BeginForm (ActSeeOneExa); Frm_BeginForm (ActSeeOneExa);
Exa_PutPars (Exams); Exa_PutPars (Exams);
HTM_BUTTON_Submit_Begin (Txt_View_exam,"class=\"LT BT_LINK %s_%s\"", HTM_BUTTON_Submit_Begin (Txt_View_exam,"class=\"LT BT_LINK %s_%s\"",
Exams->Exam.Hidden ? "ASG_TITLE_LIGHT": TitleClass[Exams->Exam.HiddenOrVisible],
"ASG_TITLE",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Exams->Exam.Title); HTM_Txt (Exams->Exam.Title);
HTM_BUTTON_End (); 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 */ /* Number of questions, maximum grade, visibility of results */
HTM_DIV_Begin ("class=\"%s_%s\"", HTM_DIV_Begin ("class=\"%s_%s\"",
Exams->Exam.Hidden ? "ASG_GRP_LIGHT" : GroupClass[Exams->Exam.HiddenOrVisible],
"ASG_GRP",
The_GetSuffix ()); The_GetSuffix ());
HTM_TxtColonNBSP (Txt_Sets_of_questions); HTM_TxtColonNBSP (Txt_Sets_of_questions);
HTM_Unsigned (Exams->Exam.NumSets); 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_Double (Exams->Exam.MaxGrade);
HTM_BR (); HTM_BR ();
HTM_TxtColonNBSP (Txt_Result_visibility); HTM_TxtColonNBSP (Txt_Result_visibility);
TstVis_ShowVisibilityIcons (Exams->Exam.Visibility,Exams->Exam.Hidden); TstVis_ShowVisibilityIcons (Exams->Exam.Visibility,
Exams->Exam.HiddenOrVisible);
HTM_DIV_End (); HTM_DIV_End ();
/***** Number of sessions in exam *****/ /***** Number of sessions in exam *****/
@ -550,8 +572,7 @@ static void Exa_ShowOneExam (struct Exa_Exams *Exams,bool ShowOnlyThisExam)
Frm_BeginForm (ActSeeOneExa); Frm_BeginForm (ActSeeOneExa);
Exa_PutPars (Exams); Exa_PutPars (Exams);
HTM_BUTTON_Submit_Begin (Txt_Sessions,"class=\"LT BT_LINK %s_%s\"", HTM_BUTTON_Submit_Begin (Txt_Sessions,"class=\"LT BT_LINK %s_%s\"",
Exams->Exam.Hidden ? "ASG_TITLE_LIGHT": TitleClass[Exams->Exam.HiddenOrVisible],
"ASG_TITLE",
The_GetSuffix ()); The_GetSuffix ());
if (ShowOnlyThisExam) if (ShowOnlyThisExam)
HTM_TxtColonNBSP (Txt_Sessions); 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); Txt,Cns_MAX_BYTES_TEXT,Str_DONT_REMOVE_SPACES);
ALn_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links ALn_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links
HTM_DIV_Begin ("class=\"PAR %s_%s\"", HTM_DIV_Begin ("class=\"PAR %s_%s\"",
Exams->Exam.Hidden ? "DAT_LIGHT" : DataClass[Exams->Exam.HiddenOrVisible],
"DAT",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Txt); HTM_Txt (Txt);
HTM_DIV_End (); HTM_DIV_End ();
@ -642,7 +662,7 @@ static void Exa_PutIconsEditingOneExam (void *Exams)
static void Exa_WriteAuthor (struct Exa_Exam *Exam) 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, static void Exa_PutIconsToRemEditOneExam (struct Exa_Exams *Exams,
const char *Anchor) const char *Anchor)
{ {
static Act_Action_t ActionHideUnhide[2] = static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] =
{ {
[false] = ActHidExa, // Visible ==> action to hide [Cns_HIDDEN ] = ActUnhExa, // Hidden ==> action to unhide
[true ] = ActUnhExa, // Hidden ==> action to unhide [Cns_VISIBLE] = ActHidExa, // Visible ==> action to hide
}; };
static const Act_Action_t ActionShowResults[Rol_NUM_ROLES] = 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 *****/ /***** Icon to hide/unhide exam *****/
Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor,
Exa_PutPars,Exams, Exa_PutPars,Exams,
Exams->Exam.Hidden); Exams->Exam.HiddenOrVisible);
/***** Icon to edit exam *****/ /***** Icon to edit exam *****/
Ico_PutContextualIconToEdit (ActEdiOneExa,NULL, Ico_PutContextualIconToEdit (ActEdiOneExa,NULL,
@ -894,7 +914,8 @@ void Exa_GetExamDataByCod (struct Exa_Exam *Exam)
Exam->CrsCod = Str_ConvertStrCodToLongCod (row[1]); Exam->CrsCod = Str_ConvertStrCodToLongCod (row[1]);
/* Get whether the exam is hidden (row[2]) */ /* 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]) */ /* Get author of the exam (row[3]) */
Exam->UsrCod = Str_ConvertStrCodToLongCod (row[3]); Exam->UsrCod = Str_ConvertStrCodToLongCod (row[3]);

View File

@ -1303,8 +1303,8 @@ long Exa_DB_CreateSession (const struct ExaSes_Session *Session)
"'%s'," // Title "'%s'," // Title
"'N')", // ShowUsrResults: Don't show user results initially "'N')", // ShowUsrResults: Don't show user results initially
Session->ExaCod, Session->ExaCod,
Session->Hidden ? 'Y' : Session->HiddenOrVisible == Cns_HIDDEN ? 'Y' :
'N', 'N',
Gbl.Usrs.Me.UsrDat.UsrCod, // Session creator Gbl.Usrs.Me.UsrDat.UsrCod, // Session creator
Session->TimeUTC[Dat_STR_TIME], // Start time Session->TimeUTC[Dat_STR_TIME], // Start time
Session->TimeUTC[Dat_END_TIME], // End 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=%ld" // Extra check
" AND exa_sessions.ExaCod=exa_exams.ExaCod" " AND exa_sessions.ExaCod=exa_exams.ExaCod"
" AND exa_exams.CrsCod=%ld", // Extra check " AND exa_exams.CrsCod=%ld", // Extra check
Session->Hidden ? 'Y' : Session->HiddenOrVisible == Cns_HIDDEN ? 'Y' :
'N', 'N',
Session->TimeUTC[Dat_STR_TIME], // Start time Session->TimeUTC[Dat_STR_TIME], // Start time
Session->TimeUTC[Dat_END_TIME], // End time Session->TimeUTC[Dat_END_TIME], // End time
Session->Title, Session->Title,

View File

@ -1408,10 +1408,10 @@ static void ExaRes_CheckIfICanViewResult (const struct Exa_Exam *Exam,
{ {
case Rol_STD: case Rol_STD:
// Depends on visibility of exam, session and result (eye icons) // Depends on visibility of exam, session and result (eye icons)
ICanView->Result = (Usr_ItsMe (UsrCod) == Usr_ME && // The result is mine ICanView->Result = (Usr_ItsMe (UsrCod) == Usr_ME && // The result is mine
!Exam->Hidden && // The exam is visible Exam->HiddenOrVisible == Cns_VISIBLE && // The exam is visible
!Session->Hidden && // The session is visible Session->HiddenOrVisible == Cns_VISIBLE && // The session is visible
Session->ShowUsrResults); // The results of the session are visible to users Session->ShowUsrResults); // The results of the session are visible to users
// Whether I belong or not to groups of session is not checked here... // 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 // ...because I should be able to see old exams made in old groups to which I belonged

View File

@ -123,7 +123,7 @@ void ExaSes_ResetSession (struct ExaSes_Session *Session)
StartEndTime++) StartEndTime++)
Session->TimeUTC[StartEndTime] = (time_t) 0; Session->TimeUTC[StartEndTime] = (time_t) 0;
Session->Title[0] = '\0'; Session->Title[0] = '\0';
Session->Hidden = false; Session->HiddenOrVisible = Cns_VISIBLE;
Session->Open = false; Session->Open = false;
Session->ShowUsrResults = false; Session->ShowUsrResults = false;
}; };
@ -426,10 +426,10 @@ static void ExaSes_ListOneOrMoreSessionsIcons (struct Exa_Exams *Exams,
const struct ExaSes_Session *Session, const struct ExaSes_Session *Session,
const char *Anchor) const char *Anchor)
{ {
static Act_Action_t ActionHideUnhide[2] = static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] =
{ {
[false] = ActHidExaSes, // Visible ==> action to hide [Cns_HIDDEN ] = ActUnhExaSes, // Hidden ==> action to unhide
[true ] = ActUnhExaSes, // Hidden ==> action to unhide [Cns_VISIBLE] = ActHidExaSes, // Visible ==> action to hide
}; };
Exams->Exam.ExaCod = Session->ExaCod; Exams->Exam.ExaCod = Session->ExaCod;
@ -447,7 +447,7 @@ static void ExaSes_ListOneOrMoreSessionsIcons (struct Exa_Exams *Exams,
/***** Icon to hide/unhide the exam session *****/ /***** Icon to hide/unhide the exam session *****/
Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor,
ExaSes_PutParsEdit,Exams, ExaSes_PutParsEdit,Exams,
Session->Hidden); Session->HiddenOrVisible);
/***** Icon to edit the exam session *****/ /***** Icon to edit the exam session *****/
Ico_PutContextualIconToEdit (ActEdiOneExaSes,Anchor, Ico_PutContextualIconToEdit (ActEdiOneExaSes,Anchor,
@ -466,7 +466,7 @@ static void ExaSes_ListOneOrMoreSessionsAuthor (const struct ExaSes_Session *Ses
{ {
/***** Session author (teacher) *****/ /***** Session author (teacher) *****/
HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ());
Usr_WriteAuthor1Line (Session->UsrCod,Session->Hidden); Usr_WriteAuthor1Line (Session->UsrCod,Session->HiddenOrVisible);
HTM_TD_End (); 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, static void ExaSes_ListOneOrMoreSessionsTimes (const struct ExaSes_Session *Session,
unsigned UniqueId) 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; Dat_StartEndTime_t StartEndTime;
const char *Color; const char *DateClass;
char *Id; char *Id;
for (StartEndTime = (Dat_StartEndTime_t) 0; for (StartEndTime = (Dat_StartEndTime_t) 0;
StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1); StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
StartEndTime++) StartEndTime++)
{ {
Color = Session->Open ? (Session->Hidden ? "DATE_GREEN_LIGHT": DateClass = Session->Open ? DateGreenClass[Session->HiddenOrVisible] :
"DATE_GREEN") : DateRedClass[Session->HiddenOrVisible];
(Session->Hidden ? "DATE_RED_LIGHT":
"DATE_RED");
if (asprintf (&Id,"exa_time_%u_%u",(unsigned) StartEndTime,UniqueId) < 0) if (asprintf (&Id,"exa_time_%u_%u",(unsigned) StartEndTime,UniqueId) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"", 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], Dat_WriteLocalDateHMSFromUTC (Id,Session->TimeUTC[StartEndTime],
Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK, Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK,
true,true,true,0x6); 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_Play;
extern const char *Txt_Resume; 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 ()); 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 : HTM_BUTTON_Submit_Begin (Gbl.Usrs.Me.Role.Logged == Rol_STD ? Txt_Play :
Txt_Resume, Txt_Resume,
"class=\"LT BT_LINK %s_%s\"", "class=\"LT BT_LINK %s_%s\"",
Session->Hidden ? "ASG_TITLE_LIGHT" : TitleClass[Session->HiddenOrVisible],
"ASG_TITLE",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Session->Title); HTM_Txt (Session->Title);
HTM_BUTTON_End (); HTM_BUTTON_End ();
@ -535,8 +547,7 @@ static void ExaSes_ListOneOrMoreSessionsTitleGrps (struct Exa_Exams *Exams,
else else
{ {
HTM_SPAN_Begin ("class=\"%s_%s\"", HTM_SPAN_Begin ("class=\"%s_%s\"",
Session->Hidden ? "ASG_TITLE_LIGHT" : TitleClass[Session->HiddenOrVisible],
"ASG_TITLE",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Session->Title); HTM_Txt (Session->Title);
HTM_SPAN_End (); HTM_SPAN_End ();
@ -560,6 +571,11 @@ static void ExaSes_GetAndWriteNamesOfGrpsAssociatedToSession (const struct ExaSe
extern const char *Txt_Groups; extern const char *Txt_Groups;
extern const char *Txt_and; extern const char *Txt_and;
extern const char *Txt_The_whole_course; 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_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumGrps; unsigned NumGrps;
@ -570,9 +586,7 @@ static void ExaSes_GetAndWriteNamesOfGrpsAssociatedToSession (const struct ExaSe
/***** Write heading *****/ /***** Write heading *****/
HTM_DIV_Begin ("class=\"%s_%s\"", HTM_DIV_Begin ("class=\"%s_%s\"",
Session->Hidden ? "ASG_GRP_LIGHT": GroupClass[Session->HiddenOrVisible],The_GetSuffix ());
"ASG_GRP",
The_GetSuffix ());
HTM_TxtColonNBSP (NumGrps == 1 ? Txt_Group : HTM_TxtColonNBSP (NumGrps == 1 ? Txt_Group :
Txt_Groups); Txt_Groups);
@ -757,7 +771,8 @@ static void ExaSes_GetSessionDataFromRow (MYSQL_RES *mysql_res,
Err_WrongExamExit (); Err_WrongExamExit ();
/* Get whether the session is hidden (row[2]) */ /* 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]) */ /* Get session teacher (row[3]) */
Session->UsrCod = Str_ConvertStrCodToLongCod (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 /***** 1. Sessions in hidden exams are not accesible
2. Hidden or closed sessions are not accesible *****/ 2. Hidden or closed sessions are not accesible *****/
if (Exam->Hidden || if (Exam->HiddenOrVisible == Cns_HIDDEN ||
Session->Hidden || Session->HiddenOrVisible == Cns_HIDDEN ||
!Session->Open) !Session->Open)
return false; return false;

View File

@ -85,7 +85,7 @@ struct Exa_Exam
unsigned Visibility; // Visibility of results unsigned Visibility; // Visibility of results
char Title[Exa_MAX_BYTES_TITLE + 1]; char Title[Exa_MAX_BYTES_TITLE + 1];
time_t TimeUTC[Dat_NUM_START_END_TIME]; 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 NumSets; // Number of sets in the exam
unsigned NumQsts; // Number of questions in the exam unsigned NumQsts; // Number of questions in the exam
unsigned NumSess; // Number of sessions in the exam unsigned NumSess; // Number of sessions in the exam
@ -146,7 +146,7 @@ struct ExaSes_Session
long UsrCod; long UsrCod;
time_t TimeUTC[Dat_NUM_START_END_TIME]; time_t TimeUTC[Dat_NUM_START_END_TIME];
char Title[ExaSes_MAX_BYTES_TITLE + 1]; char Title[ExaSes_MAX_BYTES_TITLE + 1];
bool Hidden; Cns_HiddenOrVisible_t HiddenOrVisible;
bool Open; // If now is between start and end dates bool Open; // If now is between start and end dates
bool ShowUsrResults; // Show exam with results of all questions for the student bool ShowUsrResults; // Show exam with results of all questions for the student
}; };

View File

@ -198,7 +198,7 @@ void Gam_ResetGame (struct Gam_Game *Game)
Game->NumQsts = 0; Game->NumQsts = 0;
Game->NumMchs = 0; Game->NumMchs = 0;
Game->NumUnfinishedMchs = 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_Maximum_grade;
extern const char *Txt_Result_visibility; extern const char *Txt_Result_visibility;
extern const char *Txt_Matches; 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; char *Anchor = NULL;
static unsigned UniqueId = 0; static unsigned UniqueId = 0;
char *Id; char *Id;
Dat_StartEndTime_t StartEndTime; Dat_StartEndTime_t StartEndTime;
const char *Color; const char *DateClass;
char Txt[Cns_MAX_BYTES_TEXT + 1]; char Txt[Cns_MAX_BYTES_TEXT + 1];
/***** Set anchor string *****/ /***** 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) if (asprintf (&Id,"gam_date_%u_%u",(unsigned) StartEndTime,UniqueId) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
Color = Games->Game.NumUnfinishedMchs ? (Games->Game.Hidden ? "DATE_GREEN_LIGHT": DateClass = Games->Game.NumUnfinishedMchs ? DateGreenClass[Games->Game.HiddenOrVisible] :
"DATE_GREEN") : DateRedClass[Games->Game.HiddenOrVisible];
(Games->Game.Hidden ? "DATE_RED_LIGHT":
"DATE_RED");
if (ShowOnlyThisGame) if (ShowOnlyThisGame)
HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s\"", HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s\"",
Id,Color,The_GetSuffix ()); Id,DateClass,The_GetSuffix ());
else else
HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"", 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]) if (Games->Game.TimeUTC[Dat_STR_TIME])
Dat_WriteLocalDateHMSFromUTC (Id,Games->Game.TimeUTC[StartEndTime], Dat_WriteLocalDateHMSFromUTC (Id,Games->Game.TimeUTC[StartEndTime],
Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK, Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK,
@ -562,8 +585,7 @@ static void Gam_ShowGameMainData (struct Gam_Games *Games,
Frm_BeginForm (ActSeeOneGam); Frm_BeginForm (ActSeeOneGam);
Gam_PutPars (Games); Gam_PutPars (Games);
HTM_BUTTON_Submit_Begin (Txt_View_game,"class=\"LT BT_LINK %s_%s\"", HTM_BUTTON_Submit_Begin (Txt_View_game,"class=\"LT BT_LINK %s_%s\"",
Games->Game.Hidden ? "ASG_TITLE_LIGHT": TitleClass[Games->Game.HiddenOrVisible],
"ASG_TITLE",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Games->Game.Title); HTM_Txt (Games->Game.Title);
HTM_BUTTON_End (); HTM_BUTTON_End ();
@ -572,9 +594,7 @@ static void Gam_ShowGameMainData (struct Gam_Games *Games,
/* Number of questions, maximum grade, visibility of results */ /* Number of questions, maximum grade, visibility of results */
HTM_DIV_Begin ("class=\"%s_%s\"", HTM_DIV_Begin ("class=\"%s_%s\"",
Games->Game.Hidden ? "ASG_GRP_LIGHT" : GroupClass[Games->Game.HiddenOrVisible],The_GetSuffix ());
"ASG_GRP",
The_GetSuffix ());
HTM_TxtColonNBSP (Txt_Number_of_questions); HTM_TxtColonNBSP (Txt_Number_of_questions);
HTM_Unsigned (Games->Game.NumQsts); HTM_Unsigned (Games->Game.NumQsts);
HTM_BR (); HTM_BR ();
@ -582,7 +602,8 @@ static void Gam_ShowGameMainData (struct Gam_Games *Games,
HTM_Double (Games->Game.MaxGrade); HTM_Double (Games->Game.MaxGrade);
HTM_BR (); HTM_BR ();
HTM_TxtColonNBSP (Txt_Result_visibility); HTM_TxtColonNBSP (Txt_Result_visibility);
TstVis_ShowVisibilityIcons (Games->Game.Visibility,Games->Game.Hidden); TstVis_ShowVisibilityIcons (Games->Game.Visibility,
Games->Game.HiddenOrVisible);
HTM_DIV_End (); HTM_DIV_End ();
/***** Number of matches in game *****/ /***** Number of matches in game *****/
@ -594,8 +615,7 @@ static void Gam_ShowGameMainData (struct Gam_Games *Games,
Frm_BeginForm (ActSeeOneGam); Frm_BeginForm (ActSeeOneGam);
Gam_PutPars (Games); Gam_PutPars (Games);
HTM_BUTTON_Submit_Begin (Txt_Matches,"class=\"LT BT_LINK %s_%s\"", HTM_BUTTON_Submit_Begin (Txt_Matches,"class=\"LT BT_LINK %s_%s\"",
Games->Game.Hidden ? "ASG_TITLE_LIGHT": TitleClass[Games->Game.HiddenOrVisible],
"ASG_TITLE",
The_GetSuffix ()); The_GetSuffix ());
if (ShowOnlyThisGame) if (ShowOnlyThisGame)
HTM_TxtColonNBSP (Txt_Matches); 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); Txt,Cns_MAX_BYTES_TEXT,Str_DONT_REMOVE_SPACES);
ALn_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links ALn_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links
HTM_DIV_Begin ("class=\"PAR %s_%s\"", HTM_DIV_Begin ("class=\"PAR %s_%s\"",
Games->Game.Hidden ? "DAT_LIGHT" : DataClass[Games->Game.HiddenOrVisible],The_GetSuffix ());
"DAT",
The_GetSuffix ());
HTM_Txt (Txt); HTM_Txt (Txt);
HTM_DIV_End (); HTM_DIV_End ();
HTM_TD_End (); HTM_TD_End ();
@ -686,7 +704,7 @@ static void Gam_PutIconsEditingOneGame (void *Games)
static void Gam_WriteAuthor (struct Gam_Game *Game) 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, static void Gam_PutIconsToRemEditOneGame (struct Gam_Games *Games,
const char *Anchor) const char *Anchor)
{ {
static Act_Action_t ActionHideUnhide[2] = static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] =
{ {
[false] = ActHidGam, // Visible ==> action to hide [Cns_HIDDEN ] = ActUnhGam, // Hidden ==> action to unhide
[true ] = ActUnhGam, // Hidden ==> action to unhide [Cns_VISIBLE] = ActHidGam, // Visible ==> action to hide
}; };
static const Act_Action_t ActionShowResults[Rol_NUM_ROLES] = 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 *****/ /***** Icon to unhide/hide game *****/
Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor,
Gam_PutPars,Games, Gam_PutPars,Games,
Games->Game.Hidden); Games->Game.HiddenOrVisible);
/***** Icon to edit game *****/ /***** Icon to edit game *****/
Ico_PutContextualIconToEdit (ActEdiOneGam,NULL, Ico_PutContextualIconToEdit (ActEdiOneGam,NULL,
@ -950,7 +968,8 @@ void Gam_GetGameDataByCod (struct Gam_Game *Game)
Game->CrsCod = Str_ConvertStrCodToLongCod (row[1]); Game->CrsCod = Str_ConvertStrCodToLongCod (row[1]);
/* Get whether the game is hidden (row[2]) */ /* 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]) */ /* Get author of the game (row[3]) */
Game->UsrCod = Str_ConvertStrCodToLongCod (row[3]); Game->UsrCod = Str_ConvertStrCodToLongCod (row[3]);

View File

@ -79,7 +79,7 @@ struct Gam_Game
unsigned Visibility; // Visibility of results unsigned Visibility; // Visibility of results
char Title[Gam_MAX_BYTES_TITLE + 1]; char Title[Gam_MAX_BYTES_TITLE + 1];
time_t TimeUTC[Dat_NUM_START_END_TIME]; 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 NumQsts; // Number of questions in the game
unsigned NumMchs; // Number of matches in the game unsigned NumMchs; // Number of matches in the game
unsigned NumUnfinishedMchs; // Number of unfinished matches in the game unsigned NumUnfinishedMchs; // Number of unfinished matches in the game

View File

@ -296,24 +296,25 @@ void Ico_PutContextualIconToConfigure (Act_Action_t NextAction,
"cog.svg",Ico_BLACK); "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, 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 [Cns_HIDDEN ] = "eye-slash.svg", // hidden ==> icon to unhide
[true ] = "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 [Cns_HIDDEN ] = Ico_RED, // hidden ==> red icon to unhide
[true ] = 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, FuncPars,Args,
Icon[Hidden],Color[Hidden]); Icon[HiddenOrVisible],Color[HiddenOrVisible]);
} }
void Ico_PutContextualIconToExpand (const Act_Action_t NextAction,const char *Anchor, void Ico_PutContextualIconToExpand (const Act_Action_t NextAction,const char *Anchor,

View File

@ -80,9 +80,10 @@ void Ico_PutContextualIconToView (Act_Action_t NextAction,const char *Anchor,
void (*FuncPars) (void *Args),void *Args); void (*FuncPars) (void *Args),void *Args);
void Ico_PutContextualIconToConfigure (Act_Action_t NextAction, void Ico_PutContextualIconToConfigure (Act_Action_t NextAction,
void (*FuncPars) (void *Args),void *Args); 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, void (*FuncPars) (void *Args),void *Args,
bool Hidden); Cns_HiddenOrVisible_t HiddenOrVisible);
void Ico_PutContextualIconToExpand (const Act_Action_t NextAction,const char *Anchor, void Ico_PutContextualIconToExpand (const Act_Action_t NextAction,const char *Anchor,
void (*FuncPars) (void *Args),void *Args); void (*FuncPars) (void *Args),void *Args);
void Ico_PutContextualIconToContract (const Act_Action_t NextAction,const char *Anchor, void Ico_PutContextualIconToContract (const Act_Action_t NextAction,const char *Anchor,

View File

@ -1284,9 +1284,9 @@ static void MchRes_CheckIfICanViewMatchResult (const struct Gam_Game *Game,
{ {
case Rol_STD: case Rol_STD:
// Depends on visibility of game and result (eye icons) // Depends on visibility of game and result (eye icons)
ICanView->Result = (!Game->Hidden && // The game is visible ICanView->Result = (Game->HiddenOrVisible == Cns_VISIBLE && // The game is visible
Match->Status.ShowUsrResults && // The results of the match are visible to users Match->Status.ShowUsrResults && // The results of the match are visible to users
Usr_ItsMe (UsrCod) == Usr_ME); // The result is mine Usr_ItsMe (UsrCod) == Usr_ME); // The result is mine
// Whether I belong or not to groups of match is not checked here... // 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 // ...because I should be able to see old matches made in old groups to which I belonged

View File

@ -504,10 +504,10 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
bool Highlight) bool Highlight)
{ {
extern const char *Txt_See_full_notice; 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 [Cns_HIDDEN ] = ActUnhNot, // Hidden ==> action to unhide
[true ] = ActUnhNot, // Hidden ==> action to unhide [Cns_VISIBLE] = ActHidNot, // Visible ==> action to hide
}; };
static const char *ContainerClass[Not_NUM_STATUS] = static const char *ContainerClass[Not_NUM_STATUS] =
{ {

View File

@ -74,7 +74,9 @@ struct Level
{ {
unsigned Number; // Numbers for each level from 1 to maximum 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 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); long SelectedRscCod);
static void Prg_PutIconToContractExpandItem (struct Prg_Item *Item, static void Prg_PutIconToContractExpandItem (struct Prg_Item *Item,
bool Expanded,bool Editing); 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_WriteRowToCreateItem (long ParentItmCod,unsigned FormLevel);
static void Prg_SetTitleClass (char **TitleClass,unsigned Level); static void Prg_SetTitleClass (char **TitleClass,unsigned Level);
static void Prg_FreeTitleClass (char *TitleClass); 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_WriteNumNewItem (unsigned Level);
static void Prg_SetExpandedLevel (unsigned Level,bool Expanded); 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_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_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, static void Prg_PutFormsToRemEditOneItem (Prg_ListingType_t ListingType,
unsigned NumItem, unsigned NumItem,
@ -485,7 +487,12 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType,
[false] = "", // Not expanded [false] = "", // Not expanded
[true ] = " rowspan=\"2\"", // 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; char *Id;
unsigned ColSpan; unsigned ColSpan;
unsigned NumCol; unsigned NumCol;
@ -494,13 +501,18 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType,
bool HighlightItem; bool HighlightItem;
/***** Check if this item should be shown as hidden *****/ /***** Check if this item should be shown as hidden *****/
Prg_SetHiddenLevel (Item->Hierarchy.Level,Item->Hierarchy.Hidden); Prg_SetHiddenLevel (Item->Hierarchy.Level,Item->Hierarchy.HiddenOrVisible);
if (Item->Hierarchy.Hidden) // this item is marked as hidden switch (Item->Hierarchy.HiddenOrVisible)
IsHidden = true; {
else // this item is not marked as hidden case Cns_HIDDEN: // this item is marked as hidden
IsHidden = Prg_CheckIfAnyHigherLevelIsHidden (Item->Hierarchy.Level); 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 *****/ /***** Increase number in level *****/
Prg_IncreaseNumberInLevel (Item->Hierarchy.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", HTM_TD_Begin ("class=\"PRG_NUM %s\"%s",
The_GetColorRows (),RowSpan[Expanded]); The_GetColorRows (),RowSpan[Expanded]);
HTM_DIV_Begin ("class=\"RT %s%s\"", HTM_DIV_Begin ("class=\"RT %s%s\"",
TitleClass, TitleClass,PrgClass[HiddenOrVisible]);
IsHidden ? " PRG_HIDDEN" :
"");
Prg_WriteNumItem (Item->Hierarchy.Level); Prg_WriteNumItem (Item->Hierarchy.Level);
HTM_DIV_End (); HTM_DIV_End ();
HTM_TD_End (); HTM_TD_End ();
@ -569,9 +579,7 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType,
if (HighlightItem) if (HighlightItem)
HTM_ARTICLE_Begin (Prg_ITEM_SECTION_ID); HTM_ARTICLE_Begin (Prg_ITEM_SECTION_ID);
HTM_DIV_Begin ("class=\"LT %s%s\"", HTM_DIV_Begin ("class=\"LT %s%s\"",
TitleClass, TitleClass,PrgClass[HiddenOrVisible]);
IsHidden ? " PRG_HIDDEN" :
"");
HTM_Txt (Item->Title); HTM_Txt (Item->Title);
HTM_DIV_End (); HTM_DIV_End ();
if (HighlightItem) if (HighlightItem)
@ -599,9 +607,7 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType,
Id, Id,
Item->Open ? "DATE_GREEN" : Item->Open ? "DATE_GREEN" :
"DATE_RED", "DATE_RED",
The_GetSuffix (), The_GetSuffix (),PrgClass[HiddenOrVisible]);
IsHidden ? " PRG_HIDDEN" :
"");
Dat_WriteLocalDateHMSFromUTC (Id,Item->TimeUTC[StartEndTime], Dat_WriteLocalDateHMSFromUTC (Id,Item->TimeUTC[StartEndTime],
Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA, Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA,
true,true,false,0x6); true,true,false,0x6);
@ -639,7 +645,7 @@ static void Prg_WriteRowItem (Prg_ListingType_t ListingType,
Prg_ShowFormToChangeItem (Item->Hierarchy.ItmCod); Prg_ShowFormToChangeItem (Item->Hierarchy.ItmCod);
else else
/* Text */ /* Text */
Prg_WriteItemText (Item->Hierarchy.ItmCod,IsHidden); Prg_WriteItemText (Item->Hierarchy.ItmCod,HiddenOrVisible);
/* List of resources */ /* List of resources */
PrgRsc_ListItemResources (ListingType,Item,SelectedItmCod,SelectedRscCod); PrgRsc_ListItemResources (ListingType,Item,SelectedItmCod,SelectedRscCod);
@ -682,8 +688,13 @@ static void Prg_PutIconToContractExpandItem (struct Prg_Item *Item,
/**************************** Show item text *********************************/ /**************************** 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]; char Txt[Cns_MAX_BYTES_TEXT + 1];
/* Text */ /* Text */
@ -692,9 +703,7 @@ static void Prg_WriteItemText (long ItmCod,bool IsHidden)
Txt,Cns_MAX_BYTES_TEXT,Str_DONT_REMOVE_SPACES); Txt,Cns_MAX_BYTES_TEXT,Str_DONT_REMOVE_SPACES);
ALn_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links ALn_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links
HTM_DIV_Begin ("class=\"PAR PRG_TXT_%s%s\"", HTM_DIV_Begin ("class=\"PAR PRG_TXT_%s%s\"",
The_GetSuffix (), The_GetSuffix (),PrgClass[HiddenOrVisible]);
IsHidden ? " PRG_HIDDEN" :
"");
HTM_Txt (Txt); HTM_Txt (Txt);
HTM_DIV_End (); HTM_DIV_End ();
} }
@ -900,10 +909,10 @@ static void Prg_SetExpandedLevel (unsigned Level,bool Expanded)
Prg_Gbl.Levels[Level].Expanded = 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) if (Prg_Gbl.Levels)
Prg_Gbl.Levels[Level].Hidden = Hidden; Prg_Gbl.Levels[Level].HiddenOrVisible = HiddenOrVisible;
} }
static bool Prg_GetExpandedLevel (unsigned Level) static bool Prg_GetExpandedLevel (unsigned Level)
@ -918,16 +927,16 @@ static bool Prg_GetExpandedLevel (unsigned Level)
return false; return false;
} }
static bool Prg_GetHiddenLevel (unsigned Level) static Cns_HiddenOrVisible_t Prg_GetHiddenLevel (unsigned Level)
{ {
/* Level 0 (root) is always visible */ /* Level 0 (root) is always visible */
if (Level == 0) if (Level == 0)
return false; return Cns_VISIBLE;
if (Prg_Gbl.Levels) 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 return true; // None is contracted. All are expanded
} }
static bool Prg_CheckIfAnyHigherLevelIsHidden (unsigned CurrentLevel) static Cns_HiddenOrVisible_t Prg_CheckIfAnyHigherLevelIsHidden (unsigned CurrentLevel)
{ {
unsigned Level; unsigned Level;
for (Level = 1; for (Level = 1;
Level < CurrentLevel; Level < CurrentLevel;
Level++) Level++)
if (Prg_GetHiddenLevel (Level)) // Hidden? if (Prg_GetHiddenLevel (Level) == Cns_HIDDEN)
return true; 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) bool HighlightItem)
{ {
extern const char *Txt_Movement_not_allowed; 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 [Cns_HIDDEN ] = ActUnhPrgItm, // Hidden ==> action to unhide
[true ] = ActUnhPrgItm, // Hidden ==> action to unhide [Cns_VISIBLE] = ActHidPrgItm, // Visible ==> action to hide
}; };
char StrItemIndex[Cns_MAX_DECIMAL_DIGITS_UINT + 1]; 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 *****/ /***** Icon to hide/unhide program item *****/
Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Prg_HIGHLIGHTED_SECTION_ID, Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Prg_HIGHLIGHTED_SECTION_ID,
Prg_PutParItmCod,&Item->Hierarchy.ItmCod, Prg_PutParItmCod,&Item->Hierarchy.ItmCod,
Item->Hierarchy.Hidden); Item->Hierarchy.HiddenOrVisible);
/***** Icon to edit program item *****/ /***** Icon to edit program item *****/
if (ListingType == Prg_FORM_EDIT_ITEM && HighlightItem) 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]); Prg_Gbl.List.Items[NumItem].Level = Str_ConvertStrToUnsigned (row[2]);
/* Get whether the program item is hidden or not (row[3]) */ /* 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]); Item->Hierarchy.Level = Str_ConvertStrToUnsigned (row[2]);
/* Get whether the program item is hidden or not (row[3]) */ /* 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]) */ /* Get author of the program item (row[4]) */
Item->UsrCod = Str_ConvertStrCodToLongCod (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.ItmCod = -1L;
Item->Hierarchy.ItmInd = 0; Item->Hierarchy.ItmInd = 0;
Item->Hierarchy.Level = 0; Item->Hierarchy.Level = 0;
Item->Hierarchy.Hidden = false; Item->Hierarchy.HiddenOrVisible = Cns_VISIBLE;
Item->UsrCod = -1L; Item->UsrCod = -1L;
Item->TimeUTC[Dat_STR_TIME] = Item->TimeUTC[Dat_STR_TIME] =
Item->TimeUTC[Dat_END_TIME] = (time_t) 0; 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.RscCod = -1L;
Item->Resource.Hierarchy.RscInd = 0; 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.Type = Rsc_NONE;
Item->Resource.Link.Cod = -1L; Item->Resource.Link.Cod = -1L;
Item->Resource.Title[0] = '\0'; Item->Resource.Title[0] = '\0';

View File

@ -42,7 +42,7 @@ struct Prg_ResourceHierarchy
{ {
long RscCod; long RscCod;
unsigned RscInd; // 1, 2, 3... unsigned RscInd; // 1, 2, 3...
bool Hidden; Cns_HiddenOrVisible_t HiddenOrVisible;
}; };
#define Prg_MAX_CHARS_PROGRAM_ITEM_TITLE (128 - 1) // 127 #define Prg_MAX_CHARS_PROGRAM_ITEM_TITLE (128 - 1) // 127
@ -53,7 +53,7 @@ struct Prg_ItemHierarchy
long ItmCod; long ItmCod;
unsigned ItmInd; // 1, 2, 3... unsigned ItmInd; // 1, 2, 3...
unsigned Level; unsigned Level;
bool Hidden; Cns_HiddenOrVisible_t HiddenOrVisible;
}; };
struct Prg_Item struct Prg_Item

View File

@ -351,7 +351,8 @@ static void PrgRsc_GetResourceDataFromRow (MYSQL_RES *mysql_res,
Item->Resource.Hierarchy.RscInd = Str_ConvertStrToUnsigned (row[2]); Item->Resource.Hierarchy.RscInd = Str_ConvertStrToUnsigned (row[2]);
/***** Get whether the program item is hidden (row(3)) *****/ /***** 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]) *****/ /***** Get link type and code (row[4], row[5]) *****/
Item->Resource.Link.Type = Rsc_GetTypeFromString (row[4]); Item->Resource.Link.Type = Rsc_GetTypeFromString (row[4]);
@ -507,10 +508,10 @@ static void PrgRsc_PutFormsToRemEditOneResource (struct Prg_Item *Item,
unsigned NumRsc, unsigned NumRsc,
unsigned NumResources) unsigned NumResources)
{ {
static Act_Action_t ActionHideUnhide[2] = static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] =
{ {
[false] = ActHidPrgRsc, // Visible ==> action to hide [Cns_HIDDEN ] = ActUnhPrgRsc, // Hidden ==> action to unhide
[true ] = ActUnhPrgRsc, // Hidden ==> action to unhide [Cns_VISIBLE] = ActHidPrgRsc, // Visible ==> action to hide
}; };
extern const char *Txt_Movement_not_allowed; extern const char *Txt_Movement_not_allowed;
extern const char *Txt_Visible; extern const char *Txt_Visible;
@ -530,7 +531,7 @@ static void PrgRsc_PutFormsToRemEditOneResource (struct Prg_Item *Item,
if (NumRsc < NumResources) if (NumRsc < NumResources)
Ico_PutContextualIconToHideUnhide (ActionHideUnhide,PrgRsc_RESOURCE_SECTION_ID, Ico_PutContextualIconToHideUnhide (ActionHideUnhide,PrgRsc_RESOURCE_SECTION_ID,
PrgRsc_PutParRscCod,&Item->Resource.Hierarchy.RscCod, PrgRsc_PutParRscCod,&Item->Resource.Hierarchy.RscCod,
Item->Resource.Hierarchy.Hidden); Item->Resource.Hierarchy.HiddenOrVisible);
else else
Ico_PutIconOff ("eye.svg",Ico_GREEN,Txt_Visible); Ico_PutIconOff ("eye.svg",Ico_GREEN,Txt_Visible);

View File

@ -3155,10 +3155,10 @@ static Prj_Order_t Prj_GetParPrjOrder (void)
static void Prj_PutIconsToRemEditOnePrj (struct Prj_Projects *Projects, static void Prj_PutIconsToRemEditOnePrj (struct Prj_Projects *Projects,
const char *Anchor) const char *Anchor)
{ {
static Act_Action_t ActionHideUnhide[2] = static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] =
{ {
[false] = ActHidPrj, // Visible ==> action to hide [Cns_HIDDEN ] = ActUnhPrj, // Hidden ==> action to unhide
[true ] = ActUnhPrj, // Hidden ==> action to unhide [Cns_VISIBLE] = ActHidPrj, // Visible ==> action to hide
}; };
if (Prj_CheckIfICanEditProject (&Projects->Prj)) if (Prj_CheckIfICanEditProject (&Projects->Prj))

View File

@ -402,6 +402,31 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys,
extern const char *Txt_Users; extern const char *Txt_Users;
extern const char *Txt_Answer_survey; extern const char *Txt_Answer_survey;
extern const char *Txt_View_results; 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; char *Anchor = NULL;
static unsigned UniqueId = 0; static unsigned UniqueId = 0;
char *Id; char *Id;
@ -446,18 +471,14 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys,
if (ShowOnlyThisSvyComplete) if (ShowOnlyThisSvyComplete)
HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s\"", HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s\"",
Id, Id,
Surveys->Svy.Status.Hidden ? (Surveys->Svy.Status.Open ? "DATE_GREEN_LIGHT" : Surveys->Svy.Status.Open ? DateGreenClass[Surveys->Svy.Status.HiddenOrVisible] :
"DATE_RED_LIGHT") : DateRedClass[Surveys->Svy.Status.HiddenOrVisible],
(Surveys->Svy.Status.Open ? "DATE_GREEN" :
"DATE_RED"),
The_GetSuffix ()); The_GetSuffix ());
else else
HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"", HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"",
Id, Id,
Surveys->Svy.Status.Hidden ? (Surveys->Svy.Status.Open ? "DATE_GREEN_LIGHT" : Surveys->Svy.Status.Open ? DateGreenClass[Surveys->Svy.Status.HiddenOrVisible] :
"DATE_RED_LIGHT") : DateRedClass[Surveys->Svy.Status.HiddenOrVisible],
(Surveys->Svy.Status.Open ? "DATE_GREEN" :
"DATE_RED"),
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
Dat_WriteLocalDateHMSFromUTC (Id,Surveys->Svy.TimeUTC[Dat_STR_TIME], Dat_WriteLocalDateHMSFromUTC (Id,Surveys->Svy.TimeUTC[Dat_STR_TIME],
@ -472,18 +493,14 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys,
if (ShowOnlyThisSvyComplete) if (ShowOnlyThisSvyComplete)
HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s\"", HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s\"",
Id, Id,
Surveys->Svy.Status.Hidden ? (Surveys->Svy.Status.Open ? "DATE_GREEN_LIGHT" : Surveys->Svy.Status.Open ? DateGreenClass[Surveys->Svy.Status.HiddenOrVisible] :
"DATE_RED_LIGHT") : DateRedClass[Surveys->Svy.Status.HiddenOrVisible],
(Surveys->Svy.Status.Open ? "DATE_GREEN" :
"DATE_RED"),
The_GetSuffix ()); The_GetSuffix ());
else else
HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"", HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"",
Id, Id,
Surveys->Svy.Status.Hidden ? (Surveys->Svy.Status.Open ? "DATE_GREEN_LIGHT" : Surveys->Svy.Status.Open ? DateGreenClass[Surveys->Svy.Status.HiddenOrVisible] :
"DATE_RED_LIGHT") : DateRedClass[Surveys->Svy.Status.HiddenOrVisible],
(Surveys->Svy.Status.Open ? "DATE_GREEN" :
"DATE_RED"),
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
Dat_WriteLocalDateHMSFromUTC (Id,Surveys->Svy.TimeUTC[Dat_END_TIME], Dat_WriteLocalDateHMSFromUTC (Id,Surveys->Svy.TimeUTC[Dat_END_TIME],
@ -506,8 +523,7 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys,
Grp_PutParWhichGroups (&WhichGroups); Grp_PutParWhichGroups (&WhichGroups);
Pag_PutParPagNum (Pag_SURVEYS,Surveys->CurrentPage); Pag_PutParPagNum (Pag_SURVEYS,Surveys->CurrentPage);
HTM_BUTTON_Submit_Begin (Txt_View_survey,"class=\"LT BT_LINK %s_%s\"", HTM_BUTTON_Submit_Begin (Txt_View_survey,"class=\"LT BT_LINK %s_%s\"",
Surveys->Svy.Status.Hidden ? "ASG_TITLE_LIGHT" : TitleClass[Surveys->Svy.Status.HiddenOrVisible],
"ASG_TITLE",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Surveys->Svy.Title); HTM_Txt (Surveys->Svy.Title);
HTM_BUTTON_End (); 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 */ /* Number of questions and number of distinct users who have already answered this survey */
HTM_DIV_Begin ("class=\"%s_%s\"", HTM_DIV_Begin ("class=\"%s_%s\"",
Surveys->Svy.Status.Hidden ? "ASG_GRP_LIGHT" : GroupClass[Surveys->Svy.Status.HiddenOrVisible],
"ASG_GRP",
The_GetSuffix ()); The_GetSuffix ());
HTM_TxtColonNBSP (Txt_Number_of_questions); HTM_TxtColonNBSP (Txt_Number_of_questions);
HTM_Unsigned (Surveys->Svy.NumQsts); HTM_Unsigned (Surveys->Svy.NumQsts);
@ -595,8 +610,7 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys,
/* Scope of the survey */ /* Scope of the survey */
HTM_DIV_Begin ("class=\"%s_%s\"", HTM_DIV_Begin ("class=\"%s_%s\"",
Surveys->Svy.Status.Hidden ? "ASG_GRP_LIGHT" : GroupClass[Surveys->Svy.Status.HiddenOrVisible],
"ASG_GRP",
The_GetSuffix ()); The_GetSuffix ());
HTM_TxtColonNBSP (Txt_Scope); HTM_TxtColonNBSP (Txt_Scope);
switch (Surveys->Svy.Scope) switch (Surveys->Svy.Scope)
@ -627,8 +641,7 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys,
/* Users' roles who can answer the survey */ /* Users' roles who can answer the survey */
HTM_DIV_Begin ("class=\"%s_%s\"", HTM_DIV_Begin ("class=\"%s_%s\"",
Surveys->Svy.Status.Hidden ? "ASG_GRP_LIGHT" : GroupClass[Surveys->Svy.Status.HiddenOrVisible],
"ASG_GRP",
The_GetSuffix ()); The_GetSuffix ());
HTM_TxtColon (Txt_Users); HTM_TxtColon (Txt_Users);
HTM_BR (); HTM_BR ();
@ -650,8 +663,7 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys,
Txt,Cns_MAX_BYTES_TEXT,Str_DONT_REMOVE_SPACES); Txt,Cns_MAX_BYTES_TEXT,Str_DONT_REMOVE_SPACES);
ALn_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links ALn_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links
HTM_DIV_Begin ("class=\"PAR %s_%s\"", HTM_DIV_Begin ("class=\"PAR %s_%s\"",
Surveys->Svy.Status.Hidden ? "DAT_LIGHT" : DataClass[Surveys->Svy.Status.HiddenOrVisible],
"DAT",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Txt); HTM_Txt (Txt);
HTM_DIV_End (); HTM_DIV_End ();
@ -715,7 +727,7 @@ static void Svy_PutIconsOneSvy (void *Surveys)
static void Svy_WriteAuthor (struct Svy_Survey *Svy) 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_dont_belong_to_the_scope_of_the_survey;
extern const char *Txt_SURVEY_You_have_already_answered; extern const char *Txt_SURVEY_You_have_already_answered;
extern const char *Txt_SURVEY_You_have_not_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 *****/ /***** Begin list with items of status *****/
HTM_UL_Begin (NULL); HTM_UL_Begin (NULL);
/* Write whether survey is visible or hidden */ /* Write whether survey is visible or hidden */
if (Svy->Status.Hidden) HTM_LI_Begin ("class=\"%s_%s\"",
{ Class[Svy->Status.HiddenOrVisible],The_GetSuffix ());
HTM_LI_Begin ("class=\"STATUS_RED_LIGHT_%s\"",The_GetSuffix ()); HTM_Txt (*TxtHiddenOrVisible[Svy->Status.HiddenOrVisible]);
HTM_Txt (Txt_Hidden_survey);
}
else
{
HTM_LI_Begin ("class=\"STATUS_GREEN_%s\"",The_GetSuffix ());
HTM_Txt (Txt_Visible_survey);
}
HTM_LI_End (); HTM_LI_End ();
/* Write whether survey is open or closed */ /* Write whether survey is open or closed */
if (Svy->Status.Open) if (Svy->Status.Open)
{ {
HTM_LI_Begin ("class=\"%s_%s\"", HTM_LI_Begin ("class=\"%s_%s\"",
Svy->Status.Hidden ? "STATUS_GREEN_LIGHT" : StatusGreenClass[Svy->Status.HiddenOrVisible],
"STATUS_GREEN",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Txt_Open_survey); HTM_Txt (Txt_Open_survey);
} }
else else
{ {
HTM_LI_Begin ("class=\"%s_%s\"", HTM_LI_Begin ("class=\"%s_%s\"",
Svy->Status.Hidden ? "STATUS_RED_LIGHT" : StatusRedClass[Svy->Status.HiddenOrVisible],
"STATUS_RED",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Txt_Closed_survey); HTM_Txt (Txt_Closed_survey);
} }
@ -774,16 +797,14 @@ static void Svy_WriteStatus (struct Svy_Survey *Svy)
if (Svy->Status.IAmLoggedWithAValidRoleToAnswer) if (Svy->Status.IAmLoggedWithAValidRoleToAnswer)
{ {
HTM_LI_Begin ("class=\"%s_%s\"", HTM_LI_Begin ("class=\"%s_%s\"",
Svy->Status.Hidden ? "STATUS_GREEN_LIGHT" : StatusGreenClass[Svy->Status.HiddenOrVisible],
"STATUS_GREEN",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Txt_SURVEY_Type_of_user_allowed); HTM_Txt (Txt_SURVEY_Type_of_user_allowed);
} }
else else
{ {
HTM_LI_Begin ("class=\"%s_%s\"", HTM_LI_Begin ("class=\"%s_%s\"",
Svy->Status.Hidden ? "STATUS_RED_LIGHT" : StatusRedClass[Svy->Status.HiddenOrVisible],
"STATUS_RED",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Txt_SURVEY_Type_of_user_not_allowed); 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) if (Svy->Status.IBelongToScope)
{ {
HTM_LI_Begin ("class=\"%s_%s\"", HTM_LI_Begin ("class=\"%s_%s\"",
Svy->Status.Hidden ? "STATUS_GREEN_LIGHT" : StatusGreenClass[Svy->Status.HiddenOrVisible],
"STATUS_GREEN",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Txt_SURVEY_You_belong_to_the_scope_of_the_survey); HTM_Txt (Txt_SURVEY_You_belong_to_the_scope_of_the_survey);
} }
else else
{ {
HTM_LI_Begin ("class=\"%s_%s\"", HTM_LI_Begin ("class=\"%s_%s\"",
Svy->Status.Hidden ? "STATUS_RED_LIGHT" : StatusRedClass[Svy->Status.HiddenOrVisible],
"STATUS_RED",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Txt_SURVEY_You_dont_belong_to_the_scope_of_the_survey); 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) if (Svy->Status.IHaveAnswered)
{ {
HTM_LI_Begin ("class=\"%s_%s\"", HTM_LI_Begin ("class=\"%s_%s\"",
Svy->Status.Hidden ? "STATUS_GREEN_LIGHT" : StatusGreenClass[Svy->Status.HiddenOrVisible],
"STATUS_GREEN",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Txt_SURVEY_You_have_already_answered); HTM_Txt (Txt_SURVEY_You_have_already_answered);
} }
else else
{ {
HTM_LI_Begin ("class=\"%s_%s\"", HTM_LI_Begin ("class=\"%s_%s\"",
Svy->Status.Hidden ? "STATUS_RED_LIGHT" : StatusRedClass[Svy->Status.HiddenOrVisible],
"STATUS_RED",
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Txt_SURVEY_You_have_not_answered); 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, static void Svy_PutFormsToRemEditOneSvy (struct Svy_Surveys *Surveys,
const char *Anchor) const char *Anchor)
{ {
static Act_Action_t ActionHideUnhide[2] = static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] =
{ {
[false] = ActHidSvy, // Visible ==> action to hide [Cns_HIDDEN ] = ActUnhSvy, // Hidden ==> action to unhide
[true ] = ActUnhSvy, // Hidden ==> action to unhide [Cns_VISIBLE] = ActHidSvy, // Visible ==> action to hide
}; };
if (Surveys->Svy.Status.ICanEdit) if (Surveys->Svy.Status.ICanEdit)
@ -879,7 +896,7 @@ static void Svy_PutFormsToRemEditOneSvy (struct Svy_Surveys *Surveys,
/***** Icon to hide/unhide survey *****/ /***** Icon to hide/unhide survey *****/
Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor, Ico_PutContextualIconToHideUnhide (ActionHideUnhide,Anchor,
Svy_PutPars,Surveys, Svy_PutPars,Surveys,
Surveys->Svy.Status.Hidden); Surveys->Svy.Status.HiddenOrVisible);
/***** Icon to edit survey *****/ /***** Icon to edit survey *****/
Ico_PutContextualIconToEdit (ActEdiOneSvy,NULL, Ico_PutContextualIconToEdit (ActEdiOneSvy,NULL,
@ -1147,7 +1164,8 @@ void Svy_GetSurveyDataByCod (struct Svy_Survey *Svy)
Svy->Cod = Str_ConvertStrCodToLongCod (row[2]); Svy->Cod = Str_ConvertStrCodToLongCod (row[2]);
/* Get whether the survey is hidden (row[3]) */ /* 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]) */ /* Get roles (row[4]) */
if (sscanf (row[4],"%u",&Svy->Roles) != 1) if (sscanf (row[4],"%u",&Svy->Roles) != 1)
@ -1206,7 +1224,7 @@ void Svy_GetSurveyDataByCod (struct Svy_Survey *Svy)
/* Can I answer survey? */ /* Can I answer survey? */
Svy->Status.ICanAnswer = ( Svy->NumQsts != 0) && Svy->Status.ICanAnswer = ( Svy->NumQsts != 0) &&
!Svy->Status.Hidden && Svy->Status.HiddenOrVisible == Cns_VISIBLE &&
Svy->Status.Open && Svy->Status.Open &&
Svy->Status.IAmLoggedWithAValidRoleToAnswer && Svy->Status.IAmLoggedWithAValidRoleToAnswer &&
Svy->Status.IBelongToScope && Svy->Status.IBelongToScope &&
@ -1217,18 +1235,18 @@ void Svy_GetSurveyDataByCod (struct Svy_Survey *Svy)
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
case Rol_STD: case Rol_STD:
Svy->Status.ICanViewResults = ( Svy->Scope == HieLvl_CRS || Svy->Status.ICanViewResults = (Svy->Scope == HieLvl_CRS ||
Svy->Scope == HieLvl_DEG || Svy->Scope == HieLvl_DEG ||
Svy->Scope == HieLvl_CTR || Svy->Scope == HieLvl_CTR ||
Svy->Scope == HieLvl_INS || Svy->Scope == HieLvl_INS ||
Svy->Scope == HieLvl_CTY || Svy->Scope == HieLvl_CTY ||
Svy->Scope == HieLvl_SYS) && Svy->Scope == HieLvl_SYS) &&
( Svy->NumQsts != 0) && (Svy->NumQsts != 0) &&
!Svy->Status.Hidden && Svy->Status.HiddenOrVisible == Cns_VISIBLE &&
Svy->Status.Open && Svy->Status.Open &&
Svy->Status.IAmLoggedWithAValidRoleToAnswer && Svy->Status.IAmLoggedWithAValidRoleToAnswer &&
Svy->Status.IBelongToScope && Svy->Status.IBelongToScope &&
Svy->Status.IHaveAnswered; Svy->Status.IHaveAnswered;
Svy->Status.ICanViewComments = false; Svy->Status.ICanViewComments = false;
Svy->Status.ICanEdit = false; Svy->Status.ICanEdit = false;
break; break;
@ -1313,7 +1331,7 @@ void Svy_GetSurveyDataByCod (struct Svy_Survey *Svy)
Svy->Title[0] = '\0'; Svy->Title[0] = '\0';
Svy->NumQsts = 0; Svy->NumQsts = 0;
Svy->NumUsrs = 0; Svy->NumUsrs = 0;
Svy->Status.Hidden = false; Svy->Status.HiddenOrVisible = Cns_VISIBLE;
Svy->Status.Open = false; Svy->Status.Open = false;
Svy->Status.IAmLoggedWithAValidRoleToAnswer = false; Svy->Status.IAmLoggedWithAValidRoleToAnswer = false;
Svy->Status.IBelongToScope = false; Svy->Status.IBelongToScope = false;
@ -1659,13 +1677,13 @@ void Svy_ReqCreatOrEditSvy (void)
Surveys.Svy.Title[0] = '\0'; Surveys.Svy.Title[0] = '\0';
Surveys.Svy.NumQsts = 0; Surveys.Svy.NumQsts = 0;
Surveys.Svy.NumUsrs = 0; Surveys.Svy.NumUsrs = 0;
Surveys.Svy.Status.Hidden = false; Surveys.Svy.Status.HiddenOrVisible = Cns_VISIBLE;
Surveys.Svy.Status.Open = true; Surveys.Svy.Status.Open = true;
Surveys.Svy.Status.IAmLoggedWithAValidRoleToAnswer = false; Surveys.Svy.Status.IAmLoggedWithAValidRoleToAnswer = false;
Surveys.Svy.Status.IBelongToScope = false; Surveys.Svy.Status.IBelongToScope = false;
Surveys.Svy.Status.IHaveAnswered = false; Surveys.Svy.Status.IHaveAnswered = false;
Surveys.Svy.Status.ICanAnswer = false; Surveys.Svy.Status.ICanAnswer = false;
Surveys.Svy.Status.ICanViewResults = false; Surveys.Svy.Status.ICanViewResults = false;
Surveys.Svy.Status.ICanViewComments = false; Surveys.Svy.Status.ICanViewComments = false;
} }
else else
@ -2144,6 +2162,11 @@ static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Svy_Survey *Svy)
extern const char *Txt_Groups; extern const char *Txt_Groups;
extern const char *Txt_and; extern const char *Txt_and;
extern const char *Txt_The_whole_course; 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_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumGrps; unsigned NumGrps;
@ -2154,9 +2177,7 @@ static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Svy_Survey *Svy)
/***** Write heading *****/ /***** Write heading *****/
HTM_DIV_Begin ("class=\"%s_%s\"", HTM_DIV_Begin ("class=\"%s_%s\"",
Svy->Status.Hidden ? "ASG_GRP_LIGHT" : GroupClass[Svy->Status.HiddenOrVisible],The_GetSuffix ());
"ASG_GRP",
The_GetSuffix ());
HTM_TxtColonNBSP (NumGrps == 1 ? Txt_Group : HTM_TxtColonNBSP (NumGrps == 1 ? Txt_Group :
Txt_Groups); Txt_Groups);

View File

@ -53,7 +53,7 @@ struct Svy_Survey
unsigned NumUsrs; // Number of distinct users who have already answered the survey unsigned NumUsrs; // Number of distinct users who have already answered the survey
struct struct
{ {
bool Hidden; // Survey is hidden Cns_HiddenOrVisible_t HiddenOrVisible; // Survey is hidden or visible?
bool Open; // Start date <= now <= end date bool Open; // Start date <= now <= end date
bool IAmLoggedWithAValidRoleToAnswer; // I am logged with a valid role to answer this survey bool IAmLoggedWithAValidRoleToAnswer; // I am logged with a valid role to answer this survey
bool IBelongToScope; // I belong to the scope of this survey bool IBelongToScope; // I belong to the scope of this survey

View File

@ -39,7 +39,8 @@
/******************************* Show visibility *****************************/ /******************************* 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_STR_VISIBILITY[TstVis_NUM_ITEMS_VISIBILITY];
extern const char *Txt_TST_HIDDEN_VISIBLE[2]; 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_EACH_QST_SCORE] = "tasks.svg",
[TstVis_VISIBLE_TOTAL_SCORE ] = "check-circle-regular.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; TstVis_Visibility_t Visibility;
bool ItemVisible; bool ItemVisible;
char *Title; char *Title;
@ -64,12 +66,9 @@ void TstVis_ShowVisibilityIcons (unsigned SelectedVisibility,bool Hidden)
Txt_TST_STR_VISIBILITY[Visibility], Txt_TST_STR_VISIBILITY[Visibility],
Txt_TST_HIDDEN_VISIBLE[ItemVisible]) < 0) Txt_TST_HIDDEN_VISIBLE[ItemVisible]) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
if (Hidden)
Ico_PutIconOff (Icons[Visibility],ItemVisible ? Ico_GREEN : Ico_PutIcon[HiddenOrVisible] (Icons[Visibility],ItemVisible ? Ico_GREEN :
Ico_RED ,Title); Ico_RED ,Title);
else
Ico_PutIconOn (Icons[Visibility],ItemVisible ? Ico_GREEN :
Ico_RED ,Title);
free (Title); free (Title);
} }
} }

View File

@ -50,7 +50,8 @@ typedef enum
/***************************** Public prototypes *****************************/ /***************************** Public prototypes *****************************/
/*****************************************************************************/ /*****************************************************************************/
void TstVis_ShowVisibilityIcons (unsigned SelectedVisibility,bool Hidden); void TstVis_ShowVisibilityIcons (unsigned SelectedVisibility,
Cns_HiddenOrVisible_t HiddenOrVisible);
void TstVis_PutVisibilityCheckboxes (unsigned SelectedVisibility); void TstVis_PutVisibilityCheckboxes (unsigned SelectedVisibility);
unsigned TstVis_GetVisibilityFromForm (void); unsigned TstVis_GetVisibilityFromForm (void);
unsigned TstVis_GetVisibilityFromStr (const char *Str); unsigned TstVis_GetVisibilityFromStr (const char *Str);

View File

@ -57,6 +57,7 @@
#include <stddef.h> // For NULL #include <stddef.h> // For NULL
#include "swad_action.h" #include "swad_action.h"
#include "swad_agenda.h"
#include "swad_assignment.h" #include "swad_assignment.h"
#include "swad_browser.h" #include "swad_browser.h"
#include "swad_building.h" #include "swad_building.h"
@ -1270,7 +1271,7 @@ const char *Txt_Administer_one_user =
"Administer one user"; // Çeviri lazim! "Administer one user"; // Çeviri lazim!
#endif #endif
const char *Txt_AGENDA_PAST___FUTURE_EVENTS[2] = const char *Txt_AGENDA_PAST___FUTURE_EVENTS[Agd_NUM_PAST_FUTURE_EVENTS] =
{ {
// Agd_PAST___EVENTS // Agd_PAST___EVENTS
#if L==1 // ca #if L==1 // ca
@ -1368,9 +1369,9 @@ const char *Txt_AGENDA_PRIVAT_PUBLIC_EVENTS[2] =
#endif #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 #if L==1 // ca
"Esdeveniments ocults" "Esdeveniments ocults"
#elif L==2 // de #elif L==2 // de
@ -1393,7 +1394,7 @@ const char *Txt_AGENDA_HIDDEN_VISIBL_EVENTS[2] =
"Gizli etkinlikler" "Gizli etkinlikler"
#endif #endif
, ,
// Agd_VISIBL_EVENTS // Cns_VISIBLE
#if L==1 // ca #if L==1 // ca
"Esdeveniments visibles" "Esdeveniments visibles"
#elif L==2 // de #elif L==2 // de

View File

@ -6374,7 +6374,8 @@ void Usr_WriteAuthor (struct Usr_Data *UsrDat,
ClassPhoto[Gbl.Prefs.PhotoShape]); ClassPhoto[Gbl.Prefs.PhotoShape]);
HTM_TD_End (); 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) if (WriteAuthor)
{ {
HTM_TD_Begin ("class=\"LT\""); HTM_TD_Begin ("class=\"LT\"");
@ -6384,8 +6385,6 @@ void Usr_WriteAuthor (struct Usr_Data *UsrDat,
} }
else else
HTM_TD_Begin ("class=\"LM\""); HTM_TD_Begin ("class=\"LM\"");
/***** End second column *****/
HTM_TD_End (); HTM_TD_End ();
/***** End row and table *****/ /***** End row and table *****/
@ -6397,7 +6396,7 @@ void Usr_WriteAuthor (struct Usr_Data *UsrDat,
/********************* Write the author of an assignment *********************/ /********************* 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] = static const char *ClassPhoto[PhoSha_NUM_SHAPES] =
{ {
@ -6406,6 +6405,11 @@ void Usr_WriteAuthor1Line (long UsrCod,bool Hidden)
[PhoSha_SHAPE_OVAL ] = "PHOTOO15x20", [PhoSha_SHAPE_OVAL ] = "PHOTOO15x20",
[PhoSha_SHAPE_RECTANGLE] = "PHOTOR15x20", [PhoSha_SHAPE_RECTANGLE] = "PHOTOR15x20",
}; };
static const char *MsgClass[Cns_NUM_HIDDEN_VISIBLE] =
{
[Cns_HIDDEN ] = "MSG_AUT_LIGHT",
[Cns_VISIBLE] = "MSG_AUT",
};
bool ShowPhoto = false; bool ShowPhoto = false;
char PhotoURL[Cns_MAX_BYTES_WWW + 1]; char PhotoURL[Cns_MAX_BYTES_WWW + 1];
struct Usr_Data UsrDat; struct Usr_Data UsrDat;
@ -6427,9 +6431,7 @@ void Usr_WriteAuthor1Line (long UsrCod,bool Hidden)
/***** Write name *****/ /***** Write name *****/
HTM_DIV_Begin ("class=\"AUTHOR_1_LINE %s_%s\"", HTM_DIV_Begin ("class=\"AUTHOR_1_LINE %s_%s\"",
Hidden ? "MSG_AUT_LIGHT" : MsgClass[HiddenOrVisible],The_GetSuffix ());
"MSG_AUT",
The_GetSuffix ());
HTM_Txt (UsrDat.FullName); HTM_Txt (UsrDat.FullName);
HTM_DIV_End (); HTM_DIV_End ();

View File

@ -435,7 +435,7 @@ unsigned Usr_GetTotalNumberOfUsers (void);
void Usr_WriteAuthor (struct Usr_Data *UsrDat, void Usr_WriteAuthor (struct Usr_Data *UsrDat,
Cns_DisabledOrEnabled_t DisabledOrEnabled); 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); void Usr_ShowTableCellWithUsrData (struct Usr_Data *UsrDat,unsigned NumRows);

View File

@ -443,7 +443,7 @@ static unsigned long long ZIP_CloneDir (const char *Path,const char *PathClone,c
char PathFileInTree[PATH_MAX + 1]; char PathFileInTree[PATH_MAX + 1];
struct stat FileStatus; struct stat FileStatus;
Brw_FileType_t FileType; Brw_FileType_t FileType;
bool Hidden; Cns_HiddenOrVisible_t HiddenOrVisible;
bool SeeDocsZone = Gbl.FileBrowser.Type == Brw_SHOW_DOC_INS || bool SeeDocsZone = Gbl.FileBrowser.Type == Brw_SHOW_DOC_INS ||
Gbl.FileBrowser.Type == Brw_SHOW_DOC_CTR || Gbl.FileBrowser.Type == Brw_SHOW_DOC_CTR ||
Gbl.FileBrowser.Type == Brw_SHOW_DOC_DEG || 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) 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 Brw_IS_FILE; // It's a file
Hidden = (SeeDocsZone || SeeMarks) ? Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (FileType,PathFileInTree) : HiddenOrVisible = (SeeDocsZone ||
false; SeeMarks) ? Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (FileType,
PathFileInTree) :
Cns_VISIBLE;
if (!Hidden) // If file/folder is not hidden if (HiddenOrVisible == Cns_VISIBLE) // If file/folder is visible
{ switch (FileType)
if (FileType == Brw_IS_FOLDER) // It's a directory {
{ case Brw_IS_FOLDER:
FullSize += (unsigned long long) FileStatus.st_size; FullSize += (unsigned long long) FileStatus.st_size;
/***** Create clone of subdirectory *****/ /***** Create clone of subdirectory *****/
if (mkdir (PathFileClone,(mode_t) 0xFFF)) if (mkdir (PathFileClone,(mode_t) 0xFFF))
Err_ShowErrorAndExit ("Can not create temporary subfolder for compression."); Err_ShowErrorAndExit ("Can not create temporary subfolder for compression.");
/***** Clone subtree starting at this this directory *****/ /***** Clone subtree starting at this this directory *****/
FullSize += ZIP_CloneDir (PathFile,PathFileClone,PathFileInTree); FullSize += ZIP_CloneDir (PathFile,PathFileClone,PathFileInTree);
} break;
else if (FileType == Brw_IS_FILE || case Brw_IS_FILE:
FileType == Brw_IS_LINK) // It's a regular file case Brw_IS_LINK:
{ FullSize += (unsigned long long) FileStatus.st_size;
FullSize += (unsigned long long) FileStatus.st_size;
/***** Create a symbolic link (clone) to original file *****/ /***** Create a symbolic link (clone) to original file *****/
if (symlink (PathFile,PathFileClone) != 0) if (symlink (PathFile,PathFileClone) != 0)
Err_ShowErrorAndExit ("Can not create temporary link for compression."); Err_ShowErrorAndExit ("Can not create temporary link for compression.");
/***** Update number of my views of this file *****/ /***** Update number of my views of this file *****/
Brw_UpdateMyFileViews (Brw_DB_GetFilCodByPath (PathFileInTree,false)); // Any file, public or not Brw_UpdateMyFileViews (Brw_DB_GetFilCodByPath (PathFileInTree,false)); // Any file, public or not
} break;
} default:
break;
}
} }
} }
else else