Version18.110

This commit is contained in:
Antonio Cañas Vargas 2019-04-11 09:55:35 +02:00
parent 80639a5934
commit 57edcf317b
23 changed files with 392 additions and 238 deletions

View File

@ -508,16 +508,16 @@ Assessment:
365. ActShoPrj Show project
366. ActReqAddStdPrj Request adding a student to a project
367. ActReqAddTutPrj Request adding a tutor to a project
368. ActReqAddEvaPrj Request adding an evaluator to a project
368. ActReqAddEvlPrj Request adding an evaluator to a project
369. ActAddStdPrj Add a student to a project
370. ActAddTutPrj Add a tutor to a project
371. ActAddEvaPrj Add an evaluator to a project
371. ActAddEvlPrj Add an evaluator to a project
372. ActReqRemStdPrj Request removing a student from a project
373. ActReqRemTutPrj Request removing a tutor from a project
374. ActReqRemEvaPrj Request removing an evaluator from a project
374. ActReqRemEvlPrj Request removing an evaluator from a project
375. ActRemStdPrj Remove a student from a project
376. ActRemTutPrj Remove a tutor from a project
377. ActRemEvaPrj Remove an emulator from a project
377. ActRemEvlPrj Remove an emulator from a project
378. ActAdmDocPrj Admin. project documents
379. ActReqRemFilDocPrj Request removal of a file from project documents
@ -2042,18 +2042,18 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* 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},
/* ActReqAddStdPrj */{1684,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqAddStd ,NULL},
/* ActReqAddTutPrj */{1685,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqAddTut ,NULL},
/* ActReqAddEvaPrj */{1686,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqAddEva ,NULL},
/* ActAddStdPrj */{1687,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_AddStd ,NULL},
/* ActAddTutPrj */{1688,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_AddTut ,NULL},
/* ActAddEvaPrj */{1689,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_AddEva ,NULL},
/* ActReqAddStdPrj */{1684,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqAddStds ,NULL},
/* ActReqAddTutPrj */{1685,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqAddTuts ,NULL},
/* ActReqAddEvlPrj */{1686,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqAddEvls ,NULL},
/* ActAddStdPrj */{1687,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_GetSelectedUsrsAndAddStds ,NULL},
/* ActAddTutPrj */{1688,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_GetSelectedUsrsAndAddTuts ,NULL},
/* ActAddEvlPrj */{1689,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_GetSelectedUsrsAndAddEvls ,NULL},
/* ActReqRemStdPrj */{1690,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqRemStd ,NULL},
/* ActReqRemTutPrj */{1691,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqRemTut ,NULL},
/* ActReqRemEvaPrj */{1692,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqRemEva ,NULL},
/* ActReqRemEvlPrj */{1692,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqRemEvl ,NULL},
/* ActRemStdPrj */{1693,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RemStd ,NULL},
/* ActRemTutPrj */{1694,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RemTut ,NULL},
/* ActRemEvaPrj */{1695,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RemEva ,NULL},
/* ActRemEvlPrj */{1695,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RemEvl ,NULL},
/* ActAdmDocPrj */{1697,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ShowFileBrowserOrWorks ,NULL},
/* ActReqRemFilDocPrj*/{1698,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_AskRemFileFromTree ,NULL},
@ -4859,16 +4859,16 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActShoPrj, // #1683
ActReqAddStdPrj, // #1684
ActReqAddTutPrj, // #1685
ActReqAddEvaPrj, // #1686
ActReqAddEvlPrj, // #1686
ActAddStdPrj, // #1687
ActAddTutPrj, // #1688
ActAddEvaPrj, // #1689
ActAddEvlPrj, // #1689
ActReqRemStdPrj, // #1690
ActReqRemTutPrj, // #1691
ActReqRemEvaPrj, // #1692
ActReqRemEvlPrj, // #1692
ActRemStdPrj, // #1693
ActRemTutPrj, // #1694
ActRemEvaPrj, // #1695
ActRemEvlPrj, // #1695
ActSeeTblAllPrj, // #1696
ActAdmDocPrj, // #1697
ActReqRemFilDocPrj, // #1698

View File

@ -524,16 +524,16 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActShoPrj (ActChgCrsTT1stDay + 37)
#define ActReqAddStdPrj (ActChgCrsTT1stDay + 38)
#define ActReqAddTutPrj (ActChgCrsTT1stDay + 39)
#define ActReqAddEvaPrj (ActChgCrsTT1stDay + 40)
#define ActReqAddEvlPrj (ActChgCrsTT1stDay + 40)
#define ActAddStdPrj (ActChgCrsTT1stDay + 41)
#define ActAddTutPrj (ActChgCrsTT1stDay + 42)
#define ActAddEvaPrj (ActChgCrsTT1stDay + 43)
#define ActAddEvlPrj (ActChgCrsTT1stDay + 43)
#define ActReqRemStdPrj (ActChgCrsTT1stDay + 44)
#define ActReqRemTutPrj (ActChgCrsTT1stDay + 45)
#define ActReqRemEvaPrj (ActChgCrsTT1stDay + 46)
#define ActReqRemEvlPrj (ActChgCrsTT1stDay + 46)
#define ActRemStdPrj (ActChgCrsTT1stDay + 47)
#define ActRemTutPrj (ActChgCrsTT1stDay + 48)
#define ActRemEvaPrj (ActChgCrsTT1stDay + 49)
#define ActRemEvlPrj (ActChgCrsTT1stDay + 49)
#define ActAdmDocPrj (ActChgCrsTT1stDay + 50)
#define ActReqRemFilDocPrj (ActChgCrsTT1stDay + 51)

View File

