Version19.69

This commit is contained in:
Antonio Cañas Vargas 2019-11-15 03:34:48 +01:00
parent e91801139f
commit 15a58fd5c6
23 changed files with 386 additions and 250 deletions

View File

@ -483,7 +483,7 @@ static void ID_PutLinkToConfirmID (struct UsrData *UsrDat,unsigned NumID,
case ActSeeRecSevGst: case ActSeeRecSevGst:
case ActSeeRecSevStd: case ActSeeRecSevStd:
case ActSeeRecSevTch: case ActSeeRecSevTch:
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
break; break;
default: default:
break; break;

View File

@ -2079,7 +2079,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActReqRemPrj */{1680,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqRemProject ,NULL}, /* ActReqRemPrj */{1680,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqRemProject ,NULL},
/* ActRemPrj */{1681,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RemoveProject ,NULL}, /* ActRemPrj */{1681,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RemoveProject ,NULL},
/* ActHidPrj */{1682,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_HideProject ,NULL}, /* ActHidPrj */{1682,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_HideProject ,NULL},
/* ActShoPrj */{1683,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ShowProject ,NULL}, /* ActShoPrj */{1683,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_UnhideProject ,NULL},
/* ActLckPrj */{1773,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_AJAX_NORMAL,NULL ,Prj_LockProjectEdition ,NULL}, /* ActLckPrj */{1773,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_AJAX_NORMAL,NULL ,Prj_LockProjectEdition ,NULL},
/* ActUnlPrj */{1774,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_AJAX_NORMAL,NULL ,Prj_UnloProjectEdition ,NULL}, /* ActUnlPrj */{1774,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_AJAX_NORMAL,NULL ,Prj_UnloProjectEdition ,NULL},
/* ActReqAddStdPrj */{1684,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqAddStds ,NULL}, /* ActReqAddStdPrj */{1684,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqAddStds ,NULL},

View File

@ -503,7 +503,8 @@ static void Asg_WriteAssignmentFolder (struct Assignment *Asg,bool PrintView)
Gbl.FileBrowser.Type = Brw_ADMI_ASG_CRS; // Course assignments Gbl.FileBrowser.Type = Brw_ADMI_ASG_CRS; // Course assignments
Str_Copy (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod,Gbl.Usrs.Me.UsrDat.EncryptedUsrCod, Str_Copy (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod,Gbl.Usrs.Me.UsrDat.EncryptedUsrCod,
Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64); Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64);
Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr (); Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr (&Gbl.Usrs.Selected)
;
Frm_StartForm (ActFrmCreAsgCrs); Frm_StartForm (ActFrmCreAsgCrs);
break; break;
default: default:
@ -525,7 +526,7 @@ static void Asg_WriteAssignmentFolder (struct Assignment *Asg,bool PrintView)
break; break;
case Rol_NET: case Rol_NET:
case Rol_TCH: case Rol_TCH:
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
break; break;
default: default:
break; break;

View File

@ -2335,7 +2335,7 @@ void Att_RegisterStudentsInAttEvent (void)
Gbl.Usrs.LstUsrs[Rol_STD].Lst[NumUsr].Remove = true; Gbl.Usrs.LstUsrs[Rol_STD].Lst[NumUsr].Remove = true;
/***** 3. Get list of students marked as present by me: Gbl.Usrs.Selected.List[Rol_STD] *****/ /***** 3. Get list of students marked as present by me: Gbl.Usrs.Selected.List[Rol_STD] *****/
Usr_GetListsSelectedUsrsCods (); Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/***** Initialize structure with user's data *****/ /***** Initialize structure with user's data *****/
Usr_UsrDataConstructor (&UsrData); Usr_UsrDataConstructor (&UsrData);
@ -2366,7 +2366,7 @@ void Att_RegisterStudentsInAttEvent (void)
/***** Free memory *****/ /***** Free memory *****/
/* Free memory used by list of selected students' codes */ /* Free memory used by list of selected students' codes */
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
// 5. Delete from att_usr all the students marked as Remove=true // 5. Delete from att_usr all the students marked as Remove=true
// 6. Replace (insert without duplicated) into att_usr all the students marked as Remove=false // 6. Replace (insert without duplicated) into att_usr all the students marked as Remove=false
@ -2657,7 +2657,8 @@ void Att_ReqListUsrsAttendanceCrs (void)
Att_GetListAttEvents (Att_OLDEST_FIRST); Att_GetListAttEvents (Att_OLDEST_FIRST);
/***** List users to select some of them *****/ /***** List users to select some of them *****/
Usr_PutFormToSelectUsrsToGoToAct (ActSeeLstUsrAtt,NULL, Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected,
ActSeeLstUsrAtt,NULL,
Txt_Attendance_list, Txt_Attendance_list,
Hlp_USERS_Attendance_attendance_list, Hlp_USERS_Attendance_attendance_list,
Txt_View_attendance); Txt_View_attendance);
@ -2761,7 +2762,8 @@ void Att_PrintUsrsAttendanceCrs (void)
static void Att_GetUsrsAndListOrPrintAttendanceCrs (void) static void Att_GetUsrsAndListOrPrintAttendanceCrs (void)
{ {
Usr_GetSelectedUsrsAndGoToAct (Att_ListOrPrintUsrsAttendanceCrs, Usr_GetSelectedUsrsAndGoToAct (&Gbl.Usrs.Selected,
Att_ListOrPrintUsrsAttendanceCrs,
Att_ReqListUsrsAttendanceCrs); Att_ReqListUsrsAttendanceCrs);
} }
@ -2781,12 +2783,12 @@ static void Att_ListOrPrintUsrsAttendanceCrs (void)
Grp_GetParCodsSeveralGrpsToShowUsrs (); Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Count number of valid users in list of encrypted user codes *****/ /***** Count number of valid users in list of encrypted user codes *****/
NumUsrsInList = Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (); NumUsrsInList = Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (&Gbl.Usrs.Selected);
if (NumUsrsInList) if (NumUsrsInList)
{ {
/***** Get list of students selected to show their attendances *****/ /***** Get list of students selected to show their attendances *****/
Usr_GetListSelectedUsrCods (NumUsrsInList,&LstSelectedUsrCods); Usr_GetListSelectedUsrCods (&Gbl.Usrs.Selected,NumUsrsInList,&LstSelectedUsrCods);
/***** Get list of attendance events *****/ /***** Get list of attendance events *****/
Att_GetListAttEvents (Att_OLDEST_FIRST); Att_GetListAttEvents (Att_OLDEST_FIRST);
@ -2990,7 +2992,7 @@ static void Att_PutParamsToPrintStdsList (void)
if (Gbl.AttEvents.ShowDetails) if (Gbl.AttEvents.ShowDetails)
Par_PutHiddenParamChar ("ShowDetails",'Y'); Par_PutHiddenParamChar ("ShowDetails",'Y');
Grp_PutParamsCodGrps (); Grp_PutParamsCodGrps ();
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
if (Gbl.AttEvents.StrAttCodsSelected) if (Gbl.AttEvents.StrAttCodsSelected)
if (Gbl.AttEvents.StrAttCodsSelected[0]) if (Gbl.AttEvents.StrAttCodsSelected[0])
Par_PutHiddenParamString (NULL,"AttCods",Gbl.AttEvents.StrAttCodsSelected); Par_PutHiddenParamString (NULL,"AttCods",Gbl.AttEvents.StrAttCodsSelected);
@ -3008,7 +3010,7 @@ static void Att_PutButtonToShowDetails (void)
Frm_StartFormAnchor (Gbl.Action.Act,Att_ATTENDANCE_DETAILS_ID); Frm_StartFormAnchor (Gbl.Action.Act,Att_ATTENDANCE_DETAILS_ID);
Par_PutHiddenParamChar ("ShowDetails",'Y'); Par_PutHiddenParamChar ("ShowDetails",'Y');
Grp_PutParamsCodGrps (); Grp_PutParamsCodGrps ();
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
if (Gbl.AttEvents.StrAttCodsSelected) if (Gbl.AttEvents.StrAttCodsSelected)
if (Gbl.AttEvents.StrAttCodsSelected[0]) if (Gbl.AttEvents.StrAttCodsSelected[0])
Par_PutHiddenParamString (NULL,"AttCods",Gbl.AttEvents.StrAttCodsSelected); Par_PutHiddenParamString (NULL,"AttCods",Gbl.AttEvents.StrAttCodsSelected);
@ -3047,7 +3049,7 @@ static void Att_ListEventsToSelect (void)
{ {
Frm_StartFormAnchor (Gbl.Action.Act,Att_ATTENDANCE_TABLE_ID); Frm_StartFormAnchor (Gbl.Action.Act,Att_ATTENDANCE_TABLE_ID);
Grp_PutParamsCodGrps (); Grp_PutParamsCodGrps ();
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
} }
/***** Begin table *****/ /***** Begin table *****/

View File

@ -468,6 +468,7 @@ contiene una de las que yo imparto. As
// TODO: Mostrar cifras sobre partidas (matches) en el apartado Figures > Games. // TODO: Mostrar cifras sobre partidas (matches) en el apartado Figures > Games.
// TODO: En resultados de test y de juegos, en preguntas modificadas se podría mostrar la puntuación obtenida en la pregunta (ahora no sale) // TODO: En resultados de test y de juegos, en preguntas modificadas se podría mostrar la puntuación obtenida en la pregunta (ahora no sale)
// TODO: Al crear un nuevo juego, debería irse a la pantalla de añadir preguntas (la misma opción que sale cuando pulsas en editar un juego existente) // TODO: Al crear un nuevo juego, debería irse a la pantalla de añadir preguntas (la misma opción que sale cuando pulsas en editar un juego existente)
// TODO: Code refactoring in HTML h1, title, meta, video, p, iframe, input hidden, area
/*****************************************************************************/ /*****************************************************************************/
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
@ -487,14 +488,14 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD: En OpenSWAD:
ps2pdf source.ps destination.pdf ps2pdf source.ps destination.pdf
*/ */
#define Log_PLATFORM_VERSION "SWAD 19.68.2 (2019-11-14)" #define Log_PLATFORM_VERSION "SWAD 19.69 (2019-11-15)"
#define CSS_FILE "swad19.47.css" #define CSS_FILE "swad19.47.css"
#define JS_FILE "swad19.65.js" #define JS_FILE "swad19.65.js"
/* /*
// TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.) // TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.)
// TODO: Impedir la creación y edición de proyectos si no son editables. // TODO: Impedir la creación y edición de proyectos si no son editables.
// TODO: Code refactoring in HTML h1, title, meta, video, p, iframe, input hidden, area
Version 19.69: Nov 15, 2019 Code refactoring related with lists of users and hidden parameters. (246752 lines)
Version 19.68.2: Nov 14, 2019 Code refactoring in users and attendance. (246625 lines) Version 19.68.2: Nov 14, 2019 Code refactoring in users and attendance. (246625 lines)
Version 19.68.1: Nov 14, 2019 Code refactoring in match results. Version 19.68.1: Nov 14, 2019 Code refactoring in match results.
Code refactoring in test results. (246623 lines) Code refactoring in test results. (246623 lines)

View File

@ -183,7 +183,8 @@ void Dup_ListDuplicateUsrs (void)
UsrDat.Accepted = false; UsrDat.Accepted = false;
/* Write data of this user */ /* Write data of this user */
Usr_WriteRowUsrMainData (NumUsrs - NumUsr,&UsrDat,false,Rol_UNK); Usr_WriteRowUsrMainData (NumUsrs - NumUsr,&UsrDat,false,Rol_UNK,
&Gbl.Usrs.Selected);
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -320,7 +321,8 @@ static void Dup_ListSimilarUsrs (void)
UsrDat.Accepted = false; UsrDat.Accepted = false;
/***** Write data of this user *****/ /***** Write data of this user *****/
Usr_WriteRowUsrMainData (NumUsrs - NumUsr,&UsrDat,false,Rol_UNK); Usr_WriteRowUsrMainData (NumUsrs - NumUsr,&UsrDat,false,Rol_UNK,
&Gbl.Usrs.Selected);
/***** Write user's profile and user's courses *****/ /***** Write user's profile and user's courses *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);

View File

@ -2059,7 +2059,7 @@ void Brw_GetParAndInitFileBrowser (void)
else if (Brw_GetIfCrsAssigWorksFileBrowser ()) else if (Brw_GetIfCrsAssigWorksFileBrowser ())
{ {
/* Get lists of the selected users if not already got */ /* Get lists of the selected users if not already got */
Usr_GetListsSelectedUsrsCods (); Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/* Get user whose folder will be used to make any operation */ /* Get user whose folder will be used to make any operation */
Usr_GetParamOtherUsrCodEncryptedAndGetListIDs (); Usr_GetParamOtherUsrCodEncryptedAndGetListIDs ();
/* Get whether we must create the zip file or not */ /* Get whether we must create the zip file or not */
@ -2305,7 +2305,7 @@ static void Brw_PutParamsFileBrowser (const char *PathInTree,const char *FilFolL
else if (Brw_GetIfCrsAssigWorksFileBrowser ()) else if (Brw_GetIfCrsAssigWorksFileBrowser ())
{ {
/***** Users selected *****/ /***** Users selected *****/
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
Usr_PutParamOtherUsrCodEncrypted (); Usr_PutParamOtherUsrCodEncrypted ();
} }
@ -3075,7 +3075,8 @@ void Brw_AskEditWorksCrs (void)
extern const char *Txt_View_homework; extern const char *Txt_View_homework;
/***** List users to select some of them *****/ /***** List users to select some of them *****/
Usr_PutFormToSelectUsrsToGoToAct (ActAdmAsgWrkCrs,NULL, Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected,
ActAdmAsgWrkCrs,NULL,
Txt_Assignments_and_other_works, Txt_Assignments_and_other_works,
Hlp_FILES_Homework_for_teachers, Hlp_FILES_Homework_for_teachers,
Txt_View_homework); Txt_View_homework);
@ -3422,7 +3423,8 @@ static void Brw_ShowDataOwnerAsgWrk (struct UsrData *UsrDat)
void Brw_GetSelectedUsrsAndShowWorks (void) void Brw_GetSelectedUsrsAndShowWorks (void)
{ {
Usr_GetSelectedUsrsAndGoToAct (Brw_ShowFileBrowserOrWorks, // when user(s) selected Usr_GetSelectedUsrsAndGoToAct (&Gbl.Usrs.Selected,
Brw_ShowFileBrowserOrWorks, // when user(s) selected
Brw_AskEditWorksCrs); // when no user selected Brw_AskEditWorksCrs); // when no user selected
} }
@ -4936,7 +4938,7 @@ static void Brw_PutParamsFullTree (void)
else if (Brw_GetIfProjectFileBrowser ()) // This file browser needs specify a project else if (Brw_GetIfProjectFileBrowser ()) // This file browser needs specify a project
Prj_PutParamPrjCod (Gbl.Prjs.PrjCod); Prj_PutParamPrjCod (Gbl.Prjs.PrjCod);
else if (Brw_GetIfCrsAssigWorksFileBrowser ()) else if (Brw_GetIfCrsAssigWorksFileBrowser ())
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -98,6 +98,7 @@ static void Fol_PutIconToUnfollow (struct UsrData *UsrDat);
static void Fol_RequestFollowUsrs (Act_Action_t NextAction); static void Fol_RequestFollowUsrs (Act_Action_t NextAction);
static void Fol_RequestUnfollowUsrs (Act_Action_t NextAction); static void Fol_RequestUnfollowUsrs (Act_Action_t NextAction);
static void Fol_PutHiddenParSelectedUsrsCods (void);
static void Fol_GetFollowedFromSelectedUsrs (unsigned *NumFollowed, static void Fol_GetFollowedFromSelectedUsrs (unsigned *NumFollowed,
unsigned *NumNotFollowed); unsigned *NumNotFollowed);
@ -1091,19 +1092,19 @@ static void Fol_RequestFollowUsrs (Act_Action_t NextAction)
{ {
if (NumNotFollowed == 1) if (NumNotFollowed == 1)
Ale_ShowAlertAndButton (NextAction,NULL,NULL, Ale_ShowAlertAndButton (NextAction,NULL,NULL,
Usr_PutHiddenParSelectedUsrsCods, Fol_PutHiddenParSelectedUsrsCods,
Btn_CREATE_BUTTON,Txt_Follow, Btn_CREATE_BUTTON,Txt_Follow,
Ale_QUESTION,Txt_Do_you_want_to_follow_the_selected_user_whom_you_do_not_follow_yet); Ale_QUESTION,Txt_Do_you_want_to_follow_the_selected_user_whom_you_do_not_follow_yet);
else else
Ale_ShowAlertAndButton (NextAction,NULL,NULL, Ale_ShowAlertAndButton (NextAction,NULL,NULL,
Usr_PutHiddenParSelectedUsrsCods, Fol_PutHiddenParSelectedUsrsCods,
Btn_CREATE_BUTTON,Txt_Follow, Btn_CREATE_BUTTON,Txt_Follow,
Ale_QUESTION,Txt_Do_you_want_to_follow_the_X_selected_users_whom_you_do_not_follow_yet, Ale_QUESTION,Txt_Do_you_want_to_follow_the_X_selected_users_whom_you_do_not_follow_yet,
NumNotFollowed); NumNotFollowed);
} }
/***** Free memory used by list of selected users' codes *****/ /***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
} }
void Fol_RequestUnfollowStds (void) void Fol_RequestUnfollowStds (void)
@ -1135,19 +1136,24 @@ static void Fol_RequestUnfollowUsrs (Act_Action_t NextAction)
{ {
if (NumFollowed == 1) if (NumFollowed == 1)
Ale_ShowAlertAndButton (NextAction,NULL,NULL, Ale_ShowAlertAndButton (NextAction,NULL,NULL,
Usr_PutHiddenParSelectedUsrsCods, Fol_PutHiddenParSelectedUsrsCods,
Btn_CREATE_BUTTON,Txt_Unfollow, Btn_CREATE_BUTTON,Txt_Unfollow,
Ale_QUESTION,Txt_Do_you_want_to_stop_following_the_selected_user_whom_you_follow); Ale_QUESTION,Txt_Do_you_want_to_stop_following_the_selected_user_whom_you_follow);
else else
Ale_ShowAlertAndButton (NextAction,NULL,NULL, Ale_ShowAlertAndButton (NextAction,NULL,NULL,
Usr_PutHiddenParSelectedUsrsCods, Fol_PutHiddenParSelectedUsrsCods,
Btn_CREATE_BUTTON,Txt_Unfollow, Btn_CREATE_BUTTON,Txt_Unfollow,
Ale_QUESTION,Txt_Do_you_want_to_stop_following_the_X_selected_users_whom_you_follow, Ale_QUESTION,Txt_Do_you_want_to_stop_following_the_X_selected_users_whom_you_follow,
NumFollowed); NumFollowed);
} }
/***** Free memory used by list of selected users' codes *****/ /***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
}
static void Fol_PutHiddenParSelectedUsrsCods (void)
{
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1211,7 +1217,7 @@ void Fol_FollowUsrs ()
unsigned NumFollowed = 0; unsigned NumFollowed = 0;
/***** Get list of selected users if not already got *****/ /***** Get list of selected users if not already got *****/
Usr_GetListsSelectedUsrsCods (); Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/***** Initialize structure with user's data *****/ /***** Initialize structure with user's data *****/
Usr_UsrDataConstructor (&UsrDat); Usr_UsrDataConstructor (&UsrDat);
@ -1239,7 +1245,7 @@ void Fol_FollowUsrs ()
Usr_UsrDataDestructor (&UsrDat); Usr_UsrDataDestructor (&UsrDat);
/***** Free memory used by list of selected users' codes *****/ /***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/***** Show alert *****/ /***** Show alert *****/
if (NumFollowed == 1) if (NumFollowed == 1)
@ -1258,7 +1264,7 @@ void Fol_UnfollowUsrs (void)
unsigned NumUnfollowed = 0; unsigned NumUnfollowed = 0;
/***** Get list of selected users if not already got *****/ /***** Get list of selected users if not already got *****/
Usr_GetListsSelectedUsrsCods (); Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/***** Initialize structure with user's data *****/ /***** Initialize structure with user's data *****/
Usr_UsrDataConstructor (&UsrDat); Usr_UsrDataConstructor (&UsrDat);
@ -1286,7 +1292,7 @@ void Fol_UnfollowUsrs (void)
Usr_UsrDataDestructor (&UsrDat); Usr_UsrDataDestructor (&UsrDat);
/***** Free memory used by list of selected users' codes *****/ /***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/***** Show alert *****/ /***** Show alert *****/
if (NumUnfollowed == 1) if (NumUnfollowed == 1)

View File

@ -192,6 +192,7 @@ void Gbl_InitializeGlobals (void)
Gbl.Action.Tab = TabUnk; Gbl.Action.Tab = TabUnk;
Gbl.Usrs.Selected.Filled = false; // Lists of encrypted codes of users selected from form are not filled Gbl.Usrs.Selected.Filled = false; // Lists of encrypted codes of users selected from form are not filled
Gbl.Usrs.Selected.ParamSuffix = NULL;// Don't add suffix to param names
Gbl.Usrs.Selected.Option = Usr_OPTION_UNKNOWN; Gbl.Usrs.Selected.Option = Usr_OPTION_UNKNOWN;
for (Role = (Rol_Role_t) 0; for (Role = (Rol_Role_t) 0;
Role < Rol_NUM_ROLES; Role < Rol_NUM_ROLES;
@ -466,7 +467,7 @@ void Gbl_Cleanup (void)
Usr_FreeUsrsList (Role); Usr_FreeUsrsList (Role);
Usr_FreeListOtherRecipients (); Usr_FreeListOtherRecipients ();
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
Syl_FreeListItemsSyllabus (); Syl_FreeListItemsSyllabus ();
Tst_FreeTagsList (); Tst_FreeTagsList ();
Exa_FreeMemExamAnnouncement (); Exa_FreeMemExamAnnouncement ();

View File

@ -377,12 +377,7 @@ struct Globals
unsigned NumIDToConfirm; // Used as hidden parameter to confirm a user's ID unsigned NumIDToConfirm; // Used as hidden parameter to confirm a user's ID
} Other; // Another user, used for example to register in / remove from a course } Other; // Another user, used for example to register in / remove from a course
struct ListUsrs LstUsrs[Rol_NUM_ROLES]; struct ListUsrs LstUsrs[Rol_NUM_ROLES];
struct struct SelectedUsrs Selected;
{
char *List[Rol_NUM_ROLES]; // Lists of encrypted codes of users selected from a form
bool Filled; // If lists are already filled/readed
Usr_ListUsrsOption_t Option; // What option I have selected to do with these selected users
} Selected;
char *ListOtherRecipients; // List of ID or nicks of users written explicitely on a form char *ListOtherRecipients; // List of ID or nicks of users written explicitely on a form
struct struct
{ {

View File

@ -870,7 +870,8 @@ void Mai_ReqUsrsToListEmails (void)
extern const char *Txt_View_email_addresses; extern const char *Txt_View_email_addresses;
/***** List users to select some of them *****/ /***** List users to select some of them *****/
Usr_PutFormToSelectUsrsToGoToAct (ActMaiUsr,NULL, Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected,
ActMaiUsr,NULL,
Txt_Email, Txt_Email,
Hlp_MESSAGES_Email, Hlp_MESSAGES_Email,
Txt_View_email_addresses); Txt_View_email_addresses);
@ -882,7 +883,8 @@ void Mai_ReqUsrsToListEmails (void)
void Mai_GetSelectedUsrsAndListEmails (void) void Mai_GetSelectedUsrsAndListEmails (void)
{ {
Usr_GetSelectedUsrsAndGoToAct (Mai_ListEmails, // when user(s) selected Usr_GetSelectedUsrsAndGoToAct (&Gbl.Usrs.Selected,
Mai_ListEmails, // when user(s) selected
Mai_ReqUsrsToListEmails); // when no user selected Mai_ReqUsrsToListEmails); // when no user selected
} }

View File

@ -215,9 +215,9 @@ void McR_SelUsrsToViewUsrsMchResults (void)
HTM_TD_Begin ("colspan=\"2\" class=\"%s LT\"",The_ClassFormInBox[Gbl.Prefs.Theme]); HTM_TD_Begin ("colspan=\"2\" class=\"%s LT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TABLE_BeginPadding (2); HTM_TABLE_BeginPadding (2);
Usr_ListUsersToSelect (Rol_TCH); Usr_ListUsersToSelect (Rol_TCH,&Gbl.Usrs.Selected);
Usr_ListUsersToSelect (Rol_NET); Usr_ListUsersToSelect (Rol_NET,&Gbl.Usrs.Selected);
Usr_ListUsersToSelect (Rol_STD); Usr_ListUsersToSelect (Rol_STD,&Gbl.Usrs.Selected);
HTM_TABLE_End (); HTM_TABLE_End ();
HTM_TD_End (); HTM_TD_End ();
@ -251,7 +251,7 @@ void McR_SelUsrsToViewUsrsMchResults (void)
Usr_FreeUsrsList (Rol_STD); Usr_FreeUsrsList (Rol_STD);
/***** Free memory used by list of selected users' codes *****/ /***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/***** Free memory for list of selected groups *****/ /***** Free memory for list of selected groups *****/
Grp_FreeListCodSelectedGrps (); Grp_FreeListCodSelectedGrps ();
@ -263,7 +263,8 @@ void McR_SelUsrsToViewUsrsMchResults (void)
void McR_GetUsrsAndShowMchResults (void) void McR_GetUsrsAndShowMchResults (void)
{ {
Usr_GetSelectedUsrsAndGoToAct (McR_ShowUsrsMchResults, Usr_GetSelectedUsrsAndGoToAct (&Gbl.Usrs.Selected,
McR_ShowUsrsMchResults,
McR_SelUsrsToViewUsrsMchResults); McR_SelUsrsToViewUsrsMchResults);
} }

View File

@ -261,7 +261,7 @@ static void Msg_PutFormMsgUsrs (char Content[Cns_MAX_BYTES_LONG_TEXT + 1])
if (ShowUsrsInCrs) if (ShowUsrsInCrs)
/***** Get lists of selected users *****/ /***** Get lists of selected users *****/
Usr_GetListsSelectedUsrsCods (); Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
} }
/***** End section with user list *****/ /***** End section with user list *****/
@ -306,9 +306,9 @@ static void Msg_PutFormMsgUsrs (char Content[Cns_MAX_BYTES_LONG_TEXT + 1])
HTM_TABLE_BeginWide (); HTM_TABLE_BeginWide ();
if (ShowUsrsInCrs) if (ShowUsrsInCrs)
{ {
Usr_ListUsersToSelect (Rol_TCH); // All teachers in course Usr_ListUsersToSelect (Rol_TCH,&Gbl.Usrs.Selected); // All teachers in course
Usr_ListUsersToSelect (Rol_NET); // All non-editing teachers in course Usr_ListUsersToSelect (Rol_NET,&Gbl.Usrs.Selected); // All non-editing teachers in course
Usr_ListUsersToSelect (Rol_STD); // All students in selected groups Usr_ListUsersToSelect (Rol_STD,&Gbl.Usrs.Selected); // All students in selected groups
} }
Msg_WriteFormUsrsIDsOrNicksOtherRecipients (); // Other users (nicknames) Msg_WriteFormUsrsIDsOrNicksOtherRecipients (); // Other users (nicknames)
HTM_TABLE_End (); HTM_TABLE_End ();
@ -350,7 +350,7 @@ static void Msg_PutFormMsgUsrs (char Content[Cns_MAX_BYTES_LONG_TEXT + 1])
} }
/***** Free memory used by list of selected users' codes *****/ /***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/***** Free memory for list of selected groups *****/ /***** Free memory for list of selected groups *****/
Grp_FreeListCodSelectedGrps (); Grp_FreeListCodSelectedGrps ();
@ -398,7 +398,7 @@ static void Msg_PutParamsShowMorePotentialRecipients (void)
static void Msg_PutParamsWriteMsg (void) static void Msg_PutParamsWriteMsg (void)
{ {
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
Msg_PutHiddenParamOtherRecipients (); Msg_PutHiddenParamOtherRecipients ();
Msg_PutHiddenParamsSubjectAndContent (); Msg_PutHiddenParamsSubjectAndContent ();
if (Gbl.Msg.Reply.IsReply) if (Gbl.Msg.Reply.IsReply)
@ -722,13 +722,13 @@ void Msg_RecMsgFromUsr (void)
Usr_GetParamOtherUsrCodEncryptedAndGetListIDs (); Usr_GetParamOtherUsrCodEncryptedAndGetListIDs ();
/* Get lists of selected users */ /* Get lists of selected users */
Usr_GetListsSelectedUsrsCods (); Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/* Get list of users' IDs or nicknames written explicitely */ /* Get list of users' IDs or nicknames written explicitely */
Error = Usr_GetListMsgRecipientsWrittenExplicitelyBySender (true); Error = Usr_GetListMsgRecipientsWrittenExplicitelyBySender (true);
/***** Check number of recipients *****/ /***** Check number of recipients *****/
if ((NumRecipients = Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods ())) if ((NumRecipients = Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (&Gbl.Usrs.Selected)))
{ {
if (Gbl.Usrs.Me.Role.Logged == Rol_STD && if (Gbl.Usrs.Me.Role.Logged == Rol_STD &&
NumRecipients > Cfg_MAX_RECIPIENTS) NumRecipients > Cfg_MAX_RECIPIENTS)
@ -847,7 +847,7 @@ void Msg_RecMsgFromUsr (void)
/***** Free memory *****/ /***** Free memory *****/
/* Free memory used for list of users */ /* Free memory used for list of users */
Usr_FreeListOtherRecipients (); Usr_FreeListOtherRecipients ();
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/***** Update received message setting Replied field to true *****/ /***** Update received message setting Replied field to true *****/
if (Replied) if (Replied)

View File

@ -108,6 +108,28 @@ static const Act_Action_t Prj_LockActions[Prj_NUM_LOCKED_UNLOCKED] =
ActLckPrj, // Prj_UNLOCKED ActLckPrj, // Prj_UNLOCKED
}; };
/***** List of users to select one or more members
to be added to a project *****/
struct SelectedUsrs Prj_MembersToAdd =
{
.List =
{
NULL, // Rol_UNK
NULL, // Rol_GST
NULL, // Rol_USR
NULL, // Rol_STD
NULL, // Rol_NET
NULL, // Rol_TCH
NULL, // Rol_DEG_ADM
NULL, // Rol_CTR_ADM
NULL, // Rol_INS_ADM
NULL, // Rol_SYS_ADM
},
.Filled = false,
.ParamSuffix = "Member",
.Option = Usr_OPTION_UNKNOWN,
};
/*****************************************************************************/ /*****************************************************************************/
/******************************* Private types *******************************/ /******************************* Private types *******************************/
/*****************************************************************************/ /*****************************************************************************/
@ -125,9 +147,9 @@ struct Prj_Faults
/*****************************************************************************/ /*****************************************************************************/
static void Prj_ReqUsrsToSelect (void); static void Prj_ReqUsrsToSelect (void);
static void Prj_GetSelectedUsrsAndShowPrjs (void); static void Prj_GetSelectedUsrsAndShowTheirPrjs (void);
static void Prj_ShowProjects (void);
static void Prj_ShowProjectsInCurrentPage (void); static void Prj_ShowPrjsInCurrentPage (void);
static void Prj_ShowFormToFilterByMy_All (void); static void Prj_ShowFormToFilterByMy_All (void);
static void Prj_ShowFormToFilterByAssign (void); static void Prj_ShowFormToFilterByAssign (void);
@ -251,14 +273,15 @@ static void Prj_ReqUsrsToSelect (void)
extern const char *Txt_View_projects; extern const char *Txt_View_projects;
/***** List users to select some of them *****/ /***** List users to select some of them *****/
Usr_PutFormToSelectUsrsToGoToAct (ActSeePrj,Prj_PutCurrentParams, Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected,
ActSeePrj,Prj_PutCurrentParams,
Txt_Projects, Txt_Projects,
Hlp_ASSESSMENT_Projects, Hlp_ASSESSMENT_Projects,
Txt_View_projects); Txt_View_projects);
} }
/*****************************************************************************/ /*****************************************************************************/
/******************************* Show projects *******************************/ /******************* Get parameters and show projects ************************/
/*****************************************************************************/ /*****************************************************************************/
void Prj_SeeProjects (void) void Prj_SeeProjects (void)
@ -267,16 +290,25 @@ void Prj_SeeProjects (void)
Prj_GetParams (); Prj_GetParams ();
/***** Show projects *****/ /***** Show projects *****/
Prj_ShowProjects ();
}
/*****************************************************************************/
/******************************* Show projects *******************************/
/*****************************************************************************/
static void Prj_ShowProjects (void)
{
switch (Gbl.Prjs.Filter.Who) switch (Gbl.Prjs.Filter.Who)
{ {
case Usr_WHO_ME: case Usr_WHO_ME:
case Usr_WHO_ALL: case Usr_WHO_ALL:
/* Show my projects / all projects */ /* Show my projects / all projects */
Prj_ShowProjectsInCurrentPage (); Prj_ShowPrjsInCurrentPage ();
break; break;
case Usr_WHO_SELECTED: case Usr_WHO_SELECTED:
/* Get selected users and show their projects */ /* Get selected users and show their projects */
Prj_GetSelectedUsrsAndShowPrjs (); Prj_GetSelectedUsrsAndShowTheirPrjs ();
break; break;
default: default:
break; break;
@ -287,9 +319,10 @@ void Prj_SeeProjects (void)
/****** Get and check list of selected users, and show users' projects *******/ /****** Get and check list of selected users, and show users' projects *******/
/*****************************************************************************/ /*****************************************************************************/
static void Prj_GetSelectedUsrsAndShowPrjs (void) static void Prj_GetSelectedUsrsAndShowTheirPrjs (void)
{ {
Usr_GetSelectedUsrsAndGoToAct (Prj_ShowProjectsInCurrentPage,// when user(s) selected Usr_GetSelectedUsrsAndGoToAct (&Gbl.Usrs.Selected,
Prj_ShowPrjsInCurrentPage, // when user(s) selected
Prj_ReqUsrsToSelect); // when no user selected Prj_ReqUsrsToSelect); // when no user selected
} }
@ -344,7 +377,7 @@ void Prj_ShowTableSelectedPrjs (void)
/****************** Show the projects in current page ************************/ /****************** Show the projects in current page ************************/
/*****************************************************************************/ /*****************************************************************************/
static void Prj_ShowProjectsInCurrentPage (void) static void Prj_ShowPrjsInCurrentPage (void)
{ {
extern const char *Hlp_ASSESSMENT_Projects; extern const char *Hlp_ASSESSMENT_Projects;
extern const char *Txt_Projects; extern const char *Txt_Projects;
@ -706,7 +739,7 @@ void Prj_PutParams (struct Prj_Filter *Filter,
/***** Put selected users' codes *****/ /***** Put selected users' codes *****/
if (Filter->Who == Usr_WHO_SELECTED) if (Filter->Who == Usr_WHO_SELECTED)
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -801,6 +834,10 @@ static void Prj_GetParams (void)
/***** Get order and page *****/ /***** Get order and page *****/
Prj_GetParamPrjOrder (); Prj_GetParamPrjOrder ();
Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS);
/***** Get selected users *****/
if (Gbl.Prjs.Filter.Who == Usr_WHO_SELECTED)
Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2247,7 +2284,8 @@ static void Prj_ReqAddUsrs (Prj_RoleInProject_t RoleInProject)
snprintf (TxtButton,sizeof (TxtButton), snprintf (TxtButton,sizeof (TxtButton),
Txt_Add_USERS, Txt_Add_USERS,
Txt_PROJECT_ROLES_PLURAL_abc[RoleInProject]); Txt_PROJECT_ROLES_PLURAL_abc[RoleInProject]);
Usr_PutFormToSelectUsrsToGoToAct (ActionAddUsr[RoleInProject],Prj_PutCurrentParams, Usr_PutFormToSelectUsrsToGoToAct (&Prj_MembersToAdd,
ActionAddUsr[RoleInProject],Prj_PutCurrentParams,
TxtButton, TxtButton,
Hlp_ASSESSMENT_Projects_add_user, Hlp_ASSESSMENT_Projects_add_user,
TxtButton); TxtButton);
@ -2262,19 +2300,22 @@ static void Prj_ReqAddUsrs (Prj_RoleInProject_t RoleInProject)
void Prj_GetSelectedUsrsAndAddStds (void) void Prj_GetSelectedUsrsAndAddStds (void)
{ {
Usr_GetSelectedUsrsAndGoToAct (Prj_AddStds, // when user(s) selected Usr_GetSelectedUsrsAndGoToAct (&Prj_MembersToAdd,
Prj_AddStds, // when user(s) selected
Prj_ReqAddStds); // when no user selected Prj_ReqAddStds); // when no user selected
} }
void Prj_GetSelectedUsrsAndAddTuts (void) void Prj_GetSelectedUsrsAndAddTuts (void)
{ {
Usr_GetSelectedUsrsAndGoToAct (Prj_AddTuts, // when user(s) selected Usr_GetSelectedUsrsAndGoToAct (&Prj_MembersToAdd,
Prj_AddTuts, // when user(s) selected
Prj_ReqAddTuts); // when no user selected Prj_ReqAddTuts); // when no user selected
} }
void Prj_GetSelectedUsrsAndAddEvls (void) void Prj_GetSelectedUsrsAndAddEvls (void)
{ {
Usr_GetSelectedUsrsAndGoToAct (Prj_AddEvls, // when user(s) selected Usr_GetSelectedUsrsAndGoToAct (&Prj_MembersToAdd,
Prj_AddEvls, // when user(s) selected
Prj_ReqAddEvls); // when no user selected Prj_ReqAddEvls); // when no user selected
} }
@ -2775,12 +2816,12 @@ static void Prj_GetListProjects (void)
break; break;
case Usr_WHO_SELECTED: case Usr_WHO_SELECTED:
/* Count number of valid users in list of encrypted user codes */ /* Count number of valid users in list of encrypted user codes */
NumUsrsInList = Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (); NumUsrsInList = Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (&Gbl.Usrs.Selected);
if (NumUsrsInList) if (NumUsrsInList)
{ {
/* Get list of users selected to show their projects */ /* Get list of users selected to show their projects */
Usr_GetListSelectedUsrCods (NumUsrsInList,&LstSelectedUsrCods); Usr_GetListSelectedUsrCods (&Gbl.Usrs.Selected,NumUsrsInList,&LstSelectedUsrCods);
/* Create subquery string */ /* Create subquery string */
Usr_CreateSubqueryUsrCods (LstSelectedUsrCods,NumUsrsInList, Usr_CreateSubqueryUsrCods (LstSelectedUsrCods,NumUsrsInList,
@ -3162,7 +3203,7 @@ void Prj_ReqRemProject (void)
Prj_FreeMemProject (&Prj); Prj_FreeMemProject (&Prj);
/***** Show projects again *****/ /***** Show projects again *****/
Prj_ShowProjectsInCurrentPage (); Prj_ShowProjects ();
} }
/*****************************************************************************/ /*****************************************************************************/
@ -3225,7 +3266,7 @@ void Prj_RemoveProject (void)
Prj_FreeMemProject (&Prj); Prj_FreeMemProject (&Prj);
/***** Show projects again *****/ /***** Show projects again *****/
Prj_ShowProjectsInCurrentPage (); Prj_ShowProjects ();
} }
/*****************************************************************************/ /*****************************************************************************/
@ -3260,14 +3301,14 @@ void Prj_HideProject (void)
Prj_FreeMemProject (&Prj); Prj_FreeMemProject (&Prj);
/***** Show projects again *****/ /***** Show projects again *****/
Prj_ShowProjectsInCurrentPage (); Prj_ShowProjects ();
} }
/*****************************************************************************/ /*****************************************************************************/
/****************************** Show a project *******************************/ /****************************** Unhide a project *****************************/
/*****************************************************************************/ /*****************************************************************************/
void Prj_ShowProject (void) void Prj_UnhideProject (void)
{ {
struct Project Prj; struct Project Prj;
@ -3295,7 +3336,7 @@ void Prj_ShowProject (void)
Prj_FreeMemProject (&Prj); Prj_FreeMemProject (&Prj);
/***** Show projects again *****/ /***** Show projects again *****/
Prj_ShowProjectsInCurrentPage (); Prj_ShowProjects ();
} }
/*****************************************************************************/ /*****************************************************************************/
@ -3352,7 +3393,7 @@ static void Prj_RequestCreatOrEditPrj (long PrjCod)
Prj_FreeMemProject (&Prj); Prj_FreeMemProject (&Prj);
/***** Show projects again *****/ /***** Show projects again *****/
Prj_ShowProjectsInCurrentPage (); Prj_ShowProjects ();
} }
static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject) static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject)
@ -4033,7 +4074,7 @@ void Prj_ReqLockSelectedPrjsEdition (void)
Lay_NoPermissionExit (); Lay_NoPermissionExit ();
/***** Show projects again *****/ /***** Show projects again *****/
Prj_ShowProjectsInCurrentPage (); Prj_ShowProjects ();
} }
void Prj_ReqUnloSelectedPrjsEdition (void) void Prj_ReqUnloSelectedPrjsEdition (void)
@ -4067,7 +4108,7 @@ void Prj_ReqUnloSelectedPrjsEdition (void)
Lay_NoPermissionExit (); Lay_NoPermissionExit ();
/***** Show projects again *****/ /***** Show projects again *****/
Prj_ShowProjectsInCurrentPage (); Prj_ShowProjects ();
} }
/*****************************************************************************/ /*****************************************************************************/
@ -4104,7 +4145,7 @@ void Prj_LockSelectedPrjsEdition (void)
Lay_NoPermissionExit (); Lay_NoPermissionExit ();
/***** Show projects again *****/ /***** Show projects again *****/
Prj_ShowProjectsInCurrentPage (); Prj_ShowProjects ();
} }
void Prj_UnloSelectedPrjsEdition (void) void Prj_UnloSelectedPrjsEdition (void)
@ -4137,7 +4178,7 @@ void Prj_UnloSelectedPrjsEdition (void)
Lay_NoPermissionExit (); Lay_NoPermissionExit ();
/***** Show projects again *****/ /***** Show projects again *****/
Prj_ShowProjectsInCurrentPage (); Prj_ShowProjects ();
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -207,7 +207,7 @@ long Prj_GetParamPrjCod (void);
void Prj_ReqRemProject (void); void Prj_ReqRemProject (void);
void Prj_RemoveProject (void); void Prj_RemoveProject (void);
void Prj_HideProject (void); void Prj_HideProject (void);
void Prj_ShowProject (void); void Prj_UnhideProject (void);
void Prj_RecFormProject (void); void Prj_RecFormProject (void);

