diff --git a/swad_ID.c b/swad_ID.c index 29b3286c..437060a9 100644 --- a/swad_ID.c +++ b/swad_ID.c @@ -296,7 +296,8 @@ void ID_GetParamOtherUsrIDPlain (void) ID_ReallocateListIDs (&Gbl.Usrs.Other.UsrDat,1); /***** Get parameter *****/ - Par_GetParToText ("OtherUsrID",Gbl.Usrs.Other.UsrDat.IDs.List[0].ID,ID_MAX_LENGTH_USR_ID); + Par_GetParToText ("OtherUsrID",Gbl.Usrs.Other.UsrDat.IDs.List[0].ID, + ID_MAX_LENGTH_USR_ID); // Users' IDs are always stored internally in capitals and without leading zeros Str_RemoveLeadingZeros (Gbl.Usrs.Other.UsrDat.IDs.List[0].ID); Str_ConvertToUpperText (Gbl.Usrs.Other.UsrDat.IDs.List[0].ID); diff --git a/swad_agenda.c b/swad_agenda.c index d90af5ae..0ffceab7 100644 --- a/swad_agenda.c +++ b/swad_agenda.c @@ -90,7 +90,7 @@ static void Agd_PutIconsOtherPublicAgenda (void); static void Agd_PutButtonToCreateNewEvent (void); static void Agd_PutParamsToCreateNewEvent (void); static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod); -static void Agd_GetParamEventOrderType (void); +static void Agd_GetParamEventOrder (void); static void Agd_PutFormsToRemEditOneEvent (struct AgendaEvent *AgdEvent); static void Agd_PutParams (void); @@ -279,7 +279,7 @@ static void Agd_ShowEvents (Agd_AgendaType_t AgendaType) }; /***** Get parameters *****/ - Agd_GetParamEventOrderType (); + Agd_GetParamEventOrder (); Pag_GetParamPagNum (WhatPaginate[AgendaType]); /***** Get list of events *****/ @@ -342,7 +342,7 @@ static void Agd_ShowEventsToday (Agd_AgendaType_t AgendaType) unsigned NumEvent; /***** Get parameters *****/ - Agd_GetParamEventOrderType (); + Agd_GetParamEventOrder (); /***** Get list of events *****/ Agd_GetListEvents (AgendaType); @@ -424,10 +424,10 @@ static void Agd_WriteHeaderListEvents (Agd_AgendaType_t AgendaType) Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); Par_PutHiddenParamUnsigned ("Order",(unsigned) Order); Act_LinkFormSubmit (Txt_START_END_TIME_HELP[Order],"TIT_TBL",NULL); - if (Order == Gbl.Agenda.SelectedOrderType) + if (Order == Gbl.Agenda.SelectedOrder) fprintf (Gbl.F.Out,""); fprintf (Gbl.F.Out,"%s",Txt_START_END_TIME[Order]); - if (Order == Gbl.Agenda.SelectedOrderType) + if (Order == Gbl.Agenda.SelectedOrder) fprintf (Gbl.F.Out,""); fprintf (Gbl.F.Out,""); Act_FormEnd (); @@ -567,7 +567,7 @@ static void Agd_PutButtonToCreateNewEvent (void) static void Agd_PutParamsToCreateNewEvent (void) { - Agd_PutHiddenParamEventsOrderType (); + Agd_PutHiddenParamEventsOrder (); Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); } @@ -691,20 +691,16 @@ static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod) /********** Get parameter with the type or order in list of events ***********/ /*****************************************************************************/ -static void Agd_GetParamEventOrderType (void) +static void Agd_GetParamEventOrder (void) { - char UnsignedStr[10 + 1]; - unsigned UnsignedNum; static bool AlreadyGot = false; if (!AlreadyGot) { - Par_GetParToText ("Order",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1) - Gbl.Agenda.SelectedOrderType = (Agd_Order_t) UnsignedNum; - else - Gbl.Agenda.SelectedOrderType = Agd_DEFAULT_ORDER_TYPE; - + Gbl.Agenda.SelectedOrder = (Agd_Order_t) Par_GetParToUnsigned ("Order", + (unsigned) Agd_ORDER_BY_START_DATE, + (unsigned) Agd_ORDER_BY_END_DATE, + (unsigned) Agd_ORDER_DEFAULT); AlreadyGot = true; } } @@ -713,9 +709,9 @@ static void Agd_GetParamEventOrderType (void) /****** Put a hidden parameter with the type of order in list of events ******/ /*****************************************************************************/ -void Agd_PutHiddenParamEventsOrderType (void) +void Agd_PutHiddenParamEventsOrder (void) { - Par_PutHiddenParamUnsigned ("Order",(unsigned) Gbl.Agenda.SelectedOrderType); + Par_PutHiddenParamUnsigned ("Order",(unsigned) Gbl.Agenda.SelectedOrder); } /*****************************************************************************/ @@ -777,7 +773,7 @@ static void Agd_PutFormsToRemEditOneEvent (struct AgendaEvent *AgdEvent) static void Agd_PutParams (void) { Agd_PutParamAgdCod (Gbl.Agenda.AgdCodToEdit); - Agd_PutHiddenParamEventsOrderType (); + Agd_PutHiddenParamEventsOrder (); Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); } @@ -798,7 +794,7 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType) Agd_FreeListEvents (); /***** Get list of events from database *****/ - switch (Gbl.Agenda.SelectedOrderType) + switch (Gbl.Agenda.SelectedOrder) { case Agd_ORDER_BY_START_DATE: sprintf (OrderBySubQuery,"StartTime," @@ -1054,7 +1050,7 @@ void Agd_AskRemEvent (void) struct AgendaEvent AgdEvent; /***** Get parameters *****/ - Agd_GetParamEventOrderType (); + Agd_GetParamEventOrder (); Pag_GetParamPagNum (Pag_MY_FULL_AGENDA); /***** Get event code *****/ @@ -1068,7 +1064,7 @@ void Agd_AskRemEvent (void) /***** Button of confirmation of removing *****/ Act_FormStart (ActRemEvtMyAgd); Agd_PutParamAgdCod (AgdEvent.AgdCod); - Agd_PutHiddenParamEventsOrderType (); + Agd_PutHiddenParamEventsOrder (); Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); /***** Ask for confirmation of removing *****/ @@ -1265,7 +1261,7 @@ void Agd_RequestCreatOrEditEvent (void) char Txt[Cns_MAX_BYTES_TEXT + 1]; /***** Get parameters *****/ - Agd_GetParamEventOrderType (); + Agd_GetParamEventOrder (); Pag_GetParamPagNum (Pag_MY_FULL_AGENDA); /***** Get the code of the event *****/ @@ -1300,7 +1296,7 @@ void Agd_RequestCreatOrEditEvent (void) Act_FormStart (ActChgEvtMyAgd); Agd_PutParamAgdCod (AgdEvent.AgdCod); } - Agd_PutHiddenParamEventsOrderType (); + Agd_PutHiddenParamEventsOrder (); Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); /***** Table start *****/ diff --git a/swad_agenda.h b/swad_agenda.h index b2ecf9fb..1112e33b 100644 --- a/swad_agenda.h +++ b/swad_agenda.h @@ -67,8 +67,7 @@ typedef enum Agd_ORDER_BY_START_DATE = 0, Agd_ORDER_BY_END_DATE = 1, } Agd_Order_t; - -#define Agd_DEFAULT_ORDER_TYPE Agd_ORDER_BY_START_DATE +#define Agd_ORDER_DEFAULT Agd_ORDER_BY_START_DATE /*****************************************************************************/ /***************************** Public prototypes *****************************/ @@ -82,7 +81,7 @@ void Agd_ShowMyPublicAgenda (void); void Agd_ShowUsrAgenda (void); void Agd_ShowOtherAgendaAfterLogIn (void); -void Agd_PutHiddenParamEventsOrderType (void); +void Agd_PutHiddenParamEventsOrder (void); void Agd_RequestCreatOrEditEvent (void); void Agd_FreeListEvents (void); diff --git a/swad_assignment.c b/swad_assignment.c index fc22544e..e72c5aea 100644 --- a/swad_assignment.c +++ b/swad_assignment.c @@ -73,7 +73,7 @@ static void Asg_ParamsWhichGroupsToShow (void); static void Asg_ShowOneAssignment (long AsgCod); static void Asg_WriteAsgAuthor (struct Assignment *Asg); static void Asg_WriteAssignmentFolder (struct Assignment *Asg); -static void Asg_GetParamAsgOrderType (void); +static void Asg_GetParamAsgOrder (void); static void Asg_PutFormsToRemEditOneAsg (long AsgCod,bool Hidden); static void Asg_PutParams (void); @@ -99,7 +99,7 @@ static bool Asg_CheckIfIBelongToCrsOrGrpsThisAssignment (long AsgCod); void Asg_SeeAssignments (void) { /***** Get parameters *****/ - Asg_GetParamAsgOrderType (); + Asg_GetParamAsgOrder (); Grp_GetParamWhichGrps (); Pag_GetParamPagNum (Pag_ASSIGNMENTS); @@ -161,10 +161,10 @@ static void Asg_ShowAllAssignments (void) Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); Par_PutHiddenParamUnsigned ("Order",(unsigned) Order); Act_LinkFormSubmit (Txt_START_END_TIME_HELP[Order],"TIT_TBL",NULL); - if (Order == Gbl.Asgs.SelectedOrderType) + if (Order == Gbl.Asgs.SelectedOrder) fprintf (Gbl.F.Out,""); fprintf (Gbl.F.Out,"%s",Txt_START_END_TIME[Order]); - if (Order == Gbl.Asgs.SelectedOrderType) + if (Order == Gbl.Asgs.SelectedOrder) fprintf (Gbl.F.Out,""); fprintf (Gbl.F.Out,""); Act_FormEnd (); @@ -271,7 +271,7 @@ static void Asg_PutButtonToCreateNewAsg (void) static void Asg_PutParamsToCreateNewAsg (void) { - Asg_PutHiddenParamAsgOrderType (); + Asg_PutHiddenParamAsgOrder (); Grp_PutParamWhichGrps (); Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); } @@ -289,7 +289,7 @@ static void Asg_PutFormToSelectWhichGroupsToShow (void) static void Asg_ParamsWhichGroupsToShow (void) { - Asg_PutHiddenParamAsgOrderType (); + Asg_PutHiddenParamAsgOrder (); Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); } @@ -521,25 +521,21 @@ static void Asg_WriteAssignmentFolder (struct Assignment *Asg) /******* Get parameter with the type or order in list of assignments *********/ /*****************************************************************************/ -static void Asg_GetParamAsgOrderType (void) +static void Asg_GetParamAsgOrder (void) { - char UnsignedStr[10 + 1]; - unsigned UnsignedNum; - - Par_GetParToText ("Order",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1) - Gbl.Asgs.SelectedOrderType = (Dat_StartEndTime_t) UnsignedNum; - else - Gbl.Asgs.SelectedOrderType = Asg_DEFAULT_ORDER_TYPE; + Gbl.Asgs.SelectedOrder = (Dat_StartEndTime_t) Par_GetParToUnsigned ("Order", + (unsigned) Dat_START_TIME, + (unsigned) Dat_END_TIME, + (unsigned) Asg_ORDER_DEFAULT); } /*****************************************************************************/ /*** Put a hidden parameter with the type of order in list of assignments ****/ /*****************************************************************************/ -void Asg_PutHiddenParamAsgOrderType (void) +void Asg_PutHiddenParamAsgOrder (void) { - Par_PutHiddenParamUnsigned ("Order",(unsigned) Gbl.Asgs.SelectedOrderType); + Par_PutHiddenParamUnsigned ("Order",(unsigned) Gbl.Asgs.SelectedOrder); } /*****************************************************************************/ @@ -591,7 +587,7 @@ static void Asg_PutFormsToRemEditOneAsg (long AsgCod,bool Hidden) static void Asg_PutParams (void) { Asg_PutParamAsgCod (Gbl.Asgs.AsgCodToEdit); - Asg_PutHiddenParamAsgOrderType (); + Asg_PutHiddenParamAsgOrder (); Grp_PutParamWhichGrps (); Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); } @@ -624,7 +620,7 @@ void Asg_GetListAssignments (void) sprintf (HiddenSubQuery,"AND Hidden='N'"); break; } - switch (Gbl.Asgs.SelectedOrderType) + switch (Gbl.Asgs.SelectedOrder) { case Dat_START_TIME: sprintf (OrderBySubQuery,"StartTime DESC,EndTime DESC,Title DESC"); @@ -944,7 +940,7 @@ void Asg_ReqRemAssignment (void) struct Assignment Asg; /***** Get parameters *****/ - Asg_GetParamAsgOrderType (); + Asg_GetParamAsgOrder (); Grp_GetParamWhichGrps (); Pag_GetParamPagNum (Pag_ASSIGNMENTS); @@ -958,7 +954,7 @@ void Asg_ReqRemAssignment (void) /***** Button of confirmation of removing *****/ Act_FormStart (ActRemAsg); Asg_PutParamAsgCod (Asg.AsgCod); - Asg_PutHiddenParamAsgOrderType (); + Asg_PutHiddenParamAsgOrder (); Grp_PutParamWhichGrps (); Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); @@ -1116,7 +1112,7 @@ void Asg_RequestCreatOrEditAsg (void) char Txt[Cns_MAX_BYTES_TEXT + 1]; /***** Get parameters *****/ - Asg_GetParamAsgOrderType (); + Asg_GetParamAsgOrder (); Grp_GetParamWhichGrps (); Pag_GetParamPagNum (Pag_ASSIGNMENTS); @@ -1153,7 +1149,7 @@ void Asg_RequestCreatOrEditAsg (void) Act_FormStart (ActChgAsg); Asg_PutParamAsgCod (Asg.AsgCod); } - Asg_PutHiddenParamAsgOrderType (); + Asg_PutHiddenParamAsgOrder (); Grp_PutParamWhichGrps (); Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); diff --git a/swad_assignment.h b/swad_assignment.h index 88ae253c..0db00cad 100644 --- a/swad_assignment.h +++ b/swad_assignment.h @@ -61,14 +61,14 @@ struct Assignment // I belong to any of the groups) }; -#define Asg_DEFAULT_ORDER_TYPE Dat_START_TIME +#define Asg_ORDER_DEFAULT Dat_START_TIME /*****************************************************************************/ /***************************** Public prototypes *****************************/ /*****************************************************************************/ void Asg_SeeAssignments (void); -void Asg_PutHiddenParamAsgOrderType (void); +void Asg_PutHiddenParamAsgOrder (void); void Asg_RequestCreatOrEditAsg (void); void Asg_GetListAssignments (void); void Asg_GetDataOfAssignmentByCod (struct Assignment *Asg); diff --git a/swad_attendance.c b/swad_attendance.c index 9eeb0608..0409a06e 100644 --- a/swad_attendance.c +++ b/swad_attendance.c @@ -78,7 +78,7 @@ static void Att_PutButtonToCreateNewAttEvent (void); static void Att_PutParamsToCreateNewAttEvent (void); static void Att_ShowOneAttEvent (struct AttendanceEvent *Att,bool ShowOnlyThisAttEventComplete); static void Att_WriteAttEventAuthor (struct AttendanceEvent *Att); -static void Att_GetParamAttOrderType (void); +static void Att_GetParamAttOrder (void); static void Att_PutFormToListMyAttendance (void); static void Att_PutFormToListStdsAttendance (void); @@ -146,7 +146,7 @@ void Att_SeeAttEvents (void) char NicknameWithArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1]; /***** Get parameters *****/ - Att_GetParamAttOrderType (); + Att_GetParamAttOrder (); Grp_GetParamWhichGrps (); Pag_GetParamPagNum (Pag_ATT_EVENTS); @@ -243,10 +243,10 @@ static void Att_ShowAllAttEvents (void) Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); Par_PutHiddenParamUnsigned ("Order",(unsigned) Order); Act_LinkFormSubmit (Txt_START_END_TIME_HELP[Order],"TIT_TBL",NULL); - if (Order == Gbl.AttEvents.SelectedOrderType) + if (Order == Gbl.AttEvents.SelectedOrder) fprintf (Gbl.F.Out,""); fprintf (Gbl.F.Out,"%s",Txt_START_END_TIME[Order]); - if (Order == Gbl.AttEvents.SelectedOrderType) + if (Order == Gbl.AttEvents.SelectedOrder) fprintf (Gbl.F.Out,""); fprintf (Gbl.F.Out,""); Act_FormEnd (); @@ -302,7 +302,7 @@ static void Att_PutFormToSelectWhichGroupsToShow (void) static void Att_ParamsWhichGroupsToShow (void) { - Att_PutHiddenParamAttOrderType (); + Att_PutHiddenParamAttOrder (); Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); } @@ -341,7 +341,7 @@ static void Att_PutButtonToCreateNewAttEvent (void) static void Att_PutParamsToCreateNewAttEvent (void) { - Att_PutHiddenParamAttOrderType (); + Att_PutHiddenParamAttOrder (); Grp_PutParamWhichGrps (); Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); } @@ -520,25 +520,21 @@ static void Att_WriteAttEventAuthor (struct AttendanceEvent *Att) /**** Get parameter with the type or order in list of attendance events ******/ /*****************************************************************************/ -static void Att_GetParamAttOrderType (void) +static void Att_GetParamAttOrder (void) { - char UnsignedStr[10 + 1]; - unsigned UnsignedNum; - - Par_GetParToText ("Order",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1) - Gbl.AttEvents.SelectedOrderType = (Dat_StartEndTime_t) UnsignedNum; - else - Gbl.AttEvents.SelectedOrderType = Att_DEFAULT_ORDER_TYPE; + Gbl.AttEvents.SelectedOrder = (Dat_StartEndTime_t) Par_GetParToUnsigned ("Order", + (unsigned) Dat_START_TIME, + (unsigned) Dat_END_TIME, + (unsigned) Att_ORDER_DEFAULT); } /*****************************************************************************/ /*** Put a hidden parameter with the type of order in list of att. events ****/ /*****************************************************************************/ -void Att_PutHiddenParamAttOrderType (void) +void Att_PutHiddenParamAttOrder (void) { - Par_PutHiddenParamUnsigned ("Order",(unsigned) Gbl.AttEvents.SelectedOrderType); + Par_PutHiddenParamUnsigned ("Order",(unsigned) Gbl.AttEvents.SelectedOrder); } /*****************************************************************************/ @@ -571,7 +567,7 @@ static void Att_PutFormToListStdsAttendance (void) static void Att_PutFormToListStdsParams (void) { - Att_PutHiddenParamAttOrderType (); + Att_PutHiddenParamAttOrder (); Grp_PutParamWhichGrps (); Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); } @@ -624,7 +620,7 @@ static void Att_PutFormsToRemEditOneAttEvent (long AttCod,bool Hidden) static void Att_PutParams (void) { Att_PutParamAttCod (Gbl.AttEvents.AttCodToEdit); - Att_PutHiddenParamAttOrderType (); + Att_PutHiddenParamAttOrder (); Grp_PutParamWhichGrps (); Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); } @@ -657,7 +653,7 @@ static void Att_GetListAttEvents (Att_OrderTime_t Order) sprintf (HiddenSubQuery,"AND Hidden='N'"); break; } - switch (Gbl.AttEvents.SelectedOrderType) + switch (Gbl.AttEvents.SelectedOrder) { case Dat_START_TIME: if (Order == Att_NEWEST_FIRST) @@ -908,7 +904,7 @@ void Att_AskRemAttEvent (void) struct AttendanceEvent Att; /***** Get parameters *****/ - Att_GetParamAttOrderType (); + Att_GetParamAttOrder (); Grp_GetParamWhichGrps (); Pag_GetParamPagNum (Pag_ATT_EVENTS); @@ -922,7 +918,7 @@ void Att_AskRemAttEvent (void) /***** Button of confirmation of removing *****/ Act_FormStart (ActRemAtt); Att_PutParamAttCod (Att.AttCod); - Att_PutHiddenParamAttOrderType (); + Att_PutHiddenParamAttOrder (); Grp_PutParamWhichGrps (); Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); @@ -1083,7 +1079,7 @@ void Att_RequestCreatOrEditAttEvent (void) char Txt[Cns_MAX_BYTES_TEXT + 1]; /***** Get parameters *****/ - Att_GetParamAttOrderType (); + Att_GetParamAttOrder (); Grp_GetParamWhichGrps (); Pag_GetParamPagNum (Pag_ATT_EVENTS); @@ -1122,7 +1118,7 @@ void Att_RequestCreatOrEditAttEvent (void) Act_FormStart (ActChgAtt); Att_PutParamAttCod (Att.AttCod); } - Att_PutHiddenParamAttOrderType (); + Att_PutHiddenParamAttOrder (); Grp_PutParamWhichGrps (); Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage); @@ -1845,7 +1841,7 @@ void Att_SeeOneAttEvent (void) Lay_ShowErrorAndExit ("Code of attendance event is missing."); /***** Get parameters *****/ - Att_GetParamAttOrderType (); + Att_GetParamAttOrder (); Grp_GetParamWhichGrps (); Pag_GetParamPagNum (Pag_ATT_EVENTS); diff --git a/swad_attendance.h b/swad_attendance.h index 81b83b71..bf29fa9e 100644 --- a/swad_attendance.h +++ b/swad_attendance.h @@ -67,14 +67,14 @@ typedef enum Att_OLDEST_FIRST, } Att_OrderTime_t; -#define Att_DEFAULT_ORDER_TYPE Dat_START_TIME +#define Att_ORDER_DEFAULT Dat_START_TIME /*****************************************************************************/ /***************************** Public prototypes *****************************/ /*****************************************************************************/ void Att_SeeAttEvents (void); -void Att_PutHiddenParamAttOrderType (void); +void Att_PutHiddenParamAttOrder (void); void Att_RequestCreatOrEditAttEvent (void); bool Att_GetDataOfAttEventByCod (struct AttendanceEvent *Att); void Att_FreeListAttEvents (void); diff --git a/swad_calendar.c b/swad_calendar.c index 099c0eef..b76d1637 100644 --- a/swad_calendar.c +++ b/swad_calendar.c @@ -160,14 +160,12 @@ void Cal_ChangeFirstDayOfWeek (void) static unsigned Cal_GetParamFirstDayOfWeek (void) { - char UnsignedStr[10 + 1]; - unsigned UnsignedNum; - unsigned FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT; + unsigned FirstDayOfWeek; - Par_GetParToText ("FirstDayOfWeek",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1) - if (Cal_DayIsValidAsFirstDayOfWeek[UnsignedNum]) - FirstDayOfWeek = UnsignedNum; + FirstDayOfWeek = Par_GetParToUnsigned ("FirstDayOfWeek",0,6, + Cal_FIRST_DAY_OF_WEEK_DEFAULT); + if (!Cal_DayIsValidAsFirstDayOfWeek[FirstDayOfWeek]) + FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT; return FirstDayOfWeek; } @@ -184,7 +182,7 @@ void Cal_DrawCurrentMonth (void) /***** Get list of holidays *****/ if (!Gbl.Hlds.LstIsRead) { - Gbl.Hlds.SelectedOrderType = Hld_ORDER_BY_START_DATE; + Gbl.Hlds.SelectedOrder = Hld_ORDER_BY_START_DATE; Hld_GetListHolidays (); } @@ -240,7 +238,7 @@ void Cal_DrawCalendar (void) /***** Get list of holidays *****/ if (!Gbl.Hlds.LstIsRead) { - Gbl.Hlds.SelectedOrderType = Hld_ORDER_BY_START_DATE; + Gbl.Hlds.SelectedOrder = Hld_ORDER_BY_START_DATE; Hld_GetListHolidays (); } diff --git a/swad_centre.c b/swad_centre.c index a70e312e..c8d9ba51 100644 --- a/swad_centre.c +++ b/swad_centre.c @@ -85,7 +85,7 @@ static bool Ctr_CheckIfICanCreateCentres (void); static void Ctr_PutIconsListCentres (void); static void Ctr_PutIconToEditCentres (void); static void Ctr_ListOneCentreForSeeing (struct Centre *Ctr,unsigned NumCtr); -static void Ctr_GetParamCtrOrderType (void); +static void Ctr_GetParamCtrOrder (void); static void Ctr_GetPhotoAttribution (long CtrCod,char **PhotoAttribution); static void Ctr_FreePhotoAttribution (char **PhotoAttribution); static void Ctr_ListCentresForEdition (void); @@ -718,7 +718,7 @@ void Ctr_ShowCtrsOfCurrentIns (void) if (Gbl.CurrentIns.Ins.InsCod > 0) { /***** Get parameter with the type of order in the list of centres *****/ - Ctr_GetParamCtrOrderType (); + Ctr_GetParamCtrOrder (); /***** Get list of centres *****/ Ctr_GetListCentres (Gbl.CurrentIns.Ins.InsCod); @@ -916,16 +916,12 @@ static void Ctr_ListOneCentreForSeeing (struct Centre *Ctr,unsigned NumCtr) /********** Get parameter with the type or order in list of centres **********/ /*****************************************************************************/ -static void Ctr_GetParamCtrOrderType (void) +static void Ctr_GetParamCtrOrder (void) { - char UnsignedStr[10 + 1]; - unsigned UnsignedNum; - - Par_GetParToText ("Order",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1) - Gbl.Ctrs.SelectedOrderType = (tCtrsOrderType) UnsignedNum; - else - Gbl.Ctrs.SelectedOrderType = Ctr_DEFAULT_ORDER_TYPE; + Gbl.Ctrs.SelectedOrder = (Ctr_Order_t) Par_GetParToUnsigned ("Order", + (unsigned) Ctr_ORDER_BY_CENTRE, + (unsigned) Ctr_ORDER_BY_NUM_TCHS, + (unsigned) Ctr_ORDER_DEFAULT); } /*****************************************************************************/ @@ -971,7 +967,7 @@ void Ctr_GetListCentres (long InsCod) struct Centre *Ctr; /***** Get centres from database *****/ - switch (Gbl.Ctrs.SelectedOrderType) + switch (Gbl.Ctrs.SelectedOrder) { case Ctr_ORDER_BY_CENTRE: sprintf (OrderBySubQuery,"FullName"); @@ -2073,7 +2069,6 @@ void Ctr_ChangeCtrStatus (void) extern const char *Txt_The_status_of_the_centre_X_has_changed; struct Centre *Ctr; char Query[256]; - char UnsignedNum[10 + 1]; Ctr_Status_t Status; Ctr_StatusTxt_t StatusTxt; @@ -2084,8 +2079,9 @@ void Ctr_ChangeCtrStatus (void) Ctr->CtrCod = Ctr_GetAndCheckParamOtherCtrCod (); /* Get parameter with status */ - Par_GetParToText ("Status",UnsignedNum,1); - if (sscanf (UnsignedNum,"%u",&Status) != 1) + Status = (Ctr_Status_t) Par_GetParToUnsigned ("Status",0,UINT_MAX, + (unsigned) Ctr_WRONG_STATUS); + if (Status == Ctr_WRONG_STATUS) Lay_ShowErrorAndExit ("Wrong status."); StatusTxt = Ctr_GetStatusTxtFromStatusBits (Status); Status = Ctr_GetStatusBitsFromStatusTxt (StatusTxt); // New status @@ -2516,7 +2512,7 @@ static void Ctr_PutHeadCentresForSeeing (bool OrderSelectable) extern const char *Txt_Teachers_ABBREVIATION; extern const char *Txt_Students_ABBREVIATION; extern const char *Txt_Status; - tCtrsOrderType Order; + Ctr_Order_t Order; fprintf (Gbl.F.Out,"" ""); @@ -2532,13 +2528,13 @@ static void Ctr_PutHeadCentresForSeeing (bool OrderSelectable) Act_FormStart (ActSeeCtr); Par_PutHiddenParamUnsigned ("Order",(unsigned) Order); Act_LinkFormSubmit (Txt_CENTRES_HELP_ORDER[Order],"TIT_TBL",NULL); - if (Order == Gbl.Ctrs.SelectedOrderType) + if (Order == Gbl.Ctrs.SelectedOrder) fprintf (Gbl.F.Out,""); } fprintf (Gbl.F.Out,"%s",Txt_CENTRES_ORDER[Order]); if (OrderSelectable) { - if (Order == Gbl.Ctrs.SelectedOrderType) + if (Order == Gbl.Ctrs.SelectedOrder) fprintf (Gbl.F.Out,""); fprintf (Gbl.F.Out,""); Act_FormEnd (); diff --git a/swad_centre.h b/swad_centre.h index 8abdb55a..38e27e5f 100644 --- a/swad_centre.h +++ b/swad_centre.h @@ -41,7 +41,9 @@ typedef enum Ctr_STATUS_BIT_PENDING = (1 << 0), // Centre is requested, but not yet activated Ctr_STATUS_BIT_REMOVED = (1 << 1), // Centre has been removed } Ctr_Status_Bits_t; + typedef unsigned Ctr_Status_t; +#define Ctr_WRONG_STATUS ((Ctr_Status_t) UINT_MAX) #define Ctr_NUM_STATUS_TXT 4 typedef enum @@ -78,9 +80,9 @@ typedef enum { Ctr_ORDER_BY_CENTRE = 0, Ctr_ORDER_BY_NUM_TCHS = 1, - } tCtrsOrderType; + } Ctr_Order_t; -#define Ctr_DEFAULT_ORDER_TYPE Ctr_ORDER_BY_CENTRE +#define Ctr_ORDER_DEFAULT Ctr_ORDER_BY_CENTRE /*****************************************************************************/ /****************************** Public prototypes ****************************/ diff --git a/swad_changelog.h b/swad_changelog.h index eeaade7a..5ca4e504 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -191,13 +191,15 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 16.129 (2017-01-28)" +#define Log_PLATFORM_VERSION "SWAD 16.131 (2017-01-29)" #define CSS_FILE "swad16.123.css" #define JS_FILE "swad16.123.js" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1 /* + Version 16.131: Jan 29, 2017 Code refactoring in unsigned parameters. Not finished. (211856 lines) + Version 16.130: Jan 29, 2017 Code refactoring in unsigned parameters. Not finished. (211843 lines) Version 16.129: Jan 28, 2017 Code refactoring in Y/N parameters. (211974 lines) Version 16.128: Jan 28, 2017 Code refactoring in long parameters. (212037 lines) Version 16.127.3: Jan 28, 2017 Fixed bug in permissions to change another user's data. (212127 lines) diff --git a/swad_country.c b/swad_country.c index 7635eb2a..8ad8e0ef 100644 --- a/swad_country.c +++ b/swad_country.c @@ -72,7 +72,7 @@ static void Cty_PutIconsListCountries (void); static void Cty_PutIconToEditCountries (void); static unsigned Cty_GetNumUsrsWhoClaimToBelongToCty (long CtyCod); -static void Cty_GetParamCtyOrderType (void); +static void Cty_GetParamCtyOrder (void); static void Cty_GetMapAttribution (long CtyCod,char **MapAttribution); static void Cty_FreeMapAttribution (char **MapAttribution); static void Cty_ListCountriesForEdition (void); @@ -498,7 +498,7 @@ void Cty_ListCountries (void) void Cty_ListCountries1 (void) { /***** Get parameter with the type of order in the list of countries *****/ - Cty_GetParamCtyOrderType (); + Cty_GetParamCtyOrder (); /***** Get list of countries *****/ Cty_GetListCountries (Cty_GET_EXTRA_DATA); @@ -518,7 +518,7 @@ void Cty_ListCountries2 (void) extern const char *Txt_Students_ABBREVIATION; extern const char *Txt_Other_countries; extern const char *Txt_Country_unspecified; - Cty_CtysOrderType_t Order; + Cty_Order_t Order; unsigned NumCty; const char *BgColor; @@ -536,10 +536,10 @@ void Cty_ListCountries2 (void) Act_FormStart (ActSeeCty); Par_PutHiddenParamUnsigned ("Order",(unsigned) Order); Act_LinkFormSubmit (Txt_COUNTRIES_HELP_ORDER[Order],"TIT_TBL",NULL); - if (Order == Gbl.Ctys.SelectedOrderType) + if (Order == Gbl.Ctys.SelectedOrder) fprintf (Gbl.F.Out,""); fprintf (Gbl.F.Out,"%s",Txt_COUNTRIES_ORDER[Order]); - if (Order == Gbl.Ctys.SelectedOrderType) + if (Order == Gbl.Ctys.SelectedOrder) fprintf (Gbl.F.Out,""); fprintf (Gbl.F.Out,""); Act_FormEnd (); @@ -887,16 +887,12 @@ void Cty_WriteScriptGoogleGeochart (void) /******** Get parameter with the type or order in list of countries **********/ /*****************************************************************************/ -static void Cty_GetParamCtyOrderType (void) +static void Cty_GetParamCtyOrder (void) { - char UnsignedStr[10 + 1]; - unsigned UnsignedNum; - - Par_GetParToText ("Order",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1) - Gbl.Ctys.SelectedOrderType = (Cty_CtysOrderType_t) UnsignedNum; - else - Gbl.Ctys.SelectedOrderType = Cty_DEFAULT_ORDER_TYPE; + Gbl.Ctys.SelectedOrder = (Cty_Order_t) Par_GetParToUnsigned ("Order", + (unsigned) Cty_ORDER_BY_COUNTRY, + (unsigned) Cty_ORDER_BY_NUM_USRS, + (unsigned) Cty_ORDER_DEFAULT); } /*****************************************************************************/ @@ -908,7 +904,7 @@ void Cty_EditCountries (void) extern const char *Txt_No_countries_have_been_created; /***** Get list of countries *****/ - Gbl.Ctys.SelectedOrderType = Cty_ORDER_BY_COUNTRY; + Gbl.Ctys.SelectedOrder = Cty_ORDER_BY_COUNTRY; Cty_GetListCountries (Cty_GET_EXTRA_DATA); if (!Gbl.Ctys.Num) @@ -986,7 +982,7 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData) Cty_MAX_LENGTH_SUBQUERY_CTYS); } - switch (Gbl.Ctys.SelectedOrderType) + switch (Gbl.Ctys.SelectedOrder) { case Cty_ORDER_BY_COUNTRY: sprintf (OrderBySubQuery,"Name_%s", diff --git a/swad_country.h b/swad_country.h index cad77e1c..52888412 100644 --- a/swad_country.h +++ b/swad_country.h @@ -60,9 +60,9 @@ typedef enum { Cty_ORDER_BY_COUNTRY = 0, Cty_ORDER_BY_NUM_USRS = 1, - } Cty_CtysOrderType_t; + } Cty_Order_t; -#define Cty_DEFAULT_ORDER_TYPE Cty_ORDER_BY_NUM_USRS +#define Cty_ORDER_DEFAULT Cty_ORDER_BY_NUM_USRS typedef enum { @@ -89,7 +89,7 @@ void Cty_DrawCountryMap (struct Country *Cty,const char *Class); bool Cty_CheckIfCountryMapExists (struct Country *Cty); void Cty_WriteScriptGoogleGeochart (void); -void Cty_PutHiddenParamCtyOrderType (void); +void Cty_PutHiddenParamCtyOrder (void); void Cty_EditCountries (void); void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData); void Cty_FreeListCountries (void); diff --git a/swad_course.c b/swad_course.c index 3080dd85..83441490 100644 --- a/swad_course.c +++ b/swad_course.c @@ -2763,7 +2763,6 @@ void Crs_ChangeCrsStatus (void) extern const char *Txt_The_status_of_the_course_X_has_changed; struct Course *Crs; char Query[256]; - char UnsignedNum[10 + 1]; Crs_Status_t Status; Crs_StatusTxt_t StatusTxt; @@ -2774,8 +2773,9 @@ void Crs_ChangeCrsStatus (void) Crs->CrsCod = Crs_GetAndCheckParamOtherCrsCod (); /* Get parameter with status */ - Par_GetParToText ("Status",UnsignedNum,1); - if (sscanf (UnsignedNum,"%u",&Status) != 1) + Status = (Crs_Status_t) Par_GetParToUnsigned ("Status",0,UINT_MAX, + (unsigned) Crs_WRONG_STATUS); + if (Status == Crs_WRONG_STATUS) Lay_ShowErrorAndExit ("Wrong status."); StatusTxt = Crs_GetStatusTxtFromStatusBits (Status); Status = Crs_GetStatusBitsFromStatusTxt (StatusTxt); // New status @@ -3363,7 +3363,6 @@ void Crs_RemoveOldCrss (void) { extern const char *Txt_Eliminating_X_courses_whithout_users_and_with_more_than_Y_months_without_access; extern const char *Txt_X_courses_have_been_eliminated; - char UnsignedStr[10 + 1]; unsigned MonthsWithoutAccess; unsigned long SecondsWithoutAccess; char Query[1024]; @@ -3375,11 +3374,11 @@ void Crs_RemoveOldCrss (void) long CrsCod; /***** Get parameter with number of months without access *****/ - Par_GetParToText ("Months",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&MonthsWithoutAccess) != 1) - Lay_ShowErrorAndExit ("Number of months without clicks is missing."); - if (MonthsWithoutAccess < Crs_MIN_MONTHS_WITHOUT_ACCESS_TO_REMOVE_OLD_CRSS || - MonthsWithoutAccess > Crs_MAX_MONTHS_WITHOUT_ACCESS_TO_REMOVE_OLD_CRSS) + MonthsWithoutAccess = Par_GetParToUnsigned ("Months", + Crs_MIN_MONTHS_WITHOUT_ACCESS_TO_REMOVE_OLD_CRSS, + Crs_MAX_MONTHS_WITHOUT_ACCESS_TO_REMOVE_OLD_CRSS, + UINT_MAX); + if (MonthsWithoutAccess == UINT_MAX) Lay_ShowErrorAndExit ("Wrong number of months without clicks."); SecondsWithoutAccess = (unsigned long) MonthsWithoutAccess * Dat_SECONDS_IN_ONE_MONTH; diff --git a/swad_course.h b/swad_course.h index 0c4bc812..95d77a64 100644 --- a/swad_course.h +++ b/swad_course.h @@ -56,7 +56,9 @@ typedef enum Crs_STATUS_BIT_PENDING = (1 << 0), // Course is requested, but not yet activated Crs_STATUS_BIT_REMOVED = (1 << 1), // Course has been removed } Crs_Status_Bits_t; + typedef unsigned Crs_Status_t; +#define Crs_WRONG_STATUS ((Crs_Status_t) UINT_MAX) #define Crs_NUM_STATUS_TXT 4 typedef enum diff --git a/swad_date.c b/swad_date.c index 2b7da2da..54e7bc52 100644 --- a/swad_date.c +++ b/swad_date.c @@ -723,22 +723,14 @@ void Dat_WriteFormDate (unsigned FirstYear,unsigned LastYear, void Dat_GetDateFromForm (const char *ParamNameDay,const char *ParamNameMonth,const char *ParamNameYear, unsigned *Day,unsigned *Month,unsigned *Year) { - char UnsignedStr[10 + 1]; - /**** Get day ****/ - Par_GetParToText (ParamNameDay,UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",Day) != 1) - *Day = 0; + *Day = Par_GetParToUnsigned (ParamNameDay ,1,31,0); /**** Get month ****/ - Par_GetParToText (ParamNameMonth,UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",Month) != 1) - *Month = 0; + *Month = Par_GetParToUnsigned (ParamNameMonth,1,12,0); /**** Get year ****/ - Par_GetParToText (ParamNameYear,UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",Year) != 1) - *Year = 0; + *Year = Par_GetParToUnsigned (ParamNameYear ,0,UINT_MAX,0); } /*****************************************************************************/ diff --git a/swad_degree.c b/swad_degree.c index 8e272839..0067a0b4 100644 --- a/swad_degree.c +++ b/swad_degree.c @@ -2202,7 +2202,6 @@ void Deg_ChangeDegStatus (void) extern const char *Txt_The_status_of_the_degree_X_has_changed; struct Degree *Deg; char Query[256]; - char UnsignedNum[10 + 1]; Deg_Status_t Status; Deg_StatusTxt_t StatusTxt; @@ -2213,8 +2212,9 @@ void Deg_ChangeDegStatus (void) Deg->DegCod = Deg_GetAndCheckParamOtherDegCod (); /* Get parameter with status */ - Par_GetParToText ("Status",UnsignedNum,1); - if (sscanf (UnsignedNum,"%u",&Status) != 1) + Status = (Deg_Status_t) Par_GetParToUnsigned ("Status",0,UINT_MAX, + (unsigned) Deg_WRONG_STATUS); + if (Status == Deg_WRONG_STATUS) Lay_ShowErrorAndExit ("Wrong status."); StatusTxt = Deg_GetStatusTxtFromStatusBits (Status); Status = Deg_GetStatusBitsFromStatusTxt (StatusTxt); // New status diff --git a/swad_degree.h b/swad_degree.h index 32e1699b..a4d68d16 100644 --- a/swad_degree.h +++ b/swad_degree.h @@ -52,7 +52,9 @@ typedef enum Deg_STATUS_BIT_PENDING = (1 << 0), // Degree is requested, but not yet activated Deg_STATUS_BIT_REMOVED = (1 << 1), // Degree has been removed } Deg_Status_Bits_t; + typedef unsigned Deg_Status_t; +#define Deg_WRONG_STATUS ((Deg_Status_t) UINT_MAX) #define Deg_NUM_STATUS_TXT 4 typedef enum diff --git a/swad_department.c b/swad_department.c index 56ac36c9..ac9f5a55 100644 --- a/swad_department.c +++ b/swad_department.c @@ -61,7 +61,7 @@ extern struct Globals Gbl; /***************************** Private prototypes ****************************/ /*****************************************************************************/ -static void Dpt_GetParamDptOrderType (void); +static void Dpt_GetParamDptOrder (void); static void Dpt_PutIconToEditDpts (void); static void Dpt_ListDepartmentsForEdition (void); static void Dpt_PutParamDptCod (long DptCod); @@ -83,7 +83,7 @@ void Dpt_SeeDepts (void) extern const char *Txt_DEPARTMENTS_ORDER[2]; extern const char *Txt_Other_departments; extern const char *Txt_Department_unspecified; - tDptsOrderType Order; + Dpt_Order_t Order; unsigned NumDpt; unsigned NumTchsInsWithDpt = 0; // Number of teachers from the current institution with department unsigned NumTchsInOtherDpts; @@ -91,7 +91,7 @@ void Dpt_SeeDepts (void) if (Gbl.CurrentIns.Ins.InsCod > 0) // Institution selected { /***** Get parameter with the type of order in the list of departments *****/ - Dpt_GetParamDptOrderType (); + Dpt_GetParamDptOrder (); /***** Get list of departments *****/ Dpt_GetListDepartments (Gbl.CurrentIns.Ins.InsCod); @@ -110,10 +110,10 @@ void Dpt_SeeDepts (void) Act_FormStart (ActSeeDpt); Par_PutHiddenParamUnsigned ("Order",(unsigned) Order); Act_LinkFormSubmit (Txt_DEPARTMENTS_HELP_ORDER[Order],"TIT_TBL",NULL); - if (Order == Gbl.Dpts.SelectedOrderType) + if (Order == Gbl.Dpts.SelectedOrder) fprintf (Gbl.F.Out,""); fprintf (Gbl.F.Out,"%s",Txt_DEPARTMENTS_ORDER[Order]); - if (Order == Gbl.Dpts.SelectedOrderType) + if (Order == Gbl.Dpts.SelectedOrder) fprintf (Gbl.F.Out,""); fprintf (Gbl.F.Out,""); Act_FormEnd (); @@ -191,16 +191,12 @@ void Dpt_SeeDepts (void) /******** Get parameter with the type or order in list of departments ********/ /*****************************************************************************/ -static void Dpt_GetParamDptOrderType (void) +static void Dpt_GetParamDptOrder (void) { - char UnsignedStr[10 + 1]; - unsigned UnsignedNum; - - Par_GetParToText ("Order",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1) - Gbl.Dpts.SelectedOrderType = (tDptsOrderType) UnsignedNum; - else - Gbl.Dpts.SelectedOrderType = Dpt_DEFAULT_ORDER_TYPE; + Gbl.Dpts.SelectedOrder = (Dpt_Order_t) Par_GetParToUnsigned ("Order", + (unsigned) Dpt_ORDER_BY_DEPARTMENT, + (unsigned) Dpt_ORDER_BY_NUM_TCHS, + (unsigned) Dpt_ORDER_DEFAULT); } /*****************************************************************************/ @@ -273,7 +269,7 @@ void Dpt_GetListDepartments (long InsCod) struct Department *Dpt; /***** Get departments from database *****/ - switch (Gbl.Dpts.SelectedOrderType) + switch (Gbl.Dpts.SelectedOrder) { case Dpt_ORDER_BY_DEPARTMENT: sprintf (OrderBySubQuery,"FullName"); diff --git a/swad_department.h b/swad_department.h index 4c253f32..a5ba5da1 100644 --- a/swad_department.h +++ b/swad_department.h @@ -48,9 +48,9 @@ typedef enum { Dpt_ORDER_BY_DEPARTMENT = 0, Dpt_ORDER_BY_NUM_TCHS = 1, - } tDptsOrderType; + } Dpt_Order_t; -#define Dpt_DEFAULT_ORDER_TYPE Dpt_ORDER_BY_DEPARTMENT +#define Dpt_ORDER_DEFAULT Dpt_ORDER_BY_DEPARTMENT /*****************************************************************************/ /***************************** Public prototypes *****************************/ diff --git a/swad_enrollment.c b/swad_enrollment.c index 9d8ed5c3..26d6f041 100644 --- a/swad_enrollment.c +++ b/swad_enrollment.c @@ -52,14 +52,14 @@ /****************************** Internal types *******************************/ /*****************************************************************************/ -#define Enr_NUM_ACTIONS_REG_REM_USRS 5 typedef enum { - Enr_REGISTER_SPECIFIED_USRS_IN_CRS = 0, - Enr_REMOVE_SPECIFIED_USRS_FROM_CRS = 1, - Enr_REMOVE_NOT_SPECIFIED_USRS_FROM_CRS = 2, - Enr_UPDATE_USRS_IN_CRS = 3, - Enr_ELIMINATE_USRS_FROM_PLATFORM = 4, + Enr_USRS_UNKNOWN_ACTION = 0, + Enr_REGISTER_SPECIFIED_USRS_IN_CRS = 1, + Enr_REMOVE_SPECIFIED_USRS_FROM_CRS = 2, + Enr_REMOVE_NOT_SPECIFIED_USRS_FROM_CRS = 3, + Enr_UPDATE_USRS_IN_CRS = 4, + Enr_ELIMINATE_USRS_FROM_PLATFORM = 5, } Enr_RegRemUsrsAction_t; typedef enum @@ -711,7 +711,6 @@ void Enr_RemoveOldUsrs (void) { extern const char *Txt_Eliminating_X_users_who_were_not_enrolled_in_any_course_and_with_more_than_Y_months_without_access_to_Z; extern const char *Txt_X_users_have_been_eliminated; - char UnsignedStr[10 + 1]; unsigned MonthsWithoutAccess; time_t SecondsWithoutAccess; char Query[1024]; @@ -723,11 +722,11 @@ void Enr_RemoveOldUsrs (void) struct UsrData UsrDat; /***** Get parameter with number of months without access *****/ - Par_GetParToText ("Months",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&MonthsWithoutAccess) != 1) - Lay_ShowErrorAndExit ("Number of months is missing."); - if (MonthsWithoutAccess < Usr_MIN_MONTHS_WITHOUT_ACCESS_TO_REMOVE_OLD_USRS || - MonthsWithoutAccess > Usr_MAX_MONTHS_WITHOUT_ACCESS_TO_REMOVE_OLD_USRS) + MonthsWithoutAccess = Par_GetParToUnsigned ("Months", + Usr_MIN_MONTHS_WITHOUT_ACCESS_TO_REMOVE_OLD_USRS, + Usr_MAX_MONTHS_WITHOUT_ACCESS_TO_REMOVE_OLD_USRS, + UINT_MAX); + if (MonthsWithoutAccess == UINT_MAX) Lay_ShowErrorAndExit ("Wrong number of months."); SecondsWithoutAccess = (time_t) MonthsWithoutAccess * Dat_SECONDS_IN_ONE_MONTH; @@ -1235,7 +1234,6 @@ void Enr_ReceiveFormAdminTchs (void) static void Enr_ReceiveFormUsrsCrs (Rol_Role_t Role) { - extern const char *Txt_You_must_specify_in_step_2_the_action_to_perform; extern const char *Txt_In_a_type_of_group_with_single_enrollment_students_can_not_be_registered_in_more_than_one_group; extern const char *Txt_No_user_has_been_eliminated; extern const char *Txt_One_user_has_been_eliminated; @@ -1246,8 +1244,6 @@ static void Enr_ReceiveFormUsrsCrs (Rol_Role_t Role) extern const char *Txt_No_user_has_been_enrolled; extern const char *Txt_One_user_has_been_enrolled; extern const char *Txt_X_users_have_been_enrolled_including_possible_repetitions; - char UnsignedStr[10 + 1]; - unsigned UnsignedNum; struct { bool RemoveUsrs; @@ -1267,7 +1263,6 @@ static void Enr_ReceiveFormUsrsCrs (Rol_Role_t Role) struct UsrData UsrDat; bool ItLooksLikeAUsrID; Enr_RegRemUsrsAction_t RegRemUsrsAction; - bool ErrorInForm = false; /***** Check the role of users to register / remove *****/ switch (Role) @@ -1294,243 +1289,110 @@ static void Enr_ReceiveFormUsrsCrs (Rol_Role_t Role) WhatToDo.EliminateUsrs = false; WhatToDo.RegisterUsrs = false; - Par_GetParToText ("RegRemAction",UnsignedStr,1); - if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1) - if (UnsignedNum < Enr_NUM_ACTIONS_REG_REM_USRS) - switch (RegRemUsrsAction = (Enr_RegRemUsrsAction_t) UnsignedNum) - { - case Enr_REGISTER_SPECIFIED_USRS_IN_CRS: - WhatToDo.RemoveUsrs = false; - WhatToDo.RemoveSpecifiedUsrs = false; // Ignored - WhatToDo.EliminateUsrs = false; // Ignored - WhatToDo.RegisterUsrs = true; - break; - case Enr_REMOVE_SPECIFIED_USRS_FROM_CRS: - WhatToDo.RemoveUsrs = true; - WhatToDo.RemoveSpecifiedUsrs = true; - WhatToDo.EliminateUsrs = false; - WhatToDo.RegisterUsrs = false; - break; - case Enr_REMOVE_NOT_SPECIFIED_USRS_FROM_CRS: - WhatToDo.RemoveUsrs = true; - WhatToDo.RemoveSpecifiedUsrs = false; - WhatToDo.EliminateUsrs = false; - WhatToDo.RegisterUsrs = false; - break; - case Enr_UPDATE_USRS_IN_CRS: - WhatToDo.RemoveUsrs = true; - WhatToDo.RemoveSpecifiedUsrs = false; - WhatToDo.EliminateUsrs = false; - WhatToDo.RegisterUsrs = true; - break; - case Enr_ELIMINATE_USRS_FROM_PLATFORM: - if (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM) - { - WhatToDo.RemoveUsrs = true; - WhatToDo.RemoveSpecifiedUsrs = true; - WhatToDo.EliminateUsrs = true; - WhatToDo.RegisterUsrs = false; - } - else - Lay_ShowErrorAndExit ("You are not allowed to perform this action."); - break; - default: - Lay_ShowErrorAndExit ("Wrong registering / removing specification."); - break; - } - else - Lay_ShowErrorAndExit ("Wrong registering / removing specification."); - else + RegRemUsrsAction = (Enr_RegRemUsrsAction_t) Par_GetParToUnsigned ("RegRemAction", + (unsigned) Enr_REGISTER_SPECIFIED_USRS_IN_CRS, + (unsigned) Enr_ELIMINATE_USRS_FROM_PLATFORM, + (unsigned) Enr_USRS_UNKNOWN_ACTION); + switch (RegRemUsrsAction) { - Lay_ShowAlert (Lay_WARNING,Txt_You_must_specify_in_step_2_the_action_to_perform); - - /* Show form again */ - Enr_ShowFormRegRemSeveralUsrs (Role); - ErrorInForm = true; + case Enr_REGISTER_SPECIFIED_USRS_IN_CRS: + WhatToDo.RemoveUsrs = false; + WhatToDo.RemoveSpecifiedUsrs = false; // Ignored + WhatToDo.EliminateUsrs = false; // Ignored + WhatToDo.RegisterUsrs = true; + break; + case Enr_REMOVE_SPECIFIED_USRS_FROM_CRS: + WhatToDo.RemoveUsrs = true; + WhatToDo.RemoveSpecifiedUsrs = true; + WhatToDo.EliminateUsrs = false; + WhatToDo.RegisterUsrs = false; + break; + case Enr_REMOVE_NOT_SPECIFIED_USRS_FROM_CRS: + WhatToDo.RemoveUsrs = true; + WhatToDo.RemoveSpecifiedUsrs = false; + WhatToDo.EliminateUsrs = false; + WhatToDo.RegisterUsrs = false; + break; + case Enr_UPDATE_USRS_IN_CRS: + WhatToDo.RemoveUsrs = true; + WhatToDo.RemoveSpecifiedUsrs = false; + WhatToDo.EliminateUsrs = false; + WhatToDo.RegisterUsrs = true; + break; + case Enr_ELIMINATE_USRS_FROM_PLATFORM: + if (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM) + { + WhatToDo.RemoveUsrs = true; + WhatToDo.RemoveSpecifiedUsrs = true; + WhatToDo.EliminateUsrs = true; + WhatToDo.RegisterUsrs = false; + } + else + Lay_ShowErrorAndExit ("You are not allowed to perform this action."); + break; + default: + Lay_ShowErrorAndExit ("Wrong registering / removing specification."); + break; } - if (!ErrorInForm) + /***** Get groups to which register/remove users *****/ + LstGrps.NumGrps = 0; + if (Gbl.CurrentCrs.Grps.NumGrps) // This course has groups? { - /***** Get groups to which register/remove users *****/ - LstGrps.NumGrps = 0; - if (Gbl.CurrentCrs.Grps.NumGrps) // This course has groups? - { - /***** Get list of groups types and groups in current course *****/ - Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); + /***** Get list of groups types and groups in current course *****/ + Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); - /***** Get the list of groups to which register/remove students *****/ - LstGrps.GrpCods = NULL; // Initialized to avoid bug reported by Coverity - LstGrps.NumGrps = 0; // Initialized to avoid bug reported by Coverity - Grp_GetLstCodsGrpWanted (&LstGrps); + /***** Get the list of groups to which register/remove students *****/ + LstGrps.GrpCods = NULL; // Initialized to avoid bug reported by Coverity + LstGrps.NumGrps = 0; // Initialized to avoid bug reported by Coverity + Grp_GetLstCodsGrpWanted (&LstGrps); - /***** A student can't belong to more than one group when the type of group only allows to register in one group *****/ - if (WhatToDo.RegisterUsrs && - Role == Rol_STUDENT && - LstGrps.NumGrps >= 2) - /* Check if I have selected more than one group of single enrollment */ - if (!Grp_CheckIfSelectionGrpsIsValid (&LstGrps)) - { - /* Show warning message and exit */ - Lay_ShowAlert (Lay_WARNING,Txt_In_a_type_of_group_with_single_enrollment_students_can_not_be_registered_in_more_than_one_group); - - /* Free memory used by lists of groups and abort */ - Grp_FreeListCodGrp (&LstGrps); - Grp_FreeListGrpTypesAndGrps (); - return; - } - } - - /***** Get list of users' IDs *****/ - if ((ListUsrsIDs = (char *) malloc (ID_MAX_BYTES_LIST_USRS_IDS + 1)) == NULL) - Lay_ShowErrorAndExit ("Not enough memory to store users' IDs."); - Par_GetParToText ("UsrsIDs",ListUsrsIDs,ID_MAX_BYTES_LIST_USRS_IDS); - - /***** Initialize structure with user's data *****/ - Usr_UsrDataConstructor (&UsrDat); - - /***** Remove users *****/ - if (WhatToDo.RemoveUsrs) - { - /***** Get list of users in current course *****/ - Usr_GetListUsrs (Rol_STUDENT,Sco_SCOPE_CRS); - - if (Gbl.Usrs.LstUsrs[Role].NumUsrs) + /***** A student can't belong to more than one group when the type of group only allows to register in one group *****/ + if (WhatToDo.RegisterUsrs && + Role == Rol_STUDENT && + LstGrps.NumGrps >= 2) + /* Check if I have selected more than one group of single enrollment */ + if (!Grp_CheckIfSelectionGrpsIsValid (&LstGrps)) { - /***** Initialize list of users to remove *****/ - for (NumCurrentUsr = 0; - NumCurrentUsr < Gbl.Usrs.LstUsrs[Role].NumUsrs; - NumCurrentUsr++) - Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].Remove = !WhatToDo.RemoveSpecifiedUsrs; + /* Show warning message and exit */ + Lay_ShowAlert (Lay_WARNING,Txt_In_a_type_of_group_with_single_enrollment_students_can_not_be_registered_in_more_than_one_group); - /***** Loop 1: go through form list setting if a student must be removed *****/ - /* Get users from a list of users' IDs */ - Ptr = ListUsrsIDs; - while (*Ptr) - { - /* Reset user */ - UsrDat.UsrCod = -1L; - - /* Find next string in text */ - Str_GetNextStringUntilSeparator (&Ptr,UsrDat.UsrIDNickOrEmail,Usr_MAX_BYTES_USR_LOGIN); - - /* Reset default list of users' codes */ - ListUsrCods.NumUsrs = 0; - ListUsrCods.Lst = NULL; - - /* Check if string is a user's ID, user's nickname or user's email address */ - if (Nck_CheckIfNickWithArrobaIsValid (UsrDat.UsrIDNickOrEmail)) // 1: It's a nickname - { - if ((UsrDat.UsrCod = Nck_GetUsrCodFromNickname (UsrDat.UsrIDNickOrEmail)) > 0) - { - ListUsrCods.NumUsrs = 1; - Usr_AllocateListUsrCods (&ListUsrCods); - ListUsrCods.Lst[0] = UsrDat.UsrCod; - } - } - else if (Mai_CheckIfEmailIsValid (UsrDat.UsrIDNickOrEmail)) // 2: It's an email - { - if ((UsrDat.UsrCod = Mai_GetUsrCodFromEmail (UsrDat.UsrIDNickOrEmail)) > 0) - { - ListUsrCods.NumUsrs = 1; - Usr_AllocateListUsrCods (&ListUsrCods); - ListUsrCods.Lst[0] = UsrDat.UsrCod; - } - } - else // 3: It looks like a user's ID - { - // Users' IDs are always stored internally in capitals and without leading zeros - Str_RemoveLeadingZeros (UsrDat.UsrIDNickOrEmail); - if (ID_CheckIfUsrIDSeemsAValidID (UsrDat.UsrIDNickOrEmail)) - { - /***** Find users for this user's ID *****/ - ID_ReallocateListIDs (&UsrDat,1); // Only one user's ID - Str_Copy (UsrDat.IDs.List[0].ID,UsrDat.UsrIDNickOrEmail, - ID_MAX_LENGTH_USR_ID); - Str_ConvertToUpperText (UsrDat.IDs.List[0].ID); - ID_GetListUsrCodsFromUsrID (&UsrDat,NULL,&ListUsrCods,false); - } - } - - if (WhatToDo.RemoveSpecifiedUsrs) // Remove the specified users (of the role) - { - if (ListUsrCods.NumUsrs == 1) // If more than one user found ==> do not remove - for (NumCurrentUsr = 0; - NumCurrentUsr < Gbl.Usrs.LstUsrs[Role].NumUsrs; - NumCurrentUsr++) - if (Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].UsrCod == ListUsrCods.Lst[0]) // User found - Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].Remove = true; // Mark as removable - } - else // Remove all the users (of the role) except these specified - { - for (NumCurrentUsr = 0; - NumCurrentUsr < Gbl.Usrs.LstUsrs[Role].NumUsrs; - NumCurrentUsr++) - for (NumUsrFound = 0; - NumUsrFound < ListUsrCods.NumUsrs; - NumUsrFound++) - if (Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].UsrCod == ListUsrCods.Lst[NumUsrFound]) // User found - Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].Remove = false; // Mark as not removable - } - - /* Free memory used for list of users' codes found for this ID */ - Usr_FreeListUsrCods (&ListUsrCods); - } - - /***** Loop 2: go through users list removing users *****/ - for (NumCurrentUsr = 0; - NumCurrentUsr < Gbl.Usrs.LstUsrs[Role].NumUsrs; - NumCurrentUsr++) - if (Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].Remove) // If this student must be removed - { - UsrDat.UsrCod = Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].UsrCod; - if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat)) // If user's data exist... - { - if (WhatToDo.EliminateUsrs) // Eliminate user completely from the platform - { - Acc_CompletelyEliminateAccount (&UsrDat,Cns_QUIET); // Remove definitely the user from the platform - NumUsrsEliminated++; - } - else - { - if (Gbl.CurrentCrs.Grps.NumGrps) // If there are groups in the course - { - if (LstGrps.NumGrps) // If the teacher has selected groups - { - if (Grp_RemoveUsrFromGroups (&UsrDat,&LstGrps)) // Remove user from the selected groups, not from the whole course - NumUsrsRemoved++; - } - else // The teacher has not selected groups - { - Enr_EffectivelyRemUsrFromCrs (&UsrDat,&Gbl.CurrentCrs.Crs, - Enr_DO_NOT_REMOVE_WORKS,Cns_QUIET); // Remove user from the course - NumUsrsRemoved++; - } - } - else // No groups - { - Enr_EffectivelyRemUsrFromCrs (&UsrDat,&Gbl.CurrentCrs.Crs, - Enr_DO_NOT_REMOVE_WORKS,Cns_QUIET); // Remove user from the course - NumUsrsRemoved++; - } - } - } - } + /* Free memory used by lists of groups and abort */ + Grp_FreeListCodGrp (&LstGrps); + Grp_FreeListGrpTypesAndGrps (); + return; } + } - /***** Free memory for users list *****/ - Usr_FreeUsrsList (Role); - } + /***** Get list of users' IDs *****/ + if ((ListUsrsIDs = (char *) malloc (ID_MAX_BYTES_LIST_USRS_IDS + 1)) == NULL) + Lay_ShowErrorAndExit ("Not enough memory to store users' IDs."); + Par_GetParToText ("UsrsIDs",ListUsrsIDs,ID_MAX_BYTES_LIST_USRS_IDS); - /***** Register users *****/ - if (WhatToDo.RegisterUsrs) // TODO: !!!!! NO CAMBIAR EL ROL DE LOS USUARIOS QUE YA ESTÉN EN LA ASIGNATURA SI HAY MÁS DE UN USUARIO ENCONTRADO PARA EL MISMO DNI !!!!!! + /***** Initialize structure with user's data *****/ + Usr_UsrDataConstructor (&UsrDat); + + /***** Remove users *****/ + if (WhatToDo.RemoveUsrs) + { + /***** Get list of users in current course *****/ + Usr_GetListUsrs (Rol_STUDENT,Sco_SCOPE_CRS); + + if (Gbl.Usrs.LstUsrs[Role].NumUsrs) { - /***** Get users from a list of users' IDs ******/ + /***** Initialize list of users to remove *****/ + for (NumCurrentUsr = 0; + NumCurrentUsr < Gbl.Usrs.LstUsrs[Role].NumUsrs; + NumCurrentUsr++) + Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].Remove = !WhatToDo.RemoveSpecifiedUsrs; + + /***** Loop 1: go through form list setting if a student must be removed *****/ + /* Get users from a list of users' IDs */ Ptr = ListUsrsIDs; while (*Ptr) { /* Reset user */ UsrDat.UsrCod = -1L; - ItLooksLikeAUsrID = false; /* Find next string in text */ Str_GetNextStringUntilSeparator (&Ptr,UsrDat.UsrIDNickOrEmail,Usr_MAX_BYTES_USR_LOGIN); @@ -1539,7 +1401,7 @@ static void Enr_ReceiveFormUsrsCrs (Rol_Role_t Role) ListUsrCods.NumUsrs = 0; ListUsrCods.Lst = NULL; - /* Check if the string is a user's ID, a user's nickname or a user's email address */ + /* Check if string is a user's ID, user's nickname or user's email address */ if (Nck_CheckIfNickWithArrobaIsValid (UsrDat.UsrIDNickOrEmail)) // 1: It's a nickname { if ((UsrDat.UsrCod = Nck_GetUsrCodFromNickname (UsrDat.UsrIDNickOrEmail)) > 0) @@ -1549,7 +1411,7 @@ static void Enr_ReceiveFormUsrsCrs (Rol_Role_t Role) ListUsrCods.Lst[0] = UsrDat.UsrCod; } } - else if (Mai_CheckIfEmailIsValid (UsrDat.UsrIDNickOrEmail)) // 2: It's an email + else if (Mai_CheckIfEmailIsValid (UsrDat.UsrIDNickOrEmail)) // 2: It's an email { if ((UsrDat.UsrCod = Mai_GetUsrCodFromEmail (UsrDat.UsrIDNickOrEmail)) > 0) { @@ -1564,100 +1426,221 @@ static void Enr_ReceiveFormUsrsCrs (Rol_Role_t Role) Str_RemoveLeadingZeros (UsrDat.UsrIDNickOrEmail); if (ID_CheckIfUsrIDSeemsAValidID (UsrDat.UsrIDNickOrEmail)) { - ItLooksLikeAUsrID = true; - - /* Find users for this user's ID */ + /***** Find users for this user's ID *****/ ID_ReallocateListIDs (&UsrDat,1); // Only one user's ID Str_Copy (UsrDat.IDs.List[0].ID,UsrDat.UsrIDNickOrEmail, - ID_MAX_LENGTH_USR_ID); - Str_ConvertToUpperText (UsrDat.IDs.List[0].ID); + ID_MAX_LENGTH_USR_ID); + Str_ConvertToUpperText (UsrDat.IDs.List[0].ID); ID_GetListUsrCodsFromUsrID (&UsrDat,NULL,&ListUsrCods,false); } } - /* Register user(s) */ - if (ListUsrCods.NumUsrs) // User(s) found - for (NumUsrFound = 0; - NumUsrFound < ListUsrCods.NumUsrs; - NumUsrFound++) - { - UsrDat.UsrCod = ListUsrCods.Lst[NumUsrFound]; - Enr_RegisterUsr (&UsrDat,Role,&LstGrps,&NumUsrsRegistered); - } - else if (ItLooksLikeAUsrID) // User not found. He/she is a new user. Register him/her using ID - Enr_RegisterUsr (&UsrDat,Role,&LstGrps,&NumUsrsRegistered); + if (WhatToDo.RemoveSpecifiedUsrs) // Remove the specified users (of the role) + { + if (ListUsrCods.NumUsrs == 1) // If more than one user found ==> do not remove + for (NumCurrentUsr = 0; + NumCurrentUsr < Gbl.Usrs.LstUsrs[Role].NumUsrs; + NumCurrentUsr++) + if (Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].UsrCod == ListUsrCods.Lst[0]) // User found + Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].Remove = true; // Mark as removable + } + else // Remove all the users (of the role) except these specified + { + for (NumCurrentUsr = 0; + NumCurrentUsr < Gbl.Usrs.LstUsrs[Role].NumUsrs; + NumCurrentUsr++) + for (NumUsrFound = 0; + NumUsrFound < ListUsrCods.NumUsrs; + NumUsrFound++) + if (Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].UsrCod == ListUsrCods.Lst[NumUsrFound]) // User found + Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].Remove = false; // Mark as not removable + } /* Free memory used for list of users' codes found for this ID */ Usr_FreeListUsrCods (&ListUsrCods); } + + /***** Loop 2: go through users list removing users *****/ + for (NumCurrentUsr = 0; + NumCurrentUsr < Gbl.Usrs.LstUsrs[Role].NumUsrs; + NumCurrentUsr++) + if (Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].Remove) // If this student must be removed + { + UsrDat.UsrCod = Gbl.Usrs.LstUsrs[Role].Lst[NumCurrentUsr].UsrCod; + if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat)) // If user's data exist... + { + if (WhatToDo.EliminateUsrs) // Eliminate user completely from the platform + { + Acc_CompletelyEliminateAccount (&UsrDat,Cns_QUIET); // Remove definitely the user from the platform + NumUsrsEliminated++; + } + else + { + if (Gbl.CurrentCrs.Grps.NumGrps) // If there are groups in the course + { + if (LstGrps.NumGrps) // If the teacher has selected groups + { + if (Grp_RemoveUsrFromGroups (&UsrDat,&LstGrps)) // Remove user from the selected groups, not from the whole course + NumUsrsRemoved++; + } + else // The teacher has not selected groups + { + Enr_EffectivelyRemUsrFromCrs (&UsrDat,&Gbl.CurrentCrs.Crs, + Enr_DO_NOT_REMOVE_WORKS,Cns_QUIET); // Remove user from the course + NumUsrsRemoved++; + } + } + else // No groups + { + Enr_EffectivelyRemUsrFromCrs (&UsrDat,&Gbl.CurrentCrs.Crs, + Enr_DO_NOT_REMOVE_WORKS,Cns_QUIET); // Remove user from the course + NumUsrsRemoved++; + } + } + } + } } - /***** Free memory used for user's data *****/ - Usr_UsrDataDestructor (&UsrDat); + /***** Free memory for users list *****/ + Usr_FreeUsrsList (Role); + } - if (NumUsrsEliminated) - /***** Move unused contents of messages to table of deleted contents of messages *****/ - Msg_MoveUnusedMsgsContentToDeleted (); - - /***** Write messages with the number of users enrolled/removed *****/ - if (WhatToDo.RemoveUsrs) + /***** Register users *****/ + if (WhatToDo.RegisterUsrs) // TODO: !!!!! NO CAMBIAR EL ROL DE LOS USUARIOS QUE YA ESTÉN EN LA ASIGNATURA SI HAY MÁS DE UN USUARIO ENCONTRADO PARA EL MISMO DNI !!!!!! + { + /***** Get users from a list of users' IDs ******/ + Ptr = ListUsrsIDs; + while (*Ptr) { - if (WhatToDo.EliminateUsrs) // Eliminate completely from the platform - switch (NumUsrsEliminated) + /* Reset user */ + UsrDat.UsrCod = -1L; + ItLooksLikeAUsrID = false; + + /* Find next string in text */ + Str_GetNextStringUntilSeparator (&Ptr,UsrDat.UsrIDNickOrEmail,Usr_MAX_BYTES_USR_LOGIN); + + /* Reset default list of users' codes */ + ListUsrCods.NumUsrs = 0; + ListUsrCods.Lst = NULL; + + /* Check if the string is a user's ID, a user's nickname or a user's email address */ + if (Nck_CheckIfNickWithArrobaIsValid (UsrDat.UsrIDNickOrEmail)) // 1: It's a nickname + { + if ((UsrDat.UsrCod = Nck_GetUsrCodFromNickname (UsrDat.UsrIDNickOrEmail)) > 0) { - case 0: - Lay_ShowAlert (Lay_INFO,Txt_No_user_has_been_eliminated); - break; - case 1: - Lay_ShowAlert (Lay_SUCCESS,Txt_One_user_has_been_eliminated); - break; - default: - sprintf (Gbl.Message,Txt_X_users_have_been_eliminated, - NumUsrsEliminated); - Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); - break; + ListUsrCods.NumUsrs = 1; + Usr_AllocateListUsrCods (&ListUsrCods); + ListUsrCods.Lst[0] = UsrDat.UsrCod; } - else // Only remove from course / groups - switch (NumUsrsRemoved) + } + else if (Mai_CheckIfEmailIsValid (UsrDat.UsrIDNickOrEmail)) // 2: It's an email + { + if ((UsrDat.UsrCod = Mai_GetUsrCodFromEmail (UsrDat.UsrIDNickOrEmail)) > 0) { - case 0: - Lay_ShowAlert (Lay_INFO,Txt_No_user_has_been_removed); - break; - case 1: - Lay_ShowAlert (Lay_SUCCESS,Txt_One_user_has_been_removed); - break; - default: - sprintf (Gbl.Message,Txt_X_users_have_been_removed, - NumUsrsRemoved); - Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); - break; + ListUsrCods.NumUsrs = 1; + Usr_AllocateListUsrCods (&ListUsrCods); + ListUsrCods.Lst[0] = UsrDat.UsrCod; } + } + else // 3: It looks like a user's ID + { + // Users' IDs are always stored internally in capitals and without leading zeros + Str_RemoveLeadingZeros (UsrDat.UsrIDNickOrEmail); + if (ID_CheckIfUsrIDSeemsAValidID (UsrDat.UsrIDNickOrEmail)) + { + ItLooksLikeAUsrID = true; + + /* Find users for this user's ID */ + ID_ReallocateListIDs (&UsrDat,1); // Only one user's ID + Str_Copy (UsrDat.IDs.List[0].ID,UsrDat.UsrIDNickOrEmail, + ID_MAX_LENGTH_USR_ID); + Str_ConvertToUpperText (UsrDat.IDs.List[0].ID); + ID_GetListUsrCodsFromUsrID (&UsrDat,NULL,&ListUsrCods,false); + } + } + + /* Register user(s) */ + if (ListUsrCods.NumUsrs) // User(s) found + for (NumUsrFound = 0; + NumUsrFound < ListUsrCods.NumUsrs; + NumUsrFound++) + { + UsrDat.UsrCod = ListUsrCods.Lst[NumUsrFound]; + Enr_RegisterUsr (&UsrDat,Role,&LstGrps,&NumUsrsRegistered); + } + else if (ItLooksLikeAUsrID) // User not found. He/she is a new user. Register him/her using ID + Enr_RegisterUsr (&UsrDat,Role,&LstGrps,&NumUsrsRegistered); + + /* Free memory used for list of users' codes found for this ID */ + Usr_FreeListUsrCods (&ListUsrCods); } - if (WhatToDo.RegisterUsrs) - switch (NumUsrsRegistered) + } + + /***** Free memory used for user's data *****/ + Usr_UsrDataDestructor (&UsrDat); + + if (NumUsrsEliminated) + /***** Move unused contents of messages to table of deleted contents of messages *****/ + Msg_MoveUnusedMsgsContentToDeleted (); + + /***** Write messages with the number of users enrolled/removed *****/ + if (WhatToDo.RemoveUsrs) + { + if (WhatToDo.EliminateUsrs) // Eliminate completely from the platform + switch (NumUsrsEliminated) { case 0: - Lay_ShowAlert (Lay_INFO,Txt_No_user_has_been_enrolled); + Lay_ShowAlert (Lay_INFO,Txt_No_user_has_been_eliminated); break; case 1: - Lay_ShowAlert (Lay_SUCCESS,Txt_One_user_has_been_enrolled); + Lay_ShowAlert (Lay_SUCCESS,Txt_One_user_has_been_eliminated); break; default: - sprintf (Gbl.Message,Txt_X_users_have_been_enrolled_including_possible_repetitions, - NumUsrsRegistered); + sprintf (Gbl.Message,Txt_X_users_have_been_eliminated, + NumUsrsEliminated); + Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); + break; + } + else // Only remove from course / groups + switch (NumUsrsRemoved) + { + case 0: + Lay_ShowAlert (Lay_INFO,Txt_No_user_has_been_removed); + break; + case 1: + Lay_ShowAlert (Lay_SUCCESS,Txt_One_user_has_been_removed); + break; + default: + sprintf (Gbl.Message,Txt_X_users_have_been_removed, + NumUsrsRemoved); Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); break; } - - /***** Free memory used by the list of user's IDs *****/ - free (ListUsrsIDs); - - /***** Free memory with the list of groups to/from which register/remove users *****/ - Grp_FreeListCodGrp (&LstGrps); - - /***** Free list of groups types and groups in current course *****/ - Grp_FreeListGrpTypesAndGrps (); } + if (WhatToDo.RegisterUsrs) + switch (NumUsrsRegistered) + { + case 0: + Lay_ShowAlert (Lay_INFO,Txt_No_user_has_been_enrolled); + break; + case 1: + Lay_ShowAlert (Lay_SUCCESS,Txt_One_user_has_been_enrolled); + break; + default: + sprintf (Gbl.Message,Txt_X_users_have_been_enrolled_including_possible_repetitions, + NumUsrsRegistered); + Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); + break; + } + + /***** Free memory used by the list of user's IDs *****/ + free (ListUsrsIDs); + + /***** Free memory with the list of groups to/from which register/remove users *****/ + Grp_FreeListCodGrp (&LstGrps); + + /***** Free list of groups types and groups in current course *****/ + Grp_FreeListGrpTypesAndGrps (); } /*****************************************************************************/ @@ -1854,7 +1837,6 @@ void Enr_SignUpInCrs (void) char Query[512]; MYSQL_RES *mysql_res; MYSQL_ROW row; - char UnsignedStr[10 + 1]; Rol_Role_t RoleFromForm; long ReqCod = -1L; unsigned NumUsrsToBeNotifiedByEMail; @@ -1870,8 +1852,10 @@ void Enr_SignUpInCrs (void) else { /***** Get new role from record form *****/ - Par_GetParToText ("Role",UnsignedStr,10); - RoleFromForm = Rol_ConvertUnsignedStrToRole (UnsignedStr); + RoleFromForm = (Rol_Role_t) Par_GetParToUnsigned ("Role", + 0, + Rol_NUM_ROLES - 1, + (unsigned) Rol_UNKNOWN); /* Check if role is correct */ if (!(RoleFromForm == Rol_STUDENT || @@ -3642,8 +3626,6 @@ void Enr_ModifyUsr1 (void) extern const char *Txt_The_role_of_THE_USER_X_in_the_course_Y_has_changed_from_A_to_B; extern const char *Txt_ROLES_SINGUL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; extern const char *Txt_THE_USER_X_has_been_enrolled_in_the_course_Y; - char UnsignedStr[10 + 1]; - unsigned UnsignedNum; bool ItsMe; Rol_Role_t OldRole; Rol_Role_t NewRole; @@ -3658,106 +3640,107 @@ void Enr_ModifyUsr1 (void) ItsMe = (Gbl.Usrs.Other.UsrDat.UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod); /***** Get the action to do *****/ - Par_GetParToText ("RegRemAction",UnsignedStr,1); - if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1) - if (UnsignedNum < Enr_NUM_ACTIONS_REG_REM_ONE_USR) - switch ((Gbl.Usrs.RegRemAction = (Enr_RegRemOneUsrAction_t) UnsignedNum)) + Gbl.Usrs.RegRemAction = (Enr_RegRemOneUsrAction_t) + Par_GetParToUnsigned ("RegRemAction", + (unsigned) Enr_REGISTER_MODIFY_ONE_USR_IN_CRS, + (unsigned) Enr_ELIMINATE_ONE_USR_FROM_PLATFORM, + (unsigned) Enr_ONE_USR_UNKNOWN_ACTION); + switch (Gbl.Usrs.RegRemAction) + { + case Enr_REGISTER_MODIFY_ONE_USR_IN_CRS: + if (ItsMe || Gbl.Usrs.Me.LoggedRole >= Rol_TEACHER) { - case Enr_REGISTER_MODIFY_ONE_USR_IN_CRS: - if (ItsMe || Gbl.Usrs.Me.LoggedRole >= Rol_TEACHER) + /***** Get user's name from record form *****/ + if (Usr_ICanChangeOtherUsrData (&Gbl.Usrs.Other.UsrDat)) + Rec_GetUsrNameFromRecordForm (&Gbl.Usrs.Other.UsrDat); + + /***** Update user's data in database *****/ + Enr_UpdateUsrData (&Gbl.Usrs.Other.UsrDat); + + if (Gbl.CurrentCrs.Crs.CrsCod > 0) + { + /***** Get new role from record form *****/ + NewRole = Rec_GetRoleFromRecordForm (); + + /***** Register user in current course in database *****/ + if (Usr_CheckIfUsrBelongsToCrs (Gbl.Usrs.Other.UsrDat.UsrCod, + Gbl.CurrentCrs.Crs.CrsCod, + false)) // User does belong to current course { - /***** Get user's name from record form *****/ - if (Usr_ICanChangeOtherUsrData (&Gbl.Usrs.Other.UsrDat)) - Rec_GetUsrNameFromRecordForm (&Gbl.Usrs.Other.UsrDat); - - /***** Update user's data in database *****/ - Enr_UpdateUsrData (&Gbl.Usrs.Other.UsrDat); - - if (Gbl.CurrentCrs.Crs.CrsCod > 0) + OldRole = Gbl.Usrs.Other.UsrDat.RoleInCurrentCrsDB; // Remember old role before changing it + if (NewRole != OldRole) // The role must be updated { - /***** Get new role from record form *****/ - NewRole = Rec_GetRoleFromRecordForm (); + /* Modify role */ + Enr_ModifyRoleInCurrentCrs (&Gbl.Usrs.Other.UsrDat,NewRole); - /***** Register user in current course in database *****/ - if (Usr_CheckIfUsrBelongsToCrs (Gbl.Usrs.Other.UsrDat.UsrCod, - Gbl.CurrentCrs.Crs.CrsCod, - false)) // User does belong to current course - { - OldRole = Gbl.Usrs.Other.UsrDat.RoleInCurrentCrsDB; // Remember old role before changing it - if (NewRole != OldRole) // The role must be updated - { - /* Modify role */ - Enr_ModifyRoleInCurrentCrs (&Gbl.Usrs.Other.UsrDat,NewRole); - - /* Show success message */ - sprintf (Gbl.Message,Txt_The_role_of_THE_USER_X_in_the_course_Y_has_changed_from_A_to_B, - Gbl.Usrs.Other.UsrDat.FullName,Gbl.CurrentCrs.Crs.FullName, - Txt_ROLES_SINGUL_abc[OldRole][Gbl.Usrs.Other.UsrDat.Sex], - Txt_ROLES_SINGUL_abc[NewRole][Gbl.Usrs.Other.UsrDat.Sex]); - } - } - else - { - /* Register user */ - Enr_RegisterUsrInCurrentCrs (&Gbl.Usrs.Other.UsrDat,NewRole, - Enr_SET_ACCEPTED_TO_FALSE); - - /* Show success message */ - sprintf (Gbl.Message,Txt_THE_USER_X_has_been_enrolled_in_the_course_Y, - Gbl.Usrs.Other.UsrDat.FullName,Gbl.CurrentCrs.Crs.FullName); - } - - /***** Change current action *****/ - Gbl.Action.Act = (NewRole == Rol_STUDENT) ? ActUpdStd : - ((NewRole == Rol_TEACHER) ? ActUpdTch : - ActUpdOth); - Tab_SetCurrentTab (); + /* Show success message */ + sprintf (Gbl.Message,Txt_The_role_of_THE_USER_X_in_the_course_Y_has_changed_from_A_to_B, + Gbl.Usrs.Other.UsrDat.FullName,Gbl.CurrentCrs.Crs.FullName, + Txt_ROLES_SINGUL_abc[OldRole][Gbl.Usrs.Other.UsrDat.Sex], + Txt_ROLES_SINGUL_abc[NewRole][Gbl.Usrs.Other.UsrDat.Sex]); } } else - Gbl.Error = true; - break; - case Enr_REGISTER_ONE_DEGREE_ADMIN: - if (Gbl.Usrs.Me.LoggedRole < Rol_CTR_ADM) - Gbl.Error = true; - break; - case Enr_REGISTER_ONE_CENTRE_ADMIN: - if (Gbl.Usrs.Me.LoggedRole < Rol_INS_ADM) - Gbl.Error = true; - break; - case Enr_REGISTER_ONE_INSTITUTION_ADMIN: - if (Gbl.Usrs.Me.LoggedRole != Rol_SYS_ADM) - Gbl.Error = true; - break; - case Enr_REPORT_USR_AS_POSSIBLE_DUPLICATE: - if (ItsMe || Gbl.Usrs.Me.LoggedRole < Rol_TEACHER) - Gbl.Error = true; - break; - case Enr_REMOVE_ONE_USR_FROM_CRS: - if (!ItsMe && Gbl.Usrs.Me.LoggedRole < Rol_TEACHER) - Gbl.Error = true; - break; - case Enr_REMOVE_ONE_DEGREE_ADMIN: - if (!ItsMe && Gbl.Usrs.Me.LoggedRole < Rol_CTR_ADM) - Gbl.Error = true; - break; - case Enr_REMOVE_ONE_CENTRE_ADMIN: - if (!ItsMe && Gbl.Usrs.Me.LoggedRole < Rol_INS_ADM) - Gbl.Error = true; - break; - case Enr_REMOVE_ONE_INSTITUTION_ADMIN: - if (!ItsMe && Gbl.Usrs.Me.LoggedRole != Rol_SYS_ADM) - Gbl.Error = true; - break; - case Enr_ELIMINATE_ONE_USR_FROM_PLATFORM: - if (!Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod)) - Gbl.Error = true; - break; + { + /* Register user */ + Enr_RegisterUsrInCurrentCrs (&Gbl.Usrs.Other.UsrDat,NewRole, + Enr_SET_ACCEPTED_TO_FALSE); + + /* Show success message */ + sprintf (Gbl.Message,Txt_THE_USER_X_has_been_enrolled_in_the_course_Y, + Gbl.Usrs.Other.UsrDat.FullName,Gbl.CurrentCrs.Crs.FullName); + } + + /***** Change current action *****/ + Gbl.Action.Act = (NewRole == Rol_STUDENT) ? ActUpdStd : + ((NewRole == Rol_TEACHER) ? ActUpdTch : + ActUpdOth); + Tab_SetCurrentTab (); + } } - else + else + Gbl.Error = true; + break; + case Enr_REGISTER_ONE_DEGREE_ADMIN: + if (Gbl.Usrs.Me.LoggedRole < Rol_CTR_ADM) + Gbl.Error = true; + break; + case Enr_REGISTER_ONE_CENTRE_ADMIN: + if (Gbl.Usrs.Me.LoggedRole < Rol_INS_ADM) + Gbl.Error = true; + break; + case Enr_REGISTER_ONE_INSTITUTION_ADMIN: + if (Gbl.Usrs.Me.LoggedRole != Rol_SYS_ADM) + Gbl.Error = true; + break; + case Enr_REPORT_USR_AS_POSSIBLE_DUPLICATE: + if (ItsMe || Gbl.Usrs.Me.LoggedRole < Rol_TEACHER) + Gbl.Error = true; + break; + case Enr_REMOVE_ONE_USR_FROM_CRS: + if (!ItsMe && Gbl.Usrs.Me.LoggedRole < Rol_TEACHER) + Gbl.Error = true; + break; + case Enr_REMOVE_ONE_DEGREE_ADMIN: + if (!ItsMe && Gbl.Usrs.Me.LoggedRole < Rol_CTR_ADM) + Gbl.Error = true; + break; + case Enr_REMOVE_ONE_CENTRE_ADMIN: + if (!ItsMe && Gbl.Usrs.Me.LoggedRole < Rol_INS_ADM) + Gbl.Error = true; + break; + case Enr_REMOVE_ONE_INSTITUTION_ADMIN: + if (!ItsMe && Gbl.Usrs.Me.LoggedRole != Rol_SYS_ADM) + Gbl.Error = true; + break; + case Enr_ELIMINATE_ONE_USR_FROM_PLATFORM: + if (!Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod)) + Gbl.Error = true; + break; + default: Gbl.Error = true; - else - Gbl.Error = true; + break; + } } else Gbl.Error = true; @@ -3822,6 +3805,8 @@ void Enr_ModifyUsr2 (void) case Enr_ELIMINATE_ONE_USR_FROM_PLATFORM: Acc_ReqRemAccountOrRemAccount (Acc_REQUEST_REMOVE_USR); break; + default: + break; } } diff --git a/swad_enrollment.h b/swad_enrollment.h index 061838c8..7d8d63c1 100644 --- a/swad_enrollment.h +++ b/swad_enrollment.h @@ -49,19 +49,19 @@ typedef enum Enr_SET_ACCEPTED_TO_TRUE, } Enr_KeepOrSetAccepted_t; -#define Enr_NUM_ACTIONS_REG_REM_ONE_USR 10 typedef enum { - Enr_REGISTER_MODIFY_ONE_USR_IN_CRS = 0, - Enr_REGISTER_ONE_DEGREE_ADMIN = 1, - Enr_REGISTER_ONE_CENTRE_ADMIN = 2, - Enr_REGISTER_ONE_INSTITUTION_ADMIN = 3, - Enr_REPORT_USR_AS_POSSIBLE_DUPLICATE = 4, - Enr_REMOVE_ONE_USR_FROM_CRS = 5, - Enr_REMOVE_ONE_DEGREE_ADMIN = 6, - Enr_REMOVE_ONE_CENTRE_ADMIN = 7, - Enr_REMOVE_ONE_INSTITUTION_ADMIN = 8, - Enr_ELIMINATE_ONE_USR_FROM_PLATFORM = 9, + Enr_ONE_USR_UNKNOWN_ACTION = 0, + Enr_REGISTER_MODIFY_ONE_USR_IN_CRS = 1, + Enr_REGISTER_ONE_DEGREE_ADMIN = 2, + Enr_REGISTER_ONE_CENTRE_ADMIN = 3, + Enr_REGISTER_ONE_INSTITUTION_ADMIN = 4, + Enr_REPORT_USR_AS_POSSIBLE_DUPLICATE = 5, + Enr_REMOVE_ONE_USR_FROM_CRS = 6, + Enr_REMOVE_ONE_DEGREE_ADMIN = 7, + Enr_REMOVE_ONE_CENTRE_ADMIN = 8, + Enr_REMOVE_ONE_INSTITUTION_ADMIN = 9, + Enr_ELIMINATE_ONE_USR_FROM_PLATFORM = 10, } Enr_RegRemOneUsrAction_t; /*****************************************************************************/ diff --git a/swad_exam.c b/swad_exam.c index 2f15d1ab..fcb13e92 100644 --- a/swad_exam.c +++ b/swad_exam.c @@ -116,7 +116,6 @@ void Exa_PutFrmEditAExamAnnouncement (void) static long Exa_GetParamsExamAnnouncement (void) { - char UnsignedStr[10 + 1]; long ExaCod; /***** Get the code of the exam announcement *****/ @@ -130,11 +129,10 @@ static long Exa_GetParamsExamAnnouncement (void) Crs_MAX_LENGTH_COURSE_FULL_NAME); /***** Get the year *****/ - Par_GetParToText ("Year",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&Gbl.ExamAnns.ExaDat.Year) != 1) - Gbl.ExamAnns.ExaDat.Year = Gbl.CurrentCrs.Crs.Year; - if (Gbl.ExamAnns.ExaDat.Year > Deg_MAX_YEARS_PER_DEGREE) - Gbl.ExamAnns.ExaDat.Year = Gbl.CurrentCrs.Crs.Year; + Gbl.ExamAnns.ExaDat.Year = Par_GetParToUnsigned ("Year", + 0, // N.A. + Deg_MAX_YEARS_PER_DEGREE, + Gbl.CurrentCrs.Crs.Year); /***** Get the type of exam announcement *****/ Par_GetParToText ("ExamSession",Gbl.ExamAnns.ExaDat.Session,Cns_MAX_BYTES_STRING); @@ -154,28 +152,16 @@ static long Exa_GetParamsExamAnnouncement (void) } /***** Get the hour of the exam *****/ - Par_GetParToText ("ExamHour",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&Gbl.ExamAnns.ExaDat.StartTime.Hour) != 1) - Gbl.ExamAnns.ExaDat.StartTime.Hour = 0; - if (Gbl.ExamAnns.ExaDat.StartTime.Hour > 23) - Gbl.ExamAnns.ExaDat.StartTime.Hour = 0; - Par_GetParToText ("ExamMinute",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&Gbl.ExamAnns.ExaDat.StartTime.Minute) != 1) - Gbl.ExamAnns.ExaDat.StartTime.Minute = 0; - if (Gbl.ExamAnns.ExaDat.StartTime.Minute > 59) - Gbl.ExamAnns.ExaDat.StartTime.Minute = 0; + Gbl.ExamAnns.ExaDat.StartTime.Hour = Par_GetParToUnsigned ("ExamHour", + 0,23,0); + Gbl.ExamAnns.ExaDat.StartTime.Minute = Par_GetParToUnsigned ("ExamMinute", + 0,59,0); /***** Get the duration of the exam *****/ - Par_GetParToText ("DurationHour",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&Gbl.ExamAnns.ExaDat.Duration.Hour) != 1) - Gbl.ExamAnns.ExaDat.Duration.Hour = 0; - if (Gbl.ExamAnns.ExaDat.Duration.Hour > 23) - Gbl.ExamAnns.ExaDat.Duration.Hour = 0; - Par_GetParToText ("DurationMinute",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&Gbl.ExamAnns.ExaDat.Duration.Minute) != 1) - Gbl.ExamAnns.ExaDat.Duration.Minute = 0; - if (Gbl.ExamAnns.ExaDat.Duration.Minute > 59) - Gbl.ExamAnns.ExaDat.Duration.Minute = 0; + Gbl.ExamAnns.ExaDat.Duration.Hour = Par_GetParToUnsigned ("DurationHour", + 0,23,0); + Gbl.ExamAnns.ExaDat.Duration.Minute = Par_GetParToUnsigned ("DurationMinute", + 0,59,0); /***** Get the place where the exam will happen *****/ Par_GetParToHTML ("Place",Gbl.ExamAnns.ExaDat.Place,Cns_MAX_BYTES_TEXT); diff --git a/swad_file_browser.c b/swad_file_browser.c index 50938c3a..f0ce3e85 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -2296,17 +2296,11 @@ void Brw_GetParAndInitFileBrowser (void) static long Brw_GetGrpSettings (void) { - char LongStr[1 + 10 + 1]; long GrpCod; - /***** Get parameter with group code *****/ - if (Par_GetParToText ("GrpCod",LongStr,1 + 10)) - { - if ((GrpCod = Str_ConvertStrCodToLongCod (LongStr)) <= 0) - GrpCod = -1L; + if ((GrpCod = Par_GetParToLong ("GrpCod")) > 0) return GrpCod; - } - else // Parameter GrpCod not found! + else /***** Try to get group code from database *****/ switch (Gbl.Action.Act) { @@ -9870,19 +9864,10 @@ static bool Brw_GetParamPublicFile (void) static Brw_License_t Brw_GetParLicense (void) { - char UnsignedStr[10 + 1]; - unsigned UnsignedNum; - - /* Get file license from form */ - Par_GetParToText ("License",UnsignedStr,10); - - if (sscanf (UnsignedStr,"%u",&UnsignedNum) != 1) - return Brw_LICENSE_UNKNOWN; - - if (UnsignedNum < Brw_NUM_LICENSES) - return (Brw_License_t) UnsignedNum; - - return Brw_LICENSE_UNKNOWN; + return (Brw_License_t) Par_GetParToUnsigned ("License", + (unsigned) Brw_LICENSE_UNKNOWN, + (unsigned) Brw_LICENSE_CC_BY_NC_ND, + (unsigned) Brw_LICENSE_UNKNOWN); } /*****************************************************************************/ @@ -11603,8 +11588,8 @@ void Brw_AskRemoveOldFiles (void) The_ClassForm[Gbl.Prefs.Theme], Txt_Remove_files_older_than_PART_1_OF_2); fprintf (Gbl.F.Out,"", Gbl.Form.Id); for (Order = (Pho_HowOrderDegrees_t) 0; @@ -1835,7 +1819,7 @@ static void Pho_PutSelectorForHowOrderDegrees (void) void Pho_PutHiddenParamOrderDegrees (void) { - Par_PutHiddenParamUnsigned ("OrdDeg",(unsigned) Gbl.Stat.DegPhotos.HowOrderDegrees); + Par_PutHiddenParamUnsigned ("Order",(unsigned) Gbl.Stat.DegPhotos.HowOrderDegrees); } /*****************************************************************************/ @@ -1844,19 +1828,11 @@ void Pho_PutHiddenParamOrderDegrees (void) static Pho_HowOrderDegrees_t Pho_GetHowOrderDegreesFromForm (void) { - char UnsignedStr[10 + 1]; - unsigned UnsignedNum; - - Par_GetParToText ("OrdDeg",UnsignedStr,10); - if (UnsignedStr[0]) - { - if (sscanf (UnsignedStr,"%u",&UnsignedNum) != 1) - Lay_ShowErrorAndExit ("Sort order is missing."); - if (UnsignedNum >= Pho_NUM_HOW_ORDER_DEGREES) - Lay_ShowErrorAndExit ("Sort order is missing."); - return (Pho_HowOrderDegrees_t) UnsignedNum; - } - return (Pho_HowOrderDegrees_t) 0; + return (Pho_HowOrderDegrees_t) + Par_GetParToUnsigned ("Order", + (unsigned) Pho_NUMBER_OF_STUDENTS, + (unsigned) Pho_DEGREE_NAME, + (unsigned) Pho_ORDER_DEFAULT); } /*****************************************************************************/ diff --git a/swad_photo.h b/swad_photo.h index ee79f32b..a1dd16b7 100644 --- a/swad_photo.h +++ b/swad_photo.h @@ -55,6 +55,7 @@ typedef enum Pho_PHOTO_MEDIAN_ALL = 0, Pho_PHOTO_AVERAGE_ALL = 1, } Pho_AvgPhotoTypeOfAverage_t; +#define Pho_PHOTO_AVG_DEFAULT Pho_PHOTO_MEDIAN_ALL #define Pho_NUM_HOW_COMPUTE_PHOTO_SIZES 4 typedef enum @@ -64,6 +65,7 @@ typedef enum Pho_PROPORTIONAL_TO_PERCENT = 2, Pho_UNIQUE_SIZE = 3, } Pho_HowComputePhotoSize_t; +#define Pho_PHOTO_SIZE_DEFAULT Pho_PROPORTIONAL_TO_NUMBER_OF_STUDENTS #define Pho_NUM_HOW_ORDER_DEGREES 4 typedef enum @@ -73,6 +75,7 @@ typedef enum Pho_PERCENT = 2, Pho_DEGREE_NAME = 3, } Pho_HowOrderDegrees_t; +#define Pho_ORDER_DEFAULT Pho_NUMBER_OF_STUDENTS #define Pho_MAX_CLICKS_WITHOUT_PHOTO 50 diff --git a/swad_place.c b/swad_place.c index 2be7a3d1..7992fc6c 100644 --- a/swad_place.c +++ b/swad_place.c @@ -58,7 +58,7 @@ extern struct Globals Gbl; /***************************** Private prototypes ****************************/ /*****************************************************************************/ -static void Plc_GetParamPlcOrderType (void); +static void Plc_GetParamPlcOrder (void); static void Plc_PutIconToEditPlaces (void); static void Plc_ListPlacesForEdition (void); static void Plc_PutParamPlcCod (long PlcCod); @@ -80,7 +80,7 @@ void Plc_SeePlaces (void) extern const char *Txt_PLACES_ORDER[2]; extern const char *Txt_Other_places; extern const char *Txt_Place_unspecified; - Plc_PlcsOrderType_t Order; + Plc_Order_t Order; unsigned NumPlc; unsigned NumCtrsWithPlc = 0; unsigned NumCtrsInOtherPlcs; @@ -88,7 +88,7 @@ void Plc_SeePlaces (void) if (Gbl.CurrentIns.Ins.InsCod > 0) { /***** Get parameter with the type of order in the list of places *****/ - Plc_GetParamPlcOrderType (); + Plc_GetParamPlcOrder (); /***** Get list of places *****/ Plc_GetListPlaces (); @@ -107,10 +107,10 @@ void Plc_SeePlaces (void) Act_FormStart (ActSeePlc); Par_PutHiddenParamUnsigned ("Order",(unsigned) Order); Act_LinkFormSubmit (Txt_PLACES_HELP_ORDER[Order],"TIT_TBL",NULL); - if (Order == Gbl.Plcs.SelectedOrderType) + if (Order == Gbl.Plcs.SelectedOrder) fprintf (Gbl.F.Out,""); fprintf (Gbl.F.Out,"%s",Txt_PLACES_ORDER[Order]); - if (Order == Gbl.Plcs.SelectedOrderType) + if (Order == Gbl.Plcs.SelectedOrder) fprintf (Gbl.F.Out,""); fprintf (Gbl.F.Out,""); Act_FormEnd (); @@ -182,16 +182,13 @@ void Plc_SeePlaces (void) /********** Get parameter with the type or order in list of places ***********/ /*****************************************************************************/ -static void Plc_GetParamPlcOrderType (void) +static void Plc_GetParamPlcOrder (void) { - char UnsignedStr[10 + 1]; - unsigned UnsignedNum; - - Par_GetParToText ("Order",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1) - Gbl.Plcs.SelectedOrderType = (Plc_PlcsOrderType_t) UnsignedNum; - else - Gbl.Plcs.SelectedOrderType = Plc_DEFAULT_ORDER_TYPE; + Gbl.Plcs.SelectedOrder = (Plc_Order_t) + Par_GetParToUnsigned ("Order", + (unsigned) Plc_ORDER_BY_PLACE, + (unsigned) Plc_ORDER_BY_NUM_CTRS, + (unsigned) Plc_ORDER_DEFAULT); } /*****************************************************************************/ @@ -249,7 +246,7 @@ void Plc_GetListPlaces (void) struct Place *Plc; /***** Get places from database *****/ - switch (Gbl.Plcs.SelectedOrderType) + switch (Gbl.Plcs.SelectedOrder) { case Plc_ORDER_BY_PLACE: sprintf (OrderBySubQuery,"FullName"); diff --git a/swad_place.h b/swad_place.h index 982f9266..0ac6c747 100644 --- a/swad_place.h +++ b/swad_place.h @@ -47,9 +47,9 @@ typedef enum { Plc_ORDER_BY_PLACE = 0, Plc_ORDER_BY_NUM_CTRS = 1, - } Plc_PlcsOrderType_t; + } Plc_Order_t; -#define Plc_DEFAULT_ORDER_TYPE Plc_ORDER_BY_NUM_CTRS +#define Plc_ORDER_DEFAULT Plc_ORDER_BY_NUM_CTRS /*****************************************************************************/ /***************************** Public prototypes *****************************/ diff --git a/swad_preference.c b/swad_preference.c index a84cddc8..08127b2e 100644 --- a/swad_preference.c +++ b/swad_preference.c @@ -351,16 +351,11 @@ void Pre_UpdateMyLanguageToCurrentLanguage (void) Txt_Language_t Pre_GetParamLanguage (void) { extern const unsigned Txt_Current_CGI_SWAD_Language; - char UnsignedStr[10 + 1]; - unsigned UnsignedNum; - Par_GetParToText ("Lan",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1) - if (UnsignedNum >= 1 && - UnsignedNum <= Txt_NUM_LANGUAGES) - return (Txt_Language_t) UnsignedNum; - - return Txt_Current_CGI_SWAD_Language; + return (Txt_Language_t) Par_GetParToUnsigned ("Lan", + 1, + Txt_NUM_LANGUAGES, + Txt_Current_CGI_SWAD_Language); } /*****************************************************************************/ @@ -504,19 +499,8 @@ static void Pre_UpdateSideColsOnUsrDataTable (void) unsigned Pre_GetParamSideCols (void) { - char UnsignedStr[10 + 1]; - unsigned UnsignedNum; // 11 ==> by default, show both side columns - - Par_GetParToText ("SideCols",UnsignedStr,10); - - if (!UnsignedStr[0]) - return Cfg_DEFAULT_COLUMNS; - - if (sscanf (UnsignedStr,"%u",&UnsignedNum) != 1) - return Cfg_DEFAULT_COLUMNS; - - if (UnsignedNum > 3) - return Cfg_DEFAULT_COLUMNS; - - return UnsignedNum; + return Par_GetParToUnsigned ("SideCols", + 0, + Lay_SHOW_BOTH_COLUMNS, + Cfg_DEFAULT_COLUMNS); } diff --git a/swad_privacy.c b/swad_privacy.c index 4632f7a8..833c63a5 100644 --- a/swad_privacy.c +++ b/swad_privacy.c @@ -227,20 +227,11 @@ Pri_Visibility_t Pri_GetVisibilityFromStr (const char *Str) Pri_Visibility_t Pri_GetParamVisibility (const char *ParamName) { - char UnsignedStr[10 + 1]; - unsigned UnsignedNum; - - Par_GetParToText (ParamName,UnsignedStr,10); - if (UnsignedStr[0]) - { - if (sscanf (UnsignedStr,"%u",&UnsignedNum) != 1) - Lay_ShowErrorAndExit ("Visibility is missing."); - if (UnsignedNum >= Pri_NUM_OPTIONS_PRIVACY) - Lay_ShowErrorAndExit ("Visibility is missing."); - return (Pri_Visibility_t) UnsignedNum; - } - - return Pri_VISIBILITY_UNKNOWN; + return (Pri_Visibility_t) + Par_GetParToUnsigned (ParamName, + 0, + Pri_NUM_OPTIONS_PRIVACY - 1, + (unsigned) Pri_VISIBILITY_UNKNOWN); } /*****************************************************************************/ diff --git a/swad_privacy_visibility_type.h b/swad_privacy_visibility_type.h index 7dd81f5e..5f4cc05d 100644 --- a/swad_privacy_visibility_type.h +++ b/swad_privacy_visibility_type.h @@ -33,7 +33,6 @@ /***** Visibility (who can see user's photo / public profile) *****/ #define Pri_NUM_OPTIONS_PRIVACY 5 - typedef enum { Pri_VISIBILITY_UNKNOWN = 0, // Only visible by me and my teachers if I am a student or my students if I am a teacher diff --git a/swad_record.c b/swad_record.c index 5e603f45..1bf12f34 100644 --- a/swad_record.c +++ b/swad_record.c @@ -245,7 +245,7 @@ void Rec_GetListRecordFieldsInCurrentCrs (void) if (Vis < Rec_NUM_TYPES_VISIBILITY) Gbl.CurrentCrs.Records.LstFields.Lst[NumRow].Visibility = (Rec_VisibilityRecordFields_t) Vis; else - Gbl.CurrentCrs.Records.LstFields.Lst[NumRow].Visibility = Rec_HIDDEN_FIELD; + Gbl.CurrentCrs.Records.LstFields.Lst[NumRow].Visibility = Rec_VISIBILITY_DEFAULT; } } @@ -432,25 +432,23 @@ void Rec_ReceiveFormField (void) { extern const char *Txt_The_record_field_X_already_exists; extern const char *Txt_You_must_specify_the_name_of_the_new_record_field; - char UnsignedStr[10 + 1]; - unsigned Vis; /***** Get parameters from the form *****/ /* Get the name of the field */ Par_GetParToText ("FieldName",Gbl.CurrentCrs.Records.Field.Name,Rec_MAX_LENGTH_NAME_FIELD); /* Get the number of lines */ - Par_GetParToText ("NumLines",UnsignedStr,10); - Gbl.CurrentCrs.Records.Field.NumLines = Rec_ConvertToNumLinesField (UnsignedStr); + Gbl.CurrentCrs.Records.Field.NumLines = Par_GetParToUnsigned ("NumLines", + Rec_MIN_LINES_IN_EDITION_FIELD, + Rec_MAX_LINES_IN_EDITION_FIELD, + Rec_DEF_LINES_IN_EDITION_FIELD); /* Get the field visibility by students */ - Par_GetParToText ("Visibility",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&Vis) != 1) - Lay_ShowErrorAndExit ("Visibility is missing."); - if (Vis < Rec_NUM_TYPES_VISIBILITY) - Gbl.CurrentCrs.Records.Field.Visibility = (Rec_VisibilityRecordFields_t) Vis; - else - Gbl.CurrentCrs.Records.Field.Visibility = Rec_HIDDEN_FIELD; + Gbl.CurrentCrs.Records.Field.Visibility = (Rec_VisibilityRecordFields_t) + Par_GetParToUnsigned ("Visibility", + 0, + Rec_NUM_TYPES_VISIBILITY - 1, + Rec_VISIBILITY_DEFAULT); if (Gbl.CurrentCrs.Records.Field.Name[0]) // If there's a name { @@ -480,7 +478,7 @@ unsigned Rec_ConvertToNumLinesField (const char *StrNumLines) int NumLines; if (sscanf (StrNumLines,"%d",&NumLines) != 1) - return Rec_MIN_LINES_IN_EDITION_FIELD; + return Rec_DEF_LINES_IN_EDITION_FIELD; else if (NumLines < Rec_MIN_LINES_IN_EDITION_FIELD) return Rec_MIN_LINES_IN_EDITION_FIELD; else if (NumLines > Rec_MAX_LINES_IN_EDITION_FIELD) @@ -717,7 +715,7 @@ static void Rec_GetFieldByCod (long FieldCod,char Name[Rec_MAX_LENGTH_NAME_FIELD if (Vis < Rec_NUM_TYPES_VISIBILITY) *Visibility = (Rec_VisibilityRecordFields_t) Vis; else - *Visibility = Rec_HIDDEN_FIELD; + *Visibility = Rec_VISIBILITY_DEFAULT; /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); @@ -817,7 +815,6 @@ void Rec_ChangeLinesField (void) extern const char *Txt_The_number_of_editing_lines_in_the_record_field_X_has_not_changed; extern const char *Txt_From_now_on_the_number_of_editing_lines_of_the_field_X_is_Y; char Query[1024]; - char UnsignedStr[10 + 1]; unsigned NewNumLines; /***** Get parameters of the form *****/ @@ -826,8 +823,10 @@ void Rec_ChangeLinesField (void) Lay_ShowErrorAndExit ("Code of field is missing."); /* Get the new number of lines */ - Par_GetParToText ("NumLines",UnsignedStr,10); - NewNumLines = Rec_ConvertToNumLinesField (UnsignedStr); + NewNumLines = Par_GetParToUnsigned ("NumLines", + Rec_MIN_LINES_IN_EDITION_FIELD, + Rec_MAX_LINES_IN_EDITION_FIELD, + Rec_DEF_LINES_IN_EDITION_FIELD); /* Get from the database the number of lines of the field */ Rec_GetFieldByCod (Gbl.CurrentCrs.Records.Field.FieldCod,Gbl.CurrentCrs.Records.Field.Name,&Gbl.CurrentCrs.Records.Field.NumLines,&Gbl.CurrentCrs.Records.Field.Visibility); @@ -867,8 +866,6 @@ void Rec_ChangeVisibilityField (void) extern const char *Txt_The_visibility_of_the_record_field_X_has_not_changed; extern const char *Txt_RECORD_FIELD_VISIBILITY_MSG[Rec_NUM_TYPES_VISIBILITY]; char Query[1024]; - char UnsignedStr[10 + 1]; - unsigned Vis; Rec_VisibilityRecordFields_t NewVisibility; /***** Get parameters of the form *****/ @@ -877,13 +874,11 @@ void Rec_ChangeVisibilityField (void) Lay_ShowErrorAndExit ("Code of field is missing."); /* Get the new visibility of the field */ - Par_GetParToText ("Visibility",UnsignedStr,10); - if (sscanf (UnsignedStr,"%u",&Vis) != 1) - Lay_ShowErrorAndExit ("Visibility of field is missing."); - if (Vis < Rec_NUM_TYPES_VISIBILITY) - NewVisibility = (Rec_VisibilityRecordFields_t) Vis; - else - NewVisibility = Rec_HIDDEN_FIELD; + NewVisibility = (Rec_VisibilityRecordFields_t) + Par_GetParToUnsigned ("Visibility", + 0, + Rec_NUM_TYPES_VISIBILITY - 1, + Rec_VISIBILITY_DEFAULT); /* Get from the database the visibility of the field */ Rec_GetFieldByCod (Gbl.CurrentCrs.Records.Field.FieldCod,Gbl.CurrentCrs.Records.Field.Name,&Gbl.CurrentCrs.Records.Field.NumLines,&Gbl.CurrentCrs.Records.Field.Visibility); @@ -1419,8 +1414,8 @@ static void Rec_ShowLinkToPrintPreviewOfRecords (void) "