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);
getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].attendanceEventCode = (int) Event.AttCod;
getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].hidden = Event.Hidden ? 1 :
0;
getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].hidden = (Event.HiddenOrVisible == Cns_HIDDEN) ? 1 :
0;
Gbl.Usrs.Other.UsrDat.UsrCod = Event.UsrCod;
if (API_GetSomeUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,Gbl.Hierarchy.Crs.CrsCod)) // Get some user's data from database
{
@ -2485,8 +2485,8 @@ int swad__sendAttendanceEvent (struct soap *soap,
}
/* Is event hidden? */
Event.Hidden = (hidden ? true :
false);
Event.HiddenOrVisible = (hidden ? Cns_HIDDEN :
Cns_VISIBLE);
/* User's code (really not used) */
Event.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
@ -4703,8 +4703,8 @@ int swad__getDirectoryTree (struct soap *soap,
/* Get directory tree into XML file */
XML_WriteStartFile (XML,"tree",false);
if (!Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_IS_FOLDER,
Gbl.FileBrowser.FilFolLnk.Full)) // If root folder is visible
if (Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_IS_FOLDER,
Gbl.FileBrowser.FilFolLnk.Full) == Cns_VISIBLE)
API_ListDir (XML,1,
Gbl.FileBrowser.Priv.PathRootFolder,
Brw_RootFolderInternalNames[Gbl.FileBrowser.Type]);
@ -4818,7 +4818,7 @@ static bool API_WriteRowFileBrowser (FILE *XML,unsigned Level,
if (Gbl.FileBrowser.Type == Brw_SHOW_DOC_CRS ||
Gbl.FileBrowser.Type == Brw_SHOW_DOC_GRP)
if (Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (FileType,
Gbl.FileBrowser.FilFolLnk.Full))
Gbl.FileBrowser.FilFolLnk.Full) == Cns_HIDDEN)
return false;
/***** XML row *****/

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},
[ActNewBan ] = {1139,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,Ban_ReceiveFormNewBanner ,Ban_ContEditAfterChgBan ,NULL},
[ActRemBan ] = {1140,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,Ban_RemoveBanner ,Ban_ContEditAfterChgBan ,NULL},
[ActUnhBan ] = {1212,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,Ban_ShowBanner ,Ban_ContEditAfterChgBan ,NULL},
[ActUnhBan ] = {1212,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,Ban_UnhideBanner ,Ban_ContEditAfterChgBan ,NULL},
[ActHidBan ] = {1213,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,Ban_HideBanner ,Ban_ContEditAfterChgBan ,NULL},
[ActRenBanSho ] = {1141,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,Ban_RenameBannerShort ,Ban_ContEditAfterChgBan ,NULL},
[ActRenBanFul ] = {1142,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,Ban_RenameBannerFull ,Ban_ContEditAfterChgBan ,NULL},

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