@ -847,6 +847,11 @@ static void Att_GetAttEventDescriptionFromDB (long AttCod,char Description[Cns_M
/************** Write parameter with code of attendance event ****************/
/*****************************************************************************/
void Att_PutParamSelectedAttCod (void)
{
Att_PutParamAttCod (Gbl.AttEvents.AttCod);
}
void Att_PutParamAttCod (long AttCod)
{
Par_PutHiddenParamLong ("AttCod",AttCod);
@ -1948,7 +1953,8 @@ static void Att_ListAttStudents (struct AttendanceEvent *Att)
Hlp_USERS_Attendance,Box_NOT_CLOSABLE);
/***** Form to select groups *****/
Grp_ShowFormToSelectSeveralGroups (ActSeeOneAtt,Grp_ONLY_MY_GROUPS);
Grp_ShowFormToSelectSeveralGroups (ActSeeOneAtt,Att_PutParamSelectedAttCod,
Grp_ONLY_MY_GROUPS);
/***** Start section with user list *****/
Lay_StartSection (Usr_USER_LIST_SECTION_ID);
@ -2703,21 +2709,22 @@ void Usr_ReqListStdsAttendanceCrs (void)
NULL,Box_NOT_CLOSABLE);
/***** Form to select groups *****/
Grp_ShowFormToSelectSeveralGroups (ActReqLstStdAtt,Grp_ONLY_MY_GROUPS);
Grp_ShowFormToSelectSeveralGroups (ActReqLstStdAtt,Att_PutParamSelectedAttCod,
Grp_ONLY_MY_GROUPS);
/***** Start section with user list *****/
Lay_StartSection (Usr_USER_LIST_SECTION_ID);
if (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs)
{
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs,NULL))
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs,NULL,NULL))
{
/***** Get list of selected users *****/
Usr_GetListsSelectedUsrsCods ();
/***** Draw a class photo with students of the course *****/
/* Form to select type of list used for select several users */
Usr_ShowFormsToSelectUsrListType (ActReqLstStdAtt);
Usr_ShowFormsToSelectUsrListType (ActReqLstStdAtt,NULL);
/* Start form */
Frm_StartForm (ActSeeLstStdAtt);

View File

@ -81,6 +81,7 @@ void Att_RequestCreatOrEditAttEvent (void);
bool Att_GetDataOfAttEventByCod (struct AttendanceEvent *Att);
void Att_FreeListAttEvents (void);
void Att_PutParamSelectedAttCod (void);
void Att_PutParamAttCod (long AttCod);
long Att_GetParamAttCod (void);

View File

@ -431,9 +431,6 @@ Lo de mutear anuncios, en principio prefiero hacer una opci
// TODO: Ver cómo recibir un fichero desde el cliente (SWADroid) en gsoap
// TODO: Pedro Villar Castro:
// Al asignar un TFG a alumnos, no escribir el DNI del alumno, sino escogerlo de una lista de entre los alumnos inscritos en la asignatura.
// TODO: Pedro Villar Castro:
// Bloquear individualmente la edición con una casilla de configuración para cada TFG, sólo el profesor de la asignatura (Perico) podría bloquear/desbloquear
// Que haya una opción general que los bloquee todos y que los desbloquee todos
@ -459,10 +456,14 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 18.109.2 (2019-04-10)"
#define Log_PLATFORM_VERSION "SWAD 18.110 (2019-04-10)"
#define CSS_FILE "swad18.92.css"
#define JS_FILE "swad18.92.js"
/*
Comprobar si Gbl.AttEvents.AttCodToEdit puede ser sustituido por Gbl.AttEvents.AttCod
Version 18.110: Apr 10, 2019 Code refactoring in selection of groups and users.
Adding multiple users ad once to a project, suggested by Pedro Villar Castro. (242563 lines)
Version 18.109.2: Apr 10, 2019 Code refactoring in selection of users to view homework. (242421 lines)
Version 18.109.1: Apr 10, 2019 A non-editing teacher can choose students with no groups of a type. (242406 lines)
Version 18.109: Apr 09, 2019 Code refactoring in edition of plugins. (242421 lines)

View File

@ -1042,7 +1042,7 @@ static void Fig_GetAndShowInstitutionsStats (void)
/***** Form to select type of list used to display degree photos *****/
Usr_GetAndUpdatePrefsAboutUsrList ();
Usr_ShowFormsToSelectUsrListType (ActSeeUseGbl);
Usr_ShowFormsToSelectUsrListType (ActSeeUseGbl,Fig_PutHiddenParamFigures);
/***** Institutions ordered by number of centres *****/
Fig_GetAndShowInssOrderedByNumCtrs ();

View File

@ -1602,7 +1602,7 @@ void Brw_GetParAndInitFileBrowser (void)
case ActChgToSeeDocCrs: // Access to see a documents zone
/* Set file browser type acording to last group accessed */
Gbl.FileBrowser.Type = (Gbl.Crs.Grps.GrpCod > 0) ? Brw_SHOW_DOC_GRP :
Brw_SHOW_DOC_CRS;
Brw_SHOW_DOC_CRS;
break;
case ActSeeDocCrs:
case ActExpSeeDocCrs:
@ -1623,7 +1623,7 @@ void Brw_GetParAndInitFileBrowser (void)
case ActChgToAdmDocCrs: // Access to admin a documents zone
/* Set file browser type acording to last group accessed */
Gbl.FileBrowser.Type = (Gbl.Crs.Grps.GrpCod > 0) ? Brw_ADMI_DOC_GRP :
Brw_ADMI_DOC_CRS;
Brw_ADMI_DOC_CRS;
break;
case ActAdmDocCrs:
case ActReqRemFilDocCrs:
@ -1677,7 +1677,7 @@ void Brw_GetParAndInitFileBrowser (void)
case ActChgToAdmTch: // Access to a teachers zone from menu
/* Set file browser type acording to last group accessed */
Gbl.FileBrowser.Type = (Gbl.Crs.Grps.GrpCod > 0) ? Brw_ADMI_TCH_GRP :
Brw_ADMI_TCH_CRS;
Brw_ADMI_TCH_CRS;
break;
case ActAdmTchCrs:
case ActReqRemFilTchCrs:
@ -1727,7 +1727,7 @@ void Brw_GetParAndInitFileBrowser (void)
case ActChgToAdmSha: // Access to a shared zone from menu
/* Set file browser type acording to last group accessed */
Gbl.FileBrowser.Type = (Gbl.Crs.Grps.GrpCod > 0) ? Brw_ADMI_SHR_GRP :
Brw_ADMI_SHR_CRS;
Brw_ADMI_SHR_CRS;
break;
case ActAdmShaCrs:
case ActReqRemFilShaCrs:
@ -1917,12 +1917,12 @@ void Brw_GetParAndInitFileBrowser (void)
case Rol_STD:
case Rol_NET:
Gbl.FileBrowser.Type = (Gbl.Crs.Grps.GrpCod > 0) ? Brw_SHOW_MRK_GRP :
Brw_SHOW_MRK_CRS;
Brw_SHOW_MRK_CRS;
break;
case Rol_TCH:
case Rol_SYS_ADM:
Gbl.FileBrowser.Type = (Gbl.Crs.Grps.GrpCod > 0) ? Brw_ADMI_MRK_GRP :
Brw_ADMI_MRK_CRS;
Brw_ADMI_MRK_CRS;
break;
default:
Lay_ShowErrorAndExit ("Wrong role.");
@ -1932,7 +1932,7 @@ void Brw_GetParAndInitFileBrowser (void)
case ActChgToSeeMrk: // Access to see a marks zone
/* Set file browser type acording to last group accessed */
Gbl.FileBrowser.Type = (Gbl.Crs.Grps.GrpCod > 0) ? Brw_SHOW_MRK_GRP :
Brw_SHOW_MRK_CRS;
Brw_SHOW_MRK_CRS;
break;
case ActSeeMrkCrs:
case ActExpSeeMrkCrs:
@ -1951,7 +1951,7 @@ void Brw_GetParAndInitFileBrowser (void)
case ActChgToAdmMrk: // Access to admin a marks zone
/* Set file browser type acording to last group accessed */
Gbl.FileBrowser.Type = (Gbl.Crs.Grps.GrpCod > 0) ? Brw_ADMI_MRK_GRP :
Brw_ADMI_MRK_CRS;
Brw_ADMI_MRK_CRS;
break;
case ActAdmMrkCrs:
case ActReqRemFilMrkCrs:
@ -3057,7 +3057,8 @@ void Brw_AskEditWorksCrs (void)
Brw_GetParAndInitFileBrowser ();
/***** List users to select some of them *****/
Usr_PutFormToSelectUsrsToGoToAct (ActReqAsgWrkCrs,
Usr_PutFormToSelectUsrsToGoToAct (ActReqAsgWrkCrs,NULL, // Current action
ActAdmAsgWrkCrs,NULL, // Next action
Hlp_FILES_Homework_for_teachers,
Txt_View_homework);
}
@ -3408,24 +3409,8 @@ static void Brw_ShowDataOwnerAsgWrk (struct UsrData *UsrDat)
void Brw_GetSelectedUsrsAndShowWorks (void)
{
extern const char *Txt_You_must_select_one_ore_more_users;
/***** Get lists of the selected users if not already got *****/
Usr_GetListsSelectedUsrsCods ();
/***** Check the number of users whose works will be shown *****/
if (Usr_CountNumUsrsInListOfSelectedUsrs ()) // If some users are selected...
Brw_ShowFileBrowserOrWorks ();
else // If no users are selected...
{
// ...write warning alert
Ale_ShowAlert (Ale_WARNING,Txt_You_must_select_one_ore_more_users);
// ...and show again the form
Brw_AskEditWorksCrs ();
}
/***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedUsrsCods ();
Usr_GetSelectedUsrsAndGoToAct (Brw_ShowFileBrowserOrWorks, // when user(s) selected
Brw_AskEditWorksCrs); // when no user selected
}
/*****************************************************************************/
@ -11648,7 +11633,7 @@ static bool Brw_CheckIfICanViewProjectDocuments (Prj_RoleInProject_t MyRoleInPro
return false;
case Prj_ROLE_STD:
case Prj_ROLE_TUT:
case Prj_ROLE_EVA:
case Prj_ROLE_EVL:
return true;
}
break;
@ -11677,7 +11662,7 @@ static bool Brw_CheckIfICanViewProjectAssessment (Prj_RoleInProject_t MyRoleInPr
case Prj_ROLE_STD: // Students can not view or edit project assessment
return false;
case Prj_ROLE_TUT:
case Prj_ROLE_EVA:
case Prj_ROLE_EVL:
return true;
}
break;
@ -11710,7 +11695,7 @@ static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void)
return false;
case Prj_ROLE_STD:
case Prj_ROLE_TUT:
case Prj_ROLE_EVA:
case Prj_ROLE_EVL:
return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_GetPublisherOfSubtree ()); // Am I the publisher of subtree?
}
break;
@ -11743,7 +11728,7 @@ static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void)
case Prj_ROLE_STD: // Students can not view or edit project assessment
return false;
case Prj_ROLE_TUT:
case Prj_ROLE_EVA:
case Prj_ROLE_EVL:
return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_GetPublisherOfSubtree ()); // Am I the publisher of subtree?
}
break;

