Version 23.79.5: Apr 26, 2024 Code refactoring in HTML related to checked field in forms.

This commit is contained in:
acanas 2024-04-26 19:17:28 +02:00
parent b261b60b2a
commit 58875fd855
31 changed files with 270 additions and 186 deletions

View File

@ -356,7 +356,7 @@ void Ann_ShowFormAnnouncement (void)
1 << Rol_STD | 1 << Rol_STD |
1 << Rol_NET | 1 << Rol_NET |
1 << Rol_TCH, 1 << Rol_TCH,
false, Cns_DISABLED,
HTM_DONT_SUBMIT_ON_CHANGE); HTM_DONT_SUBMIT_ON_CHANGE);
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();

View File

@ -1303,8 +1303,10 @@ void Asg_ReqCreatOrEditAsg (void)
static void Asg_ShowLstGrpsToEditAssignment (long AsgCod) static void Asg_ShowLstGrpsToEditAssignment (long AsgCod)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_Groups; extern const char *Txt_Groups;
unsigned NumGrpTyp; unsigned NumGrpTyp;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
/***** Get list of groups types and groups in this course *****/ /***** Get list of groups types and groups in this course *****/
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
@ -1326,13 +1328,14 @@ static void Asg_ShowLstGrpsToEditAssignment (long AsgCod)
HTM_TD_Begin ("colspan=\"7\" class=\"LM DAT_%s\"", HTM_TD_Begin ("colspan=\"7\" class=\"LM DAT_%s\"",
The_GetSuffix ()); The_GetSuffix ());
HTM_LABEL_Begin (NULL); HTM_LABEL_Begin (NULL);
UncheckedOrChecked = Grp_DB_CheckIfAssociatedToGrps ("asg_groups",
"AsgCod",
AsgCod) ? Cns_UNCHECKED :
Cns_CHECKED;
HTM_INPUT_CHECKBOX ("WholeCrs",HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("WholeCrs",HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"WholeCrs\" value=\"Y\"%s" "id=\"WholeCrs\" value=\"Y\"%s"
" onclick=\"uncheckChildren(this,'GrpCods')\"", " onclick=\"uncheckChildren(this,'GrpCods')\"",
Grp_DB_CheckIfAssociatedToGrps ("asg_groups", HTM_CheckedTxt[UncheckedOrChecked]);
"AsgCod",
AsgCod) ? "" :
" checked=\"checked\"");
Grp_WriteTheWholeCourse (); Grp_WriteTheWholeCourse ();
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_TD_End (); HTM_TD_End ();

View File