@ -45,7 +45,7 @@
struct Ban_Banner
{
long BanCod;
bool Hidden;
Cns_HiddenOrVisible_t HiddenOrVisible;
char ShrtName[Ban_MAX_BYTES_SHRT_NAME + 1];
char FullName[Ban_MAX_BYTES_FULL_NAME + 1];
char Img[Ban_MAX_BYTES_IMAGE + 1];
@ -63,7 +63,7 @@ void Ban_PutIconToViewBanners (void);
void Ban_GetBannerDataByCod (struct Ban_Banner *Ban);
void Ban_RemoveBanner (void);
void Ban_ShowBanner (void);
void Ban_UnhideBanner (void);
void Ban_HideBanner (void);
void Ban_RenameBannerShort (void);
void Ban_RenameBannerFull (void);

View File

@ -156,14 +156,14 @@ void Ban_DB_CreateBanner (const struct Ban_Banner *Ban)
/**************************** Hide/unhide a banner ***************************/
/*****************************************************************************/
void Ban_DB_HideOrUnhideBanner (long BanCod,bool Hide)
void Ban_DB_HideOrUnhideBanner (long BanCod,Cns_HiddenOrVisible_t HiddenOrVisible)
{
DB_QueryUPDATE ("can not hide/unhide banner",
"UPDATE ban_banners"
" SET Hidden='%c'"
" WHERE BanCod=%ld",
Hide ? 'Y' :
'N',
HiddenOrVisible == Cns_HIDDEN ? 'Y' :
'N',
BanCod);
}

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);
void Ban_DB_CreateBanner (const struct Ban_Banner *Ban);
void Ban_DB_HideOrUnhideBanner (long BanCod,bool Hide);
void Ban_DB_HideOrUnhideBanner (long BanCod,Cns_HiddenOrVisible_t HiddenOrVisible);
void Ban_DB_UpdateBanName (long BanCod,const char *FldName,
const char *NewBanName);
void Ban_DB_UpdateBanImg (long BanCod,

View File

@ -354,39 +354,6 @@ static const Act_Action_t Brw_ActChgZone[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActUnk,
};
static const Act_Action_t Brw_ActHideUnhide[Brw_NUM_TYPES_FILE_BROWSER][2] =
{
[Brw_UNKNOWN ] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_SHOW_DOC_CRS] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_SHOW_MRK_CRS] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_DOC_CRS] = {[false] = ActHidDocCrs ,[true] = ActUnhDocCrs },
[Brw_ADMI_SHR_CRS] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_SHR_GRP] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_WRK_USR] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_WRK_CRS] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_MRK_CRS] = {[false] = ActHidMrkCrs ,[true] = ActUnhMrkCrs },
[Brw_ADMI_BRF_USR] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_SHOW_DOC_GRP] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_DOC_GRP] = {[false] = ActHidDocGrp ,[true] = ActUnhDocGrp },
[Brw_SHOW_MRK_GRP] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_MRK_GRP] = {[false] = ActHidMrkGrp ,[true] = ActUnhMrkGrp },
[Brw_ADMI_ASG_USR] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_ASG_CRS] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_SHOW_DOC_DEG] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_DOC_DEG] = {[false] = ActHidDocDeg ,[true] = ActUnhDocDeg },
[Brw_SHOW_DOC_CTR] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_DOC_CTR] = {[false] = ActHidDocCtr ,[true] = ActUnhDocCtr },
[Brw_SHOW_DOC_INS] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_DOC_INS] = {[false] = ActHidDocIns ,[true] = ActUnhDocIns },
[Brw_ADMI_SHR_DEG] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_SHR_CTR] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_SHR_INS] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_TCH_CRS] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_TCH_GRP] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_DOC_PRJ] = {[false] = ActUnk ,[true] = ActUnk },
[Brw_ADMI_ASS_PRJ] = {[false] = ActUnk ,[true] = ActUnk },
};
static const Act_Action_t Brw_ActReqDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_UNKNOWN ] = ActUnk,
@ -1110,20 +1077,21 @@ static void Brw_IndentAndWriteIconExpandContract (unsigned Level,
Brw_IconTree_t IconThisRow);
static void Brw_IndentDependingOnLevel (unsigned Level);
static void Brw_PutIconToExpandFolder (const char *FileBrowserId,const char *RowId,
bool Hidden);
Cns_HiddenOrVisible_t HiddenOrVisible);
static void Brw_PutIconToContractFolder (const char *FileBrowserId,const char *RowId,
bool Hidden);
Cns_HiddenOrVisible_t HiddenOrVisible);
static void Brw_PutIconHideUnhide (const char *Anchor,bool RowSetAsHidden);
static void Brw_PutIconHideUnhide (const char *Anchor,
Cns_HiddenOrVisible_t HiddenOrVisible);
static bool Brw_CheckIfAnyHigherLevelIsHidden (unsigned CurrentLevel);
static void Brw_PutIconFolder (unsigned Level,
const char *FileBrowserId,const char *RowId,
Brw_IconTree_t IconSubtree);
static void Brw_PutIconFolderWithoutPlus (const char *FileBrowserId,const char *RowId,
bool Open,bool Hidden);
bool Open,Cns_HiddenOrVisible_t HiddenOrVisible);
static void Brw_PutIconFolderWithPlus (const char *FileBrowserId,const char *RowId,
bool Open,bool Hidden);
bool Open,Cns_HiddenOrVisible_t HiddenOrVisible);
static void Brw_PutIconNewFileOrFolder (void);
static void Brw_PutIconFileWithLinkToViewMetadata (const struct Brw_FileMetadata *FileMetadata);
@ -4038,7 +4006,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
Brw_IconTree_t IconThisRow)
{
char *Anchor;
bool RowSetAsHidden = false;
Cns_HiddenOrVisible_t HiddenOrVisible = Cns_VISIBLE;
bool RowSetAsPublic = false;
bool LightStyle = false;
bool IsRecent = false;
@ -4075,18 +4043,23 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
if (SeeDocsZone || AdminDocsZone ||
SeeMarks || AdminMarks)
{
RowSetAsHidden = Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Gbl.FileBrowser.FilFolLnk.Type,
Gbl.FileBrowser.FilFolLnk.Full);
if (RowSetAsHidden && Level && (SeeDocsZone || SeeMarks))
HiddenOrVisible = Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Gbl.FileBrowser.FilFolLnk.Type,
Gbl.FileBrowser.FilFolLnk.Full);
if (HiddenOrVisible == Cns_HIDDEN && Level && (SeeDocsZone || SeeMarks))
return false;
if (AdminDocsZone || AdminMarks)
{
if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER)
Gbl.FileBrowser.HiddenLevels[Level] = RowSetAsHidden;
if (RowSetAsHidden) // this row is marked as hidden
LightStyle = true;
else // this row is not marked as hidden
LightStyle = Brw_CheckIfAnyHigherLevelIsHidden (Level);
Gbl.FileBrowser.HiddenLevels[Level] = (HiddenOrVisible == Cns_HIDDEN);
switch (HiddenOrVisible)
{
case Cns_HIDDEN: // this row is marked as hidden
LightStyle = true;
break;
case Cns_VISIBLE: // this row is not marked as hidden
LightStyle = Brw_CheckIfAnyHigherLevelIsHidden (Level);
break;
}
}
}
@ -4216,7 +4189,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
/* Put icon to hide/unhide file or folder */
if (AdminDocsZone || AdminMarks)
Brw_PutIconHideUnhide (Anchor,RowSetAsHidden);
Brw_PutIconHideUnhide (Anchor,HiddenOrVisible);
/***** File or folder icon *****/
switch (Gbl.FileBrowser.FilFolLnk.Type)
@ -4266,7 +4239,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ());
if (Gbl.Usrs.Me.Role.Logged >= Rol_STD && // Only ZIP folders if I am student, teacher...
!SeeMarks && // Do not ZIP folders when seeing marks
!(SeeDocsZone && RowSetAsHidden)) // When seeing docs, if folder is not hidden (this could happen for Level == 0)
!(SeeDocsZone && HiddenOrVisible == Cns_HIDDEN)) // When seeing docs, if folder is not hidden (this could happen for Level == 0)
Brw_PutButtonToDownloadZIPOfAFolder ();
HTM_TD_End ();
}
@ -4280,7 +4253,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
The_ChangeRowColor ();
if (RowSetAsHidden && (SeeDocsZone || SeeMarks))
if (HiddenOrVisible == Cns_HIDDEN && (SeeDocsZone || SeeMarks))
return false;
return true;
}
@ -4449,20 +4422,20 @@ static void Brw_IndentAndWriteIconExpandContract (unsigned Level,
case Brw_ICON_TREE_EXPAND:
/***** Visible icon to expand folder *****/
Brw_PutIconToExpandFolder (FileBrowserId,RowId,
false); // Visible
Cns_VISIBLE);
/***** Hidden icon to contract folder *****/
Brw_PutIconToContractFolder (FileBrowserId,RowId,
true); // Hidden
Cns_HIDDEN);
break;
case Brw_ICON_TREE_CONTRACT:
/***** Hidden icon to expand folder *****/
Brw_PutIconToExpandFolder (FileBrowserId,RowId,
true); // Hidden
Cns_HIDDEN);
/***** Visible icon to contract folder *****/
Brw_PutIconToContractFolder (FileBrowserId,RowId,
false); // Visible
Cns_VISIBLE);
break;
}
HTM_TD_End ();
@ -4495,17 +4468,22 @@ static void Brw_IndentDependingOnLevel (unsigned Level)
/*****************************************************************************/
static void Brw_PutIconToExpandFolder (const char *FileBrowserId,const char *RowId,
bool Hidden)
Cns_HiddenOrVisible_t HiddenOrVisible)
{
char JavaScriptFuncToExpandFolder[256 + Brw_MAX_ROW_ID];
/***** Begin container *****/
if (Hidden)
HTM_DIV_Begin ("id=\"expand_%s_%s\" style=\"display:none;\"",
FileBrowserId,RowId);
else
HTM_DIV_Begin ("id=\"expand_%s_%s\"",
FileBrowserId,RowId);
switch (HiddenOrVisible)
{
case Cns_HIDDEN:
HTM_DIV_Begin ("id=\"expand_%s_%s\" class=\"NOT_SHOWN\"",
FileBrowserId,RowId);
break;
case Cns_VISIBLE:
HTM_DIV_Begin ("id=\"expand_%s_%s\"",
FileBrowserId,RowId);
break;
}
/***** Form and icon *****/
snprintf (JavaScriptFuncToExpandFolder,sizeof (JavaScriptFuncToExpandFolder),
@ -4528,17 +4506,22 @@ static void Brw_PutIconToExpandFolder (const char *FileBrowserId,const char *Row
/*****************************************************************************/
static void Brw_PutIconToContractFolder (const char *FileBrowserId,const char *RowId,
bool Hidden)
Cns_HiddenOrVisible_t HiddenOrVisible)
{
char JavaScriptFuncToContractFolder[256 + Brw_MAX_ROW_ID];
/***** Begin container *****/
if (Hidden)
HTM_DIV_Begin ("id=\"contract_%s_%s\" style=\"display:none;\"",
FileBrowserId,RowId);
else
HTM_DIV_Begin ("id=\"contract_%s_%s\"",
FileBrowserId,RowId);
switch (HiddenOrVisible)
{
case Cns_HIDDEN:
HTM_DIV_Begin ("id=\"contract_%s_%s\" style=\"display:none;\"",
FileBrowserId,RowId);
break;
case Cns_VISIBLE:
HTM_DIV_Begin ("id=\"contract_%s_%s\"",
FileBrowserId,RowId);
break;
}
/***** Form and icon *****/
snprintf (JavaScriptFuncToContractFolder,sizeof (JavaScriptFuncToContractFolder),
@ -4560,12 +4543,46 @@ static void Brw_PutIconToContractFolder (const char *FileBrowserId,const char *R
/************* Put link and icon to hide/unhide file or folder ***************/
/*****************************************************************************/
static void Brw_PutIconHideUnhide (const char *Anchor,bool RowSetAsHidden)
static void Brw_PutIconHideUnhide (const char *Anchor,
Cns_HiddenOrVisible_t HiddenOrVisible)
{
static const Act_Action_t Brw_ActHideUnhide[Brw_NUM_TYPES_FILE_BROWSER][Cns_NUM_HIDDEN_VISIBLE] =
{
[Brw_UNKNOWN ] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_SHOW_DOC_CRS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_SHOW_MRK_CRS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_DOC_CRS] = {[Cns_HIDDEN] = ActUnhDocCrs ,[Cns_VISIBLE] = ActHidDocCrs },
[Brw_ADMI_SHR_CRS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_SHR_GRP] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_WRK_USR] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_WRK_CRS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_MRK_CRS] = {[Cns_HIDDEN] = ActUnhMrkCrs ,[Cns_VISIBLE] = ActHidMrkCrs },
[Brw_ADMI_BRF_USR] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_SHOW_DOC_GRP] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_DOC_GRP] = {[Cns_HIDDEN] = ActUnhDocGrp ,[Cns_VISIBLE] = ActHidDocGrp },
[Brw_SHOW_MRK_GRP] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_MRK_GRP] = {[Cns_HIDDEN] = ActUnhMrkGrp ,[Cns_VISIBLE] = ActHidMrkGrp },
[Brw_ADMI_ASG_USR] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_ASG_CRS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_SHOW_DOC_DEG] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_DOC_DEG] = {[Cns_HIDDEN] = ActUnhDocDeg ,[Cns_VISIBLE] = ActHidDocDeg },
[Brw_SHOW_DOC_CTR] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_DOC_CTR] = {[Cns_HIDDEN] = ActUnhDocCtr ,[Cns_VISIBLE] = ActHidDocCtr },
[Brw_SHOW_DOC_INS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_DOC_INS] = {[Cns_HIDDEN] = ActUnhDocIns ,[Cns_VISIBLE] = ActHidDocIns },
[Brw_ADMI_SHR_DEG] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_SHR_CTR] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_SHR_INS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_TCH_CRS] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_TCH_GRP] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_DOC_PRJ] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
[Brw_ADMI_ASS_PRJ] = {[Cns_HIDDEN] = ActUnk ,[Cns_VISIBLE] = ActUnk },
};
HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ());
Ico_PutContextualIconToHideUnhide (Brw_ActHideUnhide[Gbl.FileBrowser.Type],Anchor,
Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk,
RowSetAsHidden);
HiddenOrVisible);
HTM_TD_End ();
}
@ -4634,24 +4651,24 @@ static void Brw_PutIconFolder (unsigned Level,
/***** Visible icon with folder closed *****/
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
false, // Closed
false); // Visible
Cns_VISIBLE);
/***** Hidden icon with folder open *****/
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
true, // Open
true); // Hidden
Cns_HIDDEN);
}
else
{
/***** Hidden icon with folder closed *****/
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
false, // Closed
true); // Hidden
Cns_HIDDEN);
/***** Visible icon with folder open *****/
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
true, // Open
false); // Visible
Cns_VISIBLE);
}
}
@ -4664,18 +4681,21 @@ static void Brw_PutIconFolder (unsigned Level,
/*****************************************************************************/
static void Brw_PutIconFolderWithoutPlus (const char *FileBrowserId,const char *RowId,
bool Open,bool Hidden)
bool Open,Cns_HiddenOrVisible_t HiddenOrVisible)
{
extern const char *Txt_Folder;
static const char *Class[Cns_NUM_HIDDEN_VISIBLE] =
{
[Cns_HIDDEN ] = "NOT_SHOWN ",
[Cns_VISIBLE] = "",
};
/***** Begin container *****/
HTM_DIV_Begin ("id=\"folder_%s_%s_%s\" class=\"%s\" %s",
HTM_DIV_Begin ("id=\"folder_%s_%s_%s\" class=\"%s%s\"",
Open ? "open" :
"closed",
FileBrowserId,RowId,
The_GetColorRows (),
Hidden ? " style=\"display:none;\"" :
"");
Class[HiddenOrVisible],The_GetColorRows ());
/***** Icon *****/
Ico_PutIcon (Open ? "folder-open-yellow.png" :
@ -4692,16 +4712,20 @@ static void Brw_PutIconFolderWithoutPlus (const char *FileBrowserId,const char *
/*****************************************************************************/
static void Brw_PutIconFolderWithPlus (const char *FileBrowserId,const char *RowId,
bool Open,bool Hidden)
bool Open,Cns_HiddenOrVisible_t HiddenOrVisible)
{
static const char *Class[Cns_NUM_HIDDEN_VISIBLE] =
{
[Cns_HIDDEN ] = "NOT_SHOWN ",
[Cns_VISIBLE] = "",
};
/***** Begin container *****/
HTM_DIV_Begin ("id=\"folder_%s_%s_%s\" class=\"%s\" %s",
HTM_DIV_Begin ("id=\"folder_%s_%s_%s\" class=\"%s%s\"",
Open ? "open" :
"closed",
FileBrowserId,RowId,
The_GetColorRows (),
Hidden ? " style=\"display:none;\"" :
"");
Class[HiddenOrVisible],The_GetColorRows ());
/***** Form and icon *****/
Ico_PutContextualIconToCreateInFolder (Brw_ActFormCreate[Gbl.FileBrowser.Type],
@ -7427,11 +7451,12 @@ void Brw_SetDocumentAsHidden (void)
/** Check if a file / folder from the documents zone is set as hidden in DB **/
/*****************************************************************************/
bool Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_FileType_t FileType,const char *Path)
Cns_HiddenOrVisible_t Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_FileType_t FileType,
const char *Path)
{
MYSQL_RES *mysql_res;
MYSQL_ROW row;
bool IsHidden = false;
Cns_HiddenOrVisible_t HiddenOrVisible;
/***** Get if a file or folder is hidden from database *****/
if (Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingPath (&mysql_res,Path))
@ -7440,16 +7465,20 @@ bool Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_FileType_t FileType,const cha
row = mysql_fetch_row (mysql_res);
/* File is hidden? (row[0]) */
IsHidden = (row[0][0] == 'Y');
HiddenOrVisible = (row[0][0] == 'Y') ? Cns_HIDDEN :
Cns_VISIBLE;
}
else
{
Brw_DB_AddPath (-1L,FileType,
Gbl.FileBrowser.FilFolLnk.Full,false,Brw_LICENSE_DEFAULT);
HiddenOrVisible = Cns_VISIBLE;
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
return IsHidden;
return HiddenOrVisible;
}
/*****************************************************************************/
@ -8936,7 +8965,7 @@ static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level)
if (Gbl.FileBrowser.Asg.AsgCod <= 0) // If folder does not correspond to any assignment
return true; // Folder can be removed or renamed
if (Gbl.FileBrowser.Asg.Hidden) // If assignment is hidden
if (Gbl.FileBrowser.Asg.HiddenOrVisible == Cns_HIDDEN)
return false; // Do not edit anything in hidden assigments
if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER && // The main folder of an assignment
@ -9023,7 +9052,7 @@ static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level)
if (Gbl.FileBrowser.Asg.AsgCod <= 0) // If folder does not correspond to any assignment
return false; // Do not create anything out of assignments
if (Gbl.FileBrowser.Asg.Hidden) // If assignment is hidden
if (Gbl.FileBrowser.Asg.HiddenOrVisible == Cns_HIDDEN)
return false; // Do not create anything in hidden assigments
if (!Gbl.FileBrowser.Asg.IBelongToCrsOrGrps) // If I do not belong to course / groups of this assignment