View File

@ -359,7 +359,7 @@ static void Grp_PutIconToCreateNewGroup (void)
/*************** Show form to select one or several groups *******************/
/*****************************************************************************/
void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction,
void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction,void (*FuncParams) (),
Grp_WhichGroups_t GroupsSelectableByStdsOrNETs)
{
extern const char *Hlp_USERS_Groups;
@ -385,9 +385,8 @@ void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction,
depending on the groups selected *****/
Frm_StartFormAnchor (NextAction,Usr_USER_LIST_SECTION_ID);
Usr_PutParamsPrefsAboutUsrList ();
/***** Put parameters needed depending on the action *****/
Usr_PutExtraParamsUsrList (NextAction);
if (FuncParams)
FuncParams ();
/***** Select all groups *****/
Grp_PutCheckboxAllGrps (GroupsSelectableByStdsOrNETs);

View File

@ -147,8 +147,8 @@ typedef enum
void Grp_WriteNamesOfSelectedGrps (void);
void Grp_ReqEditGroups (void);
void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction,
Grp_WhichGroups_t GroupsSelectable);
void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction,void (*FuncParams) (),
Grp_WhichGroups_t GroupsSelectableByStdsOrNETs);
void Grp_PutParamsCodGrps (void);
void Grp_GetParCodsSeveralGrpsToShowUsrs (void);
void Grp_GetParCodsSeveralGrps (void);

View File

