Version19.66

This commit is contained in:
Antonio Cañas Vargas 2019-11-13 00:58:35 +01:00
parent 00a5c3659d
commit 8ca04e79a5
7 changed files with 152 additions and 13 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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