View File

@ -29,6 +29,7 @@
#include <linux/limits.h> // For PATH_MAX
#include "swad_constant.h"
#include "swad_course.h"
#include "swad_form.h"
#include "swad_group.h"
@ -219,7 +220,8 @@ void Brw_RcvFileInFileBrwClassic (void);
void Brw_RecLinkFileBrowser (void);
void Brw_SetDocumentAsVisible (void);
void Brw_SetDocumentAsHidden (void);
bool Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_FileType_t FileType,const char *Path);
Cns_HiddenOrVisible_t Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Brw_FileType_t FileType,
const char *Path);
void Brw_ShowFileMetadata (void);
void Brw_GetLinkToDownloadFile (const char *PathInTree,const char *FileName,char *URL);

View File

@ -1472,10 +1472,10 @@ static void Cfe_ShowCallForExam (struct Cfe_CallsForExams *CallsForExams,
static void Cfe_PutIconsCallForExam (void *CallsForExams)
{
static Act_Action_t ActionHideUnhide[2] =
static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] =
{
[false] = ActHidCfe, // Visible ==> action to hide
[true ] = ActUnhCfe, // Hidden ==> action to unhide
[Cns_HIDDEN ] = ActUnhCfe, // Hidden ==> action to unhide
[Cns_VISIBLE] = ActHidCfe, // Visible ==> action to hide
};
if (CallsForExams)

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.
*/
#define Log_PLATFORM_VERSION "SWAD 22.118.13 (2023-05-31)"
#define Log_PLATFORM_VERSION "SWAD 22.119 (2023-06-06)"
#define CSS_FILE "swad22.118.5.css"
#define JS_FILE "swad22.49.js"
/*
Version 22.119: Jun 06, 2023 Code refactoring related to hidden-visible. (337588 lines)
Version 22.118.13:May 31, 2023 Code refactoring in forums. (337417 lines)
Version 22.118.12:May 30, 2023 Code refactoring in forums and messages. (337408 lines)
Version 22.118.11:May 30, 2023 Code refactoring in strings. (337391 lines)

View File

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

View File

@ -57,17 +57,14 @@ extern struct Globals Gbl;
/***************************** Public constants ******************************/
/*****************************************************************************/
const char *Dat_TimeStatusClassVisible[Dat_NUM_TIME_STATUS] =
const char *Dat_TimeStatusClass[Dat_NUM_TIME_STATUS][Cns_NUM_HIDDEN_VISIBLE] =
{
[Dat_PAST ] = "DATE_RED",
[Dat_PRESENT] = "DATE_GREEN",
[Dat_FUTURE ] = "DATE_BLUE",
};
const char *Dat_TimeStatusClassHidden[Dat_NUM_TIME_STATUS] =
{
[Dat_PAST ] = "DATE_RED_LIGHT",
[Dat_PRESENT] = "DATE_GREEN_LIGHT",
[Dat_FUTURE ] = "DATE_BLUE_LIGHT",
[Dat_PAST ][Cns_HIDDEN ] = "DATE_RED_LIGHT",
[Dat_PAST ][Cns_VISIBLE] = "DATE_RED",
[Dat_PRESENT][Cns_HIDDEN ] = "DATE_GREEN_LIGHT",
[Dat_PRESENT][Cns_VISIBLE] = "DATE_GREEN",
[Dat_FUTURE ][Cns_HIDDEN ] = "DATE_BLUE_LIGHT",
[Dat_FUTURE ][Cns_VISIBLE] = "DATE_BLUE",
};
/*****************************************************************************/

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -79,7 +79,7 @@ struct Gam_Game
unsigned Visibility; // Visibility of results
char Title[Gam_MAX_BYTES_TITLE + 1];
time_t TimeUTC[Dat_NUM_START_END_TIME];
bool Hidden; // Game is hidden
Cns_HiddenOrVisible_t HiddenOrVisible; // Game is hidden or visible?
unsigned NumQsts; // Number of questions in the game
unsigned NumMchs; // Number of matches in the game
unsigned NumUnfinishedMchs; // Number of unfinished matches in the game

View File

@ -296,24 +296,25 @@ void Ico_PutContextualIconToConfigure (Act_Action_t NextAction,
"cog.svg",Ico_BLACK);
}
void Ico_PutContextualIconToHideUnhide (const Act_Action_t NextAction[2],const char *Anchor,
void Ico_PutContextualIconToHideUnhide (const Act_Action_t NextAction[Cns_NUM_HIDDEN_VISIBLE],
const char *Anchor,
void (*FuncPars) (void *Args),void *Args,
bool Hidden)
Cns_HiddenOrVisible_t HiddenOrVisible)
{
static const char *Icon[2] =
static const char *Icon[Cns_NUM_HIDDEN_VISIBLE] =
{
[false] = "eye.svg", // visible ==> icon to hide
[true ] = "eye-slash.svg", // hidden ==> icon to unhide
[Cns_HIDDEN ] = "eye-slash.svg", // hidden ==> icon to unhide
[Cns_VISIBLE] = "eye.svg", // visible ==> icon to hide
};
static Ico_Color_t Color[2] =
static Ico_Color_t Color[Cns_NUM_HIDDEN_VISIBLE] =
{
[false] = Ico_GREEN, // visible ==> green icon to hide
[true ] = Ico_RED, // hidden ==> red icon to unhide
[Cns_HIDDEN ] = Ico_RED, // hidden ==> red icon to unhide
[Cns_VISIBLE] = Ico_GREEN, // visible ==> green icon to hide
};
Lay_PutContextualLinkOnlyIcon (NextAction[Hidden],Anchor,
Lay_PutContextualLinkOnlyIcon (NextAction[HiddenOrVisible],Anchor,
FuncPars,Args,
Icon[Hidden],Color[Hidden]);
Icon[HiddenOrVisible],Color[HiddenOrVisible]);
}
void Ico_PutContextualIconToExpand (const Act_Action_t NextAction,const char *Anchor,

View File

@ -80,9 +80,10 @@ void Ico_PutContextualIconToView (Act_Action_t NextAction,const char *Anchor,
void (*FuncPars) (void *Args),void *Args);
void Ico_PutContextualIconToConfigure (Act_Action_t NextAction,
void (*FuncPars) (void *Args),void *Args);
void Ico_PutContextualIconToHideUnhide (const Act_Action_t NextAction[2],const char *Anchor,
void Ico_PutContextualIconToHideUnhide (const Act_Action_t NextAction[Cns_NUM_HIDDEN_VISIBLE],
const char *Anchor,
void (*FuncPars) (void *Args),void *Args,
bool Hidden);
Cns_HiddenOrVisible_t HiddenOrVisible);
void Ico_PutContextualIconToExpand (const Act_Action_t NextAction,const char *Anchor,
void (*FuncPars) (void *Args),void *Args);
void Ico_PutContextualIconToContract (const Act_Action_t NextAction,const char *Anchor,

View File

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

View File

@ -504,10 +504,10 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
bool Highlight)
{
extern const char *Txt_See_full_notice;
static Act_Action_t ActionHideUnhide[2] =
static Act_Action_t ActionHideUnhide[Cns_NUM_HIDDEN_VISIBLE] =
{
[false] = ActHidNot, // Visible ==> action to hide
[true ] = ActUnhNot, // Hidden ==> action to unhide
[Cns_HIDDEN ] = ActUnhNot, // Hidden ==> action to unhide
[Cns_VISIBLE] = ActHidNot, // Visible ==> action to hide
};
static const char *ContainerClass[Not_NUM_STATUS] =
{

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -39,7 +39,8 @@
/******************************* Show visibility *****************************/
/*****************************************************************************/
void TstVis_ShowVisibilityIcons (unsigned SelectedVisibility,bool Hidden)
void TstVis_ShowVisibilityIcons (unsigned SelectedVisibility,
Cns_HiddenOrVisible_t HiddenOrVisible)
{
extern const char *Txt_TST_STR_VISIBILITY[TstVis_NUM_ITEMS_VISIBILITY];
extern const char *Txt_TST_HIDDEN_VISIBLE[2];
@ -51,6 +52,7 @@ void TstVis_ShowVisibilityIcons (unsigned SelectedVisibility,bool Hidden)
[TstVis_VISIBLE_EACH_QST_SCORE] = "tasks.svg",
[TstVis_VISIBLE_TOTAL_SCORE ] = "check-circle-regular.svg",
};
static void (*Ico_PutIcon[Cns_NUM_HIDDEN_VISIBLE]) (const char *Icon,Ico_Color_t Color,const char *Title);
TstVis_Visibility_t Visibility;
bool ItemVisible;
char *Title;
@ -64,12 +66,9 @@ void TstVis_ShowVisibilityIcons (unsigned SelectedVisibility,bool Hidden)
Txt_TST_STR_VISIBILITY[Visibility],
Txt_TST_HIDDEN_VISIBLE[ItemVisible]) < 0)
Err_NotEnoughMemoryExit ();
if (Hidden)
Ico_PutIconOff (Icons[Visibility],ItemVisible ? Ico_GREEN :
Ico_RED ,Title);
else
Ico_PutIconOn (Icons[Visibility],ItemVisible ? Ico_GREEN :
Ico_RED ,Title);
Ico_PutIcon[HiddenOrVisible] (Icons[Visibility],ItemVisible ? Ico_GREEN :
Ico_RED ,Title);
free (Title);
}
}

View File

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

View File

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

View File

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

View File

@ -435,7 +435,7 @@ unsigned Usr_GetTotalNumberOfUsers (void);
void Usr_WriteAuthor (struct Usr_Data *UsrDat,
Cns_DisabledOrEnabled_t DisabledOrEnabled);
void Usr_WriteAuthor1Line (long UsrCod,bool Hidden);
void Usr_WriteAuthor1Line (long UsrCod,Cns_HiddenOrVisible_t HiddenOrVisible);
void Usr_ShowTableCellWithUsrData (struct Usr_Data *UsrDat,unsigned NumRows);

View File

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