@ -906,14 +906,15 @@ void Mai_ListEmails (void)
Hlp_MESSAGES_Email,Box_NOT_CLOSABLE);
/***** Form to select groups *****/
Grp_ShowFormToSelectSeveralGroups (ActMaiStd,Grp_ONLY_MY_GROUPS);
Grp_ShowFormToSelectSeveralGroups (ActMaiStd,NULL,
Grp_ONLY_MY_GROUPS);
/***** Start section with user list *****/
Lay_StartSection (Usr_USER_LIST_SECTION_ID);
if (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs)
{
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs,NULL))
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs,NULL,NULL))
{
/***** Initialize structure with user's data *****/
Usr_UsrDataConstructor (&UsrDat);

View File

@ -240,7 +240,7 @@ static void Msg_PutFormMsgUsrs (char Content[Cns_MAX_BYTES_LONG_TEXT + 1])
if (GetUsrsInCrs)
{
/***** Form to select groups *****/
Grp_ShowFormToSelectSeveralGroups (ActReqMsgUsr,
Grp_ShowFormToSelectSeveralGroups (ActReqMsgUsr,Msg_PutParamsWriteMsg,
Grp_ONLY_MY_GROUPS);
/***** Start section with user list *****/
@ -249,13 +249,15 @@ static void Msg_PutFormMsgUsrs (char Content[Cns_MAX_BYTES_LONG_TEXT + 1])
if (NumUsrsInCrs)
{
/***** Form to select type of list used for select several users *****/
Usr_ShowFormsToSelectUsrListType (ActReqMsgUsr);
Usr_ShowFormsToSelectUsrListType (ActReqMsgUsr,Msg_PutParamsWriteMsg);
/***** Put link to register students *****/
Enr_CheckStdsAndPutButtonToRegisterStdsInCurrentCrs ();
/***** Check if it's a big list *****/
ShowUsrsInCrs = Usr_GetIfShowBigList (NumUsrsInCrs,"CopyMessageToHiddenFields();");
ShowUsrsInCrs = Usr_GetIfShowBigList (NumUsrsInCrs,
Msg_PutParamsWriteMsg,
"CopyMessageToHiddenFields();");
if (ShowUsrsInCrs)
/***** Get lists of selected users *****/
@ -388,6 +390,28 @@ static void Msg_PutParamsShowMorePotentialRecipients (void)
Msg_PutHiddenParamsSubjectAndContent ();
}
/*****************************************************************************/
/***************** Put parameters when writing a message *********************/
/*****************************************************************************/
void Msg_PutParamsWriteMsg (void)
{
Usr_PutHiddenParUsrCodAll (ActReqMsgUsr,Gbl.Usrs.Selected.List[Rol_UNK]);
Msg_PutHiddenParamOtherRecipients ();
Msg_PutHiddenParamsSubjectAndContent ();
if (Gbl.Msg.Reply.IsReply)
{
Par_PutHiddenParamChar ("IsReply",'Y');
Msg_PutHiddenParamMsgCod (Gbl.Msg.Reply.OriginalMsgCod);
}
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
{
Usr_PutParamOtherUsrCodEncrypted ();
if (Gbl.Msg.ShowOnlyOneRecipient)
Par_PutHiddenParamChar ("ShowOnlyOneRecipient",'Y');
}
}
/*****************************************************************************/
/********** Put hidden parameters with message subject and content ***********/
/*****************************************************************************/

View File

@ -59,6 +59,7 @@ typedef enum
/*****************************************************************************/
void Msg_FormMsgUsrs (void);
void Msg_PutParamsWriteMsg (void);
void Msg_PutHiddenParamsSubjectAndContent (void);
void Msg_PutHiddenParamAnotherRecipient (const struct UsrData *UsrDat);
void Msg_PutHiddenParamOtherRecipients (void);

View File

@ -1761,6 +1761,17 @@ void Pho_ShowOrPrintPhotoDegree (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint)
Box_EndBox ();
}
/*****************************************************************************/
/**************** Put parameter for degree average photos ********************/
/*****************************************************************************/
void Pho_PutParamsDegPhoto ()
{
Pho_PutHiddenParamTypeOfAvg ();
Pho_PutHiddenParamPhotoSize ();
Pho_PutHiddenParamOrderDegrees ();
}
/*****************************************************************************/
/******************* Put a selector for the type of average ******************/
/*****************************************************************************/
@ -2106,7 +2117,7 @@ static void Pho_ShowOrPrintClassPhotoDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrin
{
/***** Form to select type of list used to display degree photos *****/
if (SeeOrPrint == Pho_DEGREES_SEE)
Usr_ShowFormsToSelectUsrListType (ActSeePhoDeg);
Usr_ShowFormsToSelectUsrListType (ActSeePhoDeg,Pho_PutParamsDegPhoto);
Tbl_StartTableCenter (0);
/***** Get and print degrees *****/
@ -2187,7 +2198,7 @@ static void Pho_ShowOrPrintListDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint)
/***** Class photo start *****/
if (SeeOrPrint == Pho_DEGREES_SEE)
/***** Form to select type of list used to display degree photos *****/
Usr_ShowFormsToSelectUsrListType (ActSeePhoDeg);
Usr_ShowFormsToSelectUsrListType (ActSeePhoDeg,Pho_PutParamsDegPhoto);
/***** Write heading *****/
Tbl_StartTableCenter (2);

View File

@ -120,6 +120,8 @@ void Pho_RemoveObsoleteStatDegrees (void);
void Pho_ShowPhotoDegree (void);
void Pho_PrintPhotoDegree (void);
void Pho_ShowOrPrintPhotoDegree (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint);
void Pho_PutParamsDegPhoto ();
void Pho_PutHiddenParamTypeOfAvg (void);
void Pho_PutHiddenParamPhotoSize (void);
void Pho_PutHiddenParamOrderDegrees (void);

View File

@ -75,7 +75,7 @@ static const Prj_RoleInProject_t Prj_RolesToShow[] =
{
Prj_ROLE_TUT, // Tutor
Prj_ROLE_STD, // Student
Prj_ROLE_EVA, // Evaluator
Prj_ROLE_EVL, // Evaluator
};
static const unsigned Brw_NUM_ROLES_TO_SHOW = sizeof (Prj_RolesToShow) /
sizeof (Prj_RolesToShow[0]);
@ -159,8 +159,11 @@ static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject,
static Prj_RoleInProject_t Prj_ConvertUnsignedStrToRoleInProject (const char *UnsignedStr);
static void Prj_ReqAnotherUsrID (Prj_RoleInProject_t RoleInProject);
static void Prj_AddUsrToProject (Prj_RoleInProject_t RoleInProject);
static void Prj_ReqAddUsrs (Prj_RoleInProject_t RoleInProject);
static void Prj_AddStds (void);
static void Prj_AddTuts (void);
static void Prj_AddEvls (void);
static void Prj_AddUsrsToProject (Prj_RoleInProject_t RoleInProject);
static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject);
static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject);
@ -1553,7 +1556,7 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj,
extern const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT];
extern const char *Txt_Remove;
extern const char *Txt_Add_USER;
extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT];
extern const char *Txt_PROJECT_ROLES_PLURAL_abc[Prj_NUM_ROLES_IN_PROJECT];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
bool WriteRow;
@ -1566,14 +1569,14 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj,
ActUnk, // Prj_ROLE_UNK, Unknown
ActReqRemStdPrj, // Prj_ROLE_STD, Student
ActReqRemTutPrj, // Prj_ROLE_TUT, Tutor
ActReqRemEvaPrj, // Prj_ROLE_EVA, Evaluator
ActReqRemEvlPrj, // Prj_ROLE_EVL, Evaluator
};
static const Act_Action_t ActionReqAddUsr[Prj_NUM_ROLES_IN_PROJECT] =
{
ActUnk, // Prj_ROLE_UNK, Unknown
ActReqAddStdPrj, // Prj_ROLE_STD, Student
ActReqAddTutPrj, // Prj_ROLE_TUT, Tutor
ActReqAddEvaPrj, // Prj_ROLE_EVA, Evaluator
ActReqAddEvlPrj, // Prj_ROLE_EVL, Evaluator
};
/***** Get users in project from database *****/
@ -1698,7 +1701,7 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj,
Gbl.Prjs.PrjCod = Prj->PrjCod; // Used to pass project code as a parameter
snprintf (Gbl.Title,sizeof (Gbl.Title),
Txt_Add_USER,
Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject]);
Txt_PROJECT_ROLES_PLURAL_abc[RoleInProject]);
Ico_PutContextualIconToAdd (ActionReqAddUsr[RoleInProject],NULL,
Prj_PutCurrentParams,
Gbl.Title);
@ -1854,129 +1857,156 @@ static Prj_RoleInProject_t Prj_ConvertUnsignedStrToRoleInProject (const char *Un
}
/*****************************************************************************/
/*** Request another user's ID, @nickname or email to add user to project ****/
/******************* Request users to be added to project ********************/
/*****************************************************************************/
void Prj_ReqAddStd (void)
void Prj_ReqAddStds (void)
{
Prj_ReqAnotherUsrID (Prj_ROLE_STD);
Prj_ReqAddUsrs (Prj_ROLE_STD);
}
void Prj_ReqAddTut (void)
void Prj_ReqAddTuts (void)
{
Prj_ReqAnotherUsrID (Prj_ROLE_TUT);
Prj_ReqAddUsrs (Prj_ROLE_TUT);
}
void Prj_ReqAddEva (void)
void Prj_ReqAddEvls (void)
{
Prj_ReqAnotherUsrID (Prj_ROLE_EVA);
Prj_ReqAddUsrs (Prj_ROLE_EVL);
}
static void Prj_ReqAnotherUsrID (Prj_RoleInProject_t RoleInProject)
static void Prj_ReqAddUsrs (Prj_RoleInProject_t RoleInProject)
{
extern const char *Hlp_ASSESSMENT_Projects_add_user;
extern const char *Txt_Add_USER;
extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT];
extern const char *Txt_PROJECT_ROLES_PLURAL_abc[Prj_NUM_ROLES_IN_PROJECT];
static Act_Action_t ActionAddUsr[Prj_NUM_ROLES_IN_PROJECT] =
{
ActUnk, // Prj_ROLE_UNK, Unknown
ActAddStdPrj, // Prj_ROLE_STD, Student
ActAddTutPrj, // Prj_ROLE_TUT, Tutor
ActAddEvaPrj, // Prj_ROLE_EVA, Evaluator
ActAddEvlPrj, // Prj_ROLE_EVL, Evaluator
};
char TxtButton[Lay_MAX_BYTES_TITLE + 1];
/***** Get project code *****/
if ((Gbl.Prjs.PrjCod = Prj_GetParamPrjCod ()) == -1L)
Lay_ShowErrorAndExit ("Code of project is missing.");
/***** Start box *****/
snprintf (Gbl.Title,sizeof (Gbl.Title),
/***** Put form to select users *****/
snprintf (TxtButton,sizeof (TxtButton),
Txt_Add_USER,
Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject]);
Box_StartBox (NULL,Gbl.Title,NULL,
Hlp_ASSESSMENT_Projects_add_user,Box_NOT_CLOSABLE);
Txt_PROJECT_ROLES_PLURAL_abc[RoleInProject]);
Usr_PutFormToSelectUsrsToGoToAct (Gbl.Action.Act,Prj_PutCurrentParams, // Current action
ActionAddUsr[RoleInProject],Prj_PutCurrentParams, // Next action
Hlp_ASSESSMENT_Projects_add_user,
TxtButton);
/***** Start box *****/
// snprintf (Gbl.Title,sizeof (Gbl.Title),
// Txt_Add_USER,
// Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject]);
// Box_StartBox (NULL,Gbl.Title,NULL,
// Hlp_ASSESSMENT_Projects_add_user,Box_NOT_CLOSABLE);
/***** Write form to request another user's ID *****/
Enr_WriteFormToReqAnotherUsrID (ActionAddUsr[RoleInProject],Prj_PutCurrentParams);
// Enr_WriteFormToReqAnotherUsrID (ActionAddUsr[RoleInProject],Prj_PutCurrentParams);
/***** End box *****/
Box_EndBox ();
// Box_EndBox ();
/***** Put a form to create/edit project *****/
Prj_RequestCreatOrEditPrj (Gbl.Prjs.PrjCod);
}
/*****************************************************************************/
/**************************** Add user to project ****************************/
/******* Get and check list of selected users, and show users' works ********/
/*****************************************************************************/
void Prj_AddStd (void)
void Prj_GetSelectedUsrsAndAddStds (void)
{
Prj_AddUsrToProject (Prj_ROLE_STD);
Usr_GetSelectedUsrsAndGoToAct (Prj_AddStds, // when user(s) selected
Prj_ReqAddStds); // when no user selected
}
void Prj_AddTut (void)
void Prj_GetSelectedUsrsAndAddTuts (void)
{
Prj_AddUsrToProject (Prj_ROLE_TUT);
Usr_GetSelectedUsrsAndGoToAct (Prj_AddTuts, // when user(s) selected
Prj_ReqAddTuts); // when no user selected
}
void Prj_AddEva (void)
void Prj_GetSelectedUsrsAndAddEvls (void)
{
Prj_AddUsrToProject (Prj_ROLE_EVA);
Usr_GetSelectedUsrsAndGoToAct (Prj_AddEvls, // when user(s) selected
Prj_ReqAddEvls); // when no user selected
}
static void Prj_AddUsrToProject (Prj_RoleInProject_t RoleInProject)
/*****************************************************************************/
/**************************** Add users to project ***************************/
/*****************************************************************************/
static void Prj_AddStds (void)
{
Prj_AddUsrsToProject (Prj_ROLE_STD);
}
static void Prj_AddTuts (void)
{
Prj_AddUsrsToProject (Prj_ROLE_TUT);
}
static void Prj_AddEvls (void)
{
Prj_AddUsrsToProject (Prj_ROLE_EVL);
}
static void Prj_AddUsrsToProject (Prj_RoleInProject_t RoleInProject)
{
extern const char *Txt_THE_USER_X_has_been_enroled_as_a_Y_in_the_project;
extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT];
long PrjCod;
struct ListUsrCods ListUsrCods;
unsigned NumUsr;
const char *Ptr;
bool ItsMe;
/***** Get project code *****/
if ((PrjCod = Prj_GetParamPrjCod ()) == -1L)
Lay_ShowErrorAndExit ("Code of project is missing.");
/***** Use user's ID to identify the user(s) to be enroled /removed *****/
Usr_GetParamOtherUsrIDNickOrEMailAndGetUsrCods (&ListUsrCods);
if (ListUsrCods.NumUsrs) // User(s) found with the ID
/***** Add the selected users to project *****/
Ptr = Gbl.Usrs.Selected.List[Rol_UNK];
while (*Ptr)
{
/***** For each user found... *****/
for (NumUsr = 0;
NumUsr < ListUsrCods.NumUsrs;
NumUsr++)
{
/* Get user's data */
Gbl.Usrs.Other.UsrDat.UsrCod = ListUsrCods.Lst[NumUsr];
Usr_GetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,Usr_DONT_GET_PREFS);
/* Get next user */
Par_GetNextStrUntilSeparParamMult (&Ptr,Gbl.Usrs.Other.UsrDat.EncryptedUsrCod,
Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64);
Usr_GetUsrCodFromEncryptedUsrCod (&Gbl.Usrs.Other.UsrDat);
/* Get user's data */
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,Usr_DONT_GET_PREFS)) // Get of the database the data of the user
{
/* Add user to project */
DB_QueryREPLACE ("can not add user to project",
"REPLACE INTO prj_usr"
" (PrjCod,RoleInProject,UsrCod)"
" VALUES"
" (%ld,%u,%ld)",
PrjCod,(unsigned) RoleInProject,
Gbl.Usrs.Other.UsrDat.UsrCod);
PrjCod,(unsigned) RoleInProject,
Gbl.Usrs.Other.UsrDat.UsrCod);
/***** Flush cache *****/
/* Flush cache */
ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
if (ItsMe)
Prj_FlushCacheMyRoleInProject ();
/* Show success alert */
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_enroled_as_a_Y_in_the_project,
Gbl.Usrs.Other.UsrDat.FullName,
Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject]);
}
/***** Free list of users' codes *****/
Usr_FreeListUsrCods (&ListUsrCods);
Gbl.Usrs.Other.UsrDat.FullName,
Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject]);
}
}
else // No users found
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
/***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedUsrsCods ();
/***** Put form to edit project again *****/
Prj_RequestCreatOrEditPrj (PrjCod);
@ -1996,9 +2026,9 @@ void Prj_ReqRemTut (void)
Prj_ReqRemUsrFromPrj (Prj_ROLE_TUT);
}
void Prj_ReqRemEva (void)
void Prj_ReqRemEvl (void)
{
Prj_ReqRemUsrFromPrj (Prj_ROLE_EVA);
Prj_ReqRemUsrFromPrj (Prj_ROLE_EVL);
}
static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
@ -2013,7 +2043,7 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
ActUnk, // Prj_ROLE_UNK, Unknown
ActRemStdPrj, // Prj_ROLE_STD, Student
ActRemTutPrj, // Prj_ROLE_TUT, Tutor
ActRemEvaPrj, // Prj_ROLE_EVA, Evaluator
ActRemEvlPrj, // Prj_ROLE_EVL, Evaluator
};
struct Project Prj;
bool ItsMe;
@ -2084,9 +2114,9 @@ void Prj_RemTut (void)
Prj_RemUsrFromPrj (Prj_ROLE_TUT);
}
void Prj_RemEva (void)
void Prj_RemEvl (void)
{
Prj_RemUsrFromPrj (Prj_ROLE_EVA);
Prj_RemUsrFromPrj (Prj_ROLE_EVL);
}
static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
@ -2221,7 +2251,7 @@ bool Prj_CheckIfICanViewProjectFiles (Prj_RoleInProject_t MyRoleInProject)
return false;
case Prj_ROLE_STD:
case Prj_ROLE_TUT:
case Prj_ROLE_EVA:
case Prj_ROLE_EVL:
return true;
}
return false;

