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 ActSeeRecSevStd:
case ActSeeRecSevTch:
Usr_PutHiddenParSelectedUsrsCods ();
Usr_PutHiddenParSelectedUsrsCods (&Gbl.Usrs.Selected);
break;
default:
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},
/* 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},

View File

@ -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;

View File

@ -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 *****/

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: 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)

View File

@ -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);

View File

@ -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);
}
/*****************************************************************************/

View File

@ -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)

View File

@ -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 ();

View File

@ -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
{

View File

@ -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
}

View File

@ -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);
}

View File

@ -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)

View File

@ -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 ();
}
/*****************************************************************************/

View File

@ -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);

View File

@ -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:

View File

@ -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;
}

View File

@ -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

View File

@ -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);

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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');
}