From 0c96d661ab745e88cd3cf8715f1cd779ee666689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Tue, 10 Oct 2017 01:26:45 +0200 Subject: [PATCH] Version 17.23 --- swad_changelog.h | 7 +- swad_file_browser.c | 30 +- swad_global.c | 7 + swad_global.h | 10 +- swad_pagination.c | 54 ++- swad_project.c | 884 ++++++++++++++++++++++++++++---------------- swad_project.h | 76 ++-- swad_text.c | 145 +++++++- 8 files changed, 811 insertions(+), 402 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index 86fc68514..7fc365b37 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -248,21 +248,22 @@ // TODO: "Administrar varios profesores no editores" -> debería poder hacerlo un profesor (Perico) -// TODO: Mover PROFILE.Briefcase a FILES.Briefcase en la ayuda de GitHub (aquí ya está cambiado) - // TODO: Los profesores no editores no deberían recibir notificaciones de solicitudes de inscripción. /*****************************************************************************/ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 17.22.1 (2017-10-08)" +#define Log_PLATFORM_VERSION "SWAD 17.23 (2017-10-10)" #define CSS_FILE "swad17.0.css" #define JS_FILE "swad17.17.1.js" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1 /* + Version 17.23: Oct 10, 2017 New filter to select preassigned/non-preassigned projects. + New filter to select hidden/visible projects. + Code refactoring in parameters of projects. (234140 lines) Version 17.22.1: Oct 08, 2017 Changed commentars on actions. (233756 lines) Version 17.22: Oct 08, 2017 New file browser for project assessment. (233755 lines) 19 changes necessary in database: diff --git a/swad_file_browser.c b/swad_file_browser.c index 04f557b72..78c990bc0 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -2363,7 +2363,7 @@ void Brw_GetParAndInitFileBrowser (void) /***** Get other parameters *****/ if (Brw_GetIfProjectFileBrowser ()) /* Get project code */ - Gbl.CurrentCrs.Prjs.PrjCod = Prj_GetParamPrjCod (); + Gbl.Prjs.PrjCod = Prj_GetParamPrjCod (); else if (Brw_GetIfCrsAssigWorksFileBrowser ()) { /* Get lists of the selected users */ @@ -2602,7 +2602,7 @@ void Brw_PutParamsFileBrowser (Act_Action_t NextAction, Grp_PutParamGrpCod (Gbl.CurrentCrs.Grps.GrpCod); else if (Brw_GetIfProjectFileBrowser ()) // This file browser needs specify a project /***** Project code *****/ - Prj_PutParamPrjCod (Gbl.CurrentCrs.Prjs.PrjCod); + Prj_PutParamPrjCod (Gbl.Prjs.PrjCod); else if (NextAction != ActUnk) { if (Brw_GetIfCrsAssigWorksFileBrowser ()) @@ -2871,14 +2871,14 @@ static void Brw_SetPathFileBrowser (void) project-code mod 100 */ sprintf (Path,"%s/%s/%02u", Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_PRJ, - (unsigned) (Gbl.CurrentCrs.Prjs.PrjCod % 100)); + (unsigned) (Gbl.Prjs.PrjCod % 100)); Fil_CreateDirIfNotExists (Path); /* Create path to the current project */ sprintf (Gbl.FileBrowser.Priv.PathAboveRootFolder,"%s/%s/%02u/%ld", Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_PRJ, - (unsigned) (Gbl.CurrentCrs.Prjs.PrjCod % 100), - Gbl.CurrentCrs.Prjs.PrjCod); + (unsigned) (Gbl.Prjs.PrjCod % 100), + Gbl.Prjs.PrjCod); break; case Brw_ADMI_BRF_USR: Str_Copy (Gbl.FileBrowser.Priv.PathAboveRootFolder, @@ -3430,7 +3430,7 @@ static void Brw_ShowFileBrowserProject (void) /***** Get project data *****/ Prj.PrjCod = Prj_GetParamPrjCod (); Prj_GetDataOfProjectByCod (&Prj); - Gbl.CurrentCrs.Prjs.PrjCod = Prj.PrjCod; + Gbl.Prjs.PrjCod = Prj.PrjCod; /***** Start box *****/ Box_StartBox (NULL,Prj.Title,NULL, @@ -3440,7 +3440,7 @@ static void Brw_ShowFileBrowserProject (void) Prj_ShowOneUniqueProject (&Prj); /***** Show project file browsers *****/ - MyRoleInProject = Prj_GetMyRoleInProject (Gbl.CurrentCrs.Prjs.PrjCod); + MyRoleInProject = Prj_GetMyRoleInProject (Gbl.Prjs.PrjCod); if (Prj_CheckIfICanViewProjectFiles (MyRoleInProject)) { Brw_WriteTopBeforeShowingFileBrowser (); @@ -5252,7 +5252,7 @@ static void Brw_PutParamsFullTree (void) if (Brw_GetIfGroupFileBrowser ()) Grp_PutParamGrpCod (Gbl.CurrentCrs.Grps.GrpCod); else if (Brw_GetIfProjectFileBrowser ()) // This file browser needs specify a project - Prj_PutParamPrjCod (Gbl.CurrentCrs.Prjs.PrjCod); + Prj_PutParamPrjCod (Gbl.Prjs.PrjCod); else if (Brw_GetIfCrsAssigWorksFileBrowser ()) Usr_PutHiddenParUsrCodAll (Brw_ActSeeAdm[Gbl.FileBrowser.Type], Gbl.Usrs.Select[Rol_UNK]); @@ -5445,7 +5445,7 @@ static void Brw_GetAndUpdateDateLastAccFileBrowser (void) break; case Brw_ADMI_DOC_PRJ: case Brw_ADMI_ASS_PRJ: - Cod = Gbl.CurrentCrs.Prjs.PrjCod; + Cod = Gbl.Prjs.PrjCod; break; case Brw_ADMI_BRF_USR: Cod = -1L; @@ -7626,7 +7626,7 @@ static bool Brw_CheckIfClipboardIsInThisTree (void) break; case Brw_ADMI_DOC_PRJ: case Brw_ADMI_ASS_PRJ: - if (Gbl.FileBrowser.Clipboard.Cod == Gbl.CurrentCrs.Prjs.PrjCod) + if (Gbl.FileBrowser.Clipboard.Cod == Gbl.Prjs.PrjCod) return true; // I am in the project of the clipboard break; case Brw_ADMI_BRF_USR: @@ -7714,7 +7714,7 @@ static long Brw_GetCodForClipboard (void) return Gbl.CurrentCrs.Grps.GrpCod; case Brw_ADMI_DOC_PRJ: case Brw_ADMI_ASS_PRJ: - return Gbl.CurrentCrs.Prjs.PrjCod; + return Gbl.Prjs.PrjCod; default: return -1L; } @@ -8188,7 +8188,7 @@ static void Brw_RemoveAffectedClipboards (Brw_FileBrowser_t FileBrowser, sprintf (Query,"DELETE FROM clipboard" " WHERE FileBrowser=%u AND Cod=%ld", (unsigned) FileBrowser, - Gbl.CurrentCrs.Prjs.PrjCod); + Gbl.Prjs.PrjCod); break; case Brw_ADMI_BRF_USR: sprintf (Query,"DELETE FROM clipboard" @@ -11439,7 +11439,7 @@ long Brw_GetCodForFiles (void) return Gbl.CurrentCrs.Grps.GrpCod; case Brw_ADMI_DOC_PRJ: case Brw_ADMI_ASS_PRJ: - return Gbl.CurrentCrs.Prjs.PrjCod; + return Gbl.Prjs.PrjCod; default: return -1L; } @@ -11994,7 +11994,7 @@ static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void) case Rol_STD: case Rol_NET: case Rol_TCH: - switch (Prj_GetMyRoleInProject (Gbl.CurrentCrs.Prjs.PrjCod)) + switch (Prj_GetMyRoleInProject (Gbl.Prjs.PrjCod)) { case Prj_ROLE_UNK: // I am not a member return false; @@ -12027,7 +12027,7 @@ static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void) case Rol_STD: case Rol_NET: case Rol_TCH: - switch (Prj_GetMyRoleInProject (Gbl.CurrentCrs.Prjs.PrjCod)) + switch (Prj_GetMyRoleInProject (Gbl.Prjs.PrjCod)) { case Prj_ROLE_UNK: // I am not a member case Prj_ROLE_STD: // Students can not view or edit project assessment diff --git a/swad_global.c b/swad_global.c index 9af024b04..63c201071 100644 --- a/swad_global.c +++ b/swad_global.c @@ -349,10 +349,17 @@ void Gbl_InitializeGlobals (void) Gbl.Asgs.LstAsgCods = NULL; Gbl.Asgs.SelectedOrder = Asg_ORDER_DEFAULT; + /* Projects */ Gbl.Prjs.LstIsRead = false; // List is not read Gbl.Prjs.Num = 0; Gbl.Prjs.LstPrjCods = NULL; + Gbl.Prjs.My_All = Prj_WHOSE_PROJECTS_DEFAULT; + Gbl.Prjs.PreNon = Prj_PREASSIGNED_DEFAULT | + Prj_NONPREASSIG_DEFAULT; + Gbl.Prjs.HidVis = Prj_HIDDEN_DEFAULT | + Prj_VISIBL_DEFAULT; Gbl.Prjs.SelectedOrder = Prj_ORDER_DEFAULT; + Gbl.Prjs.PrjCod = -1L; Gbl.AttEvents.LstIsRead = false; // List is not read Gbl.AttEvents.Num = 0; diff --git a/swad_global.h b/swad_global.h index e58c3d4e9..ec205ba79 100644 --- a/swad_global.h +++ b/swad_global.h @@ -460,11 +460,6 @@ struct Globals char PathPriv[PATH_MAX + 1]; // Absolute path to the private directory of the course char PathRelPubl[PATH_MAX + 1]; // Relative path to the public directory of the course char PathURLPubl[PATH_MAX + 1]; // Abolute URL to the public part of the course - struct - { - Prj_WhichProjects_t WhichPrjs; // Show my projects or all projects - long PrjCod; - } Prjs; struct { unsigned NumGrps; @@ -581,8 +576,11 @@ struct Globals unsigned Num; // Number of projects long *LstPrjCods; // List of project codes Prj_Order_t SelectedOrder; - long PrjCodToEdit; // Used as parameter in contextual links + Prj_WhoseProjects_t My_All; // Show my / all projects + unsigned PreNon; // Show preassigned / non preassigned projects + unsigned HidVis; // Show hidden / visible projects unsigned CurrentPage; + long PrjCod; // Current project } Prjs; struct { diff --git a/swad_pagination.c b/swad_pagination.c index 9d75c1248..3cbef0cb8 100644 --- a/swad_pagination.c +++ b/swad_pagination.c @@ -164,9 +164,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, break; case Pag_PROJECTS: Act_FormStartAnchor (ActSeePrj,Pagination->Anchor); - Pag_PutHiddenParamPagNum (WhatPaginate,1); - Prj_PutHiddenParamPrjOrder (); - Prj_PutParamWhichPrjs (); + Prj_PutParams (Gbl.Prjs.My_All, + Gbl.Prjs.PreNon, + Gbl.Prjs.HidVis, + Gbl.Prjs.SelectedOrder, + 1, + -1L); break; case Pag_GAMES: Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor); @@ -271,9 +274,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, break; case Pag_PROJECTS: Act_FormStartAnchor (ActSeePrj,Pagination->Anchor); - Pag_PutHiddenParamPagNum (WhatPaginate,1); - Prj_PutHiddenParamPrjOrder (); - Prj_PutParamWhichPrjs (); + Prj_PutParams (Gbl.Prjs.My_All, + Gbl.Prjs.PreNon, + Gbl.Prjs.HidVis, + Gbl.Prjs.SelectedOrder, + 1, + -1L); break; case Pag_GAMES: Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor); @@ -364,9 +370,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, break; case Pag_PROJECTS: Act_FormStartAnchor (ActSeePrj,Pagination->Anchor); - Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage); - Prj_PutHiddenParamPrjOrder (); - Prj_PutParamWhichPrjs (); + Prj_PutParams (Gbl.Prjs.My_All, + Gbl.Prjs.PreNon, + Gbl.Prjs.HidVis, + Gbl.Prjs.SelectedOrder, + Pagination->LeftPage, + -1L); break; case Pag_GAMES: Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor); @@ -468,9 +477,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, break; case Pag_PROJECTS: Act_FormStartAnchor (ActSeePrj,Pagination->Anchor); - Pag_PutHiddenParamPagNum (WhatPaginate,NumPage); - Prj_PutHiddenParamPrjOrder (); - Prj_PutParamWhichPrjs (); + Prj_PutParams (Gbl.Prjs.My_All, + Gbl.Prjs.PreNon, + Gbl.Prjs.HidVis, + Gbl.Prjs.SelectedOrder, + NumPage, + -1L); break; case Pag_GAMES: Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor); @@ -560,9 +572,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, break; case Pag_PROJECTS: Act_FormStartAnchor (ActSeePrj,Pagination->Anchor); - Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage); - Prj_PutHiddenParamPrjOrder (); - Prj_PutParamWhichPrjs (); + Prj_PutParams (Gbl.Prjs.My_All, + Gbl.Prjs.PreNon, + Gbl.Prjs.HidVis, + Gbl.Prjs.SelectedOrder, + Pagination->RightPage, + -1L); break; case Pag_GAMES: Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor); @@ -651,9 +666,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate, break; case Pag_PROJECTS: Act_FormStartAnchor (ActSeePrj,Pagination->Anchor); - Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags); - Prj_PutHiddenParamPrjOrder (); - Prj_PutParamWhichPrjs (); + Prj_PutParams (Gbl.Prjs.My_All, + Gbl.Prjs.PreNon, + Gbl.Prjs.HidVis, + Gbl.Prjs.SelectedOrder, + Pagination->NumPags, + -1L); break; case Pag_GAMES: Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor); diff --git a/swad_project.c b/swad_project.c index 76d140bee..c0e45a527 100644 --- a/swad_project.c +++ b/swad_project.c @@ -52,6 +52,10 @@ extern struct Globals Gbl; /************************* Private constants and types ***********************/ /*****************************************************************************/ +static const char *ParamMy_AllName = "My_All"; +static const char *ParamPreNonName = "PreNon"; +static const char *ParamHidVisName = "HidVis"; + typedef enum { Prj_LIST_PROJECTS, @@ -60,21 +64,27 @@ typedef enum Prj_EDIT_ONE_PROJECT, } Prj_ProjectView_t; -const Prj_RoleInProject_t Prj_RolesToShow[] = +static const Prj_RoleInProject_t Prj_RolesToShow[] = { Prj_ROLE_TUT, // Tutor Prj_ROLE_STD, // Student Prj_ROLE_EVA, // Evaluator }; -const unsigned Brw_NUM_ROLES_TO_SHOW = sizeof (Prj_RolesToShow) / sizeof (Prj_RolesToShow[0]); +static const unsigned Brw_NUM_ROLES_TO_SHOW = sizeof (Prj_RolesToShow) / sizeof (Prj_RolesToShow[0]); -const char *Prj_Proposal_DB[Prj_NUM_PROPOSAL_TYPES] = +static const char *Prj_Proposal_DB[Prj_NUM_PROPOSAL_TYPES] = { "new", // Prj_PROPOSAL_NEW "modified", // Prj_PROPOSAL_MODIFIED "unmodified", // Prj_PROPOSAL_UNMODIFIED }; +static const char *PreassignedNonpreassigImage[Prj_NUM_PREASSIGNED_NONPREASSIG] = + { + "lock-on64x64.png", // Prj_PREASSIGNED + "unlock-on64x64.png", // Prj_NONPREASSIG + }; + /*****************************************************************************/ /***************************** Private variables *****************************/ /*****************************************************************************/ @@ -85,9 +95,18 @@ const char *Prj_Proposal_DB[Prj_NUM_PROPOSAL_TYPES] = static void Prj_ShowProjectsInCurrentPage (void); -static void Prj_PutFormToSelectWhichProjecsToShow (void); -static void Prj_ShowFormToSelWhichPrjs (Act_Action_t Action,void (*FuncParams) ()); -static void Prj_GetParamWhichPrjs (void); +static void Prj_ShowFormToSelMy_AllPrjs (void); +static void Prj_ShowFormToSelPreassignedOrNotProjects (void); +static void Prj_ShowFormToSelHiddenVisiblProjects (void); + +static void Prj_PutCurrentParams (void); +static void Prj_PutHiddenParamMy_All (Prj_WhoseProjects_t My_All); +static void Prj_PutHiddenParamPreNon (unsigned PreNon); +static void Prj_PutHiddenParamHidVis (unsigned HidVis); +static void Prj_GetHiddenParamMy_All (void); +static void Prj_GetHiddenParamPreNon (void); +static void Prj_GetHiddenParamHidVis (void); +static void Prj_GetParams (void); static void Prj_ShowProjectsHead (bool PrintView); static void Prj_ShowTableAllProjectsHead (void); @@ -133,12 +152,11 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject); static void Prj_GetParamPrjOrder (void); -static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden, +static void Prj_PutFormsToRemEditOnePrj (long PrjCod,Prj_HiddenVisibl_t Hidden, bool ICanViewProjectFiles); static bool Prj_CheckIfICanEditProject (long PrjCod); -static void Prj_PutParams (void); static void Prj_GetDataOfProject (struct Project *Prj,const char *Query); static void Prj_ResetProject (struct Project *Prj); @@ -158,9 +176,7 @@ static void Prj_UpdateProject (struct Project *Prj); void Prj_SeeProjects (void) { /***** Get parameters *****/ - Prj_GetParamPrjOrder (); - Prj_GetParamWhichPrjs (); - Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); + Prj_GetParams (); /***** Show all the projects *****/ Prj_ShowProjectsInCurrentPage (); @@ -177,8 +193,7 @@ void Prj_ShowTableAllProjects (void) struct Project Prj; /***** Get parameters *****/ - Prj_GetParamPrjOrder (); - Prj_GetParamWhichPrjs (); + Prj_GetParams (); /***** Get list of projects *****/ Prj_GetListProjects (); @@ -243,8 +258,19 @@ static void Prj_ShowProjectsInCurrentPage (void) Box_StartBox ("100%",Txt_Projects,Prj_PutIconsListProjects, Hlp_ASSESSMENT_Projects,Box_NOT_CLOSABLE); - /***** Select whether show only my projects or all projects *****/ - Prj_PutFormToSelectWhichProjecsToShow (); + /***** Put forms to choice which projects to show *****/ + Prj_ShowFormToSelMy_AllPrjs (); + Prj_ShowFormToSelPreassignedOrNotProjects (); + switch (Gbl.Usrs.Me.Role.Logged) + { + case Rol_NET: + case Rol_TCH: + case Rol_SYS_ADM: + Prj_ShowFormToSelHiddenVisiblProjects (); + break; + default: // Students will see only visible projects + break; + } if (Gbl.Prjs.Num) { @@ -294,46 +320,41 @@ static void Prj_ShowProjectsInCurrentPage (void) Prj_FreeListProjects (); } -/*****************************************************************************/ -/***************** Put form to select which groups to show *******************/ -/*****************************************************************************/ - -static void Prj_PutFormToSelectWhichProjecsToShow (void) - { - fprintf (Gbl.F.Out,"
"); - Prj_ShowFormToSelWhichPrjs (ActSeePrj,Prj_PutParams); - fprintf (Gbl.F.Out,"
"); - } - /*****************************************************************************/ /*** Show form to choice whether to show only my projects or all projects ****/ /*****************************************************************************/ -static void Prj_ShowFormToSelWhichPrjs (Act_Action_t Action,void (*FuncParams) ()) +static void Prj_ShowFormToSelMy_AllPrjs (void) { - extern const char *Txt_PROJECT_WHICH_PROJECTS[2]; - Prj_WhichProjects_t WhichPrjs; + extern const char *Txt_PROJECT_MY_ALL_PROJECTS[Prj_NUM_WHOSE_PROJECTS]; + Prj_WhoseProjects_t My_All; + static const char *WhoseProjectsImage[Prj_NUM_WHOSE_PROJECTS] = + { + "myhierarchy64x64.png", // Prj_MY__PROJECTS + "hierarchy64x64.png", // Prj_ALL_PROJECTS + }; fprintf (Gbl.F.Out,"
"); - for (WhichPrjs = Prj_ONLY_MY_PROJECTS; - WhichPrjs <= Prj_ALL_PROJECTS; - WhichPrjs++) + for (My_All = (Prj_WhoseProjects_t) 0; + My_All <= (Prj_WhoseProjects_t) (Prj_NUM_WHOSE_PROJECTS - 1); + My_All++) { fprintf (Gbl.F.Out,"
", - WhichPrjs == Gbl.CurrentCrs.Prjs.WhichPrjs ? "PREF_ON" : - "PREF_OFF"); - Act_FormStart (Action); - Par_PutHiddenParamUnsigned ("WhichPrjs",(unsigned) WhichPrjs); - if (FuncParams) // Extra parameters depending on the action - FuncParams (); + (Gbl.Prjs.My_All == My_All) ? "PREF_ON" : + "PREF_OFF"); + Act_FormStart (ActSeePrj); + Prj_PutParams (My_All, + Gbl.Prjs.PreNon, + Gbl.Prjs.HidVis, + Gbl.Prjs.SelectedOrder, + Gbl.Prjs.CurrentPage, + -1L); fprintf (Gbl.F.Out,"", - Gbl.Prefs.IconsURL, - WhichPrjs == Prj_ONLY_MY_PROJECTS ? "myhierarchy64x64.png" : - "hierarchy64x64.png", - Txt_PROJECT_WHICH_PROJECTS[WhichPrjs], - Txt_PROJECT_WHICH_PROJECTS[WhichPrjs]); + Gbl.Prefs.IconsURL,WhoseProjectsImage[My_All], + Txt_PROJECT_MY_ALL_PROJECTS[My_All], + Txt_PROJECT_MY_ALL_PROJECTS[My_All]); Act_FormEnd (); fprintf (Gbl.F.Out,"
"); } @@ -341,35 +362,210 @@ static void Prj_ShowFormToSelWhichPrjs (Act_Action_t Action,void (*FuncParams) ( } /*****************************************************************************/ -/************* Parameter to show only my projects or all projects ************/ +/******** Show form to select preassigned / non-preassigned projects *********/ /*****************************************************************************/ -void Prj_PutParamWhichPrjs (void) +static void Prj_ShowFormToSelPreassignedOrNotProjects (void) { - Prj_GetParamWhichPrjs (); + extern const char *Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_PLURAL[Prj_NUM_PREASSIGNED_NONPREASSIG]; + Prj_PreassignedNonpreassig_t PreNon; - Par_PutHiddenParamUnsigned ("WhichPrjs",(unsigned) Gbl.CurrentCrs.Prjs.WhichPrjs); + fprintf (Gbl.F.Out,"
"); + for (PreNon = (Prj_PreassignedNonpreassig_t) 0; + PreNon <= (Prj_PreassignedNonpreassig_t) (Prj_NUM_PREASSIGNED_NONPREASSIG - 1); + PreNon++) + { + fprintf (Gbl.F.Out,"
", + (Gbl.Prjs.PreNon & (1 << PreNon)) ? "PREF_ON" : + "PREF_OFF"); + Act_FormStart (ActSeePrj); + Prj_PutParams (Gbl.Prjs.My_All, + Gbl.Prjs.PreNon ^ (1 << PreNon), // Toggle + Gbl.Prjs.HidVis, + Gbl.Prjs.SelectedOrder, + Gbl.Prjs.CurrentPage, + -1L); + fprintf (Gbl.F.Out,"", + Gbl.Prefs.IconsURL,PreassignedNonpreassigImage[PreNon], + Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_PLURAL[PreNon], + Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_PLURAL[PreNon]); + Act_FormEnd (); + fprintf (Gbl.F.Out,"
"); + } + fprintf (Gbl.F.Out,"
"); } /*****************************************************************************/ -/*********** Get whether to show only my projects or all projects ************/ +/************* Show form to select hidden / visible projects *****************/ /*****************************************************************************/ -static void Prj_GetParamWhichPrjs (void) +static void Prj_ShowFormToSelHiddenVisiblProjects (void) { - static bool AlreadyGot = false; - - if (!AlreadyGot) + extern const char *Txt_PROJECT_HIDDEN_VISIBL_PROJECTS[Prj_NUM_HIDDEN_VISIBL]; + Prj_HiddenVisibl_t HidVis; + static const char *HiddenVisiblImage[Prj_NUM_HIDDEN_VISIBL] = { - /***** Get which projects (my projects or all projects) *****/ - Gbl.CurrentCrs.Prjs.WhichPrjs = (Prj_WhichProjects_t) - Par_GetParToUnsignedLong ("WhichPrjs", - 0, - Prj_NUM_WHICH_PROJECTS - 1, - (unsigned long) Prj_WHICH_PROJECTS_DEFAULT); + "eye-slash-on64x64.png", // Prj_HIDDEN + "eye-on64x64.png", // Prj_VISIBL + }; - AlreadyGot = true; + fprintf (Gbl.F.Out,"
"); + for (HidVis = (Prj_HiddenVisibl_t) 0; + HidVis <= (Prj_HiddenVisibl_t) (Prj_NUM_HIDDEN_VISIBL - 1); + HidVis++) + { + fprintf (Gbl.F.Out,"
", + (Gbl.Prjs.HidVis & (1 << HidVis)) ? "PREF_ON" : + "PREF_OFF"); + Act_FormStart (ActSeePrj); + Prj_PutParams (Gbl.Prjs.My_All, + Gbl.Prjs.PreNon, + Gbl.Prjs.HidVis ^ (1 << HidVis), // Toggle + Gbl.Prjs.SelectedOrder, + Gbl.Prjs.CurrentPage, + -1L); + fprintf (Gbl.F.Out,"", + Gbl.Prefs.IconsURL, + HiddenVisiblImage[HidVis], + Txt_PROJECT_HIDDEN_VISIBL_PROJECTS[HidVis], + Txt_PROJECT_HIDDEN_VISIBL_PROJECTS[HidVis]); + Act_FormEnd (); + fprintf (Gbl.F.Out,"
"); } + fprintf (Gbl.F.Out,"
"); + } + +/*****************************************************************************/ +/********************** Put parameters used in projects **********************/ +/*****************************************************************************/ + +static void Prj_PutCurrentParams (void) + { + Prj_PutParams (Gbl.Prjs.My_All, + Gbl.Prjs.PreNon, + Gbl.Prjs.HidVis, + Gbl.Prjs.SelectedOrder, + Gbl.Prjs.CurrentPage, + Gbl.Prjs.PrjCod); + } + +/* The following function is called + when one or more parameters must be passed explicitely. + Each parameter is passed only if its value is distinct to default. */ + +void Prj_PutParams (Prj_WhoseProjects_t My_All, + unsigned PreNon, + unsigned HidVis, + Prj_Order_t Order, + unsigned NumPage, + long PrjCod) + { + if (My_All != Prj_WHOSE_PROJECTS_DEFAULT) + Prj_PutHiddenParamMy_All (My_All); + + if (PreNon != ((unsigned) Prj_PREASSIGNED_DEFAULT | + (unsigned) Prj_NONPREASSIG_DEFAULT)) + Prj_PutHiddenParamPreNon (PreNon); + + if (HidVis != ((unsigned) Prj_HIDDEN_DEFAULT | + (unsigned) Prj_VISIBL_DEFAULT)) + Prj_PutHiddenParamHidVis (HidVis); + + if (Order != Prj_ORDER_DEFAULT) + Par_PutHiddenParamUnsigned ("Order",(unsigned) Order); + + if (NumPage > 1) + Pag_PutHiddenParamPagNum (Pag_PROJECTS,NumPage); + + if (PrjCod > 0) + Prj_PutParamPrjCod (PrjCod); + + if (Gbl.Usrs.Other.UsrDat.UsrCod > 0) + Usr_PutParamOtherUsrCodEncrypted (); + } + +/*****************************************************************************/ +/*********************** Put hidden params for projects **********************/ +/*****************************************************************************/ + +static void Prj_PutHiddenParamMy_All (Prj_WhoseProjects_t My_All) + { + Par_PutHiddenParamUnsigned (ParamMy_AllName,(unsigned) My_All); + } + +static void Prj_PutHiddenParamPreNon (unsigned PreNon) + { + Par_PutHiddenParamUnsigned (ParamPreNonName,PreNon); + } + +static void Prj_PutHiddenParamHidVis (unsigned HidVis) + { + Par_PutHiddenParamUnsigned (ParamHidVisName,HidVis); + } + +/*****************************************************************************/ +/*********************** Get hidden params for projects **********************/ +/*****************************************************************************/ + +static void Prj_GetHiddenParamMy_All (void) + { + Gbl.Prjs.My_All = (Prj_WhoseProjects_t) Par_GetParToUnsignedLong (ParamMy_AllName, + 0, + Prj_NUM_WHOSE_PROJECTS - 1, + Prj_WHOSE_PROJECTS_DEFAULT); + } + +static void Prj_GetHiddenParamPreNon (void) + { + Gbl.Prjs.PreNon = (unsigned) Par_GetParToUnsignedLong (ParamPreNonName, + 0, + (1 << Prj_PREASSIGNED) | + (1 << Prj_NONPREASSIG), + (unsigned) Prj_PREASSIGNED_DEFAULT | + (unsigned) Prj_NONPREASSIG_DEFAULT); + } + +static void Prj_GetHiddenParamHidVis (void) + { + switch (Gbl.Usrs.Me.Role.Logged) + { + case Rol_STD: // Students can view only visible projects + Gbl.Prjs.HidVis = (1 << Prj_VISIBL); // Only visible projects + break; + case Rol_NET: + case Rol_TCH: + case Rol_SYS_ADM: + Gbl.Prjs.HidVis = (unsigned) Par_GetParToUnsignedLong (ParamHidVisName, + 0, + (1 << Prj_HIDDEN) | + (1 << Prj_VISIBL), + (unsigned) Prj_HIDDEN_DEFAULT | + (unsigned) Prj_VISIBL_DEFAULT); + break; + default: + Lay_ShowErrorAndExit ("Wrong role."); + break; + } + } + +/*****************************************************************************/ +/***************** Get generic parameters to list projects *******************/ +/*****************************************************************************/ + +static void Prj_GetParams (void) + { + /***** Get which projects to show *****/ + Prj_GetHiddenParamMy_All (); + Prj_GetHiddenParamPreNon (); + Prj_GetHiddenParamHidVis (); + + /***** Get order and page *****/ + Prj_GetParamPrjOrder (); + Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); } /*****************************************************************************/ @@ -393,9 +589,12 @@ static void Prj_ShowProjectsHead (bool PrintView) if (!PrintView) { Act_FormStart (ActSeePrj); - Prj_PutParamWhichPrjs (); - Pag_PutHiddenParamPagNum (Pag_PROJECTS,Gbl.Prjs.CurrentPage); - Par_PutHiddenParamUnsigned ("Order",(unsigned) Order); + Prj_PutParams (Gbl.Prjs.My_All, + Gbl.Prjs.PreNon, + Gbl.Prjs.HidVis, + Order, + Gbl.Prjs.CurrentPage, + -1L); Act_LinkFormSubmit (Txt_PROJECT_ORDER_HELP[Order],"TIT_TBL",NULL); if (Order == Gbl.Prjs.SelectedOrder) fprintf (Gbl.F.Out,""); @@ -510,8 +709,8 @@ static void Prj_PutIconToCreateNewPrj (void) extern const char *Txt_New_project; /***** Put form to create a new project *****/ - Gbl.Prjs.PrjCodToEdit = -1L; - Lay_PutContextualLink (ActFrmNewPrj,NULL,Prj_PutParams, + Gbl.Prjs.PrjCod = -1L; + Lay_PutContextualLink (ActFrmNewPrj,NULL,Prj_PutCurrentParams, "plus64x64.png", Txt_New_project,NULL, NULL); @@ -525,9 +724,9 @@ static void Prj_PutButtonToCreateNewPrj (void) { extern const char *Txt_New_project; - Gbl.Prjs.PrjCodToEdit = -1L; + Gbl.Prjs.PrjCod = -1L; Act_FormStart (ActFrmNewPrj); - Prj_PutParams (); + Prj_PutCurrentParams (); Btn_PutConfirmButton (Txt_New_project); Act_FormEnd (); } @@ -540,7 +739,7 @@ static void Prj_PutIconToShowAllData (void) { extern const char *Txt_Show_all_data_in_a_table; - Lay_PutContextualLink (ActSeeTblAllPrj,NULL,Prj_PutParams, + Lay_PutContextualLink (ActSeeTblAllPrj,NULL,Prj_PutCurrentParams, "table64x64.gif", Txt_Show_all_data_in_a_table,NULL, NULL); @@ -611,6 +810,7 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie extern const char *Txt_Preassigned_QUESTION; extern const char *Txt_Yes; extern const char *Txt_No; + extern const char *Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_SINGUL[Prj_NUM_PREASSIGNED_NONPREASSIG]; extern const char *Txt_Number_of_students; extern const char *Txt_See_more; extern const char *Txt_See_less; @@ -646,8 +846,8 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie UniqueId++; fprintf (Gbl.F.Out,"Hidden ? "DATE_BLUE_LIGHT" : - "DATE_BLUE"); + Prj->Hidden == Prj_HIDDEN ? "DATE_BLUE_LIGHT" : + "DATE_BLUE"); if (ProjectView == Prj_LIST_PROJECTS) fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd); fprintf (Gbl.F.Out,"\">" @@ -663,8 +863,8 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie UniqueId++; fprintf (Gbl.F.Out,"Hidden ? "DATE_BLUE_LIGHT" : - "DATE_BLUE"); + Prj->Hidden == Prj_HIDDEN ? "DATE_BLUE_LIGHT" : + "DATE_BLUE"); if (ProjectView == Prj_LIST_PROJECTS) fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd); fprintf (Gbl.F.Out,"\">" @@ -684,18 +884,18 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie if (ICanViewProjectFiles) { Act_FormStart (ActAdmDocPrj); - Prj_PutParams (); + Prj_PutCurrentParams (); Act_LinkFormSubmit (Txt_Project_files, - Prj->Hidden ? "ASG_TITLE_LIGHT" : - "ASG_TITLE", + Prj->Hidden == Prj_HIDDEN ? "ASG_TITLE_LIGHT" : + "ASG_TITLE", NULL); fprintf (Gbl.F.Out,"%s",Prj->Title); Act_FormEnd (); } else fprintf (Gbl.F.Out,"
%s
", - Prj->Hidden ? "ASG_TITLE_LIGHT" : - "ASG_TITLE", + Prj->Hidden == Prj_HIDDEN ? "ASG_TITLE_LIGHT" : + "ASG_TITLE", Prj->Title); fprintf (Gbl.F.Out,""); @@ -711,19 +911,24 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie "%s:" "" "Hidden ? "ASG_LABEL_LIGHT" : - "ASG_LABEL", + Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" : + "ASG_LABEL", Txt_Preassigned_QUESTION); if (ProjectView == Prj_LIST_PROJECTS) fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd); fprintf (Gbl.F.Out," %s\">" - "%s" - "" - "", - Prj->Hidden ? "DAT_LIGHT" : - "DAT", + "%s ", + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT", (Prj->Preassigned == Prj_PREASSIGNED) ? Txt_Yes : Txt_No); + fprintf (Gbl.F.Out,"\"%s\"", + Gbl.Prefs.IconsURL,PreassignedNonpreassigImage[Prj->Preassigned], + Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_SINGUL[Prj->Preassigned], + Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_SINGUL[Prj->Preassigned]); + fprintf (Gbl.F.Out,"" + ""); /***** Number of students *****/ fprintf (Gbl.F.Out,"" @@ -734,8 +939,8 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie "%s:" "" "Hidden ? "ASG_LABEL_LIGHT" : - "ASG_LABEL", + Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" : + "ASG_LABEL", Txt_Number_of_students); if (ProjectView == Prj_LIST_PROJECTS) fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd); @@ -743,8 +948,8 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie "%u" "" "", - Prj->Hidden ? "DAT_LIGHT" : - "DAT", + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT", Prj->NumStds); /***** Project members *****/ @@ -798,8 +1003,8 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie "%s:" "" "Hidden ? "ASG_LABEL_LIGHT" : - "ASG_LABEL", + Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" : + "ASG_LABEL", Txt_Proposal); if (ProjectView == Prj_LIST_PROJECTS) fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd); @@ -807,8 +1012,8 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie "%s" "" "", - Prj->Hidden ? "DAT_LIGHT" : - "DAT", + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT", Txt_PROJECT_STATUS[Prj->Proposal]); /***** Write rows of data of this project *****/ @@ -877,8 +1082,8 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj) "", UniqueId, Gbl.RowEvenOdd, - Prj->Hidden ? "DATE_BLUE_LIGHT" : - "DATE_BLUE", + Prj->Hidden == Prj_HIDDEN ? "DATE_BLUE_LIGHT" : + "DATE_BLUE", UniqueId,Prj->CreatTime, (unsigned) Gbl.Prefs.DateFormat,Txt_Today); @@ -892,8 +1097,8 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj) "", UniqueId, Gbl.RowEvenOdd, - Prj->Hidden ? "DATE_BLUE_LIGHT" : - "DATE_BLUE", + Prj->Hidden == Prj_HIDDEN ? "DATE_BLUE_LIGHT" : + "DATE_BLUE", UniqueId,Prj->ModifTime, (unsigned) Gbl.Prefs.DateFormat,Txt_Today); @@ -902,8 +1107,8 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj) "%s" "", Gbl.RowEvenOdd, - Prj->Hidden ? "DAT_LIGHT" : - "DAT_N", + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT_N", Prj->Title); /***** Department *****/ @@ -914,8 +1119,8 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj) "%s" "", Gbl.RowEvenOdd, - Prj->Hidden ? "DAT_LIGHT" : - "DAT", + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT", (Prj->Preassigned == Prj_PREASSIGNED) ? Txt_Yes : Txt_No); @@ -924,8 +1129,8 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj) "%u" "", Gbl.RowEvenOdd, - Prj->Hidden ? "DAT_LIGHT" : - "DAT", + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT", Prj->NumStds); /***** Project members *****/ @@ -939,8 +1144,8 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj) "%s" "", Gbl.RowEvenOdd, - Prj->Hidden ? "DAT_LIGHT" : - "DAT", + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT", Txt_PROJECT_STATUS[Prj->Proposal]); /***** Write rows of data of this project *****/ @@ -983,14 +1188,14 @@ static void Prj_ShowOneProjectDepartment (const struct Project *Prj, if (ProjectView == Prj_LIST_PROJECTS) fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd); fprintf (Gbl.F.Out," %s\">", - Prj->Hidden ? "DAT_LIGHT" : - "DAT_N"); + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT_N"); if (PutLink) fprintf (Gbl.F.Out,"", Dpt.WWW, - Prj->Hidden ? "DAT_LIGHT" : - "DAT_N"); + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT_N"); fprintf (Gbl.F.Out,"%s",Dpt.FullName); if (PutLink) fprintf (Gbl.F.Out,""); @@ -1011,8 +1216,8 @@ static void Prj_ShowTableAllProjectsDepartment (const struct Project *Prj) "%s" "", Gbl.RowEvenOdd, - Prj->Hidden ? "DAT_LIGHT" : - "DAT", + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT", Dpt.FullName); } @@ -1051,8 +1256,8 @@ static void Prj_ShowOneProjectTxtField (struct Project *Prj, "%s:" "" "Hidden ? "ASG_LABEL_LIGHT" : - "ASG_LABEL", + Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" : + "ASG_LABEL", Label); if (ProjectView == Prj_LIST_PROJECTS) fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd); @@ -1060,8 +1265,8 @@ static void Prj_ShowOneProjectTxtField (struct Project *Prj, "%s" "" "", - Prj->Hidden ? "DAT_LIGHT" : - "DAT", + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT", TxtField); } @@ -1077,8 +1282,8 @@ static void Prj_ShowTableAllProjectsTxtField (struct Project *Prj, "%s" "", Gbl.RowEvenOdd, - Prj->Hidden ? "DAT_LIGHT" : - "DAT", + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT", TxtField); } @@ -1115,20 +1320,20 @@ static void Prj_ShowOneProjectURL (const struct Project *Prj, "%s:" "" "Hidden ? "ASG_LABEL_LIGHT" : - "ASG_LABEL", + Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" : + "ASG_LABEL", Txt_URL); if (ProjectView == Prj_LIST_PROJECTS) fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd); fprintf (Gbl.F.Out," %s\">", - Prj->Hidden ? "DAT_LIGHT" : - "DAT"); + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT"); if (PutLink) fprintf (Gbl.F.Out,"", Prj->URL, - Prj->Hidden ? "DAT_LIGHT" : - "DAT"); + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT"); fprintf (Gbl.F.Out,"%s",Prj->URL); if (PutLink) fprintf (Gbl.F.Out,""); @@ -1143,8 +1348,8 @@ static void Prj_ShowTableAllProjectsURL (const struct Project *Prj) "%s" "", Gbl.RowEvenOdd, - Prj->Hidden ? "DAT_LIGHT" : - "DAT", + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT", Prj->URL); } @@ -1219,15 +1424,15 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj, fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd); fprintf (Gbl.F.Out," %s\">%s:" "Hidden ? "ASG_LABEL_LIGHT" : - "ASG_LABEL", + Prj->Hidden == Prj_HIDDEN ? "ASG_LABEL_LIGHT" : + "ASG_LABEL", NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInProject] : Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]); if (ProjectView == Prj_LIST_PROJECTS) fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd); fprintf (Gbl.F.Out," %s\">", - Prj->Hidden ? "DAT_LIGHT" : - "DAT"); + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT"); break; case Prj_EDIT_ONE_PROJECT: fprintf (Gbl.F.Out,"%s:" @@ -1258,7 +1463,7 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj, if (ProjectView == Prj_EDIT_ONE_PROJECT) { fprintf (Gbl.F.Out,""); - Lay_PutContextualLink (ActionReqRemUsr[RoleInProject],NULL,Prj_PutParams, + Lay_PutContextualLink (ActionReqRemUsr[RoleInProject],NULL,Prj_PutCurrentParams, "remove-on64x64.png", Txt_Remove,NULL, NULL); @@ -1295,9 +1500,9 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj, { fprintf (Gbl.F.Out,"" ""); - Gbl.Prjs.PrjCodToEdit = Prj->PrjCod; // Used to pass project code as a parameter + Gbl.Prjs.PrjCod = Prj->PrjCod; // Used to pass project code as a parameter sprintf (Gbl.Title,Txt_Add_USER,Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject]); - Lay_PutContextualLink (ActionReqAddUsr[RoleInProject],NULL,Prj_PutParams, + Lay_PutContextualLink (ActionReqAddUsr[RoleInProject],NULL,Prj_PutCurrentParams, "plus64x64.png", Gbl.Title,NULL, NULL); @@ -1336,8 +1541,8 @@ static void Prj_ShowTableAllProjectsMembersWithARole (const struct Project *Prj, /***** Start column with list of all members with this role *****/ fprintf (Gbl.F.Out,"", Gbl.RowEvenOdd, - Prj->Hidden ? "DAT_LIGHT" : - "DAT"); + Prj->Hidden == Prj_HIDDEN ? "DAT_LIGHT" : + "DAT"); if (NumUsrs) { @@ -1496,7 +1701,7 @@ static void Prj_ReqAnotherUsrID (Prj_RoleInProject_t RoleInProject) }; /***** Get project code *****/ - if ((Gbl.Prjs.PrjCodToEdit = Prj_GetParamPrjCod ()) == -1L) + if ((Gbl.Prjs.PrjCod = Prj_GetParamPrjCod ()) == -1L) Lay_ShowErrorAndExit ("Code of project is missing."); /***** Start box *****/ @@ -1505,13 +1710,13 @@ static void Prj_ReqAnotherUsrID (Prj_RoleInProject_t RoleInProject) Hlp_ASSESSMENT_Projects_add_user,Box_NOT_CLOSABLE); /***** Write form to request another user's ID *****/ - Enr_WriteFormToReqAnotherUsrID (ActionAddUsr[RoleInProject],Prj_PutParams); + Enr_WriteFormToReqAnotherUsrID (ActionAddUsr[RoleInProject],Prj_PutCurrentParams); /***** End box *****/ Box_EndBox (); /***** Put a form to create/edit project *****/ - Prj_RequestCreatOrEditPrj (Gbl.Prjs.PrjCodToEdit); + Prj_RequestCreatOrEditPrj (Gbl.Prjs.PrjCod); } /*****************************************************************************/ @@ -1631,9 +1836,7 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject) Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParamPrjOrder (); - Prj_GetParamWhichPrjs (); - Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); + Prj_GetParams (); if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) Lay_ShowErrorAndExit ("Code of project is missing."); @@ -1661,8 +1864,8 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject) /* Show form to request confirmation */ Act_FormStart (ActionRemUsr[RoleInProject]); - Gbl.Prjs.PrjCodToEdit = Prj.PrjCod; - Prj_PutParams (); + Gbl.Prjs.PrjCod = Prj.PrjCod; + Prj_PutCurrentParams (); Btn_PutRemoveButton (ItsMe ? Txt_Remove_me_from_this_project : Txt_Remove_user_from_this_project); Act_FormEnd (); @@ -1714,9 +1917,7 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject) Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParamPrjOrder (); - Prj_GetParamWhichPrjs (); - Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); + Prj_GetParams (); if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) Lay_ShowErrorAndExit ("Code of project is missing."); @@ -1786,32 +1987,37 @@ void Prj_PutHiddenParamPrjOrder (void) /****************** Put a link (form) to edit one project ********************/ /*****************************************************************************/ -static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden, +static void Prj_PutFormsToRemEditOnePrj (long PrjCod,Prj_HiddenVisibl_t Hidden, bool ICanViewProjectFiles) { - Gbl.Prjs.PrjCodToEdit = PrjCod; // Used as parameter in contextual links + Gbl.Prjs.PrjCod = PrjCod; // Used as parameter in contextual links if (Prj_CheckIfICanEditProject (PrjCod)) { /***** Put form to remove project *****/ - Ico_PutContextualIconToRemove (ActReqRemPrj,Prj_PutParams); + Ico_PutContextualIconToRemove (ActReqRemPrj,Prj_PutCurrentParams); /***** Put form to hide/show project *****/ - if (Hidden) - Ico_PutContextualIconToUnhide (ActShoPrj,Prj_PutParams); - else - Ico_PutContextualIconToHide (ActHidPrj,Prj_PutParams); + switch (Hidden) + { + case Prj_HIDDEN: + Ico_PutContextualIconToUnhide (ActShoPrj,Prj_PutCurrentParams); + break; + case Prj_VISIBL: + Ico_PutContextualIconToHide (ActHidPrj,Prj_PutCurrentParams); + break; + } /***** Put form to edit project *****/ - Ico_PutContextualIconToEdit (ActEdiOnePrj,Prj_PutParams); + Ico_PutContextualIconToEdit (ActEdiOnePrj,Prj_PutCurrentParams); } /***** Put form to admin project documents *****/ if (ICanViewProjectFiles) - Ico_PutContextualIconToViewFiles (ActAdmDocPrj,Prj_PutParams); + Ico_PutContextualIconToViewFiles (ActAdmDocPrj,Prj_PutCurrentParams); /***** Put form to print project *****/ - Ico_PutContextualIconToPrint (ActPrnOnePrj,Prj_PutParams); + Ico_PutContextualIconToPrint (ActPrnOnePrj,Prj_PutCurrentParams); } /*****************************************************************************/ @@ -1860,30 +2066,18 @@ static bool Prj_CheckIfICanEditProject (long PrjCod) } } -/*****************************************************************************/ -/********************** Params used to edit a project ************************/ -/*****************************************************************************/ - -static void Prj_PutParams (void) - { - if (Gbl.Prjs.PrjCodToEdit > 0) - Prj_PutParamPrjCod (Gbl.Prjs.PrjCodToEdit); - Prj_PutHiddenParamPrjOrder (); - Prj_PutParamWhichPrjs (); - Pag_PutHiddenParamPagNum (Pag_PROJECTS,Gbl.Prjs.CurrentPage); - if (Gbl.Usrs.Other.UsrDat.UsrCod > 0) - Usr_PutParamOtherUsrCodEncrypted (); - } - /*****************************************************************************/ /************************** List all the projects ****************************/ /*****************************************************************************/ +#define Prj_MAX_BYTES_SUBQUERY 128 + void Prj_GetListProjects (void) { - char HiddenSubQuery[256]; - char OrderBySubQuery[256]; - char Query[2048]; + char PreNonSubQuery[Prj_MAX_BYTES_SUBQUERY]; + char HidVisSubQuery[Prj_MAX_BYTES_SUBQUERY]; + char OrderBySubQuery[Prj_MAX_BYTES_SUBQUERY]; + char Query[512 * Prj_MAX_BYTES_SUBQUERY * 3]; MYSQL_RES *mysql_res; MYSQL_ROW row; unsigned long NumRows; @@ -1893,125 +2087,172 @@ void Prj_GetListProjects (void) Prj_FreeListProjects (); /***** Get list of projects from database *****/ - /* Hidden subquery */ - switch (Gbl.Usrs.Me.Role.Logged) - { - case Rol_NET: - case Rol_TCH: - case Rol_SYS_ADM: - HiddenSubQuery[0] = '\0'; - break; - default: - sprintf (HiddenSubQuery," AND projects.Hidden='N'"); - break; - } - - /* Order subquery */ - switch (Gbl.Prjs.SelectedOrder) - { - case Prj_ORDER_START_TIME: - sprintf (OrderBySubQuery,"projects.CreatTime DESC," - "projects.ModifTime DESC," - "projects.Title"); - break; - case Prj_ORDER_END_TIME: - sprintf (OrderBySubQuery,"projects.ModifTime DESC," - "projects.CreatTime DESC," - "projects.Title"); - break; - case Prj_ORDER_TITLE: - sprintf (OrderBySubQuery,"projects.Title," - "projects.CreatTime DESC," - "projects.ModifTime DESC"); - break; - case Prj_ORDER_DEPARTMENT: - sprintf (OrderBySubQuery,"departments.FullName," - "projects.CreatTime DESC," - "projects.ModifTime DESC," - "projects.Title"); - break; - } - - /* Query */ - if (Gbl.CurrentCrs.Prjs.WhichPrjs == Prj_ONLY_MY_PROJECTS) - switch (Gbl.Prjs.SelectedOrder) - { - case Prj_ORDER_START_TIME: - case Prj_ORDER_END_TIME: - case Prj_ORDER_TITLE: - sprintf (Query,"SELECT projects.PrjCod" - " FROM projects,prj_usr" - " WHERE projects.CrsCod=%ld%s" - " AND projects.PrjCod=prj_usr.PrjCod" - " AND prj_usr.UsrCod=%ld" - " ORDER BY %s", - Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery, - Gbl.Usrs.Me.UsrDat.UsrCod, - OrderBySubQuery); - break; - case Prj_ORDER_DEPARTMENT: - sprintf (Query,"SELECT projects.PrjCod" - " FROM prj_usr,projects LEFT JOIN departments" - " ON projects.DptCod=departments.DptCod" - " WHERE projects.CrsCod=%ld%s" - " AND projects.PrjCod=prj_usr.PrjCod" - " AND prj_usr.UsrCod=%ld" - " ORDER BY %s", - Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery, - Gbl.Usrs.Me.UsrDat.UsrCod, - OrderBySubQuery); - break; - } - else // Gbl.CurrentCrs.Prjs.WhichPrjs == Prj_ALL_PROJECTS - switch (Gbl.Prjs.SelectedOrder) - { - case Prj_ORDER_START_TIME: - case Prj_ORDER_END_TIME: - case Prj_ORDER_TITLE: - sprintf (Query,"SELECT projects.PrjCod" - " FROM projects" - " WHERE projects.CrsCod=%ld%s" - " ORDER BY %s", - Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery, - OrderBySubQuery); - break; - case Prj_ORDER_DEPARTMENT: - sprintf (Query,"SELECT projects.PrjCod" - " FROM projects LEFT JOIN departments" - " ON projects.DptCod=departments.DptCod" - " WHERE projects.CrsCod=%ld%s" - " ORDER BY %s", - Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery, - OrderBySubQuery); - break; - } - - NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get projects"); - - if (NumRows) // Projects found... - { - Gbl.Prjs.Num = (unsigned) NumRows; - - /***** Create list of projects *****/ - if ((Gbl.Prjs.LstPrjCods = (long *) calloc (NumRows,sizeof (long))) == NULL) - Lay_ShowErrorAndExit ("Not enough memory to store list of projects."); - - /***** Get the projects codes *****/ - for (NumPrj = 0; - NumPrj < Gbl.Prjs.Num; - NumPrj++) - { - /* Get next project code */ - row = mysql_fetch_row (mysql_res); - if ((Gbl.Prjs.LstPrjCods[NumPrj] = Str_ConvertStrCodToLongCod (row[0])) < 0) - Lay_ShowErrorAndExit ("Error: wrong project code."); - } - } + if (Gbl.Prjs.PreNon == 0 || // All selectors are off + Gbl.Prjs.HidVis == 0) // All selectors are off + Gbl.Prjs.Num = 0; // Nothing to get from database else - Gbl.Prjs.Num = 0; + { + /* Preassigned subquery */ + switch (Gbl.Prjs.PreNon) + { + case (1 << Prj_PREASSIGNED): + Str_Copy (PreNonSubQuery," AND projects.Preassigned='Y'", + Prj_MAX_BYTES_SUBQUERY); // Preassigned projects + break; + case (1 << Prj_NONPREASSIG): + Str_Copy (PreNonSubQuery," AND projects.Preassigned='N'", + Prj_MAX_BYTES_SUBQUERY); // Non-preassigned projects + break; + default: + HidVisSubQuery[0] = '\0'; // All projects + break; + } - /***** Free structure that stores the query result *****/ - DB_FreeMySQLResult (&mysql_res); + /* Hidden subquery */ + switch (Gbl.Usrs.Me.Role.Logged) + { + case Rol_STD: // Students can view only visible projects + Str_Copy (HidVisSubQuery," AND projects.Hidden='N'", + Prj_MAX_BYTES_SUBQUERY); // Visible projects + break; + case Rol_NET: + case Rol_TCH: + case Rol_SYS_ADM: + switch (Gbl.Prjs.HidVis) + { + case (1 << Prj_HIDDEN): + Str_Copy (HidVisSubQuery," AND projects.Hidden='Y'", + Prj_MAX_BYTES_SUBQUERY); // Hidden projects + break; + case (1 << Prj_VISIBL): + Str_Copy (HidVisSubQuery," AND projects.Hidden='N'", + Prj_MAX_BYTES_SUBQUERY); // Visible projects + break; + default: + HidVisSubQuery[0] = '\0'; // All projects + break; + } + break; + default: + Lay_ShowErrorAndExit ("Wrong role."); + break; + } + + /* Order subquery */ + switch (Gbl.Prjs.SelectedOrder) + { + case Prj_ORDER_START_TIME: + sprintf (OrderBySubQuery,"projects.CreatTime DESC," + "projects.ModifTime DESC," + "projects.Title"); + break; + case Prj_ORDER_END_TIME: + sprintf (OrderBySubQuery,"projects.ModifTime DESC," + "projects.CreatTime DESC," + "projects.Title"); + break; + case Prj_ORDER_TITLE: + sprintf (OrderBySubQuery,"projects.Title," + "projects.CreatTime DESC," + "projects.ModifTime DESC"); + break; + case Prj_ORDER_DEPARTMENT: + sprintf (OrderBySubQuery,"departments.FullName," + "projects.CreatTime DESC," + "projects.ModifTime DESC," + "projects.Title"); + break; + } + + /* Query */ + if (Gbl.Prjs.My_All == Prj_MY__PROJECTS) + switch (Gbl.Prjs.SelectedOrder) + { + case Prj_ORDER_START_TIME: + case Prj_ORDER_END_TIME: + case Prj_ORDER_TITLE: + sprintf (Query,"SELECT projects.PrjCod" + " FROM projects,prj_usr" + " WHERE projects.CrsCod=%ld" + "%s%s" + " AND projects.PrjCod=prj_usr.PrjCod" + " AND prj_usr.UsrCod=%ld" + " ORDER BY %s", + Gbl.CurrentCrs.Crs.CrsCod, + PreNonSubQuery,HidVisSubQuery, + Gbl.Usrs.Me.UsrDat.UsrCod, + OrderBySubQuery); + break; + case Prj_ORDER_DEPARTMENT: + sprintf (Query,"SELECT projects.PrjCod" + " FROM prj_usr,projects LEFT JOIN departments" + " ON projects.DptCod=departments.DptCod" + " WHERE projects.CrsCod=%ld" + "%s%s" + " AND projects.PrjCod=prj_usr.PrjCod" + " AND prj_usr.UsrCod=%ld" + " ORDER BY %s", + Gbl.CurrentCrs.Crs.CrsCod, + PreNonSubQuery,HidVisSubQuery, + Gbl.Usrs.Me.UsrDat.UsrCod, + OrderBySubQuery); + break; + } + else // Gbl.Prjs.My_All == Prj_ALL_PROJECTS + switch (Gbl.Prjs.SelectedOrder) + { + case Prj_ORDER_START_TIME: + case Prj_ORDER_END_TIME: + case Prj_ORDER_TITLE: + sprintf (Query,"SELECT projects.PrjCod" + " FROM projects" + " WHERE projects.CrsCod=%ld" + "%s%s" + " ORDER BY %s", + Gbl.CurrentCrs.Crs.CrsCod, + PreNonSubQuery,HidVisSubQuery, + OrderBySubQuery); + break; + case Prj_ORDER_DEPARTMENT: + sprintf (Query,"SELECT projects.PrjCod" + " FROM projects LEFT JOIN departments" + " ON projects.DptCod=departments.DptCod" + " WHERE projects.CrsCod=%ld" + "%s%s" + " ORDER BY %s", + Gbl.CurrentCrs.Crs.CrsCod, + PreNonSubQuery,HidVisSubQuery, + OrderBySubQuery); + break; + } + + NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get projects"); + + if (NumRows) // Projects found... + { + Gbl.Prjs.Num = (unsigned) NumRows; + + /***** Create list of projects *****/ + if ((Gbl.Prjs.LstPrjCods = (long *) calloc (NumRows,sizeof (long))) == NULL) + Lay_ShowErrorAndExit ("Not enough memory to store list of projects."); + + /***** Get the projects codes *****/ + for (NumPrj = 0; + NumPrj < Gbl.Prjs.Num; + NumPrj++) + { + /* Get next project code */ + row = mysql_fetch_row (mysql_res); + if ((Gbl.Prjs.LstPrjCods[NumPrj] = Str_ConvertStrCodToLongCod (row[0])) < 0) + Lay_ShowErrorAndExit ("Error: wrong project code."); + } + } + else + Gbl.Prjs.Num = 0; + + /***** Free structure that stores the query result *****/ + DB_FreeMySQLResult (&mysql_res); + } Gbl.Prjs.LstIsRead = true; } @@ -2139,11 +2380,12 @@ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query) Prj->DptCod = Str_ConvertStrCodToLongCod (row[2]); /* Get whether the project is hidden or not (row[3]) */ - Prj->Hidden = (row[3][0] == 'Y'); + Prj->Hidden = (row[3][0] == 'Y') ? Prj_HIDDEN : + Prj_VISIBL; /* Get if project is preassigned or not (row[4]) */ Prj->Preassigned = (row[4][0] == 'Y') ? Prj_PREASSIGNED : - Prj_NOT_PREASSIGNED; + Prj_NONPREASSIG; /* Get if project is preassigned or not (row[5]) */ NumLong = Str_ConvertStrCodToLongCod (row[5]); @@ -2203,8 +2445,8 @@ static void Prj_ResetProject (struct Project *Prj) if (Prj->PrjCod <= 0) // If > 0 ==> keep value Prj->PrjCod = -1L; Prj->CrsCod = -1L; - Prj->Hidden = false; - Prj->Preassigned = Prj_PREASSIGNED_DEFAULT; + Prj->Hidden = Prj_NEW_PRJ_HIDDEN_VISIBL_DEFAULT; + Prj->Preassigned = Prj_NEW_PRJ_PREASSIGNED_NONPREASSIG_DEFAULT; Prj->NumStds = 1; Prj->Proposal = Prj_PROPOSAL_DEFAULT; Prj->CreatTime = @@ -2266,9 +2508,7 @@ void Prj_ReqRemProject (void) Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParamPrjOrder (); - Prj_GetParamWhichPrjs (); - Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); + Prj_GetParams (); if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) Lay_ShowErrorAndExit ("Code of project is missing."); @@ -2278,11 +2518,11 @@ void Prj_ReqRemProject (void) if (Prj_CheckIfICanEditProject (Prj.PrjCod)) { /***** Show question and button to remove the project *****/ - Gbl.Prjs.PrjCodToEdit = Prj.PrjCod; + Gbl.Prjs.PrjCod = Prj.PrjCod; sprintf (Gbl.Alert.Txt,Txt_Do_you_really_want_to_remove_the_project_X, Prj.Title); Ale_ShowAlertAndButton (Ale_QUESTION,Gbl.Alert.Txt, - ActRemPrj,NULL,NULL,Prj_PutParams, + ActRemPrj,NULL,NULL,Prj_PutCurrentParams, Btn_REMOVE_BUTTON,Txt_Remove_project); } else @@ -2310,9 +2550,7 @@ void Prj_RemoveProject (void) Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParamPrjOrder (); - Prj_GetParamWhichPrjs (); - Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); + Prj_GetParams (); if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) Lay_ShowErrorAndExit ("Code of project is missing."); @@ -2375,9 +2613,7 @@ void Prj_HideProject (void) Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParamPrjOrder (); - Prj_GetParamWhichPrjs (); - Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); + Prj_GetParams (); if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) Lay_ShowErrorAndExit ("Code of project is missing."); @@ -2421,9 +2657,7 @@ void Prj_ShowProject (void) Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParamPrjOrder (); - Prj_GetParamWhichPrjs (); - Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); + Prj_GetParams (); if ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0) Lay_ShowErrorAndExit ("Code of project is missing."); @@ -2484,9 +2718,7 @@ static void Prj_RequestCreatOrEditPrj (long PrjCod) Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParamPrjOrder (); - Prj_GetParamWhichPrjs (); - Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); + Prj_GetParams (); ItsANewProject = ((Prj.PrjCod = PrjCod) < 0); /***** Get from the database the data of the project *****/ @@ -2541,13 +2773,13 @@ static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject) /***** Start project box *****/ if (ItsANewProject) { - Gbl.Prjs.PrjCodToEdit = -1L; + Gbl.Prjs.PrjCod = -1L; Box_StartBox (NULL,Txt_New_project,NULL, Hlp_ASSESSMENT_Projects_new_project,Box_NOT_CLOSABLE); } else { - Gbl.Prjs.PrjCodToEdit = Prj->PrjCod; + Gbl.Prjs.PrjCod = Prj->PrjCod; Box_StartBox (NULL, Prj->Title[0] ? Prj->Title : Txt_Edit_project, @@ -2572,7 +2804,7 @@ static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject) /* Start data form */ Act_FormStart (ItsANewProject ? ActNewPrj : ActChgPrj); - Prj_PutParams (); + Prj_PutCurrentParams (); /* Start box and table */ Box_StartBoxTable (NULL,Txt_Data,NULL, @@ -2615,16 +2847,16 @@ static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject) The_ClassForm[Gbl.Prefs.Theme], Txt_Preassigned_QUESTION); - fprintf (Gbl.F.Out,"",Txt_No); - fprintf (Gbl.F.Out,"",Txt_Yes); + fprintf (Gbl.F.Out,"",Txt_No); + fprintf (Gbl.F.Out,"" "" ""); @@ -2788,9 +3020,7 @@ void Prj_RecFormProject (void) Prj_AllocMemProject (&Prj); /***** Get parameters *****/ - Prj_GetParamPrjOrder (); - Prj_GetParamWhichPrjs (); - Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS); + Prj_GetParams (); ItsANewProject = ((Prj.PrjCod = Prj_GetParamPrjCod ()) < 0); if (ItsANewProject) @@ -2818,7 +3048,7 @@ void Prj_RecFormProject (void) /* Get whether the project is preassigned */ Prj.Preassigned = (Par_GetParToBool ("Preassigned")) ? Prj_PREASSIGNED : - Prj_NOT_PREASSIGNED; + Prj_NONPREASSIG; /* Get number of students */ Prj.NumStds = (unsigned) @@ -2909,10 +3139,10 @@ static void Prj_CreateProject (struct Project *Prj) "'%s','%s','%s','%s','%s')", Gbl.CurrentCrs.Crs.CrsCod, Prj->DptCod, - Prj->Hidden ? 'Y' : - 'N', + Prj->Hidden == Prj_HIDDEN ? 'Y' : + 'N', Prj->Preassigned == Prj_PREASSIGNED ? 'Y' : - 'N', + 'N', Prj->NumStds, Prj_Proposal_DB[Prj->Proposal], Prj->CreatTime, @@ -2960,10 +3190,10 @@ static void Prj_UpdateProject (struct Project *Prj) "Description='%s',Knowledge='%s',Materials='%s',URL='%s'" " WHERE PrjCod=%ld AND CrsCod=%ld", Prj->DptCod, - Prj->Hidden ? 'Y' : - 'N', + Prj->Hidden == Prj_HIDDEN ? 'Y' : + 'N', Prj->Preassigned == Prj_PREASSIGNED ? 'Y' : - 'N', + 'N', Prj->NumStds, Prj_Proposal_DB[Prj->Proposal], Prj->ModifTime, diff --git a/swad_project.h b/swad_project.h index dc2e35454..c965a0665 100644 --- a/swad_project.h +++ b/swad_project.h @@ -39,14 +39,6 @@ #define Prj_MAX_CHARS_PROJECT_TITLE (128 - 1) // 127 #define Prj_MAX_BYTES_PROJECT_TITLE ((Prj_MAX_CHARS_PROJECT_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047 -#define Prj_NUM_TYPES_PREASSIGNED 2 -typedef enum - { - Prj_NOT_PREASSIGNED = 0, - Prj_PREASSIGNED = 1, - } Prj_Preassigned_t; -#define Prj_PREASSIGNED_DEFAULT Prj_NOT_PREASSIGNED - #define Prj_NUM_PROPOSAL_TYPES 3 typedef enum { @@ -67,12 +59,50 @@ typedef enum Prj_ROLE_EVA = 3, // Evaluator } Prj_RoleInProject_t; +#define Prj_NUM_ORDERS 4 +typedef enum + { + Prj_ORDER_START_TIME = 0, + Prj_ORDER_END_TIME = 1, + Prj_ORDER_TITLE = 2, + Prj_ORDER_DEPARTMENT = 3, + } Prj_Order_t; +#define Prj_ORDER_DEFAULT Prj_ORDER_START_TIME + +#define Prj_NUM_WHOSE_PROJECTS 2 +typedef enum + { + Prj_MY__PROJECTS, + Prj_ALL_PROJECTS, + } Prj_WhoseProjects_t; +#define Prj_WHOSE_PROJECTS_DEFAULT Prj_MY__PROJECTS + +#define Prj_NUM_PREASSIGNED_NONPREASSIG 2 +typedef enum + { + Prj_PREASSIGNED = 0, + Prj_NONPREASSIG = 1, + } Prj_PreassignedNonpreassig_t; +#define Prj_NEW_PRJ_PREASSIGNED_NONPREASSIG_DEFAULT Prj_NONPREASSIG +#define Prj_PREASSIGNED_DEFAULT (1 << Prj_PREASSIGNED) // on +#define Prj_NONPREASSIG_DEFAULT (1 << Prj_NONPREASSIG) // on + +#define Prj_NUM_HIDDEN_VISIBL 2 +typedef enum + { + Prj_HIDDEN = 0, + Prj_VISIBL = 1, + } Prj_HiddenVisibl_t; +#define Prj_NEW_PRJ_HIDDEN_VISIBL_DEFAULT Prj_VISIBL +#define Prj_HIDDEN_DEFAULT (1 << Prj_HIDDEN) // on +#define Prj_VISIBL_DEFAULT (1 << Prj_VISIBL) // on + struct Project { long PrjCod; long CrsCod; - bool Hidden; - Prj_Preassigned_t Preassigned; + Prj_HiddenVisibl_t Hidden; + Prj_PreassignedNonpreassig_t Preassigned; unsigned NumStds; Prj_Proposal_t Proposal; time_t CreatTime; @@ -85,31 +115,19 @@ struct Project char URL[Cns_MAX_BYTES_WWW + 1]; }; -#define Prj_NUM_ORDERS 4 -typedef enum - { - Prj_ORDER_START_TIME = 0, - Prj_ORDER_END_TIME = 1, - Prj_ORDER_TITLE = 2, - Prj_ORDER_DEPARTMENT = 3, - } Prj_Order_t; -#define Prj_ORDER_DEFAULT Prj_ORDER_START_TIME - -#define Prj_NUM_WHICH_PROJECTS 2 -typedef enum - { - Prj_ONLY_MY_PROJECTS, - Prj_ALL_PROJECTS, - } Prj_WhichProjects_t; -#define Prj_WHICH_PROJECTS_DEFAULT Prj_ONLY_MY_PROJECTS - /*****************************************************************************/ /***************************** Public prototypes *****************************/ /*****************************************************************************/ void Prj_SeeProjects (void); void Prj_ShowTableAllProjects (void); -void Prj_PutParamWhichPrjs (void); + +void Prj_PutParams (Prj_WhoseProjects_t My_All, + unsigned PreNon, + unsigned HidVis, + Prj_Order_t Order, + unsigned NumPage, + long PrjCod); void Prj_ShowOneUniqueProject (struct Project *Prj); diff --git a/swad_text.c b/swad_text.c index ea5cb8613..db5a0fb9c 100644 --- a/swad_text.c +++ b/swad_text.c @@ -30585,7 +30585,7 @@ const char *Txt_Preassigned_QUESTION = #if L==1 "Preassignat?"; #elif L==2 - "Vorzugeordnet?"; + "Vorbelegt?"; #elif L==3 "Preassigned?"; #elif L==4 @@ -31444,7 +31444,7 @@ const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT] = }; const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES] = - { + { #if L==1 // Prj_PROPOSAL_NEW "Projecte nou" #elif L==2 @@ -31506,8 +31506,9 @@ const char *Txt_PROJECT_STATUS[Prj_NUM_PROPOSAL_TYPES] = #endif }; -const char *Txt_PROJECT_WHICH_PROJECTS[2] = - { +const char *Txt_PROJECT_MY_ALL_PROJECTS[Prj_NUM_WHOSE_PROJECTS] = + { + // Prj_MY__PROJECTS #if L==1 "Només els meus projectes" #elif L==2 @@ -31528,6 +31529,7 @@ const char *Txt_PROJECT_WHICH_PROJECTS[2] = "Apenas os meus projetos" #endif , + // Prj_ALL_PROJECTS #if L==1 "Tots els projectes" #elif L==2 @@ -31549,6 +31551,141 @@ const char *Txt_PROJECT_WHICH_PROJECTS[2] = #endif }; +const char *Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_PLURAL[Prj_NUM_PREASSIGNED_NONPREASSIG] = + { + // Prj_PREASSIGNED +#if L==1 + "Projectes preassignats" +#elif L==2 + "Vorbelegt Projekte" +#elif L==3 + "Preassigned projects" +#elif L==4 + "Proyectos preasignados" +#elif L==5 + "Projets préassignés" +#elif L==6 + "Proyectos preasignados" // Okoteve traducción +#elif L==7 + "Progetti preassegnati" +#elif L==8 + "Zadany projekty" +#elif L==9 + "Projetos pré-atribuídos" +#endif + , + // Prj_NONPREASSIG +#if L==1 + "Projectes no preassignats" +#elif L==2 + "Nicht vorbelegt Projekte" +#elif L==3 + "Non-preassigned projects" +#elif L==4 + "Proyectos no preasignados" +#elif L==5 + "Projets non préassignés" +#elif L==6 + "Proyectos no preasignados" // Okoteve traducción +#elif L==7 + "Progetti non-preassegnati" +#elif L==8 + "Nieprzypisane projekty" +#elif L==9 + "Projetos não pré-atribuídos" +#endif + }; + +const char *Txt_PROJECT_PREASSIGNED_NONPREASSIGNED_SINGUL[Prj_NUM_PREASSIGNED_NONPREASSIG] = + { + // Prj_PREASSIGNED +#if L==1 + "Projecte preassignat" +#elif L==2 + "Vorbelegt Projekt" +#elif L==3 + "Preassigned project" +#elif L==4 + "Proyecto preasignado" +#elif L==5 + "Projet préassigné" +#elif L==6 + "Proyecto preasignado" // Okoteve traducción +#elif L==7 + "Progetto preassegnato" +#elif L==8 + "Zadany projekt" +#elif L==9 + "Projeto pré-atribuído" +#endif + , + // Prj_NONPREASSIG +#if L==1 + "Projecte no preassignat" +#elif L==2 + "Nicht vorbelegt Projekt" +#elif L==3 + "Non-preassigned project" +#elif L==4 + "Proyecto no preasignado" +#elif L==5 + "Projet non préassigné" +#elif L==6 + "Proyecto no preasignado" // Okoteve traducción +#elif L==7 + "Progetto non-preassegnato" +#elif L==8 + "Nieprzypisane projekt" +#elif L==9 + "Projeto não pré-atribuído" +#endif + }; + +const char *Txt_PROJECT_HIDDEN_VISIBL_PROJECTS[Prj_NUM_HIDDEN_VISIBL] = + { + // Prj_HIDDEN +#if L==1 + "Projectes ocults" +#elif L==2 + "Unsichtbare Projekte" +#elif L==3 + "Hidden projects" +#elif L==4 + "Proyectos ocultos" +#elif L==5 + "Projets cachés" +#elif L==6 + "Proyectos ocultos" // Okoteve traducción +#elif L==7 + "Progetti nascosti" +#elif L==8 + "Ukryte projekty" +#elif L==9 + "Projetos ocultos" +#endif + , + // Prj_VISIBL +#if L==1 + "Projectes visibles" +#elif L==2 + "Sichtbar Projekte" +#elif L==3 + "Visible projects" +#elif L==4 + "Proyectos visibles" +#elif L==5 + "Projets visibles" +#elif L==6 + "Proyectos visibles" // Okoteve traducción +#elif L==7 + "Progetti visibili" +#elif L==8 + "Widoczne projekty" +#elif L==9 + "Projetos visíveis" +#endif + }; + const char *Txt_Projects = #if L==1 "Projectes (treballs fi de grau/màster, tesi…)";