View File

@ -113,7 +113,7 @@ typedef enum
Prj_ROLE_UNK = 0, // Unknown
Prj_ROLE_STD = 1, // Student
Prj_ROLE_TUT = 2, // Tutor
Prj_ROLE_EVA = 3, // Evaluator
Prj_ROLE_EVL = 3, // Evaluator
} Prj_RoleInProject_t;
/***** Struct to store a project *****/
@ -154,21 +154,21 @@ void Prj_PrintOneProject (void);
void Prj_FlushCacheMyRoleInProject (void);
Prj_RoleInProject_t Prj_GetMyRoleInProject (long PrjCod);
void Prj_ReqAddStd (void);
void Prj_ReqAddTut (void);
void Prj_ReqAddEva (void);
void Prj_ReqAddStds (void);
void Prj_ReqAddTuts (void);
void Prj_ReqAddEvls (void);
void Prj_AddStd (void);
void Prj_AddTut (void);
void Prj_AddEva (void);
void Prj_GetSelectedUsrsAndAddStds (void);
void Prj_GetSelectedUsrsAndAddTuts (void);
void Prj_GetSelectedUsrsAndAddEvls (void);
void Prj_ReqRemStd (void);
void Prj_ReqRemTut (void);
void Prj_ReqRemEva (void);
void Prj_ReqRemEvl (void);
void Prj_RemStd (void);
void Prj_RemTut (void);
void Prj_RemEva (void);
void Prj_RemEvl (void);
void Prj_PutHiddenParamPrjOrder (void);

View File