View File

@ -963,7 +963,7 @@ static void Rec_ListRecordsGsts (Rec_SharedRecordViewType_t TypeOfView)
char RecordSectionId[32]; char RecordSectionId[32];
/***** Get list of selected users if not already got *****/ /***** Get list of selected users if not already got *****/
Usr_GetListsSelectedUsrsCods (); Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/***** Assign users listing type depending on current action *****/ /***** Assign users listing type depending on current action *****/
Gbl.Usrs.Listing.RecsUsrs = Rec_RECORD_USERS_GUESTS; Gbl.Usrs.Listing.RecsUsrs = Rec_RECORD_USERS_GUESTS;
@ -979,7 +979,7 @@ static void Rec_ListRecordsGsts (Rec_SharedRecordViewType_t TypeOfView)
/* Print view */ /* Print view */
Frm_StartForm (ActPrnRecSevGst); Frm_StartForm (ActPrnRecSevGst);
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
Rec_ShowLinkToPrintPreviewOfRecords (); Rec_ShowLinkToPrintPreviewOfRecords ();
Frm_EndForm (); Frm_EndForm ();
@ -1035,7 +1035,7 @@ static void Rec_ListRecordsGsts (Rec_SharedRecordViewType_t TypeOfView)
Usr_UsrDataDestructor (&UsrDat); Usr_UsrDataDestructor (&UsrDat);
/***** Free memory used by list of selected users' codes *****/ /***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1078,9 +1078,9 @@ static void Rec_ShowRecordOneStdCrs (void)
/* Print view */ /* Print view */
Frm_StartForm (ActPrnRecSevStd); Frm_StartForm (ActPrnRecSevStd);
Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr (); Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr (&Gbl.Usrs.Selected);
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
Rec_ShowLinkToPrintPreviewOfRecords (); Rec_ShowLinkToPrintPreviewOfRecords ();
Frm_EndForm (); Frm_EndForm ();
@ -1159,7 +1159,7 @@ static void Rec_ListRecordsStds (Rec_SharedRecordViewType_t ShaTypeOfView,
char RecordSectionId[32]; char RecordSectionId[32];
/***** Get list of selected users if not already got *****/ /***** Get list of selected users if not already got *****/
Usr_GetListsSelectedUsrsCods (); Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/***** Assign users listing type depending on current action *****/ /***** Assign users listing type depending on current action *****/
Gbl.Usrs.Listing.RecsUsrs = Rec_RECORD_USERS_STUDENTS; Gbl.Usrs.Listing.RecsUsrs = Rec_RECORD_USERS_STUDENTS;
@ -1182,7 +1182,7 @@ static void Rec_ListRecordsStds (Rec_SharedRecordViewType_t ShaTypeOfView,
/* Print view */ /* Print view */
Frm_StartForm (ActPrnRecSevStd); Frm_StartForm (ActPrnRecSevStd);
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
Rec_ShowLinkToPrintPreviewOfRecords (); Rec_ShowLinkToPrintPreviewOfRecords ();
Frm_EndForm (); Frm_EndForm ();
@ -1259,7 +1259,7 @@ static void Rec_ListRecordsStds (Rec_SharedRecordViewType_t ShaTypeOfView,
Rec_FreeListFields (); Rec_FreeListFields ();
/***** Free memory used by list of selected users' codes *****/ /***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1310,9 +1310,9 @@ static void Rec_ShowRecordOneTchCrs (void)
/* Print view */ /* Print view */
Frm_StartForm (ActPrnRecSevTch); Frm_StartForm (ActPrnRecSevTch);
Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr (); Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr (&Gbl.Usrs.Selected);
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
Par_PutHiddenParamChar ("ParamOfficeHours",'Y'); Par_PutHiddenParamChar ("ParamOfficeHours",'Y');
Par_PutHiddenParamChar ("ShowOfficeHours",ShowOfficeHours ? 'Y' : Par_PutHiddenParamChar ("ShowOfficeHours",ShowOfficeHours ? 'Y' :
'N'); 'N');
@ -1373,7 +1373,7 @@ static void Rec_ListRecordsTchs (Rec_SharedRecordViewType_t TypeOfView)
char Width[Cns_MAX_DECIMAL_DIGITS_UINT + 2 + 1]; char Width[Cns_MAX_DECIMAL_DIGITS_UINT + 2 + 1];
/***** Get list of selected users if not already got *****/ /***** Get list of selected users if not already got *****/
Usr_GetListsSelectedUsrsCods (); Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/***** Width for office hours *****/ /***** Width for office hours *****/
snprintf (Width,sizeof (Width), snprintf (Width,sizeof (Width),
@ -1400,7 +1400,7 @@ static void Rec_ListRecordsTchs (Rec_SharedRecordViewType_t TypeOfView)
/* Print view */ /* Print view */
Frm_StartForm (ActPrnRecSevTch); Frm_StartForm (ActPrnRecSevTch);
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
Par_PutHiddenParamChar ("ParamOfficeHours",'Y'); Par_PutHiddenParamChar ("ParamOfficeHours",'Y');
Par_PutHiddenParamChar ("ShowOfficeHours", Par_PutHiddenParamChar ("ShowOfficeHours",
ShowOfficeHours ? 'Y' : ShowOfficeHours ? 'Y' :
@ -1474,7 +1474,7 @@ static void Rec_ListRecordsTchs (Rec_SharedRecordViewType_t TypeOfView)
Usr_UsrDataDestructor (&UsrDat); Usr_UsrDataDestructor (&UsrDat);
/***** Free memory used by list of selected users' codes *****/ /***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1555,7 +1555,7 @@ static void Rec_PutParamsShowOfficeHoursOneTch (void)
static void Rec_PutParamsShowOfficeHoursSeveralTchs (void) static void Rec_PutParamsShowOfficeHoursSeveralTchs (void)
{ {
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
Par_PutHiddenParamChar ("ParamOfficeHours",'Y'); Par_PutHiddenParamChar ("ParamOfficeHours",'Y');
} }
@ -1729,7 +1729,7 @@ static void Rec_ShowCrsRecord (Rec_CourseRecordViewType_t TypeOfView,
Act_GetActCod (ActSeeRecSevStd)); // Original action, used to know where we came from Act_GetActCod (ActSeeRecSevStd)); // Original action, used to know where we came from
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
if (TypeOfView == Rec_CRS_LIST_SEVERAL_RECORDS) if (TypeOfView == Rec_CRS_LIST_SEVERAL_RECORDS)
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
} }
break; break;
default: default:

View File

@ -403,17 +403,14 @@ static bool Ses_CheckIfHiddenParIsAlreadyInDB (const char *ParamName)
/*****************************************************************************/ /*****************************************************************************/
/***************** Get hidden parameter from the database ********************/ /***************** Get hidden parameter from the database ********************/
/*****************************************************************************/ /*****************************************************************************/
// Return true if the parameter is too big
unsigned Ses_GetHiddenParFromDB (const char *ParamName,char *ParamValue, void Ses_GetHiddenParFromDB (const char *ParamName,char *ParamValue,
size_t MaxBytes) size_t MaxBytes)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned long NumRows; unsigned long NumRows;
bool ParameterIsTooBig = false; bool ParameterIsTooBig = false;
unsigned NumTimes = 0;
const char *Ptr;
char ErrorTxt[256]; char ErrorTxt[256];
ParamValue[0] = '\0'; ParamValue[0] = '\0';
@ -452,12 +449,4 @@ unsigned Ses_GetHiddenParFromDB (const char *ParamName,char *ParamValue,
ParamName,(unsigned long) MaxBytes); ParamName,(unsigned long) MaxBytes);
Lay_ShowErrorAndExit (ErrorTxt); Lay_ShowErrorAndExit (ErrorTxt);
} }
/***** Count number of values of the parameter *****/
Ptr = ParamValue;
while (*Ptr)
if (Par_GetNextStrUntilSeparParamMult (&Ptr,NULL,MaxBytes)) // Characters found?
NumTimes++;
return NumTimes;
} }

View File

@ -50,7 +50,7 @@ bool Ses_GetSessionData (void);
void Ses_InsertHiddenParInDB (const char *ParamName,const char *ParamValue); void Ses_InsertHiddenParInDB (const char *ParamName,const char *ParamValue);
void Ses_RemoveHiddenParFromThisSession (void); void Ses_RemoveHiddenParFromThisSession (void);
void Ses_RemoveHiddenParFromExpiredSessions (void); void Ses_RemoveHiddenParFromExpiredSessions (void);
unsigned Ses_GetHiddenParFromDB (const char *ParamName,char *ParamValue, void Ses_GetHiddenParFromDB (const char *ParamName,char *ParamValue,
size_t MaxBytes); size_t MaxBytes);
#endif #endif

View File

@ -382,9 +382,9 @@ void Sta_AskShowCrsHits (void)
HTM_TD_Begin ("colspan=\"2\" class=\"%s LT\"",The_ClassFormInBox[Gbl.Prefs.Theme]); HTM_TD_Begin ("colspan=\"2\" class=\"%s LT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TABLE_Begin (NULL); HTM_TABLE_Begin (NULL);
Usr_ListUsersToSelect (Rol_TCH); Usr_ListUsersToSelect (Rol_TCH,&Gbl.Usrs.Selected);
Usr_ListUsersToSelect (Rol_NET); Usr_ListUsersToSelect (Rol_NET,&Gbl.Usrs.Selected);
Usr_ListUsersToSelect (Rol_STD); Usr_ListUsersToSelect (Rol_STD,&Gbl.Usrs.Selected);
HTM_TABLE_End (); HTM_TABLE_End ();
HTM_TD_End (); HTM_TD_End ();
@ -907,7 +907,7 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
} }
/****** Get lists of selected users ******/ /****** Get lists of selected users ******/
Usr_GetListsSelectedUsrsCods (); Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/***** Show the form again *****/ /***** Show the form again *****/
Sta_AskShowCrsHits (); Sta_AskShowCrsHits ();
@ -916,11 +916,11 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
HTM_SECTION_Begin (Sta_STAT_RESULTS_SECTION_ID); HTM_SECTION_Begin (Sta_STAT_RESULTS_SECTION_ID);
/***** Check selection *****/ /***** Check selection *****/
if (!Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods ()) // Error: there are no users selected if (!Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (&Gbl.Usrs.Selected)) // Error: there are no users selected
{ {
/* Write warning message, clean and abort */ /* Write warning message, clean and abort */
Ale_ShowAlert (Ale_WARNING,Txt_You_must_select_one_ore_more_users); Ale_ShowAlert (Ale_WARNING,Txt_You_must_select_one_ore_more_users);
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
return; return;
} }
break; break;
@ -1495,7 +1495,7 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
/***** Free memory used by list of selected users' codes *****/ /***** Free memory used by list of selected users' codes *****/
if (Gbl.Action.Act == ActSeeAccCrs) if (Gbl.Action.Act == ActSeeAccCrs)
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/***** Write time zone used in the calculation of these statistics *****/ /***** Write time zone used in the calculation of these statistics *****/
switch (Gbl.Stat.ClicksGroupedBy) switch (Gbl.Stat.ClicksGroupedBy)
@ -1609,7 +1609,7 @@ static void Sta_ShowDetailedAccessesList (unsigned long NumRows,MYSQL_RES *mysql
Par_PutHiddenParamLong (NULL,"FirstRow",FirstRow - Gbl.Stat.RowsPerPage); Par_PutHiddenParamLong (NULL,"FirstRow",FirstRow - Gbl.Stat.RowsPerPage);
Par_PutHiddenParamLong (NULL,"LastRow" ,FirstRow - 1); Par_PutHiddenParamLong (NULL,"LastRow" ,FirstRow - 1);
Par_PutHiddenParamUnsigned (NULL,"RowsPage",Gbl.Stat.RowsPerPage); Par_PutHiddenParamUnsigned (NULL,"RowsPage",Gbl.Stat.RowsPerPage);
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
} }
HTM_TD_Begin ("class=\"LM\""); HTM_TD_Begin ("class=\"LM\"");
if (FirstRow > 1) if (FirstRow > 1)
@ -1647,7 +1647,7 @@ static void Sta_ShowDetailedAccessesList (unsigned long NumRows,MYSQL_RES *mysql
Par_PutHiddenParamUnsigned (NULL,"FirstRow" ,(unsigned) (LastRow + 1)); Par_PutHiddenParamUnsigned (NULL,"FirstRow" ,(unsigned) (LastRow + 1));
Par_PutHiddenParamUnsigned (NULL,"LastRow" ,(unsigned) (LastRow + Gbl.Stat.RowsPerPage)); Par_PutHiddenParamUnsigned (NULL,"LastRow" ,(unsigned) (LastRow + Gbl.Stat.RowsPerPage));
Par_PutHiddenParamUnsigned (NULL,"RowsPage" ,(unsigned) Gbl.Stat.RowsPerPage); Par_PutHiddenParamUnsigned (NULL,"RowsPage" ,(unsigned) Gbl.Stat.RowsPerPage);
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
} }
HTM_TD_Begin ("class=\"RM\""); HTM_TD_Begin ("class=\"RM\"");
if (LastRow < NumRows) if (LastRow < NumRows)
@ -2074,7 +2074,7 @@ static void Sta_ShowDistrAccessesPerDayAndHour (unsigned long NumRows,MYSQL_RES
Par_PutHiddenParamUnsigned (NULL,"CountType",(unsigned) Gbl.Stat.CountType); Par_PutHiddenParamUnsigned (NULL,"CountType",(unsigned) Gbl.Stat.CountType);
Par_PutHiddenParamUnsigned (NULL,"StatAct" ,(unsigned) Gbl.Stat.NumAction); Par_PutHiddenParamUnsigned (NULL,"StatAct" ,(unsigned) Gbl.Stat.NumAction);
if (Gbl.Action.Act == ActSeeAccCrs) if (Gbl.Action.Act == ActSeeAccCrs)
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
else // Gbl.Action.Act == ActSeeAccGbl else // Gbl.Action.Act == ActSeeAccGbl
{ {
Par_PutHiddenParamUnsigned (NULL,"Role",(unsigned) Gbl.Stat.Role); Par_PutHiddenParamUnsigned (NULL,"Role",(unsigned) Gbl.Stat.Role);

View File

@ -7497,9 +7497,9 @@ void Tst_SelUsrsToViewUsrsTstResults (void)
HTM_TD_Begin ("colspan=\"2\" class=\"%s LT\"",The_ClassFormInBox[Gbl.Prefs.Theme]); HTM_TD_Begin ("colspan=\"2\" class=\"%s LT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TABLE_BeginPadding (2); HTM_TABLE_BeginPadding (2);
Usr_ListUsersToSelect (Rol_TCH); Usr_ListUsersToSelect (Rol_TCH,&Gbl.Usrs.Selected);
Usr_ListUsersToSelect (Rol_NET); Usr_ListUsersToSelect (Rol_NET,&Gbl.Usrs.Selected);
Usr_ListUsersToSelect (Rol_STD); Usr_ListUsersToSelect (Rol_STD,&Gbl.Usrs.Selected);
HTM_TABLE_End (); HTM_TABLE_End ();
HTM_TD_End (); HTM_TD_End ();
@ -7533,7 +7533,7 @@ void Tst_SelUsrsToViewUsrsTstResults (void)
Usr_FreeUsrsList (Rol_STD); Usr_FreeUsrsList (Rol_STD);
/***** Free memory used by list of selected users' codes *****/ /***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/***** Free memory for list of selected groups *****/ /***** Free memory for list of selected groups *****/
Grp_FreeListCodSelectedGrps (); Grp_FreeListCodSelectedGrps ();
@ -7635,7 +7635,8 @@ static void Tst_StoreScoreOfTestResultInDB (long TstCod,
void Tst_GetUsrsAndShowTstResults (void) void Tst_GetUsrsAndShowTstResults (void)
{ {
Usr_GetSelectedUsrsAndGoToAct (Tst_ShowUsrsTstResults, Usr_GetSelectedUsrsAndGoToAct (&Gbl.Usrs.Selected,
Tst_ShowUsrsTstResults,
Tst_SelUsrsToViewUsrsTstResults); Tst_SelUsrsToViewUsrsTstResults);
} }

View File

@ -25,10 +25,12 @@
/*********************************** Headers *********************************/ /*********************************** Headers *********************************/
/*****************************************************************************/ /*****************************************************************************/
#define _GNU_SOURCE // For asprintf
#include <ctype.h> // For isalnum, isdigit, etc. #include <ctype.h> // For isalnum, isdigit, etc.
#include <limits.h> // For maximum values #include <limits.h> // For maximum values
#include <linux/limits.h> // For PATH_MAX #include <linux/limits.h> // For PATH_MAX
#include <linux/stddef.h> // For NULL #include <linux/stddef.h> // For NULL
#include <stdio.h> // For asprintf
#include <stdlib.h> // For exit, system, malloc, free, rand, etc. #include <stdlib.h> // For exit, system, malloc, free, rand, etc.
#include <string.h> // For string functions #include <string.h> // For string functions
#include <sys/wait.h> // For the macro WEXITSTATUS #include <sys/wait.h> // For the macro WEXITSTATUS
@ -205,23 +207,31 @@ static void Usr_PutButtonToConfirmIWantToSeeBigList (unsigned NumUsrs,
const char *OnSubmit); const char *OnSubmit);
static void Usr_PutParamsConfirmIWantToSeeBigList (void); static void Usr_PutParamsConfirmIWantToSeeBigList (void);
static void Usr_AllocateListSelectedEncryptedUsrCods (Rol_Role_t Role); static void Usr_BuildParamName (char **ParamName,
const char *ParamRoot,
struct SelectedUsrs *SelectedUsrs);
static void Usr_AllocateListSelectedEncryptedUsrCods (struct SelectedUsrs *SelectedUsrs,
Rol_Role_t Role);
static void Usr_AllocateListOtherRecipients (void); static void Usr_AllocateListOtherRecipients (void);
static void Usr_FormToSelectUsrListType (void (*FuncParams) (void), static void Usr_FormToSelectUsrListType (void (*FuncParams) (void),
Usr_ShowUsrsType_t ListType); Usr_ShowUsrsType_t ListType);
static void Usr_PutCheckboxToSelectAllUsers (Rol_Role_t Role,
struct SelectedUsrs *SelectedUsrs);
static Usr_Sex_t Usr_GetSexOfUsrsLst (Rol_Role_t Role); static Usr_Sex_t Usr_GetSexOfUsrsLst (Rol_Role_t Role);
static void Usr_PutCheckboxToSelectUser (Rol_Role_t Role, static void Usr_PutCheckboxToSelectUser (Rol_Role_t Role,
const char *EncryptedUsrCod, const char *EncryptedUsrCod,
bool UsrIsTheMsgSender); bool UsrIsTheMsgSender,
struct SelectedUsrs *SelectedUsrs);
static void Usr_PutCheckboxListWithPhotos (void); static void Usr_PutCheckboxListWithPhotos (void);
static void Usr_ListMainDataGsts (bool PutCheckBoxToSelectUsr); static void Usr_ListMainDataGsts (bool PutCheckBoxToSelectUsr);
static void Usr_ListMainDataStds (bool PutCheckBoxToSelectUsr); static void Usr_ListMainDataStds (bool PutCheckBoxToSelectUsr);
static void Usr_ListMainDataTchs (Rol_Role_t Role,bool PutCheckBoxToSelectUsr); static void Usr_ListMainDataTchs (Rol_Role_t Role,
static void Usr_ListUsrsForSelection (Rol_Role_t Role); bool PutCheckBoxToSelectUsr);
static void Usr_ListUsrsForSelection (Rol_Role_t Role,
struct SelectedUsrs *SelectedUsrs);
static void Usr_ListRowsAllDataTchs (Rol_Role_t Role, static void Usr_ListRowsAllDataTchs (Rol_Role_t Role,
const char *FieldNames[Usr_NUM_ALL_FIELDS_DATA_TCH], const char *FieldNames[Usr_NUM_ALL_FIELDS_DATA_TCH],
unsigned NumColumns); unsigned NumColumns);
@ -263,7 +273,9 @@ static void Usr_ShowStdsAllDataParams (void);
static void Usr_ShowTchsAllDataParams (void); static void Usr_ShowTchsAllDataParams (void);
static void Usr_DrawClassPhoto (Usr_ClassPhotoType_t ClassPhotoType, static void Usr_DrawClassPhoto (Usr_ClassPhotoType_t ClassPhotoType,
Rol_Role_t Role,bool PutCheckBoxToSelectUsr); Rol_Role_t Role,
struct SelectedUsrs *SelectedUsrs,
bool PutCheckBoxToSelectUsr);
/*****************************************************************************/ /*****************************************************************************/
/**** Show alert about number of clicks remaining before sending my photo ****/ /**** Show alert about number of clicks remaining before sending my photo ****/
@ -3607,7 +3619,8 @@ static void Usr_InsertMyLastData (void)
#define Usr_MAX_BYTES_BG_COLOR (16 - 1) #define Usr_MAX_BYTES_BG_COLOR (16 - 1)
void Usr_WriteRowUsrMainData (unsigned NumUsr,struct UsrData *UsrDat, void Usr_WriteRowUsrMainData (unsigned NumUsr,struct UsrData *UsrDat,
bool PutCheckBoxToSelectUsr,Rol_Role_t Role) bool PutCheckBoxToSelectUsr,Rol_Role_t Role,
struct SelectedUsrs *SelectedUsrs)
{ {
extern const char *Txt_Enrolment_confirmed; extern const char *Txt_Enrolment_confirmed;
extern const char *Txt_Enrolment_not_confirmed; extern const char *Txt_Enrolment_not_confirmed;
@ -3634,7 +3647,8 @@ void Usr_WriteRowUsrMainData (unsigned NumUsr,struct UsrData *UsrDat,
if (PutCheckBoxToSelectUsr) if (PutCheckBoxToSelectUsr)
{ {
HTM_TD_Begin ("class=\"CM %s\"",BgColor); HTM_TD_Begin ("class=\"CM %s\"",BgColor);
Usr_PutCheckboxToSelectUser (Role,UsrDat->EncryptedUsrCod,UsrIsTheMsgSender); Usr_PutCheckboxToSelectUser (Role,UsrDat->EncryptedUsrCod,UsrIsTheMsgSender,
SelectedUsrs);
HTM_TD_End (); HTM_TD_End ();
} }
@ -5675,63 +5689,80 @@ static void Usr_PutParamsConfirmIWantToSeeBigList (void)
Par_PutHiddenParamChar ("ShowBigList",'Y'); Par_PutHiddenParamChar ("ShowBigList",'Y');
} }
/*****************************************************************************/
/************ Create list of selected users with one given user **************/
/*****************************************************************************/
void Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr (struct SelectedUsrs *SelectedUsrs)
{
/***** Create list of user codes and put encrypted user code in it *****/
if (!SelectedUsrs->List[Rol_UNK])
{
if ((SelectedUsrs->List[Rol_UNK] =
(char *) malloc (Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + 1)) == NULL)
Lay_NotEnoughMemoryExit ();
Str_Copy (SelectedUsrs->List[Rol_UNK],Gbl.Usrs.Other.UsrDat.EncryptedUsrCod,
Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64);
SelectedUsrs->Filled = true;
}
}
/*****************************************************************************/ /*****************************************************************************/
/************* Write parameter with the list of users selected ***************/ /************* Write parameter with the list of users selected ***************/
/*****************************************************************************/ /*****************************************************************************/
void Usr_PutHiddenParSelectedUsrsCods (void) void Usr_PutHiddenParSelectedUsrsCods (struct SelectedUsrs *SelectedUsrs)
{ {
char *ParamName;
/***** Put a parameter indicating that a list of several users is present *****/ /***** Put a parameter indicating that a list of several users is present *****/
Par_PutHiddenParamChar ("MultiUsrs",'Y'); Par_PutHiddenParamChar ("MultiUsrs",'Y');
/***** Put a parameter with the encrypted user codes of several users *****/ /***** Put a parameter with the encrypted user codes of several users *****/
/* Build name of the parameter.
Sometimes a unique action needs several distinct lists of users,
so, it's necessary to use distinct names for the parameters. */
Usr_BuildParamName (&ParamName,Usr_ParamUsrCod[Rol_UNK],SelectedUsrs);
/* Put the parameter *****/
if (Gbl.Session.IsOpen) if (Gbl.Session.IsOpen)
Ses_InsertHiddenParInDB (Usr_ParamUsrCod[Rol_UNK],Gbl.Usrs.Selected.List[Rol_UNK]); Ses_InsertHiddenParInDB (ParamName,SelectedUsrs->List[Rol_UNK]);
else else
Par_PutHiddenParamString (NULL,Usr_ParamUsrCod[Rol_UNK],Gbl.Usrs.Selected.List[Rol_UNK]); Par_PutHiddenParamString (NULL,ParamName,SelectedUsrs->List[Rol_UNK]);
}
/*****************************************************************************/ /***** Free allocated memory for parameter name *****/
/**************** Create list of selected users with one given user ************************/ free (ParamName);
/*****************************************************************************/
void Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr (void)
{
/***** Create list of user codes and put encrypted user code in it *****/
if (!Gbl.Usrs.Selected.List[Rol_UNK])
{
if ((Gbl.Usrs.Selected.List[Rol_UNK] =
(char *) malloc (Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + 1)) == NULL)
Lay_NotEnoughMemoryExit ();
Str_Copy (Gbl.Usrs.Selected.List[Rol_UNK],Gbl.Usrs.Other.UsrDat.EncryptedUsrCod,
Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64);
Gbl.Usrs.Selected.Filled = true;
}
} }
/*****************************************************************************/ /*****************************************************************************/
/************************* Get list of selected users ************************/ /************************* Get list of selected users ************************/
/*****************************************************************************/ /*****************************************************************************/
void Usr_GetListsSelectedUsrsCods (void) void Usr_GetListsSelectedEncryptedUsrsCods (struct SelectedUsrs *SelectedUsrs)
{ {
extern const char *Par_SEPARATOR_PARAM_MULTIPLE; extern const char *Par_SEPARATOR_PARAM_MULTIPLE;
char *ParamName;
unsigned Length; unsigned Length;
Rol_Role_t Role; Rol_Role_t Role;
if (!Gbl.Usrs.Selected.Filled) // Get list only if not already got if (!SelectedUsrs->Filled) // Get list only if not already got
{ {
/***** Build name of the parameter.
Sometimes a unique action needs several distinct lists of users,
so, it's necessary to use distinct names for the parameters. *****/
Usr_BuildParamName (&ParamName,Usr_ParamUsrCod[Rol_UNK],SelectedUsrs);
/***** Get possible list of all selected users *****/ /***** Get possible list of all selected users *****/
Usr_AllocateListSelectedEncryptedUsrCods (Rol_UNK); Usr_AllocateListSelectedEncryptedUsrCods (SelectedUsrs,Rol_UNK);
if (Gbl.Session.IsOpen) // If the session is open, get parameter from DB if (Gbl.Session.IsOpen) // If the session is open, get parameter from DB
{ {
Ses_GetHiddenParFromDB (Usr_ParamUsrCod[Rol_UNK],Gbl.Usrs.Selected.List[Rol_UNK], Ses_GetHiddenParFromDB (ParamName,SelectedUsrs->List[Rol_UNK],
Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS); Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS);
Str_ChangeFormat (Str_FROM_FORM,Str_TO_TEXT,Gbl.Usrs.Selected.List[Rol_UNK], Str_ChangeFormat (Str_FROM_FORM,Str_TO_TEXT,SelectedUsrs->List[Rol_UNK],
Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS,true); Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS,true);
} }
else else
Par_GetParMultiToText (Usr_ParamUsrCod[Rol_UNK],Gbl.Usrs.Selected.List[Rol_UNK], Par_GetParMultiToText (ParamName,SelectedUsrs->List[Rol_UNK],
Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS); Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS);
/***** Get list of selected users for each possible role *****/ /***** Get list of selected users for each possible role *****/
@ -5741,28 +5772,50 @@ void Usr_GetListsSelectedUsrsCods (void)
if (Usr_ParamUsrCod[Role]) if (Usr_ParamUsrCod[Role])
{ {
/* Get parameter with selected users with this role */ /* Get parameter with selected users with this role */
Usr_AllocateListSelectedEncryptedUsrCods (Role); Usr_AllocateListSelectedEncryptedUsrCods (SelectedUsrs,Role);
Par_GetParMultiToText (Usr_ParamUsrCod[Role],Gbl.Usrs.Selected.List[Role], Par_GetParMultiToText (Usr_ParamUsrCod[Role],SelectedUsrs->List[Role],
Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS); Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS);
/* Add selected users with this role /* Add selected users with this role
to the list with all selected users */ to the list with all selected users */
if (Gbl.Usrs.Selected.List[Role][0]) if (SelectedUsrs->List[Role][0])
{ {
if (Gbl.Usrs.Selected.List[Rol_UNK][0]) if (SelectedUsrs->List[Rol_UNK][0])
if ((Length = strlen (Gbl.Usrs.Selected.List[Rol_UNK])) < if ((Length = strlen (SelectedUsrs->List[Rol_UNK])) <
Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS) Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS)
{ {
Gbl.Usrs.Selected.List[Rol_UNK][Length ] = Par_SEPARATOR_PARAM_MULTIPLE[0]; SelectedUsrs->List[Rol_UNK][Length ] = Par_SEPARATOR_PARAM_MULTIPLE[0];
Gbl.Usrs.Selected.List[Rol_UNK][Length + 1] = '\0'; SelectedUsrs->List[Rol_UNK][Length + 1] = '\0';
} }
Str_Concat (Gbl.Usrs.Selected.List[Rol_UNK],Gbl.Usrs.Selected.List[Role], Str_Concat (SelectedUsrs->List[Rol_UNK],SelectedUsrs->List[Role],
Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS); Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS);
} }
} }
/***** Free allocated memory for parameter name *****/
free (ParamName);
/***** List is filled *****/ /***** List is filled *****/
Gbl.Usrs.Selected.Filled = true; SelectedUsrs->Filled = true;
}
}
static void Usr_BuildParamName (char **ParamName,
const char *ParamRoot,
struct SelectedUsrs *SelectedUsrs)
{
/* Build name of the parameter.
Sometimes a unique action needs several distinct lists of users,
so, it's necessary to use distinct names for the parameters. */
if (SelectedUsrs->ParamSuffix)
{
if (asprintf (ParamName,"%s%s",ParamRoot,SelectedUsrs->ParamSuffix) < 0)
Lay_NotEnoughMemoryExit ();
}
else
{
if (asprintf (ParamName,"%s",ParamRoot) < 0)
Lay_NotEnoughMemoryExit ();
} }
} }
@ -5789,7 +5842,7 @@ bool Usr_GetListMsgRecipientsWrittenExplicitelyBySender (bool WriteErrorMsgs)
/***** Get list of selected encrypted users's codes if not already got. /***** Get list of selected encrypted users's codes if not already got.
This list is necessary to add encrypted user's codes at the end. *****/ This list is necessary to add encrypted user's codes at the end. *****/
Usr_GetListsSelectedUsrsCods (); Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
LengthSelectedUsrsCods = strlen (Gbl.Usrs.Selected.List[Rol_UNK]); LengthSelectedUsrsCods = strlen (Gbl.Usrs.Selected.List[Rol_UNK]);
/***** Allocate memory for the lists of recipients written explicetely *****/ /***** Allocate memory for the lists of recipients written explicetely *****/
@ -5973,14 +6026,13 @@ bool Usr_FindEncryptedUsrCodsInListOfSelectedEncryptedUsrCods (const char *Encry
/******* Check if there are valid users in list of encrypted user codes ******/ /******* Check if there are valid users in list of encrypted user codes ******/
/*****************************************************************************/ /*****************************************************************************/
bool Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (void) bool Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (struct SelectedUsrs *SelectedUsrs)
{ {
const char *Ptr; const char *Ptr;
struct UsrData UsrDat; struct UsrData UsrDat;
/***** Loop over the list Gbl.Usrs.Selected.List[Rol_UNK] /***** Loop over the list to check if there are valid users *****/
to check if there are valid users *****/ Ptr = SelectedUsrs->List[Rol_UNK];
Ptr = Gbl.Usrs.Selected.List[Rol_UNK];
while (*Ptr) while (*Ptr)
{ {
Par_GetNextStrUntilSeparParamMult (&Ptr,UsrDat.EncryptedUsrCod, Par_GetNextStrUntilSeparParamMult (&Ptr,UsrDat.EncryptedUsrCod,
@ -5996,15 +6048,14 @@ bool Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (void)
/******** Count number of valid users in list of encrypted user codes ********/ /******** Count number of valid users in list of encrypted user codes ********/
/*****************************************************************************/ /*****************************************************************************/
unsigned Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (void) unsigned Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (struct SelectedUsrs *SelectedUsrs)
{ {
const char *Ptr; const char *Ptr;
unsigned NumUsrs = 0; unsigned NumUsrs = 0;
struct UsrData UsrDat; struct UsrData UsrDat;
/***** Loop over the list Gbl.Usrs.Selected.List[Rol_UNK] /***** Loop over the list to count the number of users *****/
to count the number of users *****/ Ptr = SelectedUsrs->List[Rol_UNK];
Ptr = Gbl.Usrs.Selected.List[Rol_UNK];
while (*Ptr) while (*Ptr)
{ {
Par_GetNextStrUntilSeparParamMult (&Ptr,UsrDat.EncryptedUsrCod, Par_GetNextStrUntilSeparParamMult (&Ptr,UsrDat.EncryptedUsrCod,
@ -6021,13 +6072,15 @@ unsigned Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (void)
/*****************************************************************************/ /*****************************************************************************/
// Role = Rol_UNK here means all users // Role = Rol_UNK here means all users
static void Usr_AllocateListSelectedEncryptedUsrCods (Rol_Role_t Role) static void Usr_AllocateListSelectedEncryptedUsrCods (struct SelectedUsrs *SelectedUsrs,
Rol_Role_t Role)
{ {
if (!Gbl.Usrs.Selected.List[Role]) if (!SelectedUsrs->List[Role])
{ {
if ((Gbl.Usrs.Selected.List[Role] = (char *) malloc (Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS + 1)) == NULL) if ((SelectedUsrs->List[Role] =
(char *) malloc (Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS + 1)) == NULL)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
Gbl.Usrs.Selected.List[Role][0] = '\0'; SelectedUsrs->List[Role][0] = '\0';
} }
} }
@ -6036,24 +6089,24 @@ static void Usr_AllocateListSelectedEncryptedUsrCods (Rol_Role_t Role)
/*****************************************************************************/ /*****************************************************************************/
// Role = Rol_UNK here means all users // Role = Rol_UNK here means all users
void Usr_FreeListsSelectedEncryptedUsrsCods (void) void Usr_FreeListsSelectedEncryptedUsrsCods (struct SelectedUsrs *SelectedUsrs)
{ {
Rol_Role_t Role; Rol_Role_t Role;
if (Gbl.Usrs.Selected.Filled) // Only if lists are filled if (SelectedUsrs->Filled) // Only if lists are filled
{ {
/***** Free lists *****/ /***** Free lists *****/
for (Role = (Rol_Role_t) 0; for (Role = (Rol_Role_t) 0;
Role < Rol_NUM_ROLES; Role < Rol_NUM_ROLES;
Role++) Role++)
if (Gbl.Usrs.Selected.List[Role]) if (SelectedUsrs->List[Role])
{ {
free (Gbl.Usrs.Selected.List[Role]); free (SelectedUsrs->List[Role]);
Gbl.Usrs.Selected.List[Role] = NULL; SelectedUsrs->List[Role] = NULL;
} }
/***** Mark lists as empty *****/ /***** Mark lists as empty *****/
Gbl.Usrs.Selected.Filled = false; SelectedUsrs->Filled = false;
// Lists of encrypted codes of users selected from form // Lists of encrypted codes of users selected from form
// are now marked as not filled // are now marked as not filled
} }
@ -6063,7 +6116,9 @@ void Usr_FreeListsSelectedEncryptedUsrsCods (void)
/************* Get list of users selected to show their projects *************/ /************* Get list of users selected to show their projects *************/
/*****************************************************************************/ /*****************************************************************************/
void Usr_GetListSelectedUsrCods (unsigned NumUsrsInList,long **LstSelectedUsrCods) void Usr_GetListSelectedUsrCods (struct SelectedUsrs *SelectedUsrs,
unsigned NumUsrsInList,
long **LstSelectedUsrCods)
{ {
unsigned NumUsr; unsigned NumUsr;
const char *Ptr; const char *Ptr;
@ -6076,8 +6131,8 @@ void Usr_GetListSelectedUsrCods (unsigned NumUsrsInList,long **LstSelectedUsrCod
/***** Initialize structure with user's data *****/ /***** Initialize structure with user's data *****/
Usr_UsrDataConstructor (&UsrDat); Usr_UsrDataConstructor (&UsrDat);
/***** Loop over the list Gbl.Usrs.Selected.List[Rol_UNK] getting users' codes *****/ /***** Loop over the list getting users' codes *****/
for (NumUsr = 0, Ptr = Gbl.Usrs.Selected.List[Rol_UNK]; for (NumUsr = 0, Ptr = SelectedUsrs->List[Rol_UNK];
NumUsr < NumUsrsInList && *Ptr; NumUsr < NumUsrsInList && *Ptr;
NumUsr++) NumUsr++)
{ {
@ -6250,7 +6305,8 @@ static void Usr_FormToSelectUsrListType (void (*FuncParams) (void),
/******************** List users to select some of them **********************/ /******************** List users to select some of them **********************/
/*****************************************************************************/ /*****************************************************************************/
void Usr_PutFormToSelectUsrsToGoToAct (Act_Action_t NextAction,void (*FuncParams) (), void Usr_PutFormToSelectUsrsToGoToAct (struct SelectedUsrs *SelectedUsrs,
Act_Action_t NextAction,void (*FuncParams) (),
const char *Title, const char *Title,
const char *HelpLink, const char *HelpLink,
const char *TxtButton) const char *TxtButton)
@ -6313,9 +6369,9 @@ void Usr_PutFormToSelectUsrsToGoToAct (Act_Action_t NextAction,void (*FuncParams
/* Put list of users to select some of them */ /* Put list of users to select some of them */
HTM_TABLE_BeginCenter (); HTM_TABLE_BeginCenter ();
Usr_ListUsersToSelect (Rol_TCH); Usr_ListUsersToSelect (Rol_TCH,SelectedUsrs);
Usr_ListUsersToSelect (Rol_NET); Usr_ListUsersToSelect (Rol_NET,SelectedUsrs);
Usr_ListUsersToSelect (Rol_STD); Usr_ListUsersToSelect (Rol_STD,SelectedUsrs);
HTM_TABLE_End (); HTM_TABLE_End ();
/* Send button */ /* Send button */
@ -6347,16 +6403,20 @@ void Usr_PutFormToSelectUsrsToGoToAct (Act_Action_t NextAction,void (*FuncParams
Box_BoxEnd (); Box_BoxEnd ();
} }
void Usr_GetSelectedUsrsAndGoToAct (void (*FuncWhenUsrsSelected) (), void Usr_GetSelectedUsrsAndGoToAct (struct SelectedUsrs *SelectedUsrs,
void (*FuncWhenUsrsSelected) (),
void (*FuncWhenNoUsrsSelected) ()) void (*FuncWhenNoUsrsSelected) ())
{ {
extern const char *Txt_You_must_select_one_ore_more_users; extern const char *Txt_You_must_select_one_ore_more_users;
/***** Get lists of the selected users if not already got *****/ /***** Get lists of the selected users if not already got *****/
Usr_GetListsSelectedUsrsCods (); Usr_GetListsSelectedEncryptedUsrsCods (SelectedUsrs);
Ale_ShowAlert (Ale_INFO,"DEBUG: SelectedUsrs->List[Rol_UNK] = %s;",
SelectedUsrs->List[Rol_UNK]);
Lay_ShowErrorAndExit ("DEBUG: Usr_GetSelectedUsrsAndGoToAct ()");
/***** Check number of users *****/ /***** Check number of users *****/
if (Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods ()) // If some users are selected... if (Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (SelectedUsrs)) // If some users are selected...
FuncWhenUsrsSelected (); FuncWhenUsrsSelected ();
else // If no users are selected... else // If no users are selected...
{ {
@ -6367,14 +6427,14 @@ void Usr_GetSelectedUsrsAndGoToAct (void (*FuncWhenUsrsSelected) (),
} }
/***** Free memory used by list of selected users' codes *****/ /***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (SelectedUsrs);
} }
/*****************************************************************************/ /*****************************************************************************/
/*********** List users with a given role to select some of them *************/ /*********** List users with a given role to select some of them *************/
/*****************************************************************************/ /*****************************************************************************/
void Usr_ListUsersToSelect (Rol_Role_t Role) void Usr_ListUsersToSelect (Rol_Role_t Role,struct SelectedUsrs *SelectedUsrs)
{ {
/***** If there are no users, don't list anything *****/ /***** If there are no users, don't list anything *****/
if (!Gbl.Usrs.LstUsrs[Role].NumUsrs) if (!Gbl.Usrs.LstUsrs[Role].NumUsrs)
@ -6385,10 +6445,10 @@ void Usr_ListUsersToSelect (Rol_Role_t Role)
{ {
case Usr_LIST_AS_CLASS_PHOTO: case Usr_LIST_AS_CLASS_PHOTO:
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_SEL, Usr_DrawClassPhoto (Usr_CLASS_PHOTO_SEL,
Role,true); Role,SelectedUsrs,true);
break; break;
case Usr_LIST_AS_LISTING: case Usr_LIST_AS_LISTING:
Usr_ListUsrsForSelection (Role); Usr_ListUsrsForSelection (Role,SelectedUsrs);
break; break;
default: default:
break; break;
@ -6399,10 +6459,12 @@ void Usr_ListUsersToSelect (Rol_Role_t Role)
/******** Put a row, in a classphoto or a list, to select all users **********/ /******** Put a row, in a classphoto or a list, to select all users **********/
/*****************************************************************************/ /*****************************************************************************/
void Usr_PutCheckboxToSelectAllUsers (Rol_Role_t Role) static void Usr_PutCheckboxToSelectAllUsers (Rol_Role_t Role,
struct SelectedUsrs *SelectedUsrs)
{ {
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
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];
char *ParamName;
Usr_Sex_t Sex; Usr_Sex_t Sex;
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -6411,9 +6473,13 @@ void Usr_PutCheckboxToSelectAllUsers (Rol_Role_t Role)
HTM_LABEL_Begin (NULL); HTM_LABEL_Begin (NULL);
if (Usr_NameSelUnsel[Role] && Usr_ParamUsrCod[Role]) if (Usr_NameSelUnsel[Role] && Usr_ParamUsrCod[Role])
{
Usr_BuildParamName (&ParamName,Usr_ParamUsrCod[Role],SelectedUsrs);
HTM_INPUT_CHECKBOX (Usr_NameSelUnsel[Role],false, HTM_INPUT_CHECKBOX (Usr_NameSelUnsel[Role],false,
"value=\"\" onclick=\"togglecheckChildren(this,'%s')\"", "value=\"\" onclick=\"togglecheckChildren(this,'%s')\"",
Usr_ParamUsrCod[Role]); ParamName);
free (ParamName);
}
else else
Rol_WrongRoleExit (); Rol_WrongRoleExit ();
Sex = Usr_GetSexOfUsrsLst (Role); Sex = Usr_GetSexOfUsrsLst (Role);
@ -6469,9 +6535,11 @@ unsigned Usr_GetColumnsForSelectUsrs (void)
static void Usr_PutCheckboxToSelectUser (Rol_Role_t Role, static void Usr_PutCheckboxToSelectUser (Rol_Role_t Role,
const char *EncryptedUsrCod, const char *EncryptedUsrCod,
bool UsrIsTheMsgSender) bool UsrIsTheMsgSender,
struct SelectedUsrs *SelectedUsrs)
{ {
bool CheckboxChecked; bool CheckboxChecked;
char *ParamName;
if (Usr_NameSelUnsel[Role] && Usr_ParamUsrCod[Role]) if (Usr_NameSelUnsel[Role] && Usr_ParamUsrCod[Role])
{ {
@ -6483,11 +6551,13 @@ static void Usr_PutCheckboxToSelectUser (Rol_Role_t Role,
CheckboxChecked = Usr_FindEncryptedUsrCodsInListOfSelectedEncryptedUsrCods (EncryptedUsrCod); CheckboxChecked = Usr_FindEncryptedUsrCodsInListOfSelectedEncryptedUsrCods (EncryptedUsrCod);
/***** Check box *****/ /***** Check box *****/
HTM_INPUT_CHECKBOX (Usr_ParamUsrCod[Role],false, Usr_BuildParamName (&ParamName,Usr_ParamUsrCod[Role],SelectedUsrs);
HTM_INPUT_CHECKBOX (ParamName,false,
"value=\"%s\"%s onclick=\"checkParent(this,'%s')\"", "value=\"%s\"%s onclick=\"checkParent(this,'%s')\"",
EncryptedUsrCod, EncryptedUsrCod,
CheckboxChecked ? " checked=\"checked\"" : "", CheckboxChecked ? " checked=\"checked\"" : "",
Usr_NameSelUnsel[Role]); Usr_NameSelUnsel[Role]);
free (ParamName);
} }
else else
Rol_WrongRoleExit (); Rol_WrongRoleExit ();
@ -6578,7 +6648,7 @@ static void Usr_ListMainDataGsts (bool PutCheckBoxToSelectUsr)
/***** Put a row to select all users *****/ /***** Put a row to select all users *****/
if (PutCheckBoxToSelectUsr) if (PutCheckBoxToSelectUsr)
Usr_PutCheckboxToSelectAllUsers (Rol_GST); Usr_PutCheckboxToSelectAllUsers (Rol_GST,&Gbl.Usrs.Selected);
/***** Heading row with column names *****/ /***** Heading row with column names *****/
Usr_WriteHeaderFieldsUsrDat (PutCheckBoxToSelectUsr); // Columns for the data Usr_WriteHeaderFieldsUsrDat (PutCheckBoxToSelectUsr); // Columns for the data
@ -6598,7 +6668,8 @@ static void Usr_ListMainDataGsts (bool PutCheckBoxToSelectUsr)
ID_GetListIDsFromUsrCod (&UsrDat); ID_GetListIDsFromUsrCod (&UsrDat);
/* Show row for this guest */ /* Show row for this guest */
Usr_WriteRowUsrMainData (NumUsr + 1,&UsrDat,true,Rol_GST); Usr_WriteRowUsrMainData (NumUsr + 1,&UsrDat,true,Rol_GST,
&Gbl.Usrs.Selected);
} }
/***** Free memory used for user's data *****/ /***** Free memory used for user's data *****/
@ -6647,7 +6718,7 @@ static void Usr_ListMainDataStds (bool PutCheckBoxToSelectUsr)
/***** Put a row to select all users *****/ /***** Put a row to select all users *****/
if (PutCheckBoxToSelectUsr) if (PutCheckBoxToSelectUsr)
Usr_PutCheckboxToSelectAllUsers (Rol_STD); Usr_PutCheckboxToSelectAllUsers (Rol_STD,&Gbl.Usrs.Selected);
/***** Heading row with column names *****/ /***** Heading row with column names *****/
Usr_WriteHeaderFieldsUsrDat (PutCheckBoxToSelectUsr); // Columns for the data Usr_WriteHeaderFieldsUsrDat (PutCheckBoxToSelectUsr); // Columns for the data
@ -6668,7 +6739,8 @@ static void Usr_ListMainDataStds (bool PutCheckBoxToSelectUsr)
/* Show row for this student */ /* Show row for this student */
Usr_WriteRowUsrMainData (NumUsr + 1,&UsrDat, Usr_WriteRowUsrMainData (NumUsr + 1,&UsrDat,
PutCheckBoxToSelectUsr,Rol_STD); PutCheckBoxToSelectUsr,Rol_STD,
&Gbl.Usrs.Selected);
} }
/***** Free memory used for user's data *****/ /***** Free memory used for user's data *****/
@ -6692,7 +6764,8 @@ static void Usr_ListMainDataStds (bool PutCheckBoxToSelectUsr)
// - Rol_NET // - Rol_NET
// - Rol_TCH // - Rol_TCH
static void Usr_ListMainDataTchs (Rol_Role_t Role,bool PutCheckBoxToSelectUsr) static void Usr_ListMainDataTchs (Rol_Role_t Role,
bool PutCheckBoxToSelectUsr)
{ {
unsigned NumCol; unsigned NumCol;
unsigned NumUsr; unsigned NumUsr;
@ -6702,7 +6775,7 @@ static void Usr_ListMainDataTchs (Rol_Role_t Role,bool PutCheckBoxToSelectUsr)
{ {
/***** Put a row to select all users *****/ /***** Put a row to select all users *****/
if (PutCheckBoxToSelectUsr) if (PutCheckBoxToSelectUsr)
Usr_PutCheckboxToSelectAllUsers (Role); Usr_PutCheckboxToSelectAllUsers (Role,&Gbl.Usrs.Selected);
/***** Heading row with column names *****/ /***** Heading row with column names *****/
/* Start row */ /* Start row */
@ -6738,7 +6811,8 @@ static void Usr_ListMainDataTchs (Rol_Role_t Role,bool PutCheckBoxToSelectUsr)
/* Show row for this teacher */ /* Show row for this teacher */
Usr_WriteRowUsrMainData (NumUsr + 1,&UsrDat, Usr_WriteRowUsrMainData (NumUsr + 1,&UsrDat,
PutCheckBoxToSelectUsr,Role); PutCheckBoxToSelectUsr,Role,
&Gbl.Usrs.Selected);
} }
/***** Free memory used for user's data *****/ /***** Free memory used for user's data *****/
@ -7071,7 +7145,8 @@ void Usr_ListAllDataStds (void)
/*************** List users (of current course) for selection ****************/ /*************** List users (of current course) for selection ****************/
/*****************************************************************************/ /*****************************************************************************/
static void Usr_ListUsrsForSelection (Rol_Role_t Role) static void Usr_ListUsrsForSelection (Rol_Role_t Role,
struct SelectedUsrs *SelectedUsrs)
{ {
unsigned NumUsr; unsigned NumUsr;
struct UsrData UsrDat; struct UsrData UsrDat;
@ -7082,7 +7157,7 @@ static void Usr_ListUsrsForSelection (Rol_Role_t Role)
Usr_SetUsrDatMainFieldNames (); Usr_SetUsrDatMainFieldNames ();
/***** Put a row to select all users *****/ /***** Put a row to select all users *****/
Usr_PutCheckboxToSelectAllUsers (Role); Usr_PutCheckboxToSelectAllUsers (Role,SelectedUsrs);
/***** Heading row with column names *****/ /***** Heading row with column names *****/
Usr_WriteHeaderFieldsUsrDat (true); // Columns for the data Usr_WriteHeaderFieldsUsrDat (true); // Columns for the data
@ -7098,7 +7173,7 @@ static void Usr_ListUsrsForSelection (Rol_Role_t Role)
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS)) // If user's data exist... if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS)) // If user's data exist...
{ {
UsrDat.Accepted = Gbl.Usrs.LstUsrs[Role].Lst[NumUsr].Accepted; UsrDat.Accepted = Gbl.Usrs.LstUsrs[Role].Lst[NumUsr].Accepted;
Usr_WriteRowUsrMainData (++NumUsr,&UsrDat,true,Role); Usr_WriteRowUsrMainData (++NumUsr,&UsrDat,true,Role,SelectedUsrs);
Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd; Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd;
} }
@ -7303,7 +7378,8 @@ unsigned Usr_ListUsrsFound (Rol_Role_t Role,
ID_GetListIDsFromUsrCod (&UsrDat); ID_GetListIDsFromUsrCod (&UsrDat);
/* Write data of this user */ /* Write data of this user */
Usr_WriteRowUsrMainData (NumUsr + 1,&UsrDat,false,Role); Usr_WriteRowUsrMainData (NumUsr + 1,&UsrDat,false,Role,
&Gbl.Usrs.Selected);
/* Write all the courses this user belongs to */ /* Write all the courses this user belongs to */
if (Role != Rol_GST && // Guests do not belong to any course if (Role != Rol_GST && // Guests do not belong to any course
@ -7940,7 +8016,7 @@ void Usr_SeeGuests (void)
{ {
case Usr_LIST_AS_CLASS_PHOTO: case Usr_LIST_AS_CLASS_PHOTO:
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_SEL_SEE, Usr_DrawClassPhoto (Usr_CLASS_PHOTO_SEL_SEE,
Rol_GST, Rol_GST,&Gbl.Usrs.Selected,
PutForm); // Put checkbox to select users? PutForm); // Put checkbox to select users?
break; break;
case Usr_LIST_AS_LISTING: case Usr_LIST_AS_LISTING:
@ -8101,7 +8177,7 @@ void Usr_SeeStudents (void)
{ {
case Usr_LIST_AS_CLASS_PHOTO: case Usr_LIST_AS_CLASS_PHOTO:
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_SEL_SEE, Usr_DrawClassPhoto (Usr_CLASS_PHOTO_SEL_SEE,
Rol_STD, Rol_STD,&Gbl.Usrs.Selected,
PutForm); // Put checkbox to select users? PutForm); // Put checkbox to select users?
break; break;
case Usr_LIST_AS_LISTING: case Usr_LIST_AS_LISTING:
@ -8271,10 +8347,10 @@ void Usr_SeeTeachers (void)
case Usr_LIST_AS_CLASS_PHOTO: case Usr_LIST_AS_CLASS_PHOTO:
/* List teachers and non-editing teachers */ /* List teachers and non-editing teachers */
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_SEL_SEE, Usr_DrawClassPhoto (Usr_CLASS_PHOTO_SEL_SEE,
Rol_TCH, Rol_TCH,&Gbl.Usrs.Selected,
PutForm); // Put checkbox to select users? PutForm); // Put checkbox to select users?
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_SEL_SEE, Usr_DrawClassPhoto (Usr_CLASS_PHOTO_SEL_SEE,
Rol_NET, Rol_NET,&Gbl.Usrs.Selected,
PutForm); // Put checkbox to select users? PutForm); // Put checkbox to select users?
break; break;
case Usr_LIST_AS_LISTING: case Usr_LIST_AS_LISTING:
@ -8470,10 +8546,10 @@ void Usr_DoActionOnSeveralUsrs1 (void)
/***** Get parameters from form *****/ /***** Get parameters from form *****/
/* Get list of selected users */ /* Get list of selected users */
Usr_GetListsSelectedUsrsCods (); Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
/* Check if there are selected users */ /* Check if there are selected users */
if (Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods ()) if (Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (&Gbl.Usrs.Selected))
{ {
/* Get the action to do */ /* Get the action to do */
Gbl.Usrs.Selected.Option = Usr_GetListUsrsOption (Usr_OPTION_UNKNOWN); Gbl.Usrs.Selected.Option = Usr_GetListUsrsOption (Usr_OPTION_UNKNOWN);
@ -8605,7 +8681,7 @@ void Usr_DoActionOnSeveralUsrs2 (void)
} }
/***** Free memory used by list of selected users' codes *****/ /***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedEncryptedUsrsCods (); Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -8793,7 +8869,7 @@ void Usr_SeeGstClassPhotoPrn (void)
-1L,-1L); -1L,-1L);
HTM_TABLE_BeginWide (); HTM_TABLE_BeginWide ();
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_PRN, Usr_DrawClassPhoto (Usr_CLASS_PHOTO_PRN,
Rol_GST,false); Rol_GST,&Gbl.Usrs.Selected,false);
HTM_TABLE_End (); HTM_TABLE_End ();
} }
else // Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs else // Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs
@ -8841,7 +8917,7 @@ void Usr_SeeStdClassPhotoPrn (void)
-1L); -1L);
HTM_TABLE_BeginWide (); HTM_TABLE_BeginWide ();
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_PRN, Usr_DrawClassPhoto (Usr_CLASS_PHOTO_PRN,
Rol_STD,false); Rol_STD,&Gbl.Usrs.Selected,false);
HTM_TABLE_End (); HTM_TABLE_End ();
} }
else // Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs == 0 else // Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs == 0
@ -8910,9 +8986,9 @@ void Usr_SeeTchClassPhotoPrn (void)
/* List teachers and non-editing teachers */ /* List teachers and non-editing teachers */
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_PRN, Usr_DrawClassPhoto (Usr_CLASS_PHOTO_PRN,
Rol_TCH,false); Rol_TCH,&Gbl.Usrs.Selected,false);
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_PRN, Usr_DrawClassPhoto (Usr_CLASS_PHOTO_PRN,
Rol_NET,false); Rol_NET,&Gbl.Usrs.Selected,false);
HTM_TABLE_End (); HTM_TABLE_End ();
} }
@ -8933,7 +9009,9 @@ void Usr_SeeTchClassPhotoPrn (void)
/*****************************************************************************/ /*****************************************************************************/
static void Usr_DrawClassPhoto (Usr_ClassPhotoType_t ClassPhotoType, static void Usr_DrawClassPhoto (Usr_ClassPhotoType_t ClassPhotoType,
Rol_Role_t Role,bool PutCheckBoxToSelectUsr) Rol_Role_t Role,
struct SelectedUsrs *SelectedUsrs,
bool PutCheckBoxToSelectUsr)
{ {
unsigned NumUsr; unsigned NumUsr;
bool TRIsOpen = false; bool TRIsOpen = false;
@ -8961,7 +9039,7 @@ static void Usr_DrawClassPhoto (Usr_ClassPhotoType_t ClassPhotoType,
/***** Put a row to select all users *****/ /***** Put a row to select all users *****/
if (PutCheckBoxToSelectUsr) if (PutCheckBoxToSelectUsr)
Usr_PutCheckboxToSelectAllUsers (Role); Usr_PutCheckboxToSelectAllUsers (Role,SelectedUsrs);
/***** Initialize structure with user's data *****/ /***** Initialize structure with user's data *****/
Usr_UsrDataConstructor (&UsrDat); Usr_UsrDataConstructor (&UsrDat);
@ -8997,7 +9075,8 @@ static void Usr_DrawClassPhoto (Usr_ClassPhotoType_t ClassPhotoType,
/***** Checkbox to select this user *****/ /***** Checkbox to select this user *****/
if (PutCheckBoxToSelectUsr) if (PutCheckBoxToSelectUsr)
Usr_PutCheckboxToSelectUser (Role,UsrDat.EncryptedUsrCod,UsrIsTheMsgSender); Usr_PutCheckboxToSelectUser (Role,UsrDat.EncryptedUsrCod,UsrIsTheMsgSender,
SelectedUsrs);
/***** Show photo *****/ /***** Show photo *****/
ShowPhoto = Pho_ShowingUsrPhotoIsAllowed (&UsrDat,PhotoURL); ShowPhoto = Pho_ShowingUsrPhotoIsAllowed (&UsrDat,PhotoURL);

View File

@ -264,6 +264,14 @@ struct ListUsrs
unsigned NumUsrs; // Number of users in the list unsigned NumUsrs; // Number of users in the list
}; };
struct SelectedUsrs
{
char *List[Rol_NUM_ROLES]; // Lists of encrypted codes of users selected from a form
bool Filled; // If lists are already filled/readed
char *ParamSuffix;
Usr_ListUsrsOption_t Option; // What option I have selected to do with these selected users
};
struct ListUsrCods struct ListUsrCods
{ {
long *Lst; // List of users' codes long *Lst; // List of users' codes
@ -396,7 +404,8 @@ void Usr_UpdateMyLastData (void);
void Usr_InsertMyLastCrsTabAndTime (void); void Usr_InsertMyLastCrsTabAndTime (void);
void Usr_WriteRowUsrMainData (unsigned NumUsr,struct UsrData *UsrDat, void Usr_WriteRowUsrMainData (unsigned NumUsr,struct UsrData *UsrDat,
bool PutCheckBoxToSelectUsr,Rol_Role_t Role); bool PutCheckBoxToSelectUsr,Rol_Role_t Role,
struct SelectedUsrs *SelectedUsrs);
unsigned Usr_GetNumUsrsInCrs (Rol_Role_t Role,long CrsCod); unsigned Usr_GetNumUsrsInCrs (Rol_Role_t Role,long CrsCod);
unsigned Usr_GetNumUsrsInCrssOfDeg (Rol_Role_t Role,long DegCod); unsigned Usr_GetNumUsrsInCrssOfDeg (Rol_Role_t Role,long DegCod);
@ -428,17 +437,20 @@ bool Usr_GetIfShowBigList (unsigned NumUsrs,
void (*FuncParams) (void), void (*FuncParams) (void),
const char *OnSubmit); const char *OnSubmit);
void Usr_PutHiddenParSelectedUsrsCods (void); void Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr (struct SelectedUsrs *SelectedUsrs);
void Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr (void); void Usr_PutHiddenParSelectedUsrsCods (struct SelectedUsrs *SelectedUsrs);
void Usr_GetListsSelectedUsrsCods (void); void Usr_GetListsSelectedEncryptedUsrsCods (struct SelectedUsrs *SelectedUsrs);
bool Usr_GetListMsgRecipientsWrittenExplicitelyBySender (bool WriteErrorMsgs); bool Usr_GetListMsgRecipientsWrittenExplicitelyBySender (bool WriteErrorMsgs);
bool Usr_FindEncryptedUsrCodsInListOfSelectedEncryptedUsrCods (const char *EncryptedUsrCodToFind); bool Usr_FindEncryptedUsrCodsInListOfSelectedEncryptedUsrCods (const char *EncryptedUsrCodToFind);
bool Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (void); bool Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (struct SelectedUsrs *SelectedUsrs);
unsigned Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (void); unsigned Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (struct SelectedUsrs *SelectedUsrs);
void Usr_FreeListsSelectedEncryptedUsrsCods (void); void Usr_FreeListsSelectedEncryptedUsrsCods (struct SelectedUsrs *SelectedUsrs);
void Usr_GetListSelectedUsrCods (unsigned NumUsrsInList,long **LstSelectedUsrCods); void Usr_GetListSelectedUsrCods (struct SelectedUsrs *SelectedUsrs,
unsigned NumUsrsInList,
long **LstSelectedUsrCods);
void Usr_FreeListSelectedUsrCods (long *LstSelectedUsrCods); void Usr_FreeListSelectedUsrCods (long *LstSelectedUsrCods);
void Usr_CreateSubqueryUsrCods (long LstSelectedUsrCods[], void Usr_CreateSubqueryUsrCods (long LstSelectedUsrCods[],
@ -449,18 +461,19 @@ void Usr_FreeSubqueryUsrCods (char *SubQueryUsrs);
void Usr_FreeListOtherRecipients (void); void Usr_FreeListOtherRecipients (void);
void Usr_ShowFormsToSelectUsrListType (void (*FuncParams) (void)); void Usr_ShowFormsToSelectUsrListType (void (*FuncParams) (void));
void Usr_PutCheckboxToSelectAllUsers (Rol_Role_t Role);
unsigned Usr_GetColumnsForSelectUsrs (void); unsigned Usr_GetColumnsForSelectUsrs (void);
void Usr_SetUsrDatMainFieldNames (void); void Usr_SetUsrDatMainFieldNames (void);
void Usr_WriteHeaderFieldsUsrDat (bool PutCheckBoxToSelectUsr); void Usr_WriteHeaderFieldsUsrDat (bool PutCheckBoxToSelectUsr);
void Usr_PutFormToSelectUsrsToGoToAct (Act_Action_t NextAction,void (*FuncParams) (), void Usr_PutFormToSelectUsrsToGoToAct (struct SelectedUsrs *SelectedUsrs,
Act_Action_t NextAction,void (*FuncParams) (),
const char *Title, const char *Title,
const char *HelpLink, const char *HelpLink,
const char *TxtButton); const char *TxtButton);
void Usr_GetSelectedUsrsAndGoToAct (void (*FuncWhenUsrsSelected) (), void Usr_GetSelectedUsrsAndGoToAct (struct SelectedUsrs *SelectedUsrs,
void (*FuncWhenUsrsSelected) (),
void (*FuncWhenNoUsrsSelected) ()); void (*FuncWhenNoUsrsSelected) ());
void Usr_ListUsersToSelect (Rol_Role_t Role); void Usr_ListUsersToSelect (Rol_Role_t Role,struct SelectedUsrs *SelectedUsrs);
void Usr_ListAllDataGsts (void); void Usr_ListAllDataGsts (void);
void Usr_ListAllDataStds (void); void Usr_ListAllDataStds (void);

View File

@ -100,7 +100,7 @@ void ZIP_PutLinkToCreateZIPAsgWrk (void)
static void ZIP_PutLinkToCreateZIPAsgWrkParams (void) static void ZIP_PutLinkToCreateZIPAsgWrkParams (void)
{ {
Usr_PutHiddenParSelectedUsrsCods (); Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
Brw_PutHiddenParamFullTreeIfSelected (); Brw_PutHiddenParamFullTreeIfSelected ();
Par_PutHiddenParamChar ("CreateZIP",'Y'); Par_PutHiddenParamChar ("CreateZIP",'Y');
} }