@ -159,7 +159,7 @@ static void Att_ListUsrsAttendanceTable (struct Att_Events *Events,
static void Att_WriteTableHeadSeveralAttEvents (struct Att_Events *Events); static void Att_WriteTableHeadSeveralAttEvents (struct Att_Events *Events);
static void Att_WriteRowUsrSeveralAttEvents (const struct Att_Events *Events, static void Att_WriteRowUsrSeveralAttEvents (const struct Att_Events *Events,
unsigned NumUsr,struct Usr_Data *UsrDat); unsigned NumUsr,struct Usr_Data *UsrDat);
static void Att_PutCheckOrCross (bool Present); static void Att_PutCheckOrCross (Cns_UncheckedOrChecked_t UncheckedOrChecked);
static void Att_ListStdsWithAttEventsDetails (struct Att_Events *Events, static void Att_ListStdsWithAttEventsDetails (struct Att_Events *Events,
unsigned NumUsrsInList, unsigned NumUsrsInList,
long *LstSelectedUsrCods); long *LstSelectedUsrCods);
@ -1073,8 +1073,10 @@ void Att_ReqCreatOrEditEvent (void)
static void Att_ShowLstGrpsToEditEvent (long AttCod) static void Att_ShowLstGrpsToEditEvent (long AttCod)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_Groups; extern const char *Txt_Groups;
unsigned NumGrpTyp; unsigned NumGrpTyp;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
/***** Get list of groups types and groups in this course *****/ /***** Get list of groups types and groups in this course *****/
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
@ -1097,13 +1099,14 @@ static void Att_ShowLstGrpsToEditEvent (long AttCod)
HTM_TD_Begin ("colspan=\"7\" class=\"LM DAT_%s\"", HTM_TD_Begin ("colspan=\"7\" class=\"LM DAT_%s\"",
The_GetSuffix ()); The_GetSuffix ());
HTM_LABEL_Begin (NULL); HTM_LABEL_Begin (NULL);
UncheckedOrChecked = Grp_DB_CheckIfAssociatedToGrps ("att_groups",
"AttCod",
AttCod) ? Cns_UNCHECKED :
Cns_CHECKED;
HTM_INPUT_CHECKBOX ("WholeCrs",HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("WholeCrs",HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"WholeCrs\" value=\"Y\"%s" "id=\"WholeCrs\" value=\"Y\"%s"
" onclick=\"uncheckChildren(this,'GrpCods')\"", " onclick=\"uncheckChildren(this,'GrpCods')\"",
Grp_DB_CheckIfAssociatedToGrps ("att_groups", HTM_CheckedTxt[UncheckedOrChecked]);
"AttCod",
AttCod) ? "" :
" checked=\"checked\"");
Grp_WriteTheWholeCourse (); Grp_WriteTheWholeCourse ();
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_TD_End (); HTM_TD_End ();
@ -1647,6 +1650,7 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
struct Usr_Data *UsrDat, struct Usr_Data *UsrDat,
struct Att_Event *Event) struct Att_Event *Event)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
static const char *ClassPhoto[PhoSha_NUM_SHAPES] = static const char *ClassPhoto[PhoSha_NUM_SHAPES] =
{ {
[PhoSha_SHAPE_CIRCLE ] = "PHOTOC45x60", [PhoSha_SHAPE_CIRCLE ] = "PHOTOC45x60",
@ -1655,6 +1659,7 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
[PhoSha_SHAPE_RECTANGLE] = "PHOTOR45x60", [PhoSha_SHAPE_RECTANGLE] = "PHOTOR45x60",
}; };
bool Present; bool Present;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
char CommentStd[Cns_MAX_BYTES_TEXT + 1]; char CommentStd[Cns_MAX_BYTES_TEXT + 1];
char CommentTch[Cns_MAX_BYTES_TEXT + 1]; char CommentTch[Cns_MAX_BYTES_TEXT + 1];
Usr_Can_t ICanChangeStdAttendance; Usr_Can_t ICanChangeStdAttendance;
@ -1692,6 +1697,8 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
/***** Check if this student is already present in the current event *****/ /***** Check if this student is already present in the current event *****/
Present = Att_CheckIfUsrIsPresentInEventAndGetComments (Event->AttCod,UsrDat->UsrCod,CommentStd,CommentTch); Present = Att_CheckIfUsrIsPresentInEventAndGetComments (Event->AttCod,UsrDat->UsrCod,CommentStd,CommentTch);
UncheckedOrChecked = Present ? Cns_CHECKED :
Cns_UNCHECKED;
/***** Begin table row *****/ /***** Begin table row *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -1699,7 +1706,7 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
/***** Icon to show if the user is already present *****/ /***** Icon to show if the user is already present *****/
HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ());
HTM_LABEL_Begin ("for=\"Std%u\"",NumUsr); HTM_LABEL_Begin ("for=\"Std%u\"",NumUsr);
Att_PutCheckOrCross (Present); Att_PutCheckOrCross (UncheckedOrChecked);
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_TD_End (); HTM_TD_End ();
@ -1708,7 +1715,7 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
HTM_INPUT_CHECKBOX ("UsrCodStd",HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("UsrCodStd",HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"Std%u\" value=\"%s\"%s%s", "id=\"Std%u\" value=\"%s\"%s%s",
NumUsr,UsrDat->EnUsrCod, NumUsr,UsrDat->EnUsrCod,
Present ? " checked=\"checked\"" : "", HTM_CheckedTxt[UncheckedOrChecked],
(ICanChangeStdAttendance == Usr_CAN) ? "" : (ICanChangeStdAttendance == Usr_CAN) ? "" :
" disabled=\"disabled\""); " disabled=\"disabled\"");
HTM_TD_End (); HTM_TD_End ();
@ -2440,7 +2447,7 @@ static void Att_GetListSelectedAttCods (struct Att_Events *Events)
for (NumAttEvent = 0; for (NumAttEvent = 0;
NumAttEvent < Events->Num; NumAttEvent < Events->Num;
NumAttEvent++) NumAttEvent++)
Events->Lst[NumAttEvent].Selected = false; Events->Lst[NumAttEvent].UncheckedOrChecked = Cns_UNCHECKED;
/* Set some events as selected */ /* Set some events as selected */
for (Ptr = Events->StrAttCodsSelected; for (Ptr = Events->StrAttCodsSelected;
@ -2457,7 +2464,7 @@ static void Att_GetListSelectedAttCods (struct Att_Events *Events)
NumAttEvent++) NumAttEvent++)
if (Events->Lst[NumAttEvent].AttCod == AttCod) if (Events->Lst[NumAttEvent].AttCod == AttCod)
{ {
Events->Lst[NumAttEvent].Selected = true; Events->Lst[NumAttEvent].UncheckedOrChecked = Cns_CHECKED;
break; break;
} }
} }
@ -2471,18 +2478,18 @@ static void Att_GetListSelectedAttCods (struct Att_Events *Events)
for (NumAttEvent = 0; for (NumAttEvent = 0;
NumAttEvent < Events->Num; NumAttEvent < Events->Num;
NumAttEvent++) NumAttEvent++)
Events->Lst[NumAttEvent].Selected = true; Events->Lst[NumAttEvent].UncheckedOrChecked = Cns_CHECKED;
else // Course has groups and not all of them are selected else // Course has groups and not all of them are selected
for (NumAttEvent = 0; for (NumAttEvent = 0;
NumAttEvent < Events->Num; NumAttEvent < Events->Num;
NumAttEvent++) NumAttEvent++)
{ {
/* Reset selection */ /* Reset selection */
Events->Lst[NumAttEvent].Selected = false; Events->Lst[NumAttEvent].UncheckedOrChecked = Cns_UNCHECKED;
/* Set this event as selected? */ /* Set this event as selected? */
if (Events->Lst[NumAttEvent].NumStdsFromList) // Some students attended to this event if (Events->Lst[NumAttEvent].NumStdsFromList) // Some students attended to this event
Events->Lst[NumAttEvent].Selected = true; Events->Lst[NumAttEvent].UncheckedOrChecked = Cns_CHECKED;
else // No students attended to this event else // No students attended to this event
{ {
/***** Get groups associated to an attendance event from database *****/ /***** Get groups associated to an attendance event from database *****/
@ -2491,7 +2498,7 @@ static void Att_GetListSelectedAttCods (struct Att_Events *Events)
/* Get groups associated to this event */ /* Get groups associated to this event */
for (NumGrpInThisEvent = 0; for (NumGrpInThisEvent = 0;
NumGrpInThisEvent < NumGrpsInThisEvent && NumGrpInThisEvent < NumGrpsInThisEvent &&
!Events->Lst[NumAttEvent].Selected; Events->Lst[NumAttEvent].UncheckedOrChecked == Cns_UNCHECKED;
NumGrpInThisEvent++) NumGrpInThisEvent++)
{ {
/* Get next group associated to this event */ /* Get next group associated to this event */
@ -2499,13 +2506,13 @@ static void Att_GetListSelectedAttCods (struct Att_Events *Events)
/* Check if this group is selected */ /* Check if this group is selected */
for (NumGrpSel = 0; for (NumGrpSel = 0;
NumGrpSel < Gbl.Crs.Grps.LstGrpsSel.NumGrps && NumGrpSel < Gbl.Crs.Grps.LstGrpsSel.NumGrps &&
!Events->Lst[NumAttEvent].Selected; Events->Lst[NumAttEvent].UncheckedOrChecked == Cns_UNCHECKED;
NumGrpSel++) NumGrpSel++)
if (Gbl.Crs.Grps.LstGrpsSel.GrpCods[NumGrpSel] == GrpCodInThisEvent) if (Gbl.Crs.Grps.LstGrpsSel.GrpCods[NumGrpSel] == GrpCodInThisEvent)
Events->Lst[NumAttEvent].Selected = true; Events->Lst[NumAttEvent].UncheckedOrChecked = Cns_CHECKED;
} }
else // This event is not associated to groups else // This event is not associated to groups
Events->Lst[NumAttEvent].Selected = true; Events->Lst[NumAttEvent].UncheckedOrChecked = Cns_CHECKED;
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res); DB_FreeMySQLResult (&mysql_res);
@ -2608,6 +2615,7 @@ static void Att_PutButtonToShowDetails (const struct Att_Events *Events)
static void Att_ListEventsToSelect (struct Att_Events *Events, static void Att_ListEventsToSelect (struct Att_Events *Events,
Att_TypeOfView_t TypeOfView) Att_TypeOfView_t TypeOfView)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_Events; extern const char *Txt_Events;
extern const char *Txt_Event; extern const char *Txt_Event;
extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
@ -2666,8 +2674,7 @@ static void Att_ListEventsToSelect (struct Att_Events *Events,
HTM_INPUT_CHECKBOX ("AttCods",HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("AttCods",HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"Event%u\" value=\"%ld\"%s", "id=\"Event%u\" value=\"%ld\"%s",
NumAttEvent,Events->Event.AttCod, NumAttEvent,Events->Event.AttCod,
Events->Lst[NumAttEvent].Selected ? " checked=\"checked\"" : HTM_CheckedTxt[Events->Lst[NumAttEvent].UncheckedOrChecked]);
"");
HTM_TD_End (); HTM_TD_End ();
HTM_TD_Begin ("class=\"RT DAT_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
@ -2807,7 +2814,7 @@ static void Att_ListUsrsAttendanceTable (struct Att_Events *Events,
for (NumAttEvent = 0, Total = 0; for (NumAttEvent = 0, Total = 0;
NumAttEvent < Events->Num; NumAttEvent < Events->Num;
NumAttEvent++) NumAttEvent++)
if (Events->Lst[NumAttEvent].Selected) if (Events->Lst[NumAttEvent].UncheckedOrChecked == Cns_CHECKED)
{ {
HTM_TD_LINE_TOP_Unsigned (Events->Lst[NumAttEvent].NumStdsFromList); HTM_TD_LINE_TOP_Unsigned (Events->Lst[NumAttEvent].NumStdsFromList);
Total += Events->Lst[NumAttEvent].NumStdsFromList; Total += Events->Lst[NumAttEvent].NumStdsFromList;
@ -2852,7 +2859,7 @@ static void Att_WriteTableHeadSeveralAttEvents (struct Att_Events *Events)
for (NumAttEvent = 0; for (NumAttEvent = 0;
NumAttEvent < Events->Num; NumAttEvent < Events->Num;
NumAttEvent++) NumAttEvent++)
if (Events->Lst[NumAttEvent].Selected) if (Events->Lst[NumAttEvent].UncheckedOrChecked == Cns_CHECKED)
{ {
/***** Get data of this attendance event *****/ /***** Get data of this attendance event *****/
Events->Event.AttCod = Events->Lst[NumAttEvent].AttCod; Events->Event.AttCod = Events->Lst[NumAttEvent].AttCod;
@ -2888,6 +2895,7 @@ static void Att_WriteRowUsrSeveralAttEvents (const struct Att_Events *Events,
}; };
unsigned NumAttEvent; unsigned NumAttEvent;
bool Present; bool Present;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
unsigned NumTimesPresent; unsigned NumTimesPresent;
/***** Write number of user in the list *****/ /***** Write number of user in the list *****/
@ -2935,16 +2943,18 @@ static void Att_WriteRowUsrSeveralAttEvents (const struct Att_Events *Events,
for (NumAttEvent = 0, NumTimesPresent = 0; for (NumAttEvent = 0, NumTimesPresent = 0;
NumAttEvent < Events->Num; NumAttEvent < Events->Num;
NumAttEvent++) NumAttEvent++)
if (Events->Lst[NumAttEvent].Selected) if (Events->Lst[NumAttEvent].UncheckedOrChecked == Cns_CHECKED)
{ {
/* Check if this student is already registered in the current event */ /* Check if this student is already registered in the current event */
// Here it is not necessary to get comments // Here it is not necessary to get comments
Present = Att_CheckIfUsrIsPresentInEvent (Events->Lst[NumAttEvent].AttCod, Present = Att_CheckIfUsrIsPresentInEvent (Events->Lst[NumAttEvent].AttCod,
UsrDat->UsrCod); UsrDat->UsrCod);
UncheckedOrChecked = Present ? Cns_CHECKED :
Cns_UNCHECKED;
/* Write check or cross */ /* Write check or cross */
HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ());
Att_PutCheckOrCross (Present); Att_PutCheckOrCross (UncheckedOrChecked);
HTM_TD_End (); HTM_TD_End ();
if (Present) if (Present)
@ -2966,24 +2976,31 @@ static void Att_WriteRowUsrSeveralAttEvents (const struct Att_Events *Events,
/*********************** Put check or cross character ************************/ /*********************** Put check or cross character ************************/
/*****************************************************************************/ /*****************************************************************************/
static void Att_PutCheckOrCross (bool Present) static void Att_PutCheckOrCross (Cns_UncheckedOrChecked_t UncheckedOrChecked)
{ {
extern const char *Txt_Present; extern const char *Txt_Present;
extern const char *Txt_Absent; extern const char *Txt_Absent;
static const char *Class[Cns_NUM_UNCHECKED_CHECKED] =
if (Present)
{ {
HTM_DIV_Begin ("class=\"ATT_CHECK ATT_CHECK_%s\" title=\"%s\"", [Cns_UNCHECKED] = "ATT_CROSS",
The_GetSuffix (),Txt_Present); [Cns_CHECKED ] = "ATT_CHECK",
HTM_Txt ("&check;"); };
} static const char **Title[Cns_NUM_UNCHECKED_CHECKED] =
else
{ {
HTM_DIV_Begin ("class=\"ATT_CROSS ATT_CROSS_%s\" title=\"%s\"", [Cns_UNCHECKED] = &Txt_Absent,
The_GetSuffix (),Txt_Absent); [Cns_CHECKED ] = &Txt_Present,
HTM_Txt ("&cross;"); };
} static const char *Txt[Cns_NUM_UNCHECKED_CHECKED] =
{
[Cns_UNCHECKED] = "&cross;",
[Cns_CHECKED ] = "&check;",
};
HTM_DIV_Begin ("class=\"%s %s_%s\" title=\"%s\"",
Class[UncheckedOrChecked],
Class[UncheckedOrChecked],The_GetSuffix (),
*Title[UncheckedOrChecked]);
HTM_Txt (Txt[UncheckedOrChecked]);
HTM_DIV_End (); HTM_DIV_End ();
} }
@ -3060,6 +3077,7 @@ static void Att_ListAttEventsForAStd (struct Att_Events *Events,
unsigned UniqueId; unsigned UniqueId;
char *Id; char *Id;
bool Present; bool Present;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
bool ShowCommentStd; bool ShowCommentStd;
bool ShowCommentTch; bool ShowCommentTch;
char CommentStd[Cns_MAX_BYTES_TEXT + 1]; char CommentStd[Cns_MAX_BYTES_TEXT + 1];
@ -3119,7 +3137,7 @@ static void Att_ListAttEventsForAStd (struct Att_Events *Events,
for (NumAttEvent = 0, UniqueId = 1; for (NumAttEvent = 0, UniqueId = 1;
NumAttEvent < Events->Num; NumAttEvent < Events->Num;
NumAttEvent++, UniqueId++) NumAttEvent++, UniqueId++)
if (Events->Lst[NumAttEvent].Selected) if (Events->Lst[NumAttEvent].UncheckedOrChecked == Cns_CHECKED)
{ {
/***** Get data of the attendance event from database *****/ /***** Get data of the attendance event from database *****/
Events->Event.AttCod = Events->Lst[NumAttEvent].AttCod; Events->Event.AttCod = Events->Lst[NumAttEvent].AttCod;
@ -3128,6 +3146,8 @@ static void Att_ListAttEventsForAStd (struct Att_Events *Events,
/***** Get comments for this student *****/ /***** Get comments for this student *****/
Present = Att_CheckIfUsrIsPresentInEventAndGetComments (Events->Event.AttCod,UsrDat->UsrCod,CommentStd,CommentTch); Present = Att_CheckIfUsrIsPresentInEventAndGetComments (Events->Event.AttCod,UsrDat->UsrCod,CommentStd,CommentTch);
UncheckedOrChecked = Present ? Cns_CHECKED :
Cns_UNCHECKED;
ShowCommentStd = CommentStd[0]; ShowCommentStd = CommentStd[0];
ShowCommentTch = CommentTch[0] && ShowCommentTch = CommentTch[0] &&
(Gbl.Usrs.Me.Role.Logged == Rol_TCH || (Gbl.Usrs.Me.Role.Logged == Rol_TCH ||
@ -3147,7 +3167,7 @@ static void Att_ListAttEventsForAStd (struct Att_Events *Events,
HTM_TD_End (); HTM_TD_End ();
HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ());
Att_PutCheckOrCross (Present); Att_PutCheckOrCross (UncheckedOrChecked);
HTM_TD_End (); HTM_TD_End ();
HTM_TD_Begin ("class=\"LT DAT_%s %s\"", HTM_TD_Begin ("class=\"LT DAT_%s %s\"",

View File

@ -70,7 +70,7 @@ struct Att_Events
{ {
long AttCod; // Attendance event code long AttCod; // Attendance event code
unsigned NumStdsFromList; // Number of students (taken from a list) who has assisted to the event unsigned NumStdsFromList; // Number of students (taken from a list) who has assisted to the event
bool Selected; // I have selected this attendance event Cns_UncheckedOrChecked_t UncheckedOrChecked; // Do I have selected this attendance event?
} *Lst; // List of attendance events } *Lst; // List of attendance events
Dat_StartEndTime_t SelectedOrder; Dat_StartEndTime_t SelectedOrder;
struct Att_Event Event; // Selected/current event struct Att_Event Event; // Selected/current event

View File

@ -2883,10 +2883,12 @@ void Brw_PutLegalNotice (void)
static void Brw_FormToChangeCrsGrpZone (void) static void Brw_FormToChangeCrsGrpZone (void)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Par_CodeStr[Par_NUM_PAR_COD]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
struct ListCodGrps LstMyGrps; struct ListCodGrps LstMyGrps;
unsigned NumGrp; unsigned NumGrp;
struct GroupData GrpDat; struct GroupData GrpDat;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
/***** Get list of groups to show *****/ /***** Get list of groups to show *****/
if (Gbl.Crs.Grps.NumGrps) // This course has groups? if (Gbl.Crs.Grps.NumGrps) // This course has groups?
@ -2905,10 +2907,11 @@ static void Brw_FormToChangeCrsGrpZone (void)
Brw_TypeIsCrsBrw[Gbl.FileBrowser.Type] ? "BROWSER_TITLE" : Brw_TypeIsCrsBrw[Gbl.FileBrowser.Type] ? "BROWSER_TITLE" :
"BROWSER_TITLE_LIGHT"); "BROWSER_TITLE_LIGHT");
HTM_LABEL_Begin (NULL); HTM_LABEL_Begin (NULL);
UncheckedOrChecked = Brw_TypeIsCrsBrw[Gbl.FileBrowser.Type] ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_RADIO (Par_CodeStr[ParCod_Grp],HTM_SUBMIT_ON_CLICK, HTM_INPUT_RADIO (Par_CodeStr[ParCod_Grp],HTM_SUBMIT_ON_CLICK,
"value=\"-1\"%s", "value=\"-1\"%s",
Brw_TypeIsCrsBrw[Gbl.FileBrowser.Type] ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked]);
"");
HTM_Txt (Gbl.Hierarchy.Node[Hie_CRS].FullName); HTM_Txt (Gbl.Hierarchy.Node[Hie_CRS].FullName);
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_LI_End (); HTM_LI_End ();
@ -2935,12 +2938,12 @@ static void Brw_FormToChangeCrsGrpZone (void)
NULL, NULL,
"class=\"ICO25x25\" style=\"margin-left:6px;\""); "class=\"ICO25x25\" style=\"margin-left:6px;\"");
HTM_LABEL_Begin (NULL); HTM_LABEL_Begin (NULL);
UncheckedOrChecked = (Brw_TypeIsGrpBrw[Gbl.FileBrowser.Type] &&
GrpDat.GrpCod == Gbl.Crs.Grps.GrpCod) ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_RADIO (Par_CodeStr[ParCod_Grp],HTM_SUBMIT_ON_CLICK, HTM_INPUT_RADIO (Par_CodeStr[ParCod_Grp],HTM_SUBMIT_ON_CLICK,
"value=\"%ld\"%s", "value=\"%ld\"%s",
GrpDat.GrpCod, GrpDat.GrpCod,HTM_CheckedTxt[UncheckedOrChecked]);
(Brw_TypeIsGrpBrw[Gbl.FileBrowser.Type] &&
GrpDat.GrpCod == Gbl.Crs.Grps.GrpCod) ? " checked=\"checked\"" :
"");
HTM_TxtF ("%s&nbsp;%s",GrpDat.GrpTypName,GrpDat.GrpName); HTM_TxtF ("%s&nbsp;%s",GrpDat.GrpTypName,GrpDat.GrpName);
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_LI_End (); HTM_LI_End ();

View File

@ -633,10 +633,11 @@ Me sale este error, no s
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod') "can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
*/ */
#define Log_PLATFORM_VERSION "SWAD 23.79.4 (2024-04-25)" #define Log_PLATFORM_VERSION "SWAD 23.79.5 (2024-04-26)"
#define CSS_FILE "swad23.67.2.css" #define CSS_FILE "swad23.67.2.css"
#define JS_FILE "swad23.79.js" #define JS_FILE "swad23.79.js"
/* /*
Version 23.79.5: Apr 26, 2024 Code refactoring in HTML related to checked field in forms. (335739 lines)
Version 23.79.4: Apr 25, 2024 Code refactoring in HTML related to checked field in forms. (335739 lines) Version 23.79.4: Apr 25, 2024 Code refactoring in HTML related to checked field in forms. (335739 lines)
Version 23.79.3: Apr 24, 2024 Code refactoring in HTML related to disabled field in forms. (335766 lines) Version 23.79.3: Apr 24, 2024 Code refactoring in HTML related to disabled field in forms. (335766 lines)
Version 23.79.2: Apr 24, 2024 Code refactoring in HTML related to disabled field in forms. (335766 lines) Version 23.79.2: Apr 24, 2024 Code refactoring in HTML related to disabled field in forms. (335766 lines)

View File

@ -63,8 +63,10 @@ static void Coo_PutIconsCookies (__attribute__((unused)) void *Args);
void Coo_EditMyPrefsOnCookies (void) void Coo_EditMyPrefsOnCookies (void)
{ {
extern const char *Hlp_PROFILE_Settings_cookies; extern const char *Hlp_PROFILE_Settings_cookies;
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_Cookies; extern const char *Txt_Cookies;
extern const char *Txt_Accept_third_party_cookies_to_view_multimedia_content_from_other_websites; extern const char *Txt_Accept_third_party_cookies_to_view_multimedia_content_from_other_websites;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
/***** Begin section with preferences about cookies *****/ /***** Begin section with preferences about cookies *****/
HTM_SECTION_Begin (Coo_COOKIES_ID); HTM_SECTION_Begin (Coo_COOKIES_ID);
@ -92,10 +94,11 @@ void Coo_EditMyPrefsOnCookies (void)
/* Check box */ /* Check box */
HTM_LABEL_Begin (NULL); HTM_LABEL_Begin (NULL);
UncheckedOrChecked = (Gbl.Usrs.Me.UsrDat.Prefs.RefuseAcceptCookies == Coo_ACCEPT) ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_CHECKBOX ("cookies",HTM_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("cookies",HTM_SUBMIT_ON_CHANGE,
"value=\"Y\"%s", "value=\"Y\"%s",
(Gbl.Usrs.Me.UsrDat.Prefs.RefuseAcceptCookies == Coo_ACCEPT) ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked]);
"");
HTM_Txt (Txt_Accept_third_party_cookies_to_view_multimedia_content_from_other_websites); HTM_Txt (Txt_Accept_third_party_cookies_to_view_multimedia_content_from_other_websites);
HTM_LABEL_End (); HTM_LABEL_End ();

View File

@ -287,8 +287,10 @@ void Dat_ResetHour (struct Dat_Hour *Hour)
void Dat_PutBoxToSelectDateFormat (void) void Dat_PutBoxToSelectDateFormat (void)
{ {
extern const char *Hlp_PROFILE_Settings_dates; extern const char *Hlp_PROFILE_Settings_dates;
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_Dates; extern const char *Txt_Dates;
Dat_Format_t Format; Dat_Format_t Format;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (Txt_Dates,Dat_PutIconsDateFormat,NULL, Box_BoxBegin (Txt_Dates,Dat_PutIconsDateFormat,NULL,
@ -311,11 +313,12 @@ void Dat_PutBoxToSelectDateFormat (void)
HTM_LI_Begin ("class=\"DAT_%s\"", HTM_LI_Begin ("class=\"DAT_%s\"",
The_GetSuffix ()); The_GetSuffix ());
HTM_LABEL_Begin (NULL); HTM_LABEL_Begin (NULL);
UncheckedOrChecked = (Format == Gbl.Prefs.DateFormat) ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_RADIO ("DateFormat",HTM_SUBMIT_ON_CLICK, HTM_INPUT_RADIO ("DateFormat",HTM_SUBMIT_ON_CLICK,
" value=\"%u\"%s", " value=\"%u\"%s",
(unsigned) Format, (unsigned) Format,
(Format == Gbl.Prefs.DateFormat) ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked]);
"");
Dat_PutSpanDateFormat (Format); Dat_PutSpanDateFormat (Format);
Dat_PutScriptDateFormat (Format); Dat_PutScriptDateFormat (Format);
HTM_LABEL_End (); HTM_LABEL_End ();

View File

@ -803,6 +803,7 @@ static void Enr_PutAreaToEnterUsrsIDs (void)
static void Enr_PutActionsRegRemSeveralUsrs (void) static void Enr_PutActionsRegRemSeveralUsrs (void)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_Register_the_users_indicated_in_step_1; extern const char *Txt_Register_the_users_indicated_in_step_1;
extern const char *Txt_Remove_the_users_indicated_in_step_1; extern const char *Txt_Remove_the_users_indicated_in_step_1;
extern const char *Txt_Remove_the_users_not_indicated_in_step_1; extern const char *Txt_Remove_the_users_not_indicated_in_step_1;
@ -818,8 +819,9 @@ static void Enr_PutActionsRegRemSeveralUsrs (void)
HTM_LI_Begin (NULL); HTM_LI_Begin (NULL);
HTM_LABEL_Begin (NULL); HTM_LABEL_Begin (NULL);
HTM_INPUT_RADIO ("RegRemAction",HTM_DONT_SUBMIT_ON_CLICK, HTM_INPUT_RADIO ("RegRemAction",HTM_DONT_SUBMIT_ON_CLICK,
" value=\"%u\" checked=\"checked\"", " value=\"%u\"%s",
(unsigned) Enr_REGISTER_SPECIFIED_USRS_IN_CRS); (unsigned) Enr_REGISTER_SPECIFIED_USRS_IN_CRS,
HTM_CheckedTxt[Cns_CHECKED]);
HTM_Txt (Txt_Register_the_users_indicated_in_step_1); HTM_Txt (Txt_Register_the_users_indicated_in_step_1);
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_LI_End (); HTM_LI_End ();
@ -2179,7 +2181,7 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
1 << Rol_NET | 1 << Rol_NET |
1 << Rol_TCH, 1 << Rol_TCH,
RolesSelected, RolesSelected,
false, Cns_DISABLED,
HTM_SUBMIT_ON_CHANGE); HTM_SUBMIT_ON_CHANGE);
HTM_TD_End (); HTM_TD_End ();

View File

@ -829,7 +829,7 @@ void Exa_GetListSelectedExaCods (struct Exa_Exams *Exams)
for (NumExam = 0; for (NumExam = 0;
NumExam < Exams->Num; NumExam < Exams->Num;
NumExam++) NumExam++)
Exams->Lst[NumExam].Selected = false; Exams->Lst[NumExam].UncheckedOrChecked = Cns_UNCHECKED;
Exams->NumSelected = 0; Exams->NumSelected = 0;
/* Set some exams as selected */ /* Set some exams as selected */
@ -847,7 +847,7 @@ void Exa_GetListSelectedExaCods (struct Exa_Exams *Exams)
NumExam++) NumExam++)
if (Exams->Lst[NumExam].ExaCod == ExaCod) if (Exams->Lst[NumExam].ExaCod == ExaCod)
{ {
Exams->Lst[NumExam].Selected = true; Exams->Lst[NumExam].UncheckedOrChecked = Cns_CHECKED;
Exams->NumSelected++; Exams->NumSelected++;
break; break;
} }
@ -859,7 +859,7 @@ void Exa_GetListSelectedExaCods (struct Exa_Exams *Exams)
for (NumExam = 0; for (NumExam = 0;
NumExam < Exams->Num; NumExam < Exams->Num;
NumExam++) NumExam++)
Exams->Lst[NumExam].Selected = true; Exams->Lst[NumExam].UncheckedOrChecked = Cns_CHECKED;
Exams->NumSelected = Exams->Num; Exams->NumSelected = Exams->Num;
} }
} }

View File

@ -840,9 +840,10 @@ static void ExaPrn_WriteChoAnsToFill (const struct ExaPrn_Print *Print,
unsigned QstInd, unsigned QstInd,
struct Qst_Question *Question) struct Qst_Question *Question)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
unsigned NumOpt; unsigned NumOpt;
unsigned Indexes[Qst_MAX_OPTIONS_PER_QUESTION]; // Indexes of all answers of this question unsigned Indexes[Qst_MAX_OPTIONS_PER_QUESTION]; // Indexes of all answers of this question
bool UsrAnswers[Qst_MAX_OPTIONS_PER_QUESTION]; Cns_UncheckedOrChecked_t UsrAnswers[Qst_MAX_OPTIONS_PER_QUESTION];
char Id[3 + Cns_MAX_DECIMAL_DIGITS_UINT + 1]; // "Ansxx...x" char Id[3 + Cns_MAX_DECIMAL_DIGITS_UINT + 1]; // "Ansxx...x"
/***** Change format of answers text *****/ /***** Change format of answers text *****/
@ -875,8 +876,7 @@ static void ExaPrn_WriteChoAnsToFill (const struct ExaPrn_Print *Print,
Question->Answer.Type == Qst_ANS_UNIQUE_CHOICE ? "radio" : Question->Answer.Type == Qst_ANS_UNIQUE_CHOICE ? "radio" :
"checkbox", "checkbox",
Id,NumOpt,Indexes[NumOpt], Id,NumOpt,Indexes[NumOpt],
UsrAnswers[Indexes[NumOpt]] ? " checked=\"checked\"" : HTM_CheckedTxt[UsrAnswers[Indexes[NumOpt]]]);
"");
ExaPrn_WriteJSToUpdateExamPrint (Print,QstInd,Id,(int) NumOpt); ExaPrn_WriteJSToUpdateExamPrint (Print,QstInd,Id,(int) NumOpt);
HTM_Txt (" />"); HTM_Txt (" />");
HTM_TD_End (); HTM_TD_End ();

View File

@ -554,6 +554,7 @@ static void ExaRes_ShowResultsEnd (void)
static void ExaRes_ListExamsToSelect (struct Exa_Exams *Exams) static void ExaRes_ListExamsToSelect (struct Exa_Exams *Exams)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Par_CodeStr[Par_NUM_PAR_COD]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
extern const char *Txt_Exams; extern const char *Txt_Exams;
extern const char *Txt_Exam; extern const char *Txt_Exam;
@ -600,8 +601,7 @@ static void ExaRes_ListExamsToSelect (struct Exa_Exams *Exams)
HTM_INPUT_CHECKBOX (Par_CodeStr[ParCod_Exa],HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX (Par_CodeStr[ParCod_Exa],HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"Gam%u\" value=\"%ld\"%s", "id=\"Gam%u\" value=\"%ld\"%s",
NumExam,Exams->Lst[NumExam].ExaCod, NumExam,Exams->Lst[NumExam].ExaCod,
Exams->Lst[NumExam].Selected ? " checked=\"checked\"" : HTM_CheckedTxt[Exams->Lst[NumExam].UncheckedOrChecked]);
"");
HTM_TD_End (); HTM_TD_End ();
HTM_TD_Begin ("class=\"RT DAT_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
@ -718,7 +718,7 @@ static void ExaRes_BuildExamsSelectedCommas (struct Exa_Exams *Exams,
for (NumExam = 0; for (NumExam = 0;
NumExam < Exams->Num; NumExam < Exams->Num;
NumExam++) NumExam++)
if (Exams->Lst[NumExam].Selected) if (Exams->Lst[NumExam].UncheckedOrChecked == Cns_CHECKED)
{ {
sprintf (LongStr,"%ld",Exams->Lst[NumExam].ExaCod); sprintf (LongStr,"%ld",Exams->Lst[NumExam].ExaCod);
if ((*ExamsSelectedCommas)[0]) if ((*ExamsSelectedCommas)[0])

View File

@ -983,8 +983,10 @@ static void ExaSes_ParsFormSession (void *Session)
static void ExaSes_ShowLstGrpsToCreateSession (long SesCod) static void ExaSes_ShowLstGrpsToCreateSession (long SesCod)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_Groups; extern const char *Txt_Groups;
unsigned NumGrpTyp; unsigned NumGrpTyp;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
/***** Get list of groups types and groups in this course *****/ /***** Get list of groups types and groups in this course *****/
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
@ -1007,13 +1009,14 @@ static void ExaSes_ShowLstGrpsToCreateSession (long SesCod)
HTM_TD_Begin ("colspan=\"7\" class=\"LM DAT_%s\"", HTM_TD_Begin ("colspan=\"7\" class=\"LM DAT_%s\"",
The_GetSuffix ()); The_GetSuffix ());
HTM_LABEL_Begin (NULL); HTM_LABEL_Begin (NULL);
UncheckedOrChecked = Grp_DB_CheckIfAssociatedToGrps ("exa_groups",
"SesCod",
SesCod) ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_CHECKBOX ("WholeCrs",HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("WholeCrs",HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"WholeCrs\" value=\"Y\"%s" "id=\"WholeCrs\" value=\"Y\"%s"
" onclick=\"uncheckChildren(this,'GrpCods')\"", " onclick=\"uncheckChildren(this,'GrpCods')\"",
Grp_DB_CheckIfAssociatedToGrps ("exa_groups", HTM_CheckedTxt[UncheckedOrChecked]);
"SesCod",
SesCod) ? "" :
" checked=\"checked\"");
Grp_WriteTheWholeCourse (); Grp_WriteTheWholeCourse ();
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_TD_End (); HTM_TD_End ();

View File

@ -72,7 +72,7 @@ typedef enum
struct Exa_ExamSelected struct Exa_ExamSelected
{ {
long ExaCod; // Exam code long ExaCod; // Exam code
bool Selected; // Is this exam selected when seeing match results? Cns_UncheckedOrChecked_t UncheckedOrChecked; // Is this exam selected when seeing match results?
}; };
struct Exa_Exam struct Exa_Exam

View File

@ -1432,8 +1432,10 @@ static void For_PutIconsForums (__attribute__((unused)) void *Args)
static void For_PutFormWhichForums (const struct For_Forums *Forums) static void For_PutFormWhichForums (const struct For_Forums *Forums)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_FORUM_WHICH_FORUM[For_NUM_FORUM_SETS]; extern const char *Txt_FORUM_WHICH_FORUM[For_NUM_FORUM_SETS];
For_ForumSet_t ForumSet; For_ForumSet_t ForumSet;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
/***** Form to select which forums I want to see: /***** Form to select which forums I want to see:
- all my forums - all my forums
@ -1449,11 +1451,12 @@ static void For_PutFormWhichForums (const struct For_Forums *Forums)
{ {
HTM_LI_Begin (NULL); HTM_LI_Begin (NULL);
HTM_LABEL_Begin (NULL); HTM_LABEL_Begin (NULL);
UncheckedOrChecked = (ForumSet == Forums->ForumSet) ? Cns_UNCHECKED :
Cns_CHECKED;
HTM_INPUT_RADIO ("ForumSet",HTM_SUBMIT_ON_CLICK, HTM_INPUT_RADIO ("ForumSet",HTM_SUBMIT_ON_CLICK,
"value=\"%u\"%s", "value=\"%u\"%s",
(unsigned) ForumSet, (unsigned) ForumSet,
(ForumSet == Forums->ForumSet) ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked]);
"");
HTM_Txt (Txt_FORUM_WHICH_FORUM[ForumSet]); HTM_Txt (Txt_FORUM_WHICH_FORUM[ForumSet]);
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_LI_End (); HTM_LI_End ();

View File

@ -908,7 +908,7 @@ void Gam_GetListSelectedGamCods (struct Gam_Games *Games)
for (NumGame = 0; for (NumGame = 0;
NumGame < Games->Num; NumGame < Games->Num;
NumGame++) NumGame++)
Games->Lst[NumGame].Selected = false; Games->Lst[NumGame].UncheckedOrChecked = Cns_UNCHECKED;
/* Set some games as selected */ /* Set some games as selected */
for (Ptr = Games->GamCodsSelected; for (Ptr = Games->GamCodsSelected;
@ -925,7 +925,7 @@ void Gam_GetListSelectedGamCods (struct Gam_Games *Games)
NumGame++) NumGame++)
if (Games->Lst[NumGame].GamCod == GamCod) if (Games->Lst[NumGame].GamCod == GamCod)
{ {
Games->Lst[NumGame].Selected = true; Games->Lst[NumGame].UncheckedOrChecked = Cns_CHECKED;
Games->NumSelected++; Games->NumSelected++;
break; break;
} }
@ -937,7 +937,7 @@ void Gam_GetListSelectedGamCods (struct Gam_Games *Games)
for (NumGame = 0; for (NumGame = 0;
NumGame < Games->Num; NumGame < Games->Num;
NumGame++) NumGame++)
Games->Lst[NumGame].Selected = true; Games->Lst[NumGame].UncheckedOrChecked = Cns_CHECKED;
Games->NumSelected = Games->Num; Games->NumSelected = Games->Num;
} }
} }

View File

@ -66,7 +66,7 @@ typedef enum
struct Gam_GameSelected struct Gam_GameSelected
{ {
long GamCod; // Game code long GamCod; // Game code
bool Selected; // Is this game selected when seeing match results? Cns_UncheckedOrChecked_t UncheckedOrChecked; // Is this game selected when seeing match results?
}; };
struct Gam_Game struct Gam_Game

View File

@ -409,8 +409,10 @@ void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction,
static void Grp_PutCheckboxAllGrps (void) static void Grp_PutCheckboxAllGrps (void)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_All_groups; extern const char *Txt_All_groups;
Usr_Can_t ICanSelUnselGroup; Usr_Can_t ICanSelUnselGroup;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
@ -428,11 +430,13 @@ static void Grp_PutCheckboxAllGrps (void)
HTM_DIV_Begin ("class=\"CONTEXT_OPT\""); HTM_DIV_Begin ("class=\"CONTEXT_OPT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ()); HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
UncheckedOrChecked = (ICanSelUnselGroup == Usr_CAN &&
Gbl.Crs.Grps.AllGrps) ? Cns_UNCHECKED :
Cns_CHECKED;
HTM_INPUT_CHECKBOX ("AllGroups",HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("AllGroups",HTM_DONT_SUBMIT_ON_CHANGE,
"value=\"Y\"%s", "value=\"Y\"%s%s",
ICanSelUnselGroup == Usr_CAN ? (Gbl.Crs.Grps.AllGrps ? " checked=\"checked\"" HTM_CheckedTxt[UncheckedOrChecked],
" onclick=\"togglecheckChildren(this,'GrpCods')\"" : (ICanSelUnselGroup == Usr_CAN) ? " onclick=\"togglecheckChildren(this,'GrpCods')\"" :
" onclick=\"togglecheckChildren(this,'GrpCods')\"") :
" disabled=\"disabled\""); " disabled=\"disabled\"");
HTM_NBSPTxt (Txt_All_groups); HTM_NBSPTxt (Txt_All_groups);
HTM_LABEL_End (); HTM_LABEL_End ();
@ -1631,6 +1635,7 @@ void Grp_ListGrpsToEditAsgAttSvyEvtMch (struct GroupType *GrpTyp,
Grp_WhichIsAssociatedToGrp_t WhichIsAssociatedToGrp, Grp_WhichIsAssociatedToGrp_t WhichIsAssociatedToGrp,
long Cod) // Assignment, attendance event, survey, exam event or match long Cod) // Assignment, attendance event, survey, exam event or match
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
static const struct static const struct
{ {
const char *Table; const char *Table;
@ -1647,7 +1652,7 @@ void Grp_ListGrpsToEditAsgAttSvyEvtMch (struct GroupType *GrpTyp,
unsigned NumGrpThisType; unsigned NumGrpThisType;
bool IBelongToThisGroup; bool IBelongToThisGroup;
struct Group *Grp; struct Group *Grp;
bool AssociatedToGrp; Cns_UncheckedOrChecked_t UncheckedOrChecked;
/***** Write heading *****/ /***** Write heading *****/
Grp_WriteGrpHead (GrpTyp); Grp_WriteGrpHead (GrpTyp);
@ -1664,12 +1669,12 @@ void Grp_ListGrpsToEditAsgAttSvyEvtMch (struct GroupType *GrpTyp,
Grp = &(GrpTyp->LstGrps[NumGrpThisType]); Grp = &(GrpTyp->LstGrps[NumGrpThisType]);
IBelongToThisGroup = Grp_CheckIfGrpIsInList (Grp->GrpCod,&LstGrpsIBelong); IBelongToThisGroup = Grp_CheckIfGrpIsInList (Grp->GrpCod,&LstGrpsIBelong);
UncheckedOrChecked = Cns_UNCHECKED;
if (Cod > 0) // Cod == -1L means new item, assignment, event, survey, exam event or match if (Cod > 0) // Cod == -1L means new item, assignment, event, survey, exam event or match
AssociatedToGrp = Grp_DB_CheckIfAssociatedToGrp (AssociationsToGrps[WhichIsAssociatedToGrp].Table, if (Grp_DB_CheckIfAssociatedToGrp (AssociationsToGrps[WhichIsAssociatedToGrp].Table,
AssociationsToGrps[WhichIsAssociatedToGrp].Field, AssociationsToGrps[WhichIsAssociatedToGrp].Field,
Cod,Grp->GrpCod); Cod,Grp->GrpCod))
else UncheckedOrChecked = Cns_CHECKED;
AssociatedToGrp = false;
/* Put checkbox to select the group */ /* Put checkbox to select the group */
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -1680,8 +1685,7 @@ void Grp_ListGrpsToEditAsgAttSvyEvtMch (struct GroupType *GrpTyp,
"id=\"Grp%ld\" value=\"%ld\"%s%s" "id=\"Grp%ld\" value=\"%ld\"%s%s"
" onclick=\"uncheckParent(this,'WholeCrs')\"", " onclick=\"uncheckParent(this,'WholeCrs')\"",
Grp->GrpCod,Grp->GrpCod, Grp->GrpCod,Grp->GrpCod,
AssociatedToGrp ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked],
"",
(IBelongToThisGroup || (IBelongToThisGroup ||
Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) ? "" : Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) ? "" :
" disabled=\"disabled\""); " disabled=\"disabled\"");
@ -1845,6 +1849,7 @@ static void Grp_ShowWarningToStdsToChangeGrps (void)
static Usr_Can_t Grp_ListGrpsForChangeMySelection (struct GroupType *GrpTyp, static Usr_Can_t Grp_ListGrpsForChangeMySelection (struct GroupType *GrpTyp,
unsigned *NumGrpsThisTypeIBelong) unsigned *NumGrpsThisTypeIBelong)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
struct ListCodGrps LstGrpsIBelong; struct ListCodGrps LstGrpsIBelong;
unsigned NumGrpThisType; unsigned NumGrpThisType;
struct Group *Grp; struct Group *Grp;
@ -1852,6 +1857,7 @@ static Usr_Can_t Grp_ListGrpsForChangeMySelection (struct GroupType *GrpTyp,
bool IBelongToAClosedGroup; bool IBelongToAClosedGroup;
Usr_Can_t ICanChangeMySelectionForThisGrpTyp; Usr_Can_t ICanChangeMySelectionForThisGrpTyp;
Usr_Can_t ICanChangeMySelectionForThisGrp; Usr_Can_t ICanChangeMySelectionForThisGrp;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
char StrGrpCod[32]; char StrGrpCod[32];
/***** Write heading *****/ /***** Write heading *****/
@ -1968,7 +1974,8 @@ static Usr_Can_t Grp_ListGrpsForChangeMySelection (struct GroupType *GrpTyp,
HTM_TD_Begin (IBelongToThisGroup ? "class=\"LM BG_HIGHLIGHT\"" : HTM_TD_Begin (IBelongToThisGroup ? "class=\"LM BG_HIGHLIGHT\"" :
"class=\"LM\""); "class=\"LM\"");
UncheckedOrChecked = IBelongToThisGroup ? Cns_CHECKED :
Cns_UNCHECKED;
snprintf (StrGrpCod,sizeof (StrGrpCod),"GrpCod%ld",GrpTyp->GrpTypCod); snprintf (StrGrpCod,sizeof (StrGrpCod),"GrpCod%ld",GrpTyp->GrpTypCod);
if (Gbl.Usrs.Me.Role.Logged == Rol_STD && // If I am a student if (Gbl.Usrs.Me.Role.Logged == Rol_STD && // If I am a student
!GrpTyp->MultipleEnrolment && // ...and the enrolment is single !GrpTyp->MultipleEnrolment && // ...and the enrolment is single
@ -1979,7 +1986,7 @@ static Usr_Can_t Grp_ListGrpsForChangeMySelection (struct GroupType *GrpTyp,
HTM_INPUT_RADIO (StrGrpCod,HTM_DONT_SUBMIT_ON_CLICK, HTM_INPUT_RADIO (StrGrpCod,HTM_DONT_SUBMIT_ON_CLICK,
"id=\"Grp%ld\" value=\"%ld\"%s%s", "id=\"Grp%ld\" value=\"%ld\"%s%s",
Grp->GrpCod,Grp->GrpCod, Grp->GrpCod,Grp->GrpCod,
IBelongToThisGroup ? " checked=\"checked\"" : "", // Group selected? HTM_CheckedTxt[UncheckedOrChecked], // Group selected?
ICanChangeMySelectionForThisGrp == Usr_CAN ? "" : ICanChangeMySelectionForThisGrp == Usr_CAN ? "" :
IBelongToThisGroup ? " readonly" : // I can not unregister (disabled does not work because the value is not submitted) IBelongToThisGroup ? " readonly" : // I can not unregister (disabled does not work because the value is not submitted)
" disabled=\"disabled\""); // I can not register " disabled=\"disabled\""); // I can not register
@ -1988,7 +1995,7 @@ static Usr_Can_t Grp_ListGrpsForChangeMySelection (struct GroupType *GrpTyp,
"id=\"Grp%ld\" value=\"%ld\"%s%s" "id=\"Grp%ld\" value=\"%ld\"%s%s"
" onclick=\"selectUnselectRadio(this,this.form.GrpCod%ld,%u)\"", " onclick=\"selectUnselectRadio(this,this.form.GrpCod%ld,%u)\"",
Grp->GrpCod,Grp->GrpCod, Grp->GrpCod,Grp->GrpCod,
IBelongToThisGroup ? " checked=\"checked\"" : "", // Group selected? HTM_CheckedTxt[UncheckedOrChecked], // Group selected?
ICanChangeMySelectionForThisGrp == Usr_CAN ? "" : ICanChangeMySelectionForThisGrp == Usr_CAN ? "" :
IBelongToThisGroup ? " readonly" : // I can not unregister (disabled does not work because the value is not submitted) IBelongToThisGroup ? " readonly" : // I can not unregister (disabled does not work because the value is not submitted)
" disabled=\"disabled\"", // I can not register " disabled=\"disabled\"", // I can not register
@ -1999,7 +2006,7 @@ static Usr_Can_t Grp_ListGrpsForChangeMySelection (struct GroupType *GrpTyp,
HTM_INPUT_CHECKBOX (StrGrpCod,HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX (StrGrpCod,HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"Grp%ld\" value=\"%ld\"%s%s", "id=\"Grp%ld\" value=\"%ld\"%s%s",
Grp->GrpCod,Grp->GrpCod, Grp->GrpCod,Grp->GrpCod,
IBelongToThisGroup ? " checked=\"checked\"" : "", HTM_CheckedTxt[UncheckedOrChecked], // Group selected?
ICanChangeMySelectionForThisGrp == Usr_CAN ? "" : ICanChangeMySelectionForThisGrp == Usr_CAN ? "" :
IBelongToThisGroup ? " readonly" : // I can not unregister (disabled does not work because the value is not submitted) IBelongToThisGroup ? " readonly" : // I can not unregister (disabled does not work because the value is not submitted)
" disabled=\"disabled\""); // I can not register " disabled=\"disabled\""); // I can not register
@ -2059,9 +2066,11 @@ void Grp_ShowLstGrpsToChgOtherUsrsGrps (long UsrCod)
static void Grp_ListGrpsToAddOrRemUsrs (struct GroupType *GrpTyp,long UsrCod) static void Grp_ListGrpsToAddOrRemUsrs (struct GroupType *GrpTyp,long UsrCod)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
struct ListCodGrps LstGrpsUsrBelongs; struct ListCodGrps LstGrpsUsrBelongs;
unsigned NumGrpThisType; unsigned NumGrpThisType;
bool UsrBelongsToThisGroup; bool UsrBelongsToThisGroup;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
struct Group *Grp; struct Group *Grp;
char StrGrpCod[32]; char StrGrpCod[32];
@ -2092,12 +2101,13 @@ static void Grp_ListGrpsToAddOrRemUsrs (struct GroupType *GrpTyp,long UsrCod)
/* Put checkbox to select the group */ /* Put checkbox to select the group */
// Always checkbox, not radio, because the role in the form may be teacher, // Always checkbox, not radio, because the role in the form may be teacher,
// so if he/she is registered as teacher, he/she can belong to several groups // so if he/she is registered as teacher, he/she can belong to several groups
UncheckedOrChecked = UsrBelongsToThisGroup ? Cns_CHECKED :
Cns_UNCHECKED;
snprintf (StrGrpCod,sizeof (StrGrpCod),"GrpCod%ld",GrpTyp->GrpTypCod); snprintf (StrGrpCod,sizeof (StrGrpCod),"GrpCod%ld",GrpTyp->GrpTypCod);
HTM_INPUT_CHECKBOX (StrGrpCod,HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX (StrGrpCod,HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"Grp%ld\" value=\"%ld\"%s", "id=\"Grp%ld\" value=\"%ld\"%s",
Grp->GrpCod,Grp->GrpCod, Grp->GrpCod,Grp->GrpCod,
UsrBelongsToThisGroup ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked]);
""); // I can not register
/* End cell for checkbox */ /* End cell for checkbox */
HTM_TD_End (); HTM_TD_End ();

View File

@ -211,7 +211,7 @@ void Ind_ReqIndicatorsCourses (void)
for (Ind = 0, NumCrssToList = 0; for (Ind = 0, NumCrssToList = 0;
Ind <= Ind_NUM_INDICATORS; Ind <= Ind_NUM_INDICATORS;
Ind++) Ind++)
if (Indicators.IndicatorsSelected[Ind]) if (Indicators.IndicatorsSelected[Ind] == Cns_CHECKED)
NumCrssToList += NumCrssWithIndicatorYes[Ind]; NumCrssToList += NumCrssWithIndicatorYes[Ind];
if (Ind_GetIfShowBigList (&Indicators,NumCrssToList)) if (Ind_GetIfShowBigList (&Indicators,NumCrssToList))
{ {
@ -314,7 +314,7 @@ static void Ind_GetParNumIndicators (struct Ind_Indicators *Indicators)
for (Ind = 0; for (Ind = 0;
Ind <= Ind_NUM_INDICATORS; Ind <= Ind_NUM_INDICATORS;
Ind++) Ind++)
Indicators->IndicatorsSelected[Ind] = false; Indicators->IndicatorsSelected[Ind] = Cns_UNCHECKED;
/* Set indicators selected */ /* Set indicators selected */
for (Ptr = Indicators->StrIndicatorsSelected; for (Ptr = Indicators->StrIndicatorsSelected;
@ -330,7 +330,7 @@ static void Ind_GetParNumIndicators (struct Ind_Indicators *Indicators)
Ind <= Ind_NUM_INDICATORS; Ind <= Ind_NUM_INDICATORS;
Ind++) Ind++)
if ((long) Ind == Indicator) if ((long) Ind == Indicator)
Indicators->IndicatorsSelected[Ind] = true; Indicators->IndicatorsSelected[Ind] = Cns_CHECKED;
} }
} }
else else
@ -338,7 +338,7 @@ static void Ind_GetParNumIndicators (struct Ind_Indicators *Indicators)
for (Ind = 0; for (Ind = 0;
Ind <= Ind_NUM_INDICATORS; Ind <= Ind_NUM_INDICATORS;
Ind++) Ind++)
Indicators->IndicatorsSelected[Ind] = true; Indicators->IndicatorsSelected[Ind] = Cns_CHECKED;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -438,6 +438,7 @@ static void Ind_ShowNumCoursesWithIndicators (const struct Ind_Indicators *Indic
unsigned NumCrss, unsigned NumCrss,
Frm_PutForm_t PutForm) Frm_PutForm_t PutForm)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_HIERARCHY_PLURAL_Abc[Hie_NUM_LEVELS]; extern const char *Txt_HIERARCHY_PLURAL_Abc[Hie_NUM_LEVELS];
extern const char *Txt_Total; extern const char *Txt_Total;
char *ClassNormal; char *ClassNormal;
@ -466,8 +467,8 @@ static void Ind_ShowNumCoursesWithIndicators (const struct Ind_Indicators *Indic
Ind <= Ind_NUM_INDICATORS; Ind <= Ind_NUM_INDICATORS;
Ind++) Ind++)
{ {
Class = Indicators->IndicatorsSelected[Ind] ? ClassHighlight : Class = (Indicators->IndicatorsSelected[Ind] == Cns_CHECKED) ? ClassHighlight :
ClassNormal; ClassNormal;
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
if (PutForm == Frm_PUT_FORM) if (PutForm == Frm_PUT_FORM)
@ -476,8 +477,7 @@ static void Ind_ShowNumCoursesWithIndicators (const struct Ind_Indicators *Indic
HTM_INPUT_CHECKBOX ("Indicators",HTM_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("Indicators",HTM_SUBMIT_ON_CHANGE,
"id=\"Indicators%u\" value=\"%u\"%s", "id=\"Indicators%u\" value=\"%u\"%s",
Ind,Ind, Ind,Ind,
Indicators->IndicatorsSelected[Ind] ? " checked=\"checked\"" : HTM_CheckedTxt[Indicators->IndicatorsSelected[Ind]]);
"");
HTM_TD_End (); HTM_TD_End ();
} }
@ -688,13 +688,13 @@ static void Ind_ShowTableOfCoursesWithIndicators (const struct Ind_Indicators *I
/* Get stored number of indicators of this course */ /* Get stored number of indicators of this course */
NumIndicators = Ind_GetAndUpdateNumIndicatorsCrs (CrsCod); NumIndicators = Ind_GetAndUpdateNumIndicatorsCrs (CrsCod);
if (Indicators->IndicatorsSelected[NumIndicators]) if (Indicators->IndicatorsSelected[NumIndicators] == Cns_CHECKED)
{ {
/* Compute and store indicators */ /* Compute and store indicators */
Ind_ComputeAndStoreIndicatorsCrs (CrsCod,(int) NumIndicators,&IndicatorsCrs); Ind_ComputeAndStoreIndicatorsCrs (CrsCod,(int) NumIndicators,&IndicatorsCrs);
/* The number of indicators may have changed */ /* The number of indicators may have changed */
if (Indicators->IndicatorsSelected[IndicatorsCrs.NumIndicators]) if (Indicators->IndicatorsSelected[IndicatorsCrs.NumIndicators] == Cns_CHECKED)
{ {
ActCod = Act_GetActCod (ActReqStaCrs); ActCod = Act_GetActCod (ActReqStaCrs);

View File

@ -66,7 +66,7 @@ struct Ind_Indicators
long DegTypCod; long DegTypCod;
long DptCod; long DptCod;
char StrIndicatorsSelected[Ind_MAX_SIZE_INDICATORS_SELECTED + 1]; char StrIndicatorsSelected[Ind_MAX_SIZE_INDICATORS_SELECTED + 1];
bool IndicatorsSelected[1 + Ind_NUM_INDICATORS]; Cns_UncheckedOrChecked_t IndicatorsSelected[1 + Ind_NUM_INDICATORS];
}; };
/*****************************************************************************/ /*****************************************************************************/

View File

@ -815,6 +815,7 @@ void Inf_FormsToSelSendInfo (void)
extern const char *Hlp_COURSE_FAQ_edit; extern const char *Hlp_COURSE_FAQ_edit;
extern const char *Hlp_COURSE_Links_edit; extern const char *Hlp_COURSE_Links_edit;
extern const char *Hlp_COURSE_Assessment_edit; extern const char *Hlp_COURSE_Assessment_edit;
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_Source_of_information; extern const char *Txt_Source_of_information;
extern const char *Txt_INFO_SRC_FULL_TEXT[Inf_NUM_SOURCES]; extern const char *Txt_INFO_SRC_FULL_TEXT[Inf_NUM_SOURCES];
extern const char *Txt_INFO_SRC_HELP[Inf_NUM_SOURCES]; extern const char *Txt_INFO_SRC_HELP[Inf_NUM_SOURCES];
@ -822,6 +823,7 @@ void Inf_FormsToSelSendInfo (void)
struct Inf_FromDB FromDB; struct Inf_FromDB FromDB;
Inf_Src_t InfoSrc; Inf_Src_t InfoSrc;
bool InfoAvailable[Inf_NUM_SOURCES]; bool InfoAvailable[Inf_NUM_SOURCES];
Cns_UncheckedOrChecked_t UncheckedOrChecked;
static Act_Action_t Inf_ActionsSelecInfoSrc[Inf_NUM_TYPES] = static Act_Action_t Inf_ActionsSelecInfoSrc[Inf_NUM_TYPES] =
{ {
[Inf_INFORMATION ] = ActSelInfSrcCrsInf, [Inf_INFORMATION ] = ActSelInfSrcCrsInf,
@ -902,16 +904,18 @@ void Inf_FormsToSelSendInfo (void)
""); "");
Frm_BeginForm (Inf_ActionsSelecInfoSrc[Gbl.Crs.Info.Type]); Frm_BeginForm (Inf_ActionsSelecInfoSrc[Gbl.Crs.Info.Type]);
Syl_PutParWhichSyllabus (&Syllabus.WhichSyllabus); Syl_PutParWhichSyllabus (&Syllabus.WhichSyllabus);
UncheckedOrChecked = (InfoSrc == FromDB.Src) ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_RADIO ("InfoSrc",InfoSrc != FromDB.Src && HTM_INPUT_RADIO ("InfoSrc",InfoSrc != FromDB.Src &&
(InfoSrc == Inf_NONE || (InfoSrc == Inf_NONE ||
InfoAvailable[InfoSrc]) ? HTM_SUBMIT_ON_CLICK : InfoAvailable[InfoSrc]) ? HTM_SUBMIT_ON_CLICK :
HTM_DONT_SUBMIT_ON_CLICK, HTM_DONT_SUBMIT_ON_CLICK,
"id=\"InfoSrc%u\" value=\"%u\"%s", "id=\"InfoSrc%u\" value=\"%u\"%s%s",
(unsigned) InfoSrc,(unsigned) InfoSrc, (unsigned) InfoSrc,(unsigned) InfoSrc,
InfoSrc == FromDB.Src ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked],
(InfoSrc == Inf_NONE || (InfoSrc == Inf_NONE ||
InfoAvailable[InfoSrc]) ? "" : // Info available for this source InfoAvailable[InfoSrc]) ? "" : // Info available for this source
" disabled=\"disabled\""); " disabled=\"disabled\"");
Frm_EndForm (); Frm_EndForm ();
HTM_TD_End (); HTM_TD_End ();

View File

@ -1241,8 +1241,10 @@ static void Mch_ParsFormMatch (void *Match)
static void Mch_ShowLstGrpsToEditMatch (long MchCod) static void Mch_ShowLstGrpsToEditMatch (long MchCod)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_Groups; extern const char *Txt_Groups;
unsigned NumGrpTyp; unsigned NumGrpTyp;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
/***** Get list of groups types and groups in this course *****/ /***** Get list of groups types and groups in this course *****/
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
@ -1260,21 +1262,20 @@ static void Mch_ShowLstGrpsToEditMatch (long MchCod)
/***** First row: checkbox to select the whole course *****/ /***** First row: checkbox to select the whole course *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
HTM_TD_Begin ("colspan=\"7\" class=\"LM DAT_%s\"", HTM_TD_Begin ("colspan=\"7\" class=\"LM DAT_%s\"",
The_GetSuffix ()); The_GetSuffix ());
HTM_LABEL_Begin (NULL); HTM_LABEL_Begin (NULL);
UncheckedOrChecked = Grp_DB_CheckIfAssociatedToGrps ("mch_groups",
"MchCod",
MchCod) ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_CHECKBOX ("WholeCrs",HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("WholeCrs",HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"WholeCrs\" value=\"Y\"%s" "id=\"WholeCrs\" value=\"Y\"%s"
" onclick=\"uncheckChildren(this,'GrpCods')\"", " onclick=\"uncheckChildren(this,'GrpCods')\"",
Grp_DB_CheckIfAssociatedToGrps ("mch_groups", HTM_CheckedTxt[UncheckedOrChecked]);
"MchCod",
MchCod) ? "" :
" checked=\"checked\"");
Grp_WriteTheWholeCourse (); Grp_WriteTheWholeCourse ();
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
/***** List the groups for each group type *****/ /***** List the groups for each group type *****/

View File

@ -518,6 +518,7 @@ static void MchRes_ShowResultsEnd (void)
static void MchRes_ListGamesToSelect (struct Gam_Games *Games) static void MchRes_ListGamesToSelect (struct Gam_Games *Games)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Par_CodeStr[Par_NUM_PAR_COD]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
extern const char *Txt_Games; extern const char *Txt_Games;
extern const char *Txt_Game; extern const char *Txt_Game;
@ -564,8 +565,7 @@ static void MchRes_ListGamesToSelect (struct Gam_Games *Games)
HTM_INPUT_CHECKBOX (Par_CodeStr[ParCod_Gam],HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX (Par_CodeStr[ParCod_Gam],HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"Gam%u\" value=\"%ld\"%s", "id=\"Gam%u\" value=\"%ld\"%s",
NumGame,Games->Lst[NumGame].GamCod, NumGame,Games->Lst[NumGame].GamCod,
Games->Lst[NumGame].Selected ? " checked=\"checked\"" : HTM_CheckedTxt[Games->Lst[NumGame].UncheckedOrChecked]);
"");
HTM_TD_End (); HTM_TD_End ();
HTM_TD_Begin ("class=\"RT DAT_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
@ -671,7 +671,7 @@ static void MchRes_BuildGamesSelectedCommas (struct Gam_Games *Games,
for (NumGame = 0; for (NumGame = 0;
NumGame < Games->Num; NumGame < Games->Num;
NumGame++) NumGame++)
if (Games->Lst[NumGame].Selected) if (Games->Lst[NumGame].UncheckedOrChecked == Cns_CHECKED)
{ {
sprintf (LongStr,"%ld",Games->Lst[NumGame].GamCod); sprintf (LongStr,"%ld",Games->Lst[NumGame].GamCod);
if ((*GamesSelectedCommas)[0]) if ((*GamesSelectedCommas)[0])

View File

@ -1900,14 +1900,17 @@ static void Msg_ShowFormToFilterMsgs (const struct Msg_Messages *Messages)
static void Msg_ShowFormToShowOnlyUnreadMessages (const struct Msg_Messages *Messages) static void Msg_ShowFormToShowOnlyUnreadMessages (const struct Msg_Messages *Messages)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_only_unread_messages; extern const char *Txt_only_unread_messages;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
/***** Put checkbox to select whether to show only unread (received) messages *****/ /***** Put checkbox to select whether to show only unread (received) messages *****/
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ()); HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
UncheckedOrChecked = Messages->ShowOnlyUnreadMsgs ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_CHECKBOX ("OnlyUnreadMsgs",HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("OnlyUnreadMsgs",HTM_DONT_SUBMIT_ON_CHANGE,
"value=\"Y\"%s", "value=\"Y\"%s",
Messages->ShowOnlyUnreadMsgs ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked]);
"");
HTM_Txt (Txt_only_unread_messages); HTM_Txt (Txt_only_unread_messages);
HTM_LABEL_End (); HTM_LABEL_End ();
} }

View File

@ -1615,12 +1615,14 @@ void Ntf_MarkAllNotifAsSeen (void)
void Ntf_PutFormChangeNotifSentByEMail (void) void Ntf_PutFormChangeNotifSentByEMail (void)
{ {
extern const char *Hlp_PROFILE_Settings_notifications; extern const char *Hlp_PROFILE_Settings_notifications;
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_Save_changes; extern const char *Txt_Save_changes;
extern const char *Txt_Notifications; extern const char *Txt_Notifications;
extern const char *Txt_Create_BR_notification; extern const char *Txt_Create_BR_notification;
extern const char *Txt_Notify_me_BR_by_email; extern const char *Txt_Notify_me_BR_by_email;
extern const char *Txt_NOTIFY_EVENTS_PLURAL[Ntf_NUM_NOTIFY_EVENTS]; extern const char *Txt_NOTIFY_EVENTS_PLURAL[Ntf_NUM_NOTIFY_EVENTS];
Ntf_NotifyEvent_t NotifyEvent; Ntf_NotifyEvent_t NotifyEvent;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
/***** Begin section with settings on privacy *****/ /***** Begin section with settings on privacy *****/
HTM_SECTION_Begin (Ntf_NOTIFICATIONS_ID); HTM_SECTION_Begin (Ntf_NOTIFICATIONS_ID);
@ -1659,19 +1661,23 @@ void Ntf_PutFormChangeNotifSentByEMail (void)
HTM_TD_End (); HTM_TD_End ();
HTM_TD_Begin ("class=\"CM\""); HTM_TD_Begin ("class=\"CM\"");
HTM_INPUT_CHECKBOX (Ntf_ParNotifMeAboutNotifyEvents[NotifyEvent],HTM_DONT_SUBMIT_ON_CHANGE, UncheckedOrChecked = (Gbl.Usrs.Me.UsrDat.NtfEvents.CreateNotif &
(1 << NotifyEvent)) ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_CHECKBOX (Ntf_ParNotifMeAboutNotifyEvents[NotifyEvent],
HTM_DONT_SUBMIT_ON_CHANGE,
"value=\"Y\"%s", "value=\"Y\"%s",
(Gbl.Usrs.Me.UsrDat.NtfEvents.CreateNotif & HTM_CheckedTxt[UncheckedOrChecked]);
(1 << NotifyEvent)) ? " checked=\"checked\"" :
"");
HTM_TD_End (); HTM_TD_End ();
HTM_TD_Begin ("class=\"CM\""); HTM_TD_Begin ("class=\"CM\"");
HTM_INPUT_CHECKBOX (Ntf_ParEmailMeAboutNotifyEvents[NotifyEvent],HTM_DONT_SUBMIT_ON_CHANGE, UncheckedOrChecked = (Gbl.Usrs.Me.UsrDat.NtfEvents.SendEmail &
(1 << NotifyEvent)) ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_CHECKBOX (Ntf_ParEmailMeAboutNotifyEvents[NotifyEvent],
HTM_DONT_SUBMIT_ON_CHANGE,
"value=\"Y\"%s", "value=\"Y\"%s",
(Gbl.Usrs.Me.UsrDat.NtfEvents.SendEmail & HTM_CheckedTxt[UncheckedOrChecked]);
(1 << NotifyEvent)) ? " checked=\"checked\"" :
"");
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();

View File

@ -163,8 +163,10 @@ static void Pri_PutFormVisibility (const char *TxtLabel,
Pri_Visibility_t CurrentVisibilityInDB, Pri_Visibility_t CurrentVisibilityInDB,
unsigned MaskAllowedVisibility) unsigned MaskAllowedVisibility)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_PRIVACY_OPTIONS[Pri_NUM_OPTIONS_PRIVACY]; extern const char *Txt_PRIVACY_OPTIONS[Pri_NUM_OPTIONS_PRIVACY];
Pri_Visibility_t Visibility; Pri_Visibility_t Visibility;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -189,14 +191,15 @@ static void Pri_PutFormVisibility (const char *TxtLabel,
HTM_LI_Begin ("class=\"DAT_%s\"", HTM_LI_Begin ("class=\"DAT_%s\"",
The_GetSuffix ()); The_GetSuffix ());
HTM_LABEL_Begin (NULL); HTM_LABEL_Begin (NULL);
HTM_INPUT_RADIO (ParName,Action == ActUnk ? HTM_DONT_SUBMIT_ON_CLICK : UncheckedOrChecked = (Visibility == CurrentVisibilityInDB) ? Cns_CHECKED :
HTM_SUBMIT_ON_CLICK, Cns_UNCHECKED;
HTM_INPUT_RADIO (ParName,(Action == ActUnk) ? HTM_DONT_SUBMIT_ON_CLICK :
HTM_SUBMIT_ON_CLICK,
"value=\"%u\"%s%s", "value=\"%u\"%s%s",
(unsigned) Visibility, (unsigned) Visibility,
Visibility == CurrentVisibilityInDB ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked],
"", (Action == ActUnk) ? " disabled=\"disabled\"" :
Action == ActUnk ? " disabled=\"disabled\"" : "");
"");
HTM_Txt (Txt_PRIVACY_OPTIONS[Visibility]); HTM_Txt (Txt_PRIVACY_OPTIONS[Visibility]);
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_LI_End (); HTM_LI_End ();

View File

@ -307,13 +307,16 @@ PrjCfg_RubricType_t PrjCfg_GetRubricFromString (const char *Str)
static void PrjCfg_ShowFormNETCanCreate (const struct PrjCfg_Config *Config) static void PrjCfg_ShowFormNETCanCreate (const struct PrjCfg_Config *Config)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_Non_editing_teachers_can_create_new_projects; extern const char *Txt_Non_editing_teachers_can_create_new_projects;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
HTM_LABEL_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); HTM_LABEL_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
UncheckedOrChecked = Config->NETCanCreate ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_CHECKBOX ("NETCanCreate",HTM_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("NETCanCreate",HTM_SUBMIT_ON_CHANGE,
"id=\"NETCanCreate\" value=\"Y\"%s", "id=\"NETCanCreate\" value=\"Y\"%s",
Config->NETCanCreate ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked]);
"");
HTM_Txt (Txt_Non_editing_teachers_can_create_new_projects); HTM_Txt (Txt_Non_editing_teachers_can_create_new_projects);
HTM_LABEL_End (); HTM_LABEL_End ();
} }

View File

@ -233,10 +233,11 @@ void Qst_ShowFormAnswerTypes (const struct Qst_AnswerTypes *AnswerTypes)
HTM_TD_Begin ("class=\"LM\""); HTM_TD_Begin ("class=\"LM\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"", HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",
The_GetSuffix ()); The_GetSuffix ());
UncheckedOrChecked = AnswerTypes->All ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_CHECKBOX ("AllAnsTypes",HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("AllAnsTypes",HTM_DONT_SUBMIT_ON_CHANGE,
"value=\"Y\"%s onclick=\"togglecheckChildren(this,'AnswerType');\"", "value=\"Y\"%s onclick=\"togglecheckChildren(this,'AnswerType');\"",
AnswerTypes->All ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked]);
"");
HTM_NBSPTxt (Txt_All_types_of_answers); HTM_NBSPTxt (Txt_All_types_of_answers);
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_TD_End (); HTM_TD_End ();
@ -914,8 +915,10 @@ void Qst_WriteHeadingRowQuestionsForEdition (struct Qst_Questions *Questions)
void Qst_WriteQuestionListing (struct Qst_Questions *Questions,unsigned QstInd) void Qst_WriteQuestionListing (struct Qst_Questions *Questions,unsigned QstInd)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
static unsigned UniqueId = 0; static unsigned UniqueId = 0;
char *Id; char *Id;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
/***** Get and show question data *****/ /***** Get and show question data *****/
if (Qst_GetQstDataByCod (&Questions->Question)) if (Qst_GetQstDataByCod (&Questions->Question))
@ -981,10 +984,11 @@ void Qst_WriteQuestionListing (struct Qst_Questions *Questions,unsigned QstInd)
Frm_BeginForm (ActChgShfTstQst); Frm_BeginForm (ActChgShfTstQst);
Qst_PutParsEditQst (Questions); Qst_PutParsEditQst (Questions);
Par_PutParUnsigned (NULL,"Order",(unsigned) Questions->SelectedOrder); Par_PutParUnsigned (NULL,"Order",(unsigned) Questions->SelectedOrder);
UncheckedOrChecked = Questions->Question.Answer.Shuffle ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_CHECKBOX ("Shuffle",HTM_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("Shuffle",HTM_SUBMIT_ON_CHANGE,
"value=\"Y\"%s", "value=\"Y\"%s",
Questions->Question.Answer.Shuffle ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked]);
"");
Frm_EndForm (); Frm_EndForm ();
} }
HTM_TD_End (); HTM_TD_End ();
@ -1229,9 +1233,11 @@ void Qst_PutCheckboxToSelectAllQuestions (void)
void Qst_WriteQuestionRowForSelection (unsigned QstInd, void Qst_WriteQuestionRowForSelection (unsigned QstInd,
struct Qst_Question *Question) struct Qst_Question *Question)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_TST_STR_ANSWER_TYPES[Qst_NUM_ANS_TYPES]; extern const char *Txt_TST_STR_ANSWER_TYPES[Qst_NUM_ANS_TYPES];
static unsigned UniqueId = 0; static unsigned UniqueId = 0;
char *Id; char *Id;
Cns_UncheckedOrChecked_t UncheckedOrChecked;
/***** Get and show questvoidion data *****/ /***** Get and show questvoidion data *****/
if (Qst_GetQstDataByCod (Question)) if (Qst_GetQstDataByCod (Question))
@ -1291,12 +1297,12 @@ void Qst_WriteQuestionRowForSelection (unsigned QstInd,
/* Write if shuffle is enabled */ /* Write if shuffle is enabled */
HTM_TD_Begin ("class=\"CT DAT_SMALL_%s %s\"", HTM_TD_Begin ("class=\"CT DAT_SMALL_%s %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); UncheckedOrChecked = Question->Answer.Shuffle ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_CHECKBOX ("Shuffle",HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("Shuffle",HTM_DONT_SUBMIT_ON_CHANGE,
"value=\"Y\"%s disabled=\"disabled\"", "value=\"Y\"%s disabled=\"disabled\"",
Question->Answer.Shuffle ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked]);
"");
HTM_TD_End (); HTM_TD_End ();
/* Write stem */ /* Write stem */
@ -1803,6 +1809,7 @@ void Qst_ShowFormEditOneQst (void)
void Qst_PutFormEditOneQst (struct Qst_Question *Question) void Qst_PutFormEditOneQst (struct Qst_Question *Question)
{ {
extern const char *Hlp_ASSESSMENT_Questions_writing_a_question; extern const char *Hlp_ASSESSMENT_Questions_writing_a_question;
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
extern const char *Txt_Question_code_X; extern const char *Txt_Question_code_X;
extern const char *Txt_Question; extern const char *Txt_Question;
extern const char *Txt_Tags; extern const char *Txt_Tags;
@ -1839,6 +1846,7 @@ void Qst_PutFormEditOneQst (struct Qst_Question *Question)
char *Title; char *Title;
char *FuncOnChange; char *FuncOnChange;
bool NewQuestion = (Question->QstCod > 0); bool NewQuestion = (Question->QstCod > 0);
Cns_UncheckedOrChecked_t UncheckedOrChecked;
/***** Begin box *****/ /***** Begin box *****/
if (NewQuestion) // The question already has assigned a code if (NewQuestion) // The question already has assigned a code
@ -2010,11 +2018,13 @@ void Qst_PutFormEditOneQst (struct Qst_Question *Question)
AnsType++) AnsType++)
{ {
HTM_LABEL_Begin (NULL); HTM_LABEL_Begin (NULL);
UncheckedOrChecked = (AnsType == Question->Answer.Type) ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_RADIO ("AnswerType",HTM_DONT_SUBMIT_ON_CLICK, HTM_INPUT_RADIO ("AnswerType",HTM_DONT_SUBMIT_ON_CLICK,
"value=\"%u\"%s onclick=\"enableDisableAns(this.form);\"", "value=\"%u\"%s"
" onclick=\"enableDisableAns(this.form);\"",
(unsigned) AnsType, (unsigned) AnsType,
AnsType == Question->Answer.Type ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked]);
"");
HTM_TxtF ("%s&nbsp;",Txt_TST_STR_ANSWER_TYPES[AnsType]); HTM_TxtF ("%s&nbsp;",Txt_TST_STR_ANSWER_TYPES[AnsType]);
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_BR (); HTM_BR ();
@ -2070,13 +2080,14 @@ void Qst_PutFormEditOneQst (struct Qst_Question *Question)
HTM_TD_Empty (1); HTM_TD_Empty (1);
HTM_TD_Begin ("class=\"LT\""); HTM_TD_Begin ("class=\"LT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ()); HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
UncheckedOrChecked = Question->Answer.Shuffle ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_CHECKBOX ("Shuffle",HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("Shuffle",HTM_DONT_SUBMIT_ON_CHANGE,
"value=\"Y\"%s%s", "value=\"Y\"%s%s",
Question->Answer.Shuffle ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked],
"", (Question->Answer.Type != Qst_ANS_UNIQUE_CHOICE &&
Question->Answer.Type != Qst_ANS_UNIQUE_CHOICE && Question->Answer.Type != Qst_ANS_MULTIPLE_CHOICE) ? " disabled=\"disabled\"" :
Question->Answer.Type != Qst_ANS_MULTIPLE_CHOICE ? " disabled=\"disabled\"" : "");
"");
HTM_Txt (Txt_Shuffle); HTM_Txt (Txt_Shuffle);
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_TD_End (); HTM_TD_End ();
@ -2108,26 +2119,27 @@ void Qst_PutFormEditOneQst (struct Qst_Question *Question)
/***** Left column: selectors *****/ /***** Left column: selectors *****/
HTM_TD_Begin ("class=\"Qst_ANS_LEFT_COL %s\"", HTM_TD_Begin ("class=\"Qst_ANS_LEFT_COL %s\"",
The_GetColorRows ()); The_GetColorRows ());
UncheckedOrChecked = Question->Answer.Options[NumOpt].Correct ? Cns_CHECKED :
Cns_UNCHECKED;
/* Radio selector for unique choice answers */ /* Radio selector for unique choice answers */
HTM_INPUT_RADIO ("AnsUni",HTM_DONT_SUBMIT_ON_CLICK, HTM_INPUT_RADIO ("AnsUni",HTM_DONT_SUBMIT_ON_CLICK,
"value=\"%u\"%s%s%s onclick=\"enableDisableAns(this.form);\"", "value=\"%u\"%s%s%s"
" onclick=\"enableDisableAns(this.form);\"",
NumOpt, NumOpt,
Question->Answer.Options[NumOpt].Correct ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked],
"",
NumOpt < 2 ? " required=\"required\"" : // First or second options required NumOpt < 2 ? " required=\"required\"" : // First or second options required
"", "",
Question->Answer.Type == Qst_ANS_UNIQUE_CHOICE ? "" : (Question->Answer.Type == Qst_ANS_UNIQUE_CHOICE) ? "" :
" disabled=\"disabled\""); " disabled=\"disabled\"");
/* Checkbox for multiple choice answers */ /* Checkbox for multiple choice answers */
HTM_INPUT_CHECKBOX ("AnsMulti",HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX ("AnsMulti",HTM_DONT_SUBMIT_ON_CHANGE,
"value=\"%u\"%s%s", "value=\"%u\"%s%s",
NumOpt, NumOpt,
Question->Answer.Options[NumOpt].Correct ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked],
"", (Question->Answer.Type == Qst_ANS_MULTIPLE_CHOICE) ? "" :
Question->Answer.Type == Qst_ANS_MULTIPLE_CHOICE ? "" : " disabled=\"disabled\"");
" disabled=\"disabled\"");
HTM_TD_End (); HTM_TD_End ();
@ -2264,12 +2276,16 @@ void Qst_PutFloatInputField (const char *Label,const char *Field,
void Qst_PutTFInputField (const struct Qst_Question *Question, void Qst_PutTFInputField (const struct Qst_Question *Question,
const char *Label,char Value) const char *Label,char Value)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
Cns_UncheckedOrChecked_t UncheckedOrChecked;
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ()); HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
UncheckedOrChecked = (Question->Answer.TF == Value) ? Cns_CHECKED :
Cns_UNCHECKED;
HTM_INPUT_RADIO ("AnsTF",HTM_DONT_SUBMIT_ON_CLICK, HTM_INPUT_RADIO ("AnsTF",HTM_DONT_SUBMIT_ON_CLICK,
"value=\"%c\"%s%s required=\"required\"", "value=\"%c\"%s%s required=\"required\"",
Value, Value,
Question->Answer.TF == Value ? " checked=\"checked\"" : HTM_CheckedTxt[UncheckedOrChecked],
"",
Question->Answer.Type == Qst_ANS_TRUE_FALSE ? "" : Question->Answer.Type == Qst_ANS_TRUE_FALSE ? "" :
" disabled=\"disabled\""); " disabled=\"disabled\"");
HTM_Txt (Label); HTM_Txt (Label);

View File

@ -615,7 +615,7 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys,
1 << Rol_NET | 1 << Rol_NET |
1 << Rol_TCH, 1 << Rol_TCH,
Surveys->Svy.Roles, Surveys->Svy.Roles,
true, Cns_ENABLED,
HTM_DONT_SUBMIT_ON_CHANGE); HTM_DONT_SUBMIT_ON_CHANGE);
HTM_DIV_End (); HTM_DIV_End ();
@ -1703,7 +1703,7 @@ void Svy_ReqCreatOrEditSvy (void)
1 << Rol_NET | 1 << Rol_NET |
1 << Rol_TCH, 1 << Rol_TCH,
Surveys.Svy.Roles, Surveys.Svy.Roles,
false, Cns_DISABLED,
HTM_DONT_SUBMIT_ON_CHANGE); HTM_DONT_SUBMIT_ON_CHANGE);
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();

View File

@ -418,9 +418,10 @@ static void TstPrn_WriteChoAnsToFill (const struct TstPrn_PrintedQuestion *Print
unsigned QstInd, unsigned QstInd,
struct Qst_Question *Question) struct Qst_Question *Question)
{ {
extern const char *HTM_CheckedTxt[Cns_NUM_UNCHECKED_CHECKED];
unsigned NumOpt; unsigned NumOpt;
unsigned Indexes[Qst_MAX_OPTIONS_PER_QUESTION]; // Indexes of all answers of this question unsigned Indexes[Qst_MAX_OPTIONS_PER_QUESTION]; // Indexes of all answers of this question
bool UsrAnswers[Qst_MAX_OPTIONS_PER_QUESTION]; Cns_UncheckedOrChecked_t UsrAnswers[Qst_MAX_OPTIONS_PER_QUESTION];
char StrAns[3 + Cns_MAX_DECIMAL_DIGITS_UINT + 1]; // "Ansxx...x" char StrAns[3 + Cns_MAX_DECIMAL_DIGITS_UINT + 1]; // "Ansxx...x"
/***** Change format of answers text *****/ /***** Change format of answers text *****/
@ -454,18 +455,14 @@ static void TstPrn_WriteChoAnsToFill (const struct TstPrn_PrintedQuestion *Print
HTM_INPUT_RADIO (StrAns,HTM_DONT_SUBMIT_ON_CLICK, HTM_INPUT_RADIO (StrAns,HTM_DONT_SUBMIT_ON_CLICK,
"id=\"Ans%010u_%u\" value=\"%u\"%s" "id=\"Ans%010u_%u\" value=\"%u\"%s"
" onclick=\"selectUnselectRadio(this,this.form.Ans%010u,%u);\"", " onclick=\"selectUnselectRadio(this,this.form.Ans%010u,%u);\"",
QstInd,NumOpt, QstInd,NumOpt,Indexes[NumOpt],
Indexes[NumOpt], HTM_CheckedTxt[UsrAnswers[Indexes[NumOpt]]],
UsrAnswers[Indexes[NumOpt]] ? " checked=\"checked\"" :
"",
QstInd,Question->Answer.NumOptions); QstInd,Question->Answer.NumOptions);
else // Answer.Type == Tst_ANS_MULTIPLE_CHOICE else // Answer.Type == Tst_ANS_MULTIPLE_CHOICE
HTM_INPUT_CHECKBOX (StrAns,HTM_DONT_SUBMIT_ON_CHANGE, HTM_INPUT_CHECKBOX (StrAns,HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"Ans%010u_%u\" value=\"%u\"%s", "id=\"Ans%010u_%u\" value=\"%u\"%s",
QstInd,NumOpt, QstInd,NumOpt,Indexes[NumOpt],
Indexes[NumOpt], HTM_CheckedTxt[UsrAnswers[Indexes[NumOpt]]]);
UsrAnswers[Indexes[NumOpt]] ? " checked=\"checked\"" :
"");
HTM_TD_End (); HTM_TD_End ();
@ -918,7 +915,7 @@ void TstPrn_ComputeChoAnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
const struct Qst_Question *Question) const struct Qst_Question *Question)
{ {
unsigned Indexes[Qst_MAX_OPTIONS_PER_QUESTION]; // Indexes of all answers of this question unsigned Indexes[Qst_MAX_OPTIONS_PER_QUESTION]; // Indexes of all answers of this question
bool UsrAnswers[Qst_MAX_OPTIONS_PER_QUESTION]; Cns_UncheckedOrChecked_t UsrAnswers[Qst_MAX_OPTIONS_PER_QUESTION];
unsigned NumOpt; unsigned NumOpt;
unsigned NumOptTotInQst = 0; unsigned NumOptTotInQst = 0;
unsigned NumOptCorrInQst = 0; unsigned NumOptCorrInQst = 0;
@ -943,7 +940,7 @@ void TstPrn_ComputeChoAnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
if (Question->Answer.Options[Indexes[NumOpt]].Correct) if (Question->Answer.Options[Indexes[NumOpt]].Correct)
NumOptCorrInQst++; NumOptCorrInQst++;
if (UsrAnswers[Indexes[NumOpt]]) // This answer has been selected by the user if (UsrAnswers[Indexes[NumOpt]] == Cns_CHECKED) // This answer has been selected by the user
{ {
if (Question->Answer.Options[Indexes[NumOpt]].Correct) if (Question->Answer.Options[Indexes[NumOpt]].Correct)
NumAnsGood++; NumAnsGood++;
@ -1093,20 +1090,20 @@ void TstPrn_GetIndexesFromStr (const char StrIndexesOneQst[Qst_MAX_BYTES_INDEXES
/*****************************************************************************/ /*****************************************************************************/
void TstPrn_GetAnswersFromStr (const char StrAnswersOneQst[Qst_MAX_BYTES_ANSWERS_ONE_QST + 1], void TstPrn_GetAnswersFromStr (const char StrAnswersOneQst[Qst_MAX_BYTES_ANSWERS_ONE_QST + 1],
bool UsrAnswers[Qst_MAX_OPTIONS_PER_QUESTION]) Cns_UncheckedOrChecked_t UsrAnswers[Qst_MAX_OPTIONS_PER_QUESTION])
{ {
unsigned NumOpt; unsigned NumOpt;
const char *Ptr; const char *Ptr;
char StrOneAnswer[Cns_MAX_DECIMAL_DIGITS_UINT + 1]; char StrOneAnswer[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
unsigned AnsUsr; unsigned AnsUsr;
/***** Initialize all answers to false *****/ /***** Initialize all answers to unchecked *****/
for (NumOpt = 0; for (NumOpt = 0;
NumOpt < Qst_MAX_OPTIONS_PER_QUESTION; NumOpt < Qst_MAX_OPTIONS_PER_QUESTION;
NumOpt++) NumOpt++)
UsrAnswers[NumOpt] = false; UsrAnswers[NumOpt] = Cns_UNCHECKED;
/***** Set selected answers to true *****/ /***** Set selected answers to checked *****/
for (NumOpt = 0, Ptr = StrAnswersOneQst; for (NumOpt = 0, Ptr = StrAnswersOneQst;
NumOpt < Qst_MAX_OPTIONS_PER_QUESTION && *Ptr; NumOpt < Qst_MAX_OPTIONS_PER_QUESTION && *Ptr;
NumOpt++) NumOpt++)
@ -1119,7 +1116,7 @@ void TstPrn_GetAnswersFromStr (const char StrAnswersOneQst[Qst_MAX_BYTES_ANSWERS
if (AnsUsr >= Qst_MAX_OPTIONS_PER_QUESTION) if (AnsUsr >= Qst_MAX_OPTIONS_PER_QUESTION)
Err_WrongAnswerExit (); Err_WrongAnswerExit ();
UsrAnswers[AnsUsr] = true; UsrAnswers[AnsUsr] = Cns_CHECKED;
} }
} }
@ -1406,7 +1403,7 @@ static void TstPrn_WriteChoAnsPrint (struct Usr_Data *UsrDat,
extern const char *Txt_TST_Answer_given_by_the_teachers; extern const char *Txt_TST_Answer_given_by_the_teachers;
unsigned NumOpt; unsigned NumOpt;
unsigned Indexes[Qst_MAX_OPTIONS_PER_QUESTION]; // Indexes of all answers of this question unsigned Indexes[Qst_MAX_OPTIONS_PER_QUESTION]; // Indexes of all answers of this question
bool UsrAnswers[Qst_MAX_OPTIONS_PER_QUESTION]; Cns_UncheckedOrChecked_t UsrAnswers[Qst_MAX_OPTIONS_PER_QUESTION];
struct struct
{ {
char *Class; char *Class;
@ -1442,7 +1439,7 @@ static void TstPrn_WriteChoAnsPrint (struct Usr_Data *UsrDat,
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
/* Draw icon depending on user's answer */ /* Draw icon depending on user's answer */
if (UsrAnswers[Indexes[NumOpt]]) // This answer has been selected by the user if (UsrAnswers[Indexes[NumOpt]] == Cns_CHECKED) // This answer has been selected by the user
{ {
switch (ICanView[TstVis_VISIBLE_CORRECT_ANSWER]) switch (ICanView[TstVis_VISIBLE_CORRECT_ANSWER])
{ {

View File

@ -122,7 +122,7 @@ void Qst_ChangeFormatAnswersFeedback (struct Qst_Question *Question);
void TstPrn_GetIndexesFromStr (const char StrIndexesOneQst[Qst_MAX_BYTES_INDEXES_ONE_QST + 1], // 0 1 2 3, 3 0 2 1, etc. void TstPrn_GetIndexesFromStr (const char StrIndexesOneQst[Qst_MAX_BYTES_INDEXES_ONE_QST + 1], // 0 1 2 3, 3 0 2 1, etc.
unsigned Indexes[Qst_MAX_OPTIONS_PER_QUESTION]); unsigned Indexes[Qst_MAX_OPTIONS_PER_QUESTION]);
void TstPrn_GetAnswersFromStr (const char StrAnswersOneQst[Qst_MAX_BYTES_ANSWERS_ONE_QST + 1], void TstPrn_GetAnswersFromStr (const char StrAnswersOneQst[Qst_MAX_BYTES_ANSWERS_ONE_QST + 1],
bool UsrAnswers[Qst_MAX_OPTIONS_PER_QUESTION]); Cns_UncheckedOrChecked_t UsrAnswers[Qst_MAX_OPTIONS_PER_QUESTION]);
void TstPrn_ComputeAndShowGrade (unsigned NumQsts,double Score,double MaxGrade); void TstPrn_ComputeAndShowGrade (unsigned NumQsts,double Score,double MaxGrade);
double TstPrn_ComputeGrade (unsigned NumQsts,double Score,double MaxGrade); double TstPrn_ComputeGrade (unsigned NumQsts,double Score,double MaxGrade);