@ -169,6 +169,11 @@ void Sco_PutSelectorScope (const char *ParamName,bool SendOnChange)
/********************** Put hidden parameter scope ***************************/
/*****************************************************************************/
void Sco_PutParamCurrentScope (void)
{
Sco_PutParamScope ("ScopeUsr",Gbl.Scope.Current);
}
void Sco_PutParamScope (const char *ParamName,Hie_Level_t Scope)
{
Par_PutHiddenParamUnsigned (ParamName,(unsigned) Scope);

View File

@ -44,6 +44,7 @@
/*****************************************************************************/
void Sco_PutSelectorScope (const char *ParamName,bool SendOnChange);
void Sco_PutParamCurrentScope (void);
void Sco_PutParamScope (const char *ParamName,Hie_Level_t Scope);
void Sco_GetScope (const char *ParamName);
void Sco_AdjustScope (void);

View File

@ -350,17 +350,18 @@ void Sta_AskShowCrsHits (void)
Hlp_ANALYTICS_Visits_visits_to_course,Box_NOT_CLOSABLE);
/***** Show form to select the groups *****/
Grp_ShowFormToSelectSeveralGroups (ActReqAccCrs,Grp_ONLY_MY_GROUPS);
Grp_ShowFormToSelectSeveralGroups (ActReqAccCrs,NULL,
Grp_ONLY_MY_GROUPS);
/***** Start section with user list *****/
Lay_StartSection (Usr_USER_LIST_SECTION_ID);
if (NumTotalUsrs)
{
if (Usr_GetIfShowBigList (NumTotalUsrs,NULL))
if (Usr_GetIfShowBigList (NumTotalUsrs,NULL,NULL))
{
/***** Form to select type of list used for select several users *****/
Usr_ShowFormsToSelectUsrListType (ActReqAccCrs);
Usr_ShowFormsToSelectUsrListType (ActReqAccCrs,NULL);
/***** Put link to register students *****/
Enr_CheckStdsAndPutButtonToRegisterStdsInCurrentCrs ();

View File

@ -7329,17 +7329,18 @@ void Tst_SelUsrsToSeeUsrsTestResults (void)
Hlp_ASSESSMENT_Tests_test_results,Box_NOT_CLOSABLE);
/***** Show form to select the groups *****/
Grp_ShowFormToSelectSeveralGroups (ActReqSeeUsrTstRes,Grp_ONLY_MY_GROUPS);
Grp_ShowFormToSelectSeveralGroups (ActReqSeeUsrTstRes,NULL,
Grp_ONLY_MY_GROUPS);
/***** Start section with user list *****/
Lay_StartSection (Usr_USER_LIST_SECTION_ID);
if (NumTotalUsrs)
{
if (Usr_GetIfShowBigList (NumTotalUsrs,NULL))
if (Usr_GetIfShowBigList (NumTotalUsrs,NULL,NULL))
{
/***** Form to select type of list used for select several users *****/
Usr_ShowFormsToSelectUsrListType (ActReqSeeUsrTstRes);
Usr_ShowFormsToSelectUsrListType (ActReqSeeUsrTstRes,NULL);
/***** Start form *****/
Frm_StartForm (ActSeeUsrTstRes);

View File

@ -30098,7 +30098,7 @@ const char *Txt_PROJECT_ROLES_SINGUL_Abc[Prj_NUM_ROLES_IN_PROJECT] =
"Tutor/a"
#endif
,
#if L==1 // ca // Prj_ROLE_EVA
#if L==1 // ca // Prj_ROLE_EVL
"Avaluador/a"
#elif L==2 // de
"Auswerter"
@ -30181,7 +30181,7 @@ const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT] =
"tutor/a"
#endif
,
#if L==1 // ca // Prj_ROLE_EVA
#if L==1 // ca // Prj_ROLE_EVL
"avaluador/a"
#elif L==2 // de
"Auswerter"
@ -30264,7 +30264,7 @@ const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT] =
"Tutores"
#endif
,
#if L==1 // ca // Prj_ROLE_EVA
#if L==1 // ca // Prj_ROLE_EVL
"Avaluadors"
#elif L==2 // de
"Auswerter"
@ -30285,6 +30285,90 @@ const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT] =
#endif
};
const char *Txt_PROJECT_ROLES_PLURAL_abc[Prj_NUM_ROLES_IN_PROJECT] =
{
#if L==1 // ca // Prj_ROLE_UNK
"desconeguts"
#elif L==2 // de
"Unbekannte"
#elif L==3 // en
"unknown"
#elif L==4 // es
"desconocidos"
#elif L==5 // fr
"inconnus"
#elif L==6 // gn
"desconocidos" // Okoteve traducción
#elif L==7 // it
"sconosciuti"
#elif L==8 // pl
"nieznany"
#elif L==9 // pt
"desconhecidos"
#endif
,
#if L==1 // ca // Prj_ROLE_STD
"estudiants"
#elif L==2 // de
"Studenten"
#elif L==3 // en
"students"
#elif L==4 // es
"estudiantes"
#elif L==5 // fr
"&eacute;tudiants"
#elif L==6 // gn
"temimbo'e"
#elif L==7 // it
"studenti"
#elif L==8 // pl
"studenci"
#elif L==9 // pt
"estudantes"
#endif
,
#if L==1 // ca // Prj_ROLE_TUT
"tutors"
#elif L==2 // de
"Tutoren"
#elif L==3 // en
"tutors"
#elif L==4 // es
"tutores"
#elif L==5 // fr
"tuteurs"
#elif L==6 // gn
"tutores" // Okoteve traducción
#elif L==7 // it
"precettori"
#elif L==8 // pl
"nauczyciele"
#elif L==9 // pt
"tutores"
#endif
,
#if L==1 // ca // Prj_ROLE_EVL
"avaluadors"
#elif L==2 // de
"Auswerter"
#elif L==3 // en
"evaluators"
#elif L==4 // es
"evaluadores"
#elif L==5 // fr
"&eacute;valuateurs"
#elif L==6 // gn
"evaluadores" // Okoteve traducción
#elif L==7 // it
"valutatori"
#elif L==8 // pl
"ewaluator&oacute;w"
#elif L==9 // pt
"avaliadores"
#endif
};
const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES] =
{
#if L==1 // ca // Prj_PROPOSAL_NEW

View File

@ -151,9 +151,11 @@ const char *Usr_UsrDatMainFieldNames[Usr_NUM_MAIN_FIELDS_DATA_USR];
extern struct Globals Gbl;
/*****************************************************************************/
/************************* Internal global variables *************************/
/****************************** Private variables ****************************/
/*****************************************************************************/
static void (*Usr_FuncParamsBigList) (); // Used to pass pointer to function
/*****************************************************************************/
/***************************** Private prototypes ****************************/
/*****************************************************************************/
@ -198,13 +200,16 @@ static void Usr_GetGstsLst (Hie_Level_t Scope);
static void Usr_GetListUsrsFromQuery (char *Query,Rol_Role_t Role,Hie_Level_t Scope);
static void Usr_AllocateUsrsList (Rol_Role_t Role);
static void Usr_PutButtonToConfirmIWantToSeeBigList (unsigned NumUsrs,const char *OnSubmit);
static void Usr_PutButtonToConfirmIWantToSeeBigList (unsigned NumUsrs,
void (*FuncParams) (),
const char *OnSubmit);
static void Usr_PutParamsConfirmIWantToSeeBigList (void);
static void Usr_AllocateListSelectedUsrCod (Rol_Role_t Role);
static void Usr_AllocateListOtherRecipients (void);
static void Usr_FormToSelectUsrListType (Act_Action_t NextAction,Usr_ShowUsrsType_t ListType);
static void Usr_FormToSelectUsrListType (Act_Action_t NextAction,void (*FuncParams) (),
Usr_ShowUsrsType_t ListType);
static Usr_Sex_t Usr_GetSexOfUsrsLst (Rol_Role_t Role);
@ -5589,7 +5594,9 @@ void Usr_FreeUsrsList (Rol_Role_t Role)
/******** Show form to confirm that I want to see a big list of users ********/
/*****************************************************************************/
bool Usr_GetIfShowBigList (unsigned NumUsrs,const char *OnSubmit)
bool Usr_GetIfShowBigList (unsigned NumUsrs,
void (*FuncParams) (),
const char *OnSubmit)
{
bool ShowBigList;
@ -5599,7 +5606,7 @@ bool Usr_GetIfShowBigList (unsigned NumUsrs,const char *OnSubmit)
/***** Get parameter with user's confirmation
to see a big list of users *****/
if (!(ShowBigList = Par_GetParToBool ("ShowBigList")))
Usr_PutButtonToConfirmIWantToSeeBigList (NumUsrs,OnSubmit);
Usr_PutButtonToConfirmIWantToSeeBigList (NumUsrs,FuncParams,OnSubmit);
return ShowBigList;
}
@ -5611,12 +5618,15 @@ bool Usr_GetIfShowBigList (unsigned NumUsrs,const char *OnSubmit)
/******** Show form to confirm that I want to see a big list of users ********/
/*****************************************************************************/
static void Usr_PutButtonToConfirmIWantToSeeBigList (unsigned NumUsrs,const char *OnSubmit)
static void Usr_PutButtonToConfirmIWantToSeeBigList (unsigned NumUsrs,
void (*FuncParams) (),
const char *OnSubmit)
{
extern const char *Txt_The_list_of_X_users_is_too_large_to_be_displayed;
extern const char *Txt_Show_anyway;
/***** Show alert and button to confirm that I want to see the big list *****/
Usr_FuncParamsBigList = FuncParams; // Used to pass pointer to function
Ale_ShowAlertAndButton (Gbl.Action.Act,Usr_USER_LIST_SECTION_ID,OnSubmit,
Usr_PutParamsConfirmIWantToSeeBigList,
Btn_CONFIRM_BUTTON,Txt_Show_anyway,
@ -5628,7 +5638,8 @@ static void Usr_PutParamsConfirmIWantToSeeBigList (void)
{
Grp_PutParamsCodGrps ();
Usr_PutParamsPrefsAboutUsrList ();
Usr_PutExtraParamsUsrList (Gbl.Action.Act);
if (Usr_FuncParamsBigList)
Usr_FuncParamsBigList ();
Par_PutHiddenParamChar ("ShowBigList",'Y');
}
@ -6003,7 +6014,7 @@ void Usr_FreeListOtherRecipients (void)
/*************************** Selection of list type **************************/
/*****************************************************************************/
void Usr_ShowFormsToSelectUsrListType (Act_Action_t NextAction)
void Usr_ShowFormsToSelectUsrListType (Act_Action_t NextAction,void (*FuncParams) ())
{
Set_StartSettingsHead ();
Set_StartOneSettingSelector ();
@ -6012,15 +6023,16 @@ void Usr_ShowFormsToSelectUsrListType (Act_Action_t NextAction)
fprintf (Gbl.F.Out,"<div class=\"%s\">",
Gbl.Usrs.Me.ListType == Usr_LIST_AS_CLASS_PHOTO ? "PREF_ON" :
"PREF_OFF");
Usr_FormToSelectUsrListType (NextAction,Usr_LIST_AS_CLASS_PHOTO);
Usr_FormToSelectUsrListType (NextAction,FuncParams,Usr_LIST_AS_CLASS_PHOTO);
/* Number of columns in the class photo */
Frm_StartFormAnchor (NextAction,Usr_USER_LIST_SECTION_ID);
Grp_PutParamsCodGrps ();
Usr_PutParamUsrListType (Usr_LIST_AS_CLASS_PHOTO);
Usr_PutParamListWithPhotos ();
Usr_PutExtraParamsUsrList (NextAction);
Usr_PutSelectorNumColsClassPhoto ();
if (FuncParams)
FuncParams ();
Frm_EndForm ();
fprintf (Gbl.F.Out,"</div>");
@ -6028,13 +6040,14 @@ void Usr_ShowFormsToSelectUsrListType (Act_Action_t NextAction)
fprintf (Gbl.F.Out,"<div class=\"%s\">",
Gbl.Usrs.Me.ListType == Usr_LIST_AS_LISTING ? "PREF_ON" :
"PREF_OFF");
Usr_FormToSelectUsrListType (NextAction,Usr_LIST_AS_LISTING);
Usr_FormToSelectUsrListType (NextAction,FuncParams,Usr_LIST_AS_LISTING);
/* See the photos in list? */
Frm_StartFormAnchor (NextAction,Usr_USER_LIST_SECTION_ID);
Grp_PutParamsCodGrps ();
Usr_PutParamUsrListType (Usr_LIST_AS_LISTING);
Usr_PutExtraParamsUsrList (NextAction);
if (FuncParams)
FuncParams ();
Usr_PutCheckboxListWithPhotos ();
Frm_EndForm ();
fprintf (Gbl.F.Out,"</div>");
@ -6047,7 +6060,8 @@ void Usr_ShowFormsToSelectUsrListType (Act_Action_t NextAction)
/************* Put a radio element to select a users' list type **************/
/*****************************************************************************/
static void Usr_FormToSelectUsrListType (Act_Action_t NextAction,Usr_ShowUsrsType_t ListType)
static void Usr_FormToSelectUsrListType (Act_Action_t NextAction,void (*FuncParams) (),
Usr_ShowUsrsType_t ListType)
{
extern const char *The_ClassFormInBoxNoWrap[The_NUM_THEMES];
extern const char *Txt_USR_LIST_TYPES[Usr_NUM_USR_LIST_TYPES];
@ -6057,7 +6071,8 @@ static void Usr_FormToSelectUsrListType (Act_Action_t NextAction,Usr_ShowUsrsTyp
Grp_PutParamsCodGrps ();
Usr_PutParamUsrListType (ListType);
Usr_PutParamListWithPhotos ();
Usr_PutExtraParamsUsrList (NextAction);
if (FuncParams)
FuncParams ();
/***** Link and image *****/
Frm_LinkFormSubmit (Txt_USR_LIST_TYPES[ListType],
@ -6078,59 +6093,12 @@ static void Usr_FormToSelectUsrListType (Act_Action_t NextAction,Usr_ShowUsrsTyp
Frm_EndForm ();
}
/*****************************************************************************/
/***************** Put extra parameters for a list of users ******************/
/*****************************************************************************/
void Usr_PutExtraParamsUsrList (Act_Action_t NextAction)
{
switch (Gbl.Action.Act)
{
case ActLstGst:
case ActLstStd:
case ActLstTch:
Sco_PutParamScope ("ScopeUsr",Gbl.Scope.Current);
break;
case ActSeeOneAtt:
case ActRecAttStd:
Att_PutParamAttCod (Gbl.AttEvents.AttCod);
break;
case ActReqMsgUsr:
Usr_PutHiddenParUsrCodAll (NextAction,Gbl.Usrs.Selected.List[Rol_UNK]);
Msg_PutHiddenParamOtherRecipients ();
Msg_PutHiddenParamsSubjectAndContent ();
if (Gbl.Msg.Reply.IsReply)
{
Par_PutHiddenParamChar ("IsReply",'Y');
Msg_PutHiddenParamMsgCod (Gbl.Msg.Reply.OriginalMsgCod);
}
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
{
Usr_PutParamOtherUsrCodEncrypted ();
if (Gbl.Msg.ShowOnlyOneRecipient)
Par_PutHiddenParamChar ("ShowOnlyOneRecipient",'Y');
}
break;
case ActSeeUseGbl:
/* Used in selector of "Class photo"/"List"
in STATS > Figures > Institutions */
Fig_PutHiddenParamFigures ();
break;
case ActSeePhoDeg:
Pho_PutHiddenParamTypeOfAvg ();
Pho_PutHiddenParamPhotoSize ();
Pho_PutHiddenParamOrderDegrees ();
break;
default:
break;
}
}
/*****************************************************************************/
/******************** List users to select some of them **********************/
/*****************************************************************************/
void Usr_PutFormToSelectUsrsToGoToAct (Act_Action_t NextAction,
void Usr_PutFormToSelectUsrsToGoToAct (Act_Action_t CurrAction,void (*FuncParamsCurrAction) (),
Act_Action_t NextAction,void (*FuncParamsNextAction) (),
const char *HelpLink,
const char *TxtButton)
{
@ -6157,23 +6125,26 @@ void Usr_PutFormToSelectUsrsToGoToAct (Act_Action_t NextAction,
Box_StartBox (NULL,Txt_Users,NULL,HelpLink,Box_NOT_CLOSABLE);
/***** Show form to select the groups *****/
Grp_ShowFormToSelectSeveralGroups (NextAction,Grp_ONLY_MY_GROUPS);
Grp_ShowFormToSelectSeveralGroups (CurrAction,FuncParamsCurrAction,
Grp_ONLY_MY_GROUPS);
/***** Start section with user list *****/
Lay_StartSection (Usr_USER_LIST_SECTION_ID);
if (NumTotalUsrs)
{
if (Usr_GetIfShowBigList (NumTotalUsrs,NULL))
if (Usr_GetIfShowBigList (NumTotalUsrs,FuncParamsCurrAction,NULL))
{
/* Form to select type of list used for select several users */
Usr_ShowFormsToSelectUsrListType (ActReqAsgWrkCrs);
Usr_ShowFormsToSelectUsrListType (CurrAction,FuncParamsCurrAction);
/***** Put link to register students *****/
Enr_CheckStdsAndPutButtonToRegisterStdsInCurrentCrs ();
/* Start form */
Frm_StartForm (ActAdmAsgWrkCrs);
Frm_StartForm (NextAction);
if (FuncParamsNextAction)
FuncParamsNextAction ();
Grp_PutParamsCodGrps ();
Gbl.FileBrowser.FullTree = true; // By default, show all files
Brw_PutHiddenParamFullTreeIfSelected ();
@ -6214,6 +6185,29 @@ void Usr_PutFormToSelectUsrsToGoToAct (Act_Action_t NextAction,
Grp_FreeListCodSelectedGrps ();
}
void Usr_GetSelectedUsrsAndGoToAct (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 ();
/***** Check number of users *****/
if (Usr_CountNumUsrsInListOfSelectedUsrs ()) // If some users are selected...
FuncWhenUsrsSelected ();
else // If no users are selected...
{
// ...write warning alert
Ale_ShowAlert (Ale_WARNING,Txt_You_must_select_one_ore_more_users);
// ...and show again the form
FuncWhenNoUsrsSelected ();
}
/***** Free memory used by list of selected users' codes *****/
Usr_FreeListsSelectedUsrsCods ();
}
/*****************************************************************************/
/*********** List users with a given role to select some of them *************/
/*****************************************************************************/
@ -7314,7 +7308,7 @@ void Usr_ListDataAdms (void)
fprintf (Gbl.F.Out,"<div class=\"CENTER_MIDDLE\""
" style=\"margin-bottom:8px;\">");
Frm_StartForm (ActLstOth);
Sco_PutParamScope ("ScopeUsr",Gbl.Scope.Current);
Sco_PutParamCurrentScope ();
Usr_PutCheckboxListWithPhotos ();
Frm_EndForm ();
fprintf (Gbl.F.Out,"</div>");
@ -7788,13 +7782,14 @@ void Usr_SeeGuests (void)
if (Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs)
{
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs,NULL))
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_GST].NumUsrs,
Sco_PutParamCurrentScope,NULL))
{
/***** Get list of selected users *****/
Usr_GetListsSelectedUsrsCods ();
/***** Form to select type of list of users *****/
Usr_ShowFormsToSelectUsrListType (ActLstGst);
Usr_ShowFormsToSelectUsrListType (ActLstGst,Sco_PutParamCurrentScope);
/***** Draw a class photo with guests *****/
if (Gbl.Usrs.Me.ListType == Usr_LIST_AS_CLASS_PHOTO)
@ -7941,20 +7936,22 @@ void Usr_SeeStudents (void)
/***** Form to select groups *****/
if (Gbl.Scope.Current == Hie_CRS)
Grp_ShowFormToSelectSeveralGroups (ActLstStd,Grp_ONLY_MY_GROUPS);
Grp_ShowFormToSelectSeveralGroups (ActLstStd,Sco_PutParamCurrentScope,
Grp_ONLY_MY_GROUPS);
/***** Start section with user list *****/
Lay_StartSection (Usr_USER_LIST_SECTION_ID);
if (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs)
{
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs,NULL))
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs,
Sco_PutParamCurrentScope,NULL))
{
/***** Get list of selected users *****/
Usr_GetListsSelectedUsrsCods ();
/***** Form to select type of list of users *****/
Usr_ShowFormsToSelectUsrListType (ActLstStd);
Usr_ShowFormsToSelectUsrListType (ActLstStd,Sco_PutParamCurrentScope);
/***** Draw a class photo with students of the course *****/
if (Gbl.Usrs.Me.ListType == Usr_LIST_AS_CLASS_PHOTO)
@ -8116,17 +8113,19 @@ void Usr_SeeTeachers (void)
/***** Form to select groups *****/
if (Gbl.Scope.Current == Hie_CRS)
Grp_ShowFormToSelectSeveralGroups (ActLstTch,Grp_ONLY_MY_GROUPS);
Grp_ShowFormToSelectSeveralGroups (ActLstTch,Sco_PutParamCurrentScope,
Grp_ONLY_MY_GROUPS);
/***** Start section with user list *****/
Lay_StartSection (Usr_USER_LIST_SECTION_ID);
if (NumUsrs)
{
if (Usr_GetIfShowBigList (NumUsrs,NULL))
if (Usr_GetIfShowBigList (NumUsrs,
Sco_PutParamCurrentScope,NULL))
{
/***** Form to select type of list of users *****/
Usr_ShowFormsToSelectUsrListType (ActLstTch);
Usr_ShowFormsToSelectUsrListType (ActLstTch,Sco_PutParamCurrentScope);
/***** Draw a class photo with teachers of the course *****/
if (Gbl.Usrs.Me.ListType == Usr_LIST_AS_CLASS_PHOTO)
@ -8643,21 +8642,18 @@ static void Usr_PutIconToShowTchsAllData (void)
static void Usr_ShowGstsAllDataParams (void)
{
Usr_PutParamListWithPhotos ();
Usr_PutExtraParamsUsrList (ActLstGstAll);
}
static void Usr_ShowStdsAllDataParams (void)
{
Grp_PutParamsCodGrps ();
Usr_PutParamListWithPhotos ();
Usr_PutExtraParamsUsrList (ActLstStdAll);
}
static void Usr_ShowTchsAllDataParams (void)
{
Sco_PutParamScope ("ScopeUsr",Gbl.Scope.Current);
Sco_PutParamCurrentScope ();
Usr_PutParamListWithPhotos ();
Usr_PutExtraParamsUsrList (ActLstTchAll);
}
/*****************************************************************************/

View File

@ -407,7 +407,9 @@ void Usr_GetUnorderedStdsCodesInDeg (long DegCod);
void Usr_CopyBasicUsrDataFromList (struct UsrData *UsrDat,const struct UsrInList *UsrInList);
void Usr_FreeUsrsList (Rol_Role_t Role);
bool Usr_GetIfShowBigList (unsigned NumUsrs,const char *OnSubmit);
bool Usr_GetIfShowBigList (unsigned NumUsrs,
void (*FuncParams) (),
const char *OnSubmit);
void Usr_PutHiddenParUsrCodAll (Act_Action_t NextAction,const char *ListUsrCods);
void Usr_GetListsSelectedUsrsCods (void);
@ -417,16 +419,18 @@ unsigned Usr_CountNumUsrsInListOfSelectedUsrs (void);
void Usr_FreeListsSelectedUsrsCods (void);
void Usr_FreeListOtherRecipients (void);
void Usr_ShowFormsToSelectUsrListType (Act_Action_t NextAction);
void Usr_ShowFormsToSelectUsrListType (Act_Action_t NextAction,void (*FuncParams) ());
void Usr_PutCheckboxToSelectAllUsers (Rol_Role_t Role);
unsigned Usr_GetColumnsForSelectUsrs (void);
void Usr_SetUsrDatMainFieldNames (void);
void Usr_WriteHeaderFieldsUsrDat (bool PutCheckBoxToSelectUsr);
void Usr_PutExtraParamsUsrList (Act_Action_t NextAction);
void Usr_PutFormToSelectUsrsToGoToAct (Act_Action_t NextAction,
void Usr_PutFormToSelectUsrsToGoToAct (Act_Action_t CurrAction,void (*FuncParamsCurrAction) (),
Act_Action_t NextAction,void (*FuncParamsNextAction) (),
const char *HelpLink,
const char *TxtButton);
void Usr_GetSelectedUsrsAndGoToAct (void (*FuncWhenUsrsSelected) (),
void (*FuncWhenNoUsrsSelected) ());
void Usr_ListUsersToSelect (Rol_Role_t Role);
void Usr_ListAllDataGsts (void);