mirror of https://github.com/acanas/swad-core.git
Version19.69
This commit is contained in:
parent
e91801139f
commit
15a58fd5c6
|
@ -483,7 +483,7 @@ static void ID_PutLinkToConfirmID (struct UsrData *UsrDat,unsigned NumID,
|
|||
case ActSeeRecSevGst:
|
||||
case ActSeeRecSevStd:
|
||||
case ActSeeRecSevTch:
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -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},
|
||||
/* 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},
|
||||
/* 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},
|
||||
/* 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},
|
||||
|
|
|
@ -503,7 +503,8 @@ static void Asg_WriteAssignmentFolder (struct Assignment *Asg,bool PrintView)
|
|||
Gbl.FileBrowser.Type = Brw_ADMI_ASG_CRS; // Course assignments
|
||||
Str_Copy (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod,Gbl.Usrs.Me.UsrDat.EncryptedUsrCod,
|
||||
Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64);
|
||||
Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr ();
|
||||
Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr (&Gbl.Usrs.Selected)
|
||||
;
|
||||
Frm_StartForm (ActFrmCreAsgCrs);
|
||||
break;
|
||||
default:
|
||||
|
@ -525,7 +526,7 @@ static void Asg_WriteAssignmentFolder (struct Assignment *Asg,bool PrintView)
|
|||
break;
|
||||
case Rol_NET:
|
||||
case Rol_TCH:
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -2335,7 +2335,7 @@ void Att_RegisterStudentsInAttEvent (void)
|
|||
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] *****/
|
||||
Usr_GetListsSelectedUsrsCods ();
|
||||
Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Initialize structure with user's data *****/
|
||||
Usr_UsrDataConstructor (&UsrData);
|
||||
|
@ -2366,7 +2366,7 @@ void Att_RegisterStudentsInAttEvent (void)
|
|||
|
||||
/***** Free memory *****/
|
||||
/* 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
|
||||
// 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);
|
||||
|
||||
/***** List users to select some of them *****/
|
||||
Usr_PutFormToSelectUsrsToGoToAct (ActSeeLstUsrAtt,NULL,
|
||||
Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected,
|
||||
ActSeeLstUsrAtt,NULL,
|
||||
Txt_Attendance_list,
|
||||
Hlp_USERS_Attendance_attendance_list,
|
||||
Txt_View_attendance);
|
||||
|
@ -2761,7 +2762,8 @@ void Att_PrintUsrsAttendanceCrs (void)
|
|||
|
||||
static void Att_GetUsrsAndListOrPrintAttendanceCrs (void)
|
||||
{
|
||||
Usr_GetSelectedUsrsAndGoToAct (Att_ListOrPrintUsrsAttendanceCrs,
|
||||
Usr_GetSelectedUsrsAndGoToAct (&Gbl.Usrs.Selected,
|
||||
Att_ListOrPrintUsrsAttendanceCrs,
|
||||
Att_ReqListUsrsAttendanceCrs);
|
||||
}
|
||||
|
||||
|
@ -2781,12 +2783,12 @@ static void Att_ListOrPrintUsrsAttendanceCrs (void)
|
|||
Grp_GetParCodsSeveralGrpsToShowUsrs ();
|
||||
|
||||
/***** Count number of valid users in list of encrypted user codes *****/
|
||||
NumUsrsInList = Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods ();
|
||||
NumUsrsInList = Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (&Gbl.Usrs.Selected);
|
||||
|
||||
if (NumUsrsInList)
|
||||
{
|
||||
/***** 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 *****/
|
||||
Att_GetListAttEvents (Att_OLDEST_FIRST);
|
||||
|
@ -2990,7 +2992,7 @@ static void Att_PutParamsToPrintStdsList (void)
|
|||
if (Gbl.AttEvents.ShowDetails)
|
||||
Par_PutHiddenParamChar ("ShowDetails",'Y');
|
||||
Grp_PutParamsCodGrps ();
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
if (Gbl.AttEvents.StrAttCodsSelected)
|
||||
if (Gbl.AttEvents.StrAttCodsSelected[0])
|
||||
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);
|
||||
Par_PutHiddenParamChar ("ShowDetails",'Y');
|
||||
Grp_PutParamsCodGrps ();
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
if (Gbl.AttEvents.StrAttCodsSelected)
|
||||
if (Gbl.AttEvents.StrAttCodsSelected[0])
|
||||
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);
|
||||
Grp_PutParamsCodGrps ();
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
}
|
||||
|
||||
/***** Begin table *****/
|
||||
|
|
|
@ -468,6 +468,7 @@ contiene una de las que yo imparto. As
|
|||
// 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: 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 *****************************/
|
||||
|
@ -487,14 +488,14 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
|
|||
En OpenSWAD:
|
||||
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 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: 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.1: Nov 14, 2019 Code refactoring in match results.
|
||||
Code refactoring in test results. (246623 lines)
|
||||
|
|
|
@ -183,7 +183,8 @@ void Dup_ListDuplicateUsrs (void)
|
|||
UsrDat.Accepted = false;
|
||||
|
||||
/* 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);
|
||||
|
||||
|
@ -320,7 +321,8 @@ static void Dup_ListSimilarUsrs (void)
|
|||
UsrDat.Accepted = false;
|
||||
|
||||
/***** 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 *****/
|
||||
HTM_TR_Begin (NULL);
|
||||
|
|
|
@ -2059,7 +2059,7 @@ void Brw_GetParAndInitFileBrowser (void)
|
|||
else if (Brw_GetIfCrsAssigWorksFileBrowser ())
|
||||
{
|
||||
/* 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 */
|
||||
Usr_GetParamOtherUsrCodEncryptedAndGetListIDs ();
|
||||
/* 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 ())
|
||||
{
|
||||
/***** Users selected *****/
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
Usr_PutParamOtherUsrCodEncrypted ();
|
||||
}
|
||||
|
||||
|
@ -3075,7 +3075,8 @@ void Brw_AskEditWorksCrs (void)
|
|||
extern const char *Txt_View_homework;
|
||||
|
||||
/***** List users to select some of them *****/
|
||||
Usr_PutFormToSelectUsrsToGoToAct (ActAdmAsgWrkCrs,NULL,
|
||||
Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected,
|
||||
ActAdmAsgWrkCrs,NULL,
|
||||
Txt_Assignments_and_other_works,
|
||||
Hlp_FILES_Homework_for_teachers,
|
||||
Txt_View_homework);
|
||||
|
@ -3422,7 +3423,8 @@ static void Brw_ShowDataOwnerAsgWrk (struct UsrData *UsrDat)
|
|||
|
||||
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
|
||||
}
|
||||
|
||||
|
@ -4936,7 +4938,7 @@ static void Brw_PutParamsFullTree (void)
|
|||
else if (Brw_GetIfProjectFileBrowser ()) // This file browser needs specify a project
|
||||
Prj_PutParamPrjCod (Gbl.Prjs.PrjCod);
|
||||
else if (Brw_GetIfCrsAssigWorksFileBrowser ())
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -98,6 +98,7 @@ static void Fol_PutIconToUnfollow (struct UsrData *UsrDat);
|
|||
|
||||
static void Fol_RequestFollowUsrs (Act_Action_t NextAction);
|
||||
static void Fol_RequestUnfollowUsrs (Act_Action_t NextAction);
|
||||
static void Fol_PutHiddenParSelectedUsrsCods (void);
|
||||
static void Fol_GetFollowedFromSelectedUsrs (unsigned *NumFollowed,
|
||||
unsigned *NumNotFollowed);
|
||||
|
||||
|
@ -1091,19 +1092,19 @@ static void Fol_RequestFollowUsrs (Act_Action_t NextAction)
|
|||
{
|
||||
if (NumNotFollowed == 1)
|
||||
Ale_ShowAlertAndButton (NextAction,NULL,NULL,
|
||||
Usr_PutHiddenParSelectedUsrsCods,
|
||||
Fol_PutHiddenParSelectedUsrsCods,
|
||||
Btn_CREATE_BUTTON,Txt_Follow,
|
||||
Ale_QUESTION,Txt_Do_you_want_to_follow_the_selected_user_whom_you_do_not_follow_yet);
|
||||
else
|
||||
Ale_ShowAlertAndButton (NextAction,NULL,NULL,
|
||||
Usr_PutHiddenParSelectedUsrsCods,
|
||||
Fol_PutHiddenParSelectedUsrsCods,
|
||||
Btn_CREATE_BUTTON,Txt_Follow,
|
||||
Ale_QUESTION,Txt_Do_you_want_to_follow_the_X_selected_users_whom_you_do_not_follow_yet,
|
||||
NumNotFollowed);
|
||||
}
|
||||
|
||||
/***** Free memory used by list of selected users' codes *****/
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
}
|
||||
|
||||
void Fol_RequestUnfollowStds (void)
|
||||
|
@ -1135,19 +1136,24 @@ static void Fol_RequestUnfollowUsrs (Act_Action_t NextAction)
|
|||
{
|
||||
if (NumFollowed == 1)
|
||||
Ale_ShowAlertAndButton (NextAction,NULL,NULL,
|
||||
Usr_PutHiddenParSelectedUsrsCods,
|
||||
Fol_PutHiddenParSelectedUsrsCods,
|
||||
Btn_CREATE_BUTTON,Txt_Unfollow,
|
||||
Ale_QUESTION,Txt_Do_you_want_to_stop_following_the_selected_user_whom_you_follow);
|
||||
else
|
||||
Ale_ShowAlertAndButton (NextAction,NULL,NULL,
|
||||
Usr_PutHiddenParSelectedUsrsCods,
|
||||
Fol_PutHiddenParSelectedUsrsCods,
|
||||
Btn_CREATE_BUTTON,Txt_Unfollow,
|
||||
Ale_QUESTION,Txt_Do_you_want_to_stop_following_the_X_selected_users_whom_you_follow,
|
||||
NumFollowed);
|
||||
}
|
||||
|
||||
/***** 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;
|
||||
|
||||
/***** Get list of selected users if not already got *****/
|
||||
Usr_GetListsSelectedUsrsCods ();
|
||||
Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Initialize structure with user's data *****/
|
||||
Usr_UsrDataConstructor (&UsrDat);
|
||||
|
@ -1239,7 +1245,7 @@ void Fol_FollowUsrs ()
|
|||
Usr_UsrDataDestructor (&UsrDat);
|
||||
|
||||
/***** Free memory used by list of selected users' codes *****/
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Show alert *****/
|
||||
if (NumFollowed == 1)
|
||||
|
@ -1258,7 +1264,7 @@ void Fol_UnfollowUsrs (void)
|
|||
unsigned NumUnfollowed = 0;
|
||||
|
||||
/***** Get list of selected users if not already got *****/
|
||||
Usr_GetListsSelectedUsrsCods ();
|
||||
Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Initialize structure with user's data *****/
|
||||
Usr_UsrDataConstructor (&UsrDat);
|
||||
|
@ -1286,7 +1292,7 @@ void Fol_UnfollowUsrs (void)
|
|||
Usr_UsrDataDestructor (&UsrDat);
|
||||
|
||||
/***** Free memory used by list of selected users' codes *****/
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Show alert *****/
|
||||
if (NumUnfollowed == 1)
|
||||
|
|
|
@ -192,6 +192,7 @@ void Gbl_InitializeGlobals (void)
|
|||
Gbl.Action.Tab = TabUnk;
|
||||
|
||||
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;
|
||||
for (Role = (Rol_Role_t) 0;
|
||||
Role < Rol_NUM_ROLES;
|
||||
|
@ -466,7 +467,7 @@ void Gbl_Cleanup (void)
|
|||
Usr_FreeUsrsList (Role);
|
||||
|
||||
Usr_FreeListOtherRecipients ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
Syl_FreeListItemsSyllabus ();
|
||||
Tst_FreeTagsList ();
|
||||
Exa_FreeMemExamAnnouncement ();
|
||||
|
|
|
@ -377,12 +377,7 @@ struct Globals
|
|||
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
|
||||
struct ListUsrs LstUsrs[Rol_NUM_ROLES];
|
||||
struct
|
||||
{
|
||||
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;
|
||||
struct SelectedUsrs Selected;
|
||||
char *ListOtherRecipients; // List of ID or nicks of users written explicitely on a form
|
||||
struct
|
||||
{
|
||||
|
|
|
@ -870,7 +870,8 @@ void Mai_ReqUsrsToListEmails (void)
|
|||
extern const char *Txt_View_email_addresses;
|
||||
|
||||
/***** List users to select some of them *****/
|
||||
Usr_PutFormToSelectUsrsToGoToAct (ActMaiUsr,NULL,
|
||||
Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected,
|
||||
ActMaiUsr,NULL,
|
||||
Txt_Email,
|
||||
Hlp_MESSAGES_Email,
|
||||
Txt_View_email_addresses);
|
||||
|
@ -882,7 +883,8 @@ void Mai_ReqUsrsToListEmails (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
|
||||
}
|
||||
|
||||
|
|
|
@ -215,9 +215,9 @@ void McR_SelUsrsToViewUsrsMchResults (void)
|
|||
|
||||
HTM_TD_Begin ("colspan=\"2\" class=\"%s LT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
|
||||
HTM_TABLE_BeginPadding (2);
|
||||
Usr_ListUsersToSelect (Rol_TCH);
|
||||
Usr_ListUsersToSelect (Rol_NET);
|
||||
Usr_ListUsersToSelect (Rol_STD);
|
||||
Usr_ListUsersToSelect (Rol_TCH,&Gbl.Usrs.Selected);
|
||||
Usr_ListUsersToSelect (Rol_NET,&Gbl.Usrs.Selected);
|
||||
Usr_ListUsersToSelect (Rol_STD,&Gbl.Usrs.Selected);
|
||||
HTM_TABLE_End ();
|
||||
HTM_TD_End ();
|
||||
|
||||
|
@ -251,7 +251,7 @@ void McR_SelUsrsToViewUsrsMchResults (void)
|
|||
Usr_FreeUsrsList (Rol_STD);
|
||||
|
||||
/***** Free memory used by list of selected users' codes *****/
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Free memory for list of selected groups *****/
|
||||
Grp_FreeListCodSelectedGrps ();
|
||||
|
@ -263,7 +263,8 @@ void McR_SelUsrsToViewUsrsMchResults (void)
|
|||
|
||||
void McR_GetUsrsAndShowMchResults (void)
|
||||
{
|
||||
Usr_GetSelectedUsrsAndGoToAct (McR_ShowUsrsMchResults,
|
||||
Usr_GetSelectedUsrsAndGoToAct (&Gbl.Usrs.Selected,
|
||||
McR_ShowUsrsMchResults,
|
||||
McR_SelUsrsToViewUsrsMchResults);
|
||||
}
|
||||
|
||||
|
|
|
@ -261,7 +261,7 @@ static void Msg_PutFormMsgUsrs (char Content[Cns_MAX_BYTES_LONG_TEXT + 1])
|
|||
|
||||
if (ShowUsrsInCrs)
|
||||
/***** Get lists of selected users *****/
|
||||
Usr_GetListsSelectedUsrsCods ();
|
||||
Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
}
|
||||
|
||||
/***** End section with user list *****/
|
||||
|
@ -306,9 +306,9 @@ static void Msg_PutFormMsgUsrs (char Content[Cns_MAX_BYTES_LONG_TEXT + 1])
|
|||
HTM_TABLE_BeginWide ();
|
||||
if (ShowUsrsInCrs)
|
||||
{
|
||||
Usr_ListUsersToSelect (Rol_TCH); // All teachers in course
|
||||
Usr_ListUsersToSelect (Rol_NET); // All non-editing teachers in course
|
||||
Usr_ListUsersToSelect (Rol_STD); // All students in selected groups
|
||||
Usr_ListUsersToSelect (Rol_TCH,&Gbl.Usrs.Selected); // All teachers in course
|
||||
Usr_ListUsersToSelect (Rol_NET,&Gbl.Usrs.Selected); // All non-editing teachers in course
|
||||
Usr_ListUsersToSelect (Rol_STD,&Gbl.Usrs.Selected); // All students in selected groups
|
||||
}
|
||||
Msg_WriteFormUsrsIDsOrNicksOtherRecipients (); // Other users (nicknames)
|
||||
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 *****/
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Free memory for list of selected groups *****/
|
||||
Grp_FreeListCodSelectedGrps ();
|
||||
|
@ -398,7 +398,7 @@ static void Msg_PutParamsShowMorePotentialRecipients (void)
|
|||
|
||||
static void Msg_PutParamsWriteMsg (void)
|
||||
{
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
Msg_PutHiddenParamOtherRecipients ();
|
||||
Msg_PutHiddenParamsSubjectAndContent ();
|
||||
if (Gbl.Msg.Reply.IsReply)
|
||||
|
@ -722,13 +722,13 @@ void Msg_RecMsgFromUsr (void)
|
|||
Usr_GetParamOtherUsrCodEncryptedAndGetListIDs ();
|
||||
|
||||
/* Get lists of selected users */
|
||||
Usr_GetListsSelectedUsrsCods ();
|
||||
Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/* Get list of users' IDs or nicknames written explicitely */
|
||||
Error = Usr_GetListMsgRecipientsWrittenExplicitelyBySender (true);
|
||||
|
||||
/***** Check number of recipients *****/
|
||||
if ((NumRecipients = Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods ()))
|
||||
if ((NumRecipients = Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (&Gbl.Usrs.Selected)))
|
||||
{
|
||||
if (Gbl.Usrs.Me.Role.Logged == Rol_STD &&
|
||||
NumRecipients > Cfg_MAX_RECIPIENTS)
|
||||
|
@ -847,7 +847,7 @@ void Msg_RecMsgFromUsr (void)
|
|||
/***** Free memory *****/
|
||||
/* Free memory used for list of users */
|
||||
Usr_FreeListOtherRecipients ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Update received message setting Replied field to true *****/
|
||||
if (Replied)
|
||||
|
|
|
@ -108,6 +108,28 @@ static const Act_Action_t Prj_LockActions[Prj_NUM_LOCKED_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 *******************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -125,9 +147,9 @@ struct Prj_Faults
|
|||
/*****************************************************************************/
|
||||
|
||||
static void Prj_ReqUsrsToSelect (void);
|
||||
static void Prj_GetSelectedUsrsAndShowPrjs (void);
|
||||
|
||||
static void Prj_ShowProjectsInCurrentPage (void);
|
||||
static void Prj_GetSelectedUsrsAndShowTheirPrjs (void);
|
||||
static void Prj_ShowProjects (void);
|
||||
static void Prj_ShowPrjsInCurrentPage (void);
|
||||
|
||||
static void Prj_ShowFormToFilterByMy_All (void);
|
||||
static void Prj_ShowFormToFilterByAssign (void);
|
||||
|
@ -251,14 +273,15 @@ static void Prj_ReqUsrsToSelect (void)
|
|||
extern const char *Txt_View_projects;
|
||||
|
||||
/***** List users to select some of them *****/
|
||||
Usr_PutFormToSelectUsrsToGoToAct (ActSeePrj,Prj_PutCurrentParams,
|
||||
Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected,
|
||||
ActSeePrj,Prj_PutCurrentParams,
|
||||
Txt_Projects,
|
||||
Hlp_ASSESSMENT_Projects,
|
||||
Txt_View_projects);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************* Show projects *******************************/
|
||||
/******************* Get parameters and show projects ************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Prj_SeeProjects (void)
|
||||
|
@ -267,16 +290,25 @@ void Prj_SeeProjects (void)
|
|||
Prj_GetParams ();
|
||||
|
||||
/***** Show projects *****/
|
||||
Prj_ShowProjects ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************* Show projects *******************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Prj_ShowProjects (void)
|
||||
{
|
||||
switch (Gbl.Prjs.Filter.Who)
|
||||
{
|
||||
case Usr_WHO_ME:
|
||||
case Usr_WHO_ALL:
|
||||
/* Show my projects / all projects */
|
||||
Prj_ShowProjectsInCurrentPage ();
|
||||
Prj_ShowPrjsInCurrentPage ();
|
||||
break;
|
||||
case Usr_WHO_SELECTED:
|
||||
/* Get selected users and show their projects */
|
||||
Prj_GetSelectedUsrsAndShowPrjs ();
|
||||
Prj_GetSelectedUsrsAndShowTheirPrjs ();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -287,9 +319,10 @@ void Prj_SeeProjects (void)
|
|||
/****** 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
|
||||
}
|
||||
|
||||
|
@ -344,7 +377,7 @@ void Prj_ShowTableSelectedPrjs (void)
|
|||
/****************** 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 *Txt_Projects;
|
||||
|
@ -706,7 +739,7 @@ void Prj_PutParams (struct Prj_Filter *Filter,
|
|||
|
||||
/***** Put selected users' codes *****/
|
||||
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 *****/
|
||||
Prj_GetParamPrjOrder ();
|
||||
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),
|
||||
Txt_Add_USERS,
|
||||
Txt_PROJECT_ROLES_PLURAL_abc[RoleInProject]);
|
||||
Usr_PutFormToSelectUsrsToGoToAct (ActionAddUsr[RoleInProject],Prj_PutCurrentParams,
|
||||
Usr_PutFormToSelectUsrsToGoToAct (&Prj_MembersToAdd,
|
||||
ActionAddUsr[RoleInProject],Prj_PutCurrentParams,
|
||||
TxtButton,
|
||||
Hlp_ASSESSMENT_Projects_add_user,
|
||||
TxtButton);
|
||||
|
@ -2262,19 +2300,22 @@ static void Prj_ReqAddUsrs (Prj_RoleInProject_t RoleInProject)
|
|||
|
||||
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
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
|
@ -2775,12 +2816,12 @@ static void Prj_GetListProjects (void)
|
|||
break;
|
||||
case Usr_WHO_SELECTED:
|
||||
/* Count number of valid users in list of encrypted user codes */
|
||||
NumUsrsInList = Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods ();
|
||||
NumUsrsInList = Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (&Gbl.Usrs.Selected);
|
||||
|
||||
if (NumUsrsInList)
|
||||
{
|
||||
/* Get list of users selected to show their projects */
|
||||
Usr_GetListSelectedUsrCods (NumUsrsInList,&LstSelectedUsrCods);
|
||||
Usr_GetListSelectedUsrCods (&Gbl.Usrs.Selected,NumUsrsInList,&LstSelectedUsrCods);
|
||||
|
||||
/* Create subquery string */
|
||||
Usr_CreateSubqueryUsrCods (LstSelectedUsrCods,NumUsrsInList,
|
||||
|
@ -3162,7 +3203,7 @@ void Prj_ReqRemProject (void)
|
|||
Prj_FreeMemProject (&Prj);
|
||||
|
||||
/***** Show projects again *****/
|
||||
Prj_ShowProjectsInCurrentPage ();
|
||||
Prj_ShowProjects ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -3225,7 +3266,7 @@ void Prj_RemoveProject (void)
|
|||
Prj_FreeMemProject (&Prj);
|
||||
|
||||
/***** Show projects again *****/
|
||||
Prj_ShowProjectsInCurrentPage ();
|
||||
Prj_ShowProjects ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -3260,14 +3301,14 @@ void Prj_HideProject (void)
|
|||
Prj_FreeMemProject (&Prj);
|
||||
|
||||
/***** Show projects again *****/
|
||||
Prj_ShowProjectsInCurrentPage ();
|
||||
Prj_ShowProjects ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Show a project *******************************/
|
||||
/****************************** Unhide a project *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Prj_ShowProject (void)
|
||||
void Prj_UnhideProject (void)
|
||||
{
|
||||
struct Project Prj;
|
||||
|
||||
|
@ -3295,7 +3336,7 @@ void Prj_ShowProject (void)
|
|||
Prj_FreeMemProject (&Prj);
|
||||
|
||||
/***** Show projects again *****/
|
||||
Prj_ShowProjectsInCurrentPage ();
|
||||
Prj_ShowProjects ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -3352,7 +3393,7 @@ static void Prj_RequestCreatOrEditPrj (long PrjCod)
|
|||
Prj_FreeMemProject (&Prj);
|
||||
|
||||
/***** Show projects again *****/
|
||||
Prj_ShowProjectsInCurrentPage ();
|
||||
Prj_ShowProjects ();
|
||||
}
|
||||
|
||||
static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject)
|
||||
|
@ -4033,7 +4074,7 @@ void Prj_ReqLockSelectedPrjsEdition (void)
|
|||
Lay_NoPermissionExit ();
|
||||
|
||||
/***** Show projects again *****/
|
||||
Prj_ShowProjectsInCurrentPage ();
|
||||
Prj_ShowProjects ();
|
||||
}
|
||||
|
||||
void Prj_ReqUnloSelectedPrjsEdition (void)
|
||||
|
@ -4067,7 +4108,7 @@ void Prj_ReqUnloSelectedPrjsEdition (void)
|
|||
Lay_NoPermissionExit ();
|
||||
|
||||
/***** Show projects again *****/
|
||||
Prj_ShowProjectsInCurrentPage ();
|
||||
Prj_ShowProjects ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -4104,7 +4145,7 @@ void Prj_LockSelectedPrjsEdition (void)
|
|||
Lay_NoPermissionExit ();
|
||||
|
||||
/***** Show projects again *****/
|
||||
Prj_ShowProjectsInCurrentPage ();
|
||||
Prj_ShowProjects ();
|
||||
}
|
||||
|
||||
void Prj_UnloSelectedPrjsEdition (void)
|
||||
|
@ -4137,7 +4178,7 @@ void Prj_UnloSelectedPrjsEdition (void)
|
|||
Lay_NoPermissionExit ();
|
||||
|
||||
/***** Show projects again *****/
|
||||
Prj_ShowProjectsInCurrentPage ();
|
||||
Prj_ShowProjects ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -207,7 +207,7 @@ long Prj_GetParamPrjCod (void);
|
|||
void Prj_ReqRemProject (void);
|
||||
void Prj_RemoveProject (void);
|
||||
void Prj_HideProject (void);
|
||||
void Prj_ShowProject (void);
|
||||
void Prj_UnhideProject (void);
|
||||
|
||||
void Prj_RecFormProject (void);
|
||||
|
||||
|
|
|
@ -963,7 +963,7 @@ static void Rec_ListRecordsGsts (Rec_SharedRecordViewType_t TypeOfView)
|
|||
char RecordSectionId[32];
|
||||
|
||||
/***** Get list of selected users if not already got *****/
|
||||
Usr_GetListsSelectedUsrsCods ();
|
||||
Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Assign users listing type depending on current action *****/
|
||||
Gbl.Usrs.Listing.RecsUsrs = Rec_RECORD_USERS_GUESTS;
|
||||
|
@ -979,7 +979,7 @@ static void Rec_ListRecordsGsts (Rec_SharedRecordViewType_t TypeOfView)
|
|||
|
||||
/* Print view */
|
||||
Frm_StartForm (ActPrnRecSevGst);
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
Rec_ShowLinkToPrintPreviewOfRecords ();
|
||||
Frm_EndForm ();
|
||||
|
||||
|
@ -1035,7 +1035,7 @@ static void Rec_ListRecordsGsts (Rec_SharedRecordViewType_t TypeOfView)
|
|||
Usr_UsrDataDestructor (&UsrDat);
|
||||
|
||||
/***** 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 */
|
||||
Frm_StartForm (ActPrnRecSevStd);
|
||||
Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr ();
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods ();
|
||||
Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr (&Gbl.Usrs.Selected);
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
Rec_ShowLinkToPrintPreviewOfRecords ();
|
||||
Frm_EndForm ();
|
||||
|
||||
|
@ -1159,7 +1159,7 @@ static void Rec_ListRecordsStds (Rec_SharedRecordViewType_t ShaTypeOfView,
|
|||
char RecordSectionId[32];
|
||||
|
||||
/***** Get list of selected users if not already got *****/
|
||||
Usr_GetListsSelectedUsrsCods ();
|
||||
Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Assign users listing type depending on current action *****/
|
||||
Gbl.Usrs.Listing.RecsUsrs = Rec_RECORD_USERS_STUDENTS;
|
||||
|
@ -1182,7 +1182,7 @@ static void Rec_ListRecordsStds (Rec_SharedRecordViewType_t ShaTypeOfView,
|
|||
|
||||
/* Print view */
|
||||
Frm_StartForm (ActPrnRecSevStd);
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
Rec_ShowLinkToPrintPreviewOfRecords ();
|
||||
Frm_EndForm ();
|
||||
|
||||
|
@ -1259,7 +1259,7 @@ static void Rec_ListRecordsStds (Rec_SharedRecordViewType_t ShaTypeOfView,
|
|||
Rec_FreeListFields ();
|
||||
|
||||
/***** 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 */
|
||||
Frm_StartForm (ActPrnRecSevTch);
|
||||
Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr ();
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods ();
|
||||
Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr (&Gbl.Usrs.Selected);
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
Par_PutHiddenParamChar ("ParamOfficeHours",'Y');
|
||||
Par_PutHiddenParamChar ("ShowOfficeHours",ShowOfficeHours ? 'Y' :
|
||||
'N');
|
||||
|
@ -1373,7 +1373,7 @@ static void Rec_ListRecordsTchs (Rec_SharedRecordViewType_t TypeOfView)
|
|||
char Width[Cns_MAX_DECIMAL_DIGITS_UINT + 2 + 1];
|
||||
|
||||
/***** Get list of selected users if not already got *****/
|
||||
Usr_GetListsSelectedUsrsCods ();
|
||||
Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Width for office hours *****/
|
||||
snprintf (Width,sizeof (Width),
|
||||
|
@ -1400,7 +1400,7 @@ static void Rec_ListRecordsTchs (Rec_SharedRecordViewType_t TypeOfView)
|
|||
|
||||
/* Print view */
|
||||
Frm_StartForm (ActPrnRecSevTch);
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
Par_PutHiddenParamChar ("ParamOfficeHours",'Y');
|
||||
Par_PutHiddenParamChar ("ShowOfficeHours",
|
||||
ShowOfficeHours ? 'Y' :
|
||||
|
@ -1474,7 +1474,7 @@ static void Rec_ListRecordsTchs (Rec_SharedRecordViewType_t TypeOfView)
|
|||
Usr_UsrDataDestructor (&UsrDat);
|
||||
|
||||
/***** 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)
|
||||
{
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
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
|
||||
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
|
||||
if (TypeOfView == Rec_CRS_LIST_SEVERAL_RECORDS)
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -403,17 +403,14 @@ static bool Ses_CheckIfHiddenParIsAlreadyInDB (const char *ParamName)
|
|||
/*****************************************************************************/
|
||||
/***************** Get hidden parameter from the database ********************/
|
||||
/*****************************************************************************/
|
||||
// Return true if the parameter is too big
|
||||
|
||||
unsigned Ses_GetHiddenParFromDB (const char *ParamName,char *ParamValue,
|
||||
size_t MaxBytes)
|
||||
void Ses_GetHiddenParFromDB (const char *ParamName,char *ParamValue,
|
||||
size_t MaxBytes)
|
||||
{
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
bool ParameterIsTooBig = false;
|
||||
unsigned NumTimes = 0;
|
||||
const char *Ptr;
|
||||
char ErrorTxt[256];
|
||||
|
||||
ParamValue[0] = '\0';
|
||||
|
@ -452,12 +449,4 @@ unsigned Ses_GetHiddenParFromDB (const char *ParamName,char *ParamValue,
|
|||
ParamName,(unsigned long) MaxBytes);
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ bool Ses_GetSessionData (void);
|
|||
void Ses_InsertHiddenParInDB (const char *ParamName,const char *ParamValue);
|
||||
void Ses_RemoveHiddenParFromThisSession (void);
|
||||
void Ses_RemoveHiddenParFromExpiredSessions (void);
|
||||
unsigned Ses_GetHiddenParFromDB (const char *ParamName,char *ParamValue,
|
||||
size_t MaxBytes);
|
||||
void Ses_GetHiddenParFromDB (const char *ParamName,char *ParamValue,
|
||||
size_t MaxBytes);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -382,9 +382,9 @@ void Sta_AskShowCrsHits (void)
|
|||
|
||||
HTM_TD_Begin ("colspan=\"2\" class=\"%s LT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
|
||||
HTM_TABLE_Begin (NULL);
|
||||
Usr_ListUsersToSelect (Rol_TCH);
|
||||
Usr_ListUsersToSelect (Rol_NET);
|
||||
Usr_ListUsersToSelect (Rol_STD);
|
||||
Usr_ListUsersToSelect (Rol_TCH,&Gbl.Usrs.Selected);
|
||||
Usr_ListUsersToSelect (Rol_NET,&Gbl.Usrs.Selected);
|
||||
Usr_ListUsersToSelect (Rol_STD,&Gbl.Usrs.Selected);
|
||||
HTM_TABLE_End ();
|
||||
HTM_TD_End ();
|
||||
|
||||
|
@ -907,7 +907,7 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
|
|||
}
|
||||
|
||||
/****** Get lists of selected users ******/
|
||||
Usr_GetListsSelectedUsrsCods ();
|
||||
Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Show the form again *****/
|
||||
Sta_AskShowCrsHits ();
|
||||
|
@ -916,11 +916,11 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
|
|||
HTM_SECTION_Begin (Sta_STAT_RESULTS_SECTION_ID);
|
||||
|
||||
/***** 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 */
|
||||
Ale_ShowAlert (Ale_WARNING,Txt_You_must_select_one_ore_more_users);
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
@ -1495,7 +1495,7 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
|
|||
|
||||
/***** Free memory used by list of selected users' codes *****/
|
||||
if (Gbl.Action.Act == ActSeeAccCrs)
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Write time zone used in the calculation of these statistics *****/
|
||||
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,"LastRow" ,FirstRow - 1);
|
||||
Par_PutHiddenParamUnsigned (NULL,"RowsPage",Gbl.Stat.RowsPerPage);
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
}
|
||||
HTM_TD_Begin ("class=\"LM\"");
|
||||
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,"LastRow" ,(unsigned) (LastRow + Gbl.Stat.RowsPerPage));
|
||||
Par_PutHiddenParamUnsigned (NULL,"RowsPage" ,(unsigned) Gbl.Stat.RowsPerPage);
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
}
|
||||
HTM_TD_Begin ("class=\"RM\"");
|
||||
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,"StatAct" ,(unsigned) Gbl.Stat.NumAction);
|
||||
if (Gbl.Action.Act == ActSeeAccCrs)
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
else // Gbl.Action.Act == ActSeeAccGbl
|
||||
{
|
||||
Par_PutHiddenParamUnsigned (NULL,"Role",(unsigned) Gbl.Stat.Role);
|
||||
|
|
11
swad_test.c
11
swad_test.c
|
@ -7497,9 +7497,9 @@ void Tst_SelUsrsToViewUsrsTstResults (void)
|
|||
|
||||
HTM_TD_Begin ("colspan=\"2\" class=\"%s LT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
|
||||
HTM_TABLE_BeginPadding (2);
|
||||
Usr_ListUsersToSelect (Rol_TCH);
|
||||
Usr_ListUsersToSelect (Rol_NET);
|
||||
Usr_ListUsersToSelect (Rol_STD);
|
||||
Usr_ListUsersToSelect (Rol_TCH,&Gbl.Usrs.Selected);
|
||||
Usr_ListUsersToSelect (Rol_NET,&Gbl.Usrs.Selected);
|
||||
Usr_ListUsersToSelect (Rol_STD,&Gbl.Usrs.Selected);
|
||||
HTM_TABLE_End ();
|
||||
HTM_TD_End ();
|
||||
|
||||
|
@ -7533,7 +7533,7 @@ void Tst_SelUsrsToViewUsrsTstResults (void)
|
|||
Usr_FreeUsrsList (Rol_STD);
|
||||
|
||||
/***** Free memory used by list of selected users' codes *****/
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Free memory for list of selected groups *****/
|
||||
Grp_FreeListCodSelectedGrps ();
|
||||
|
@ -7635,7 +7635,8 @@ static void Tst_StoreScoreOfTestResultInDB (long TstCod,
|
|||
|
||||
void Tst_GetUsrsAndShowTstResults (void)
|
||||
{
|
||||
Usr_GetSelectedUsrsAndGoToAct (Tst_ShowUsrsTstResults,
|
||||
Usr_GetSelectedUsrsAndGoToAct (&Gbl.Usrs.Selected,
|
||||
Tst_ShowUsrsTstResults,
|
||||
Tst_SelUsrsToViewUsrsTstResults);
|
||||
}
|
||||
|
||||
|
|
291
swad_user.c
291
swad_user.c
|
@ -25,10 +25,12 @@
|
|||
/*********************************** Headers *********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define _GNU_SOURCE // For asprintf
|
||||
#include <ctype.h> // For isalnum, isdigit, etc.
|
||||
#include <limits.h> // For maximum values
|
||||
#include <linux/limits.h> // For PATH_MAX
|
||||
#include <linux/stddef.h> // For NULL
|
||||
#include <stdio.h> // For asprintf
|
||||
#include <stdlib.h> // For exit, system, malloc, free, rand, etc.
|
||||
#include <string.h> // For string functions
|
||||
#include <sys/wait.h> // For the macro WEXITSTATUS
|
||||
|
@ -205,23 +207,31 @@ static void Usr_PutButtonToConfirmIWantToSeeBigList (unsigned NumUsrs,
|
|||
const char *OnSubmit);
|
||||
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_FormToSelectUsrListType (void (*FuncParams) (void),
|
||||
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 void Usr_PutCheckboxToSelectUser (Rol_Role_t Role,
|
||||
const char *EncryptedUsrCod,
|
||||
bool UsrIsTheMsgSender);
|
||||
bool UsrIsTheMsgSender,
|
||||
struct SelectedUsrs *SelectedUsrs);
|
||||
static void Usr_PutCheckboxListWithPhotos (void);
|
||||
|
||||
static void Usr_ListMainDataGsts (bool PutCheckBoxToSelectUsr);
|
||||
static void Usr_ListMainDataStds (bool PutCheckBoxToSelectUsr);
|
||||
static void Usr_ListMainDataTchs (Rol_Role_t Role,bool PutCheckBoxToSelectUsr);
|
||||
static void Usr_ListUsrsForSelection (Rol_Role_t Role);
|
||||
static void Usr_ListMainDataTchs (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,
|
||||
const char *FieldNames[Usr_NUM_ALL_FIELDS_DATA_TCH],
|
||||
unsigned NumColumns);
|
||||
|
@ -263,7 +273,9 @@ static void Usr_ShowStdsAllDataParams (void);
|
|||
static void Usr_ShowTchsAllDataParams (void);
|
||||
|
||||
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 ****/
|
||||
|
@ -3607,7 +3619,8 @@ static void Usr_InsertMyLastData (void)
|
|||
#define Usr_MAX_BYTES_BG_COLOR (16 - 1)
|
||||
|
||||
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_not_confirmed;
|
||||
|
@ -3634,7 +3647,8 @@ void Usr_WriteRowUsrMainData (unsigned NumUsr,struct UsrData *UsrDat,
|
|||
if (PutCheckBoxToSelectUsr)
|
||||
{
|
||||
HTM_TD_Begin ("class=\"CM %s\"",BgColor);
|
||||
Usr_PutCheckboxToSelectUser (Role,UsrDat->EncryptedUsrCod,UsrIsTheMsgSender);
|
||||
Usr_PutCheckboxToSelectUser (Role,UsrDat->EncryptedUsrCod,UsrIsTheMsgSender,
|
||||
SelectedUsrs);
|
||||
HTM_TD_End ();
|
||||
}
|
||||
|
||||
|
@ -5675,63 +5689,80 @@ static void Usr_PutParamsConfirmIWantToSeeBigList (void)
|
|||
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 ***************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Usr_PutHiddenParSelectedUsrsCods (void)
|
||||
void Usr_PutHiddenParSelectedUsrsCods (struct SelectedUsrs *SelectedUsrs)
|
||||
{
|
||||
char *ParamName;
|
||||
|
||||
/***** Put a parameter indicating that a list of several users is present *****/
|
||||
Par_PutHiddenParamChar ("MultiUsrs",'Y');
|
||||
|
||||
/***** 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)
|
||||
Ses_InsertHiddenParInDB (Usr_ParamUsrCod[Rol_UNK],Gbl.Usrs.Selected.List[Rol_UNK]);
|
||||
Ses_InsertHiddenParInDB (ParamName,SelectedUsrs->List[Rol_UNK]);
|
||||
else
|
||||
Par_PutHiddenParamString (NULL,Usr_ParamUsrCod[Rol_UNK],Gbl.Usrs.Selected.List[Rol_UNK]);
|
||||
}
|
||||
Par_PutHiddenParamString (NULL,ParamName,SelectedUsrs->List[Rol_UNK]);
|
||||
|
||||
/*****************************************************************************/
|
||||
/**************** Create list of selected users with one given user ************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
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;
|
||||
}
|
||||
/***** Free allocated memory for parameter name *****/
|
||||
free (ParamName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************* Get list of selected users ************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Usr_GetListsSelectedUsrsCods (void)
|
||||
void Usr_GetListsSelectedEncryptedUsrsCods (struct SelectedUsrs *SelectedUsrs)
|
||||
{
|
||||
extern const char *Par_SEPARATOR_PARAM_MULTIPLE;
|
||||
char *ParamName;
|
||||
unsigned Length;
|
||||
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 *****/
|
||||
Usr_AllocateListSelectedEncryptedUsrCods (Rol_UNK);
|
||||
Usr_AllocateListSelectedEncryptedUsrCods (SelectedUsrs,Rol_UNK);
|
||||
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);
|
||||
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);
|
||||
}
|
||||
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);
|
||||
|
||||
/***** Get list of selected users for each possible role *****/
|
||||
|
@ -5741,28 +5772,50 @@ void Usr_GetListsSelectedUsrsCods (void)
|
|||
if (Usr_ParamUsrCod[Role])
|
||||
{
|
||||
/* Get parameter with selected users with this role */
|
||||
Usr_AllocateListSelectedEncryptedUsrCods (Role);
|
||||
Par_GetParMultiToText (Usr_ParamUsrCod[Role],Gbl.Usrs.Selected.List[Role],
|
||||
Usr_AllocateListSelectedEncryptedUsrCods (SelectedUsrs,Role);
|
||||
Par_GetParMultiToText (Usr_ParamUsrCod[Role],SelectedUsrs->List[Role],
|
||||
Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS);
|
||||
|
||||
/* Add selected users with this role
|
||||
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 ((Length = strlen (Gbl.Usrs.Selected.List[Rol_UNK])) <
|
||||
if (SelectedUsrs->List[Rol_UNK][0])
|
||||
if ((Length = strlen (SelectedUsrs->List[Rol_UNK])) <
|
||||
Usr_MAX_BYTES_LIST_ENCRYPTED_USR_CODS)
|
||||
{
|
||||
Gbl.Usrs.Selected.List[Rol_UNK][Length ] = Par_SEPARATOR_PARAM_MULTIPLE[0];
|
||||
Gbl.Usrs.Selected.List[Rol_UNK][Length + 1] = '\0';
|
||||
SelectedUsrs->List[Rol_UNK][Length ] = Par_SEPARATOR_PARAM_MULTIPLE[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);
|
||||
}
|
||||
}
|
||||
|
||||
/***** Free allocated memory for parameter name *****/
|
||||
free (ParamName);
|
||||
|
||||
/***** 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.
|
||||
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]);
|
||||
|
||||
/***** 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 ******/
|
||||
/*****************************************************************************/
|
||||
|
||||
bool Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (void)
|
||||
bool Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (struct SelectedUsrs *SelectedUsrs)
|
||||
{
|
||||
const char *Ptr;
|
||||
struct UsrData UsrDat;
|
||||
|
||||
/***** Loop over the list Gbl.Usrs.Selected.List[Rol_UNK]
|
||||
to check if there are valid users *****/
|
||||
Ptr = Gbl.Usrs.Selected.List[Rol_UNK];
|
||||
/***** Loop over the list to check if there are valid users *****/
|
||||
Ptr = SelectedUsrs->List[Rol_UNK];
|
||||
while (*Ptr)
|
||||
{
|
||||
Par_GetNextStrUntilSeparParamMult (&Ptr,UsrDat.EncryptedUsrCod,
|
||||
|
@ -5996,15 +6048,14 @@ bool Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (void)
|
|||
/******** Count number of valid users in list of encrypted user codes ********/
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (void)
|
||||
unsigned Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (struct SelectedUsrs *SelectedUsrs)
|
||||
{
|
||||
const char *Ptr;
|
||||
unsigned NumUsrs = 0;
|
||||
struct UsrData UsrDat;
|
||||
|
||||
/***** Loop over the list Gbl.Usrs.Selected.List[Rol_UNK]
|
||||
to count the number of users *****/
|
||||
Ptr = Gbl.Usrs.Selected.List[Rol_UNK];
|
||||
/***** Loop over the list to count the number of users *****/
|
||||
Ptr = SelectedUsrs->List[Rol_UNK];
|
||||
while (*Ptr)
|
||||
{
|
||||
Par_GetNextStrUntilSeparParamMult (&Ptr,UsrDat.EncryptedUsrCod,
|
||||
|
@ -6021,13 +6072,15 @@ unsigned Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (void)
|
|||
/*****************************************************************************/
|
||||
// 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 ();
|
||||
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
|
||||
|
||||
void Usr_FreeListsSelectedEncryptedUsrsCods (void)
|
||||
void Usr_FreeListsSelectedEncryptedUsrsCods (struct SelectedUsrs *SelectedUsrs)
|
||||
{
|
||||
Rol_Role_t Role;
|
||||
|
||||
if (Gbl.Usrs.Selected.Filled) // Only if lists are filled
|
||||
if (SelectedUsrs->Filled) // Only if lists are filled
|
||||
{
|
||||
/***** Free lists *****/
|
||||
for (Role = (Rol_Role_t) 0;
|
||||
Role < Rol_NUM_ROLES;
|
||||
Role++)
|
||||
if (Gbl.Usrs.Selected.List[Role])
|
||||
if (SelectedUsrs->List[Role])
|
||||
{
|
||||
free (Gbl.Usrs.Selected.List[Role]);
|
||||
Gbl.Usrs.Selected.List[Role] = NULL;
|
||||
free (SelectedUsrs->List[Role]);
|
||||
SelectedUsrs->List[Role] = NULL;
|
||||
}
|
||||
|
||||
/***** Mark lists as empty *****/
|
||||
Gbl.Usrs.Selected.Filled = false;
|
||||
SelectedUsrs->Filled = false;
|
||||
// Lists of encrypted codes of users selected from form
|
||||
// are now marked as not filled
|
||||
}
|
||||
|
@ -6063,7 +6116,9 @@ void Usr_FreeListsSelectedEncryptedUsrsCods (void)
|
|||
/************* 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;
|
||||
const char *Ptr;
|
||||
|
@ -6076,8 +6131,8 @@ void Usr_GetListSelectedUsrCods (unsigned NumUsrsInList,long **LstSelectedUsrCod
|
|||
/***** Initialize structure with user's data *****/
|
||||
Usr_UsrDataConstructor (&UsrDat);
|
||||
|
||||
/***** Loop over the list Gbl.Usrs.Selected.List[Rol_UNK] getting users' codes *****/
|
||||
for (NumUsr = 0, Ptr = Gbl.Usrs.Selected.List[Rol_UNK];
|
||||
/***** Loop over the list getting users' codes *****/
|
||||
for (NumUsr = 0, Ptr = SelectedUsrs->List[Rol_UNK];
|
||||
NumUsr < NumUsrsInList && *Ptr;
|
||||
NumUsr++)
|
||||
{
|
||||
|
@ -6250,7 +6305,8 @@ static void Usr_FormToSelectUsrListType (void (*FuncParams) (void),
|
|||
/******************** 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 *HelpLink,
|
||||
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 */
|
||||
HTM_TABLE_BeginCenter ();
|
||||
Usr_ListUsersToSelect (Rol_TCH);
|
||||
Usr_ListUsersToSelect (Rol_NET);
|
||||
Usr_ListUsersToSelect (Rol_STD);
|
||||
Usr_ListUsersToSelect (Rol_TCH,SelectedUsrs);
|
||||
Usr_ListUsersToSelect (Rol_NET,SelectedUsrs);
|
||||
Usr_ListUsersToSelect (Rol_STD,SelectedUsrs);
|
||||
HTM_TABLE_End ();
|
||||
|
||||
/* Send button */
|
||||
|
@ -6347,16 +6403,20 @@ void Usr_PutFormToSelectUsrsToGoToAct (Act_Action_t NextAction,void (*FuncParams
|
|||
Box_BoxEnd ();
|
||||
}
|
||||
|
||||
void Usr_GetSelectedUsrsAndGoToAct (void (*FuncWhenUsrsSelected) (),
|
||||
void Usr_GetSelectedUsrsAndGoToAct (struct SelectedUsrs *SelectedUsrs,
|
||||
void (*FuncWhenUsrsSelected) (),
|
||||
void (*FuncWhenNoUsrsSelected) ())
|
||||
{
|
||||
extern const char *Txt_You_must_select_one_ore_more_users;
|
||||
|
||||
/***** 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 *****/
|
||||
if (Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods ()) // If some users are selected...
|
||||
if (Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (SelectedUsrs)) // If some users are selected...
|
||||
FuncWhenUsrsSelected ();
|
||||
else // If no users are selected...
|
||||
{
|
||||
|
@ -6367,14 +6427,14 @@ void Usr_GetSelectedUsrsAndGoToAct (void (*FuncWhenUsrsSelected) (),
|
|||
}
|
||||
|
||||
/***** 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 *************/
|
||||
/*****************************************************************************/
|
||||
|
||||
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 (!Gbl.Usrs.LstUsrs[Role].NumUsrs)
|
||||
|
@ -6385,10 +6445,10 @@ void Usr_ListUsersToSelect (Rol_Role_t Role)
|
|||
{
|
||||
case Usr_LIST_AS_CLASS_PHOTO:
|
||||
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_SEL,
|
||||
Role,true);
|
||||
Role,SelectedUsrs,true);
|
||||
break;
|
||||
case Usr_LIST_AS_LISTING:
|
||||
Usr_ListUsrsForSelection (Role);
|
||||
Usr_ListUsrsForSelection (Role,SelectedUsrs);
|
||||
break;
|
||||
default:
|
||||
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 **********/
|
||||
/*****************************************************************************/
|
||||
|
||||
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_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
||||
char *ParamName;
|
||||
Usr_Sex_t Sex;
|
||||
|
||||
HTM_TR_Begin (NULL);
|
||||
|
@ -6411,9 +6473,13 @@ void Usr_PutCheckboxToSelectAllUsers (Rol_Role_t Role)
|
|||
|
||||
HTM_LABEL_Begin (NULL);
|
||||
if (Usr_NameSelUnsel[Role] && Usr_ParamUsrCod[Role])
|
||||
{
|
||||
Usr_BuildParamName (&ParamName,Usr_ParamUsrCod[Role],SelectedUsrs);
|
||||
HTM_INPUT_CHECKBOX (Usr_NameSelUnsel[Role],false,
|
||||
"value=\"\" onclick=\"togglecheckChildren(this,'%s')\"",
|
||||
Usr_ParamUsrCod[Role]);
|
||||
ParamName);
|
||||
free (ParamName);
|
||||
}
|
||||
else
|
||||
Rol_WrongRoleExit ();
|
||||
Sex = Usr_GetSexOfUsrsLst (Role);
|
||||
|
@ -6469,9 +6535,11 @@ unsigned Usr_GetColumnsForSelectUsrs (void)
|
|||
|
||||
static void Usr_PutCheckboxToSelectUser (Rol_Role_t Role,
|
||||
const char *EncryptedUsrCod,
|
||||
bool UsrIsTheMsgSender)
|
||||
bool UsrIsTheMsgSender,
|
||||
struct SelectedUsrs *SelectedUsrs)
|
||||
{
|
||||
bool CheckboxChecked;
|
||||
char *ParamName;
|
||||
|
||||
if (Usr_NameSelUnsel[Role] && Usr_ParamUsrCod[Role])
|
||||
{
|
||||
|
@ -6483,11 +6551,13 @@ static void Usr_PutCheckboxToSelectUser (Rol_Role_t Role,
|
|||
CheckboxChecked = Usr_FindEncryptedUsrCodsInListOfSelectedEncryptedUsrCods (EncryptedUsrCod);
|
||||
|
||||
/***** 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')\"",
|
||||
EncryptedUsrCod,
|
||||
CheckboxChecked ? " checked=\"checked\"" : "",
|
||||
Usr_NameSelUnsel[Role]);
|
||||
free (ParamName);
|
||||
}
|
||||
else
|
||||
Rol_WrongRoleExit ();
|
||||
|
@ -6578,7 +6648,7 @@ static void Usr_ListMainDataGsts (bool PutCheckBoxToSelectUsr)
|
|||
|
||||
/***** Put a row to select all users *****/
|
||||
if (PutCheckBoxToSelectUsr)
|
||||
Usr_PutCheckboxToSelectAllUsers (Rol_GST);
|
||||
Usr_PutCheckboxToSelectAllUsers (Rol_GST,&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Heading row with column names *****/
|
||||
Usr_WriteHeaderFieldsUsrDat (PutCheckBoxToSelectUsr); // Columns for the data
|
||||
|
@ -6598,7 +6668,8 @@ static void Usr_ListMainDataGsts (bool PutCheckBoxToSelectUsr)
|
|||
ID_GetListIDsFromUsrCod (&UsrDat);
|
||||
|
||||
/* 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 *****/
|
||||
|
@ -6647,7 +6718,7 @@ static void Usr_ListMainDataStds (bool PutCheckBoxToSelectUsr)
|
|||
|
||||
/***** Put a row to select all users *****/
|
||||
if (PutCheckBoxToSelectUsr)
|
||||
Usr_PutCheckboxToSelectAllUsers (Rol_STD);
|
||||
Usr_PutCheckboxToSelectAllUsers (Rol_STD,&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Heading row with column names *****/
|
||||
Usr_WriteHeaderFieldsUsrDat (PutCheckBoxToSelectUsr); // Columns for the data
|
||||
|
@ -6668,7 +6739,8 @@ static void Usr_ListMainDataStds (bool PutCheckBoxToSelectUsr)
|
|||
|
||||
/* Show row for this student */
|
||||
Usr_WriteRowUsrMainData (NumUsr + 1,&UsrDat,
|
||||
PutCheckBoxToSelectUsr,Rol_STD);
|
||||
PutCheckBoxToSelectUsr,Rol_STD,
|
||||
&Gbl.Usrs.Selected);
|
||||
}
|
||||
|
||||
/***** Free memory used for user's data *****/
|
||||
|
@ -6692,7 +6764,8 @@ static void Usr_ListMainDataStds (bool PutCheckBoxToSelectUsr)
|
|||
// - Rol_NET
|
||||
// - 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 NumUsr;
|
||||
|
@ -6702,7 +6775,7 @@ static void Usr_ListMainDataTchs (Rol_Role_t Role,bool PutCheckBoxToSelectUsr)
|
|||
{
|
||||
/***** Put a row to select all users *****/
|
||||
if (PutCheckBoxToSelectUsr)
|
||||
Usr_PutCheckboxToSelectAllUsers (Role);
|
||||
Usr_PutCheckboxToSelectAllUsers (Role,&Gbl.Usrs.Selected);
|
||||
|
||||
/***** Heading row with column names *****/
|
||||
/* Start row */
|
||||
|
@ -6738,7 +6811,8 @@ static void Usr_ListMainDataTchs (Rol_Role_t Role,bool PutCheckBoxToSelectUsr)
|
|||
|
||||
/* Show row for this teacher */
|
||||
Usr_WriteRowUsrMainData (NumUsr + 1,&UsrDat,
|
||||
PutCheckBoxToSelectUsr,Role);
|
||||
PutCheckBoxToSelectUsr,Role,
|
||||
&Gbl.Usrs.Selected);
|
||||
}
|
||||
|
||||
/***** Free memory used for user's data *****/
|
||||
|
@ -7071,7 +7145,8 @@ void Usr_ListAllDataStds (void)
|
|||
/*************** 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;
|
||||
struct UsrData UsrDat;
|
||||
|
@ -7082,7 +7157,7 @@ static void Usr_ListUsrsForSelection (Rol_Role_t Role)
|
|||
Usr_SetUsrDatMainFieldNames ();
|
||||
|
||||
/***** Put a row to select all users *****/
|
||||
Usr_PutCheckboxToSelectAllUsers (Role);
|
||||
Usr_PutCheckboxToSelectAllUsers (Role,SelectedUsrs);
|
||||
|
||||
/***** Heading row with column names *****/
|
||||
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...
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
@ -7303,7 +7378,8 @@ unsigned Usr_ListUsrsFound (Rol_Role_t Role,
|
|||
ID_GetListIDsFromUsrCod (&UsrDat);
|
||||
|
||||
/* 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 */
|
||||
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:
|
||||
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_SEL_SEE,
|
||||
Rol_GST,
|
||||
Rol_GST,&Gbl.Usrs.Selected,
|
||||
PutForm); // Put checkbox to select users?
|
||||
break;
|
||||
case Usr_LIST_AS_LISTING:
|
||||
|
@ -8101,7 +8177,7 @@ void Usr_SeeStudents (void)
|
|||
{
|
||||
case Usr_LIST_AS_CLASS_PHOTO:
|
||||
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_SEL_SEE,
|
||||
Rol_STD,
|
||||
Rol_STD,&Gbl.Usrs.Selected,
|
||||
PutForm); // Put checkbox to select users?
|
||||
break;
|
||||
case Usr_LIST_AS_LISTING:
|
||||
|
@ -8271,10 +8347,10 @@ void Usr_SeeTeachers (void)
|
|||
case Usr_LIST_AS_CLASS_PHOTO:
|
||||
/* List teachers and non-editing teachers */
|
||||
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_SEL_SEE,
|
||||
Rol_TCH,
|
||||
Rol_TCH,&Gbl.Usrs.Selected,
|
||||
PutForm); // Put checkbox to select users?
|
||||
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_SEL_SEE,
|
||||
Rol_NET,
|
||||
Rol_NET,&Gbl.Usrs.Selected,
|
||||
PutForm); // Put checkbox to select users?
|
||||
break;
|
||||
case Usr_LIST_AS_LISTING:
|
||||
|
@ -8470,10 +8546,10 @@ void Usr_DoActionOnSeveralUsrs1 (void)
|
|||
|
||||
/***** Get parameters from form *****/
|
||||
/* Get list of selected users */
|
||||
Usr_GetListsSelectedUsrsCods ();
|
||||
Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
|
||||
/* Check if there are selected users */
|
||||
if (Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods ())
|
||||
if (Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (&Gbl.Usrs.Selected))
|
||||
{
|
||||
/* Get the action to do */
|
||||
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 *****/
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods ();
|
||||
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -8793,7 +8869,7 @@ void Usr_SeeGstClassPhotoPrn (void)
|
|||
-1L,-1L);
|
||||
HTM_TABLE_BeginWide ();
|
||||
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_PRN,
|
||||
Rol_GST,false);
|
||||
Rol_GST,&Gbl.Usrs.Selected,false);
|
||||
HTM_TABLE_End ();
|
||||
}
|
||||
else // Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs
|
||||
|
@ -8841,7 +8917,7 @@ void Usr_SeeStdClassPhotoPrn (void)
|
|||
-1L);
|
||||
HTM_TABLE_BeginWide ();
|
||||
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_PRN,
|
||||
Rol_STD,false);
|
||||
Rol_STD,&Gbl.Usrs.Selected,false);
|
||||
HTM_TABLE_End ();
|
||||
}
|
||||
else // Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs == 0
|
||||
|
@ -8910,9 +8986,9 @@ void Usr_SeeTchClassPhotoPrn (void)
|
|||
|
||||
/* List teachers and non-editing teachers */
|
||||
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_PRN,
|
||||
Rol_TCH,false);
|
||||
Rol_TCH,&Gbl.Usrs.Selected,false);
|
||||
Usr_DrawClassPhoto (Usr_CLASS_PHOTO_PRN,
|
||||
Rol_NET,false);
|
||||
Rol_NET,&Gbl.Usrs.Selected,false);
|
||||
|
||||
HTM_TABLE_End ();
|
||||
}
|
||||
|
@ -8933,7 +9009,9 @@ void Usr_SeeTchClassPhotoPrn (void)
|
|||
/*****************************************************************************/
|
||||
|
||||
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;
|
||||
bool TRIsOpen = false;
|
||||
|
@ -8961,7 +9039,7 @@ static void Usr_DrawClassPhoto (Usr_ClassPhotoType_t ClassPhotoType,
|
|||
|
||||
/***** Put a row to select all users *****/
|
||||
if (PutCheckBoxToSelectUsr)
|
||||
Usr_PutCheckboxToSelectAllUsers (Role);
|
||||
Usr_PutCheckboxToSelectAllUsers (Role,SelectedUsrs);
|
||||
|
||||
/***** Initialize structure with user's data *****/
|
||||
Usr_UsrDataConstructor (&UsrDat);
|
||||
|
@ -8997,7 +9075,8 @@ static void Usr_DrawClassPhoto (Usr_ClassPhotoType_t ClassPhotoType,
|
|||
|
||||
/***** Checkbox to select this user *****/
|
||||
if (PutCheckBoxToSelectUsr)
|
||||
Usr_PutCheckboxToSelectUser (Role,UsrDat.EncryptedUsrCod,UsrIsTheMsgSender);
|
||||
Usr_PutCheckboxToSelectUser (Role,UsrDat.EncryptedUsrCod,UsrIsTheMsgSender,
|
||||
SelectedUsrs);
|
||||
|
||||
/***** Show photo *****/
|
||||
ShowPhoto = Pho_ShowingUsrPhotoIsAllowed (&UsrDat,PhotoURL);
|
||||
|
|
37
swad_user.h
37
swad_user.h
|
@ -264,6 +264,14 @@ struct ListUsrs
|
|||
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
|
||||
{
|
||||
long *Lst; // List of users' codes
|
||||
|
@ -396,7 +404,8 @@ void Usr_UpdateMyLastData (void);
|
|||
void Usr_InsertMyLastCrsTabAndTime (void);
|
||||
|
||||
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_GetNumUsrsInCrssOfDeg (Rol_Role_t Role,long DegCod);
|
||||
|
@ -428,17 +437,20 @@ bool Usr_GetIfShowBigList (unsigned NumUsrs,
|
|||
void (*FuncParams) (void),
|
||||
const char *OnSubmit);
|
||||
|
||||
void Usr_PutHiddenParSelectedUsrsCods (void);
|
||||
void Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr (void);
|
||||
void Usr_GetListsSelectedUsrsCods (void);
|
||||
void Usr_CreateListSelectedUsrsCodsAndFillWithOtherUsr (struct SelectedUsrs *SelectedUsrs);
|
||||
void Usr_PutHiddenParSelectedUsrsCods (struct SelectedUsrs *SelectedUsrs);
|
||||
void Usr_GetListsSelectedEncryptedUsrsCods (struct SelectedUsrs *SelectedUsrs);
|
||||
|
||||
bool Usr_GetListMsgRecipientsWrittenExplicitelyBySender (bool WriteErrorMsgs);
|
||||
|
||||
bool Usr_FindEncryptedUsrCodsInListOfSelectedEncryptedUsrCods (const char *EncryptedUsrCodToFind);
|
||||
bool Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (void);
|
||||
unsigned Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (void);
|
||||
void Usr_FreeListsSelectedEncryptedUsrsCods (void);
|
||||
bool Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (struct SelectedUsrs *SelectedUsrs);
|
||||
unsigned Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (struct SelectedUsrs *SelectedUsrs);
|
||||
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_CreateSubqueryUsrCods (long LstSelectedUsrCods[],
|
||||
|
@ -449,18 +461,19 @@ void Usr_FreeSubqueryUsrCods (char *SubQueryUsrs);
|
|||
void Usr_FreeListOtherRecipients (void);
|
||||
|
||||
void Usr_ShowFormsToSelectUsrListType (void (*FuncParams) (void));
|
||||
void Usr_PutCheckboxToSelectAllUsers (Rol_Role_t Role);
|
||||
unsigned Usr_GetColumnsForSelectUsrs (void);
|
||||
void Usr_SetUsrDatMainFieldNames (void);
|
||||
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 *HelpLink,
|
||||
const char *TxtButton);
|
||||
void Usr_GetSelectedUsrsAndGoToAct (void (*FuncWhenUsrsSelected) (),
|
||||
void Usr_GetSelectedUsrsAndGoToAct (struct SelectedUsrs *SelectedUsrs,
|
||||
void (*FuncWhenUsrsSelected) (),
|
||||
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_ListAllDataStds (void);
|
||||
|
|
|
@ -100,7 +100,7 @@ void ZIP_PutLinkToCreateZIPAsgWrk (void)
|
|||
|
||||
static void ZIP_PutLinkToCreateZIPAsgWrkParams (void)
|
||||
{
|
||||
Usr_PutHiddenParSelectedUsrsCods ();
|
||||
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
|
||||
Brw_PutHiddenParamFullTreeIfSelected ();
|
||||
Par_PutHiddenParamChar ("CreateZIP",'Y');
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue