From 8ca04e79a52a1446410cf9af481a27146bd5098a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Wed, 13 Nov 2019 00:58:35 +0100 Subject: [PATCH] Version19.66 --- swad_changelog.h | 3 +- swad_form.c | 2 +- swad_group.c | 3 +- swad_project.c | 128 ++++++++++++++++++++++++++++++++++++++++++++--- swad_project.h | 3 +- swad_text.c | 21 ++++++++ swad_user.c | 5 +- 7 files changed, 152 insertions(+), 13 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index 4bee8d9a4..52df69480 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -487,7 +487,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - * En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 19.65.5 (2019-11-12)" +#define Log_PLATFORM_VERSION "SWAD 19.66 (2019-11-12)" #define CSS_FILE "swad19.47.css" #define JS_FILE "swad19.65.js" /* @@ -496,6 +496,7 @@ ps2pdf source.ps destination.pdf // TODO: Importante: filtrar proyectos por usuarios (igual que en trabajos o en asistencia) // TODO: Code refactoring in HTML h1, title, meta, video, p, iframe, input hidden, area + Version 19.66: Nov 13, 2019 Changes in selection of which users in projects. (246638 lines) Version 19.65.5: Nov 12, 2019 Changes in selection of which users in projects. (246519 lines) Version 19.65.4: Nov 12, 2019 Fixed bug in HTML input texts. (246505 lines) Version 19.65.3: Nov 12, 2019 Fixed bug in listing of students' works. (246455 lines) diff --git a/swad_form.c b/swad_form.c index 698e2f261..dd7e53f23 100644 --- a/swad_form.c +++ b/swad_form.c @@ -284,7 +284,7 @@ void Frm_LinkFormSubmitAnimated (const char *Title,const char *LinkClass, if (OnSubmit) // JavaScript function to be called // before submitting the form if (OnSubmit[0]) - HTM_TxtF ("%s;",OnSubmit); + HTM_TxtF ("%s",OnSubmit); HTM_TxtF ("AnimateIcon(%d);" "document.getElementById('%s').submit();return false;\">", Gbl.Form.Num, diff --git a/swad_group.c b/swad_group.c index 9e151a679..8e9499145 100644 --- a/swad_group.c +++ b/swad_group.c @@ -409,7 +409,8 @@ void Grp_ShowFormToSelectSeveralGroups (void (*FuncParams) (void), HTM_DIV_Begin ("class=\"CM\" style=\"padding-top:12px;\""); Frm_LinkFormSubmitAnimated (Txt_Update_users, The_ClassFormInBoxBold[Gbl.Prefs.Theme], - "CopyMessageToHiddenFields();"); + Gbl.Action.Act == ActReqMsgUsr ? "CopyMessageToHiddenFields();" : + NULL); Ico_PutCalculateIconWithText (Txt_Update_users); Frm_LinkFormEnd (); HTM_DIV_End (); diff --git a/swad_project.c b/swad_project.c index 73777ae35..401a27c48 100644 --- a/swad_project.c +++ b/swad_project.c @@ -124,6 +124,10 @@ struct Prj_Faults /***************************** Private prototypes ****************************/ /*****************************************************************************/ +static void Prj_ReqListUsrsToSelect (void); +static void Prj_ShowProjectsOfSelectedUsrs (void); +static void Prj_GetListSelectedUsrCods (unsigned NumUsrsInList,long **LstSelectedUsrCods); + static void Prj_ShowProjectsInCurrentPage (void); static void Prj_ShowFormToFilterByMy_All (void); @@ -227,7 +231,7 @@ static void Prj_LockProjectEditionInDB (long PrjCod); static void Prj_UnlockProjectEditionInDB (long PrjCod); /*****************************************************************************/ -/******************************* List projects *******************************/ +/******************************* Show projects *******************************/ /*****************************************************************************/ void Prj_SeeProjects (void) @@ -235,12 +239,115 @@ void Prj_SeeProjects (void) /***** Get parameters *****/ Prj_GetParams (); - /***** Select users? *****/ - if (Gbl.Prjs.Filter.SelUsrs) - Ale_ShowAlert (Ale_INFO,"Vamos a seleccionar usuarios..."); + /***** Show projects *****/ + switch (Gbl.Prjs.Filter.Who) + { + case Usr_WHO_ME: + case Usr_WHO_ALL: + /***** Show projects *****/ + Prj_ShowProjectsInCurrentPage (); + break; + case Usr_WHO_SELECTED: + if (Gbl.Prjs.Filter.ReqUsrs) + /***** List users to select some of them *****/ + Prj_ReqListUsrsToSelect (); + if (Gbl.Prjs.Filter.SelUsrs) // Some users should have been selected + /***** Show projects *****/ + Prj_ShowProjectsOfSelectedUsrs (); + break; + default: + break; + } + } - /***** Show all the projects *****/ - Prj_ShowProjectsInCurrentPage (); +/*****************************************************************************/ +/**************************** List users to select ***************************/ +/*****************************************************************************/ + +static void Prj_ReqListUsrsToSelect (void) + { + extern const char *Hlp_ASSESSMENT_Projects; + extern const char *Txt_Projects; + extern const char *Txt_View_projects; + + /***** List users to select some of them *****/ + Usr_PutFormToSelectUsrsToGoToAct (ActSeePrj,Prj_PutCurrentParams, + Txt_Projects, + Hlp_ASSESSMENT_Projects, + Txt_View_projects); + } + +/*****************************************************************************/ +/******************** Show projects of selected users ************************/ +/*****************************************************************************/ + +static void Prj_ShowProjectsOfSelectedUsrs (void) + { + extern const char *Txt_You_must_select_one_ore_more_users; + unsigned NumUsrsInList; + long *LstSelectedUsrCods; + + /***** Get list of selected students if not already got *****/ + Usr_GetListsSelectedUsrsCods (); + + /* Check the number of students to list */ + if ((NumUsrsInList = Usr_CountNumUsrsInListOfSelectedUsrs ())) + { + /***** Get list of groups selected ******/ + Grp_GetParCodsSeveralGrpsToShowUsrs (); + + /***** Get list of students selected to show their attendances *****/ + Prj_GetListSelectedUsrCods (NumUsrsInList,&LstSelectedUsrCods); + + /***** Show projects *****/ + Prj_ShowProjectsInCurrentPage (); + + /***** Free list of user codes *****/ + free (LstSelectedUsrCods); + + /***** Free list of groups selected *****/ + Grp_FreeListCodSelectedGrps (); + } + else // No users selected + { + Ale_ShowAlert (Ale_WARNING,Txt_You_must_select_one_ore_more_users); + Prj_ReqListUsrsToSelect (); // ...show again the form + } + + /***** Free memory used by list of selected users' codes *****/ + Usr_FreeListsSelectedUsrsCods (); + } + +/*****************************************************************************/ +/************* Get list of users selected to show their projects *************/ +/*****************************************************************************/ + +static void Prj_GetListSelectedUsrCods (unsigned NumUsrsInList,long **LstSelectedUsrCods) + { + unsigned NumUsr; + const char *Ptr; + struct UsrData UsrDat; + + /***** Create list of user codes *****/ + if ((*LstSelectedUsrCods = (long *) calloc ((size_t) NumUsrsInList,sizeof (long))) == NULL) + Lay_NotEnoughMemoryExit (); + + /***** 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]; + NumUsr < NumUsrsInList && *Ptr; + NumUsr++) + { + Par_GetNextStrUntilSeparParamMult (&Ptr,UsrDat.EncryptedUsrCod, + Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64); + Usr_GetUsrCodFromEncryptedUsrCod (&UsrDat); + (*LstSelectedUsrCods)[NumUsr] = UsrDat.UsrCod; + } + + /***** Free memory used for user's data *****/ + Usr_UsrDataDestructor (&UsrDat); } /*****************************************************************************/ @@ -622,6 +729,9 @@ void Prj_PutParams (struct Prj_Filter *Filter, if (Filter->Who != Prj_FILTER_WHO_DEFAULT) Usr_PutHiddenParamWho (Filter->Who); + if (Filter->Who == Usr_WHO_SELECTED) + Par_PutHiddenParamChar ("SelUsrs",'Y'); + if (Filter->Assign != ((unsigned) Prj_FILTER_ASSIGNED_DEFAULT | (unsigned) Prj_FILTER_NONASSIG_DEFAULT)) Prj_PutHiddenParamAssign (Filter->Assign); @@ -766,9 +876,13 @@ static void Prj_GetParamWho (void) Gbl.Prjs.Filter.Who = Prj_FILTER_WHO_DEFAULT; /***** Select users? *****/ + Gbl.Prjs.Filter.ReqUsrs = false; Gbl.Prjs.Filter.SelUsrs = false; if (Gbl.Prjs.Filter.Who == Usr_WHO_SELECTED) - Gbl.Prjs.Filter.SelUsrs = Par_GetParToBool ("SelUsrs"); + { + Gbl.Prjs.Filter.ReqUsrs = Par_GetParToBool ("RequestUsrs"); + Gbl.Prjs.Filter.SelUsrs = Par_GetParToBool ("SelectedUsrs"); + } } /*****************************************************************************/ diff --git a/swad_project.h b/swad_project.h index 10530be1f..2f711ab02 100644 --- a/swad_project.h +++ b/swad_project.h @@ -90,7 +90,8 @@ typedef enum struct Prj_Filter { Usr_Who_t Who; // Show my / selected users' / all projects - bool SelUsrs; // Select users to view their projects? + bool ReqUsrs; // Request selection of users to view their projects? + bool SelUsrs; // Are there selected users to view their projects? unsigned Assign; // Show assigned / non assigned projects unsigned Hidden; // Show hidden / visible projects unsigned Faulti; // Show faulty / faultless projects diff --git a/swad_text.c b/swad_text.c index b28fd4c33..e2133ba80 100644 --- a/swad_text.c +++ b/swad_text.c @@ -52695,6 +52695,27 @@ const char *Txt_View_matches_results = "Ver resultados de partidas"; #endif +const char *Txt_View_projects = +#if L==1 // ca + "Veure projectes"; +#elif L==2 // de + "Anzeigen Projekte"; +#elif L==3 // en + "View projects"; +#elif L==4 // es + "Ver proyectos"; +#elif L==5 // fr + "Voir projets"; +#elif L==6 // gn + "Ver proyectos"; // Okoteve traducción +#elif L==7 // it + "Vedi progetti"; +#elif L==8 // pl + "Zobacz projekty"; +#elif L==9 // pt + "Ver projetos"; +#endif + const char *Txt_View_record_and_office_hours = #if L==1 // ca "Veure fitxa i horari de tutories"; diff --git a/swad_user.c b/swad_user.c index 50a7c726b..9b3a8846f 100644 --- a/swad_user.c +++ b/swad_user.c @@ -6200,7 +6200,8 @@ void Usr_PutFormToSelectUsrsToGoToAct (Act_Action_t NextAction,void (*FuncParams FuncParams (); Grp_PutParamsCodGrps (); Gbl.FileBrowser.FullTree = true; // By default, show all files - Brw_PutHiddenParamFullTreeIfSelected (); + Brw_PutHiddenParamFullTreeIfSelected (); // TODO: Put this parameter only in file browser + Par_PutHiddenParamChar ("SelectedUsrs",'Y'); /* Put list of users to select some of them */ HTM_TABLE_BeginCenter (); @@ -9747,7 +9748,7 @@ void Usr_PutWhoIcon (Usr_Who_t Who) "ICO_HIGHLIGHT PHOTO15x20"); break; case Usr_WHO_SELECTED: - Par_PutHiddenParamChar ("SelUsrs",'Y'); + Par_PutHiddenParamChar ("RequestUsrs",'Y'); HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,"user-check.svg", Txt_WHO[Who], "ICO_HIGHLIGHT ICOx20");