From 3534acdf30d54194245d522d671efa567824416b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Sat, 23 Sep 2017 21:15:17 +0200 Subject: [PATCH] Version 17.8 --- swad_changelog.h | 3 +- swad_global.h | 3 +- swad_project.c | 120 +++++++++++++++++++---------- swad_project.h | 10 ++- swad_text.c | 195 ++++++++++++++++++++++++++++++++++++++++++----- 5 files changed, 268 insertions(+), 63 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index 6fde66e06..801f71122 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -252,13 +252,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 17.7.1 (2017-09-23)" +#define Log_PLATFORM_VERSION "SWAD 17.8 (2017-09-23)" #define CSS_FILE "swad17.0.css" #define JS_FILE "swad16.206.3.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.8: Sep 23, 2017 Projects can be ordered by start, end, title and department. (230963 lines) Version 17.7.1: Sep 23, 2017 Changes in listing of projects. (230764 lines) Version 17.7: Sep 23, 2017 Remove user from project. (230798 lines) Version 17.6: Sep 22, 2017 Actions to remove user from project. (230559 lines) diff --git a/swad_global.h b/swad_global.h index 139886604..62ac77182 100644 --- a/swad_global.h +++ b/swad_global.h @@ -67,6 +67,7 @@ #include "swad_photo.h" #include "swad_place.h" #include "swad_plugin.h" +#include "swad_project.h" #include "swad_record.h" #include "swad_search.h" #include "swad_session.h" @@ -574,7 +575,7 @@ struct Globals bool LstIsRead; // Is the list already read from database, or it needs to be read? unsigned Num; // Number of projects long *LstPrjCods; // List of project codes - Dat_StartEndTime_t SelectedOrder; + Prj_Order_t SelectedOrder; long PrjCodToEdit; // Used as parameter in contextual links unsigned CurrentPage; } Prjs; diff --git a/swad_project.c b/swad_project.c index 59be84213..392ad4399 100644 --- a/swad_project.c +++ b/swad_project.c @@ -207,16 +207,14 @@ static void Prj_ShowAllProjects (void) static void Prj_PutHeadForSeeing (bool PrintView) { - extern const char *Txt_START_END_TIME_HELP[Dat_NUM_START_END_TIME]; - extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME]; - extern const char *Txt_Project; - extern const char *Txt_Department; - Dat_StartEndTime_t Order; + extern const char *Txt_PROJECT_ORDER_HELP[Prj_NUM_ORDERS]; + extern const char *Txt_PROJECT_ORDER[Prj_NUM_ORDERS]; + Prj_Order_t Order; fprintf (Gbl.F.Out,"" ""); // Column for contextual icons - for (Order = Dat_START_TIME; - Order <= Dat_END_TIME; + for (Order = (Prj_Order_t) 0; + Order <= (Prj_Order_t) (Prj_NUM_ORDERS - 1); Order++) { fprintf (Gbl.F.Out,""); @@ -226,11 +224,11 @@ static void Prj_PutHeadForSeeing (bool PrintView) Act_FormStart (ActSeePrj); Pag_PutHiddenParamPagNum (Pag_PROJECTS,Gbl.Prjs.CurrentPage); Par_PutHiddenParamUnsigned ("Order",(unsigned) Order); - Act_LinkFormSubmit (Txt_START_END_TIME_HELP[Order],"TIT_TBL",NULL); + Act_LinkFormSubmit (Txt_PROJECT_ORDER_HELP[Order],"TIT_TBL",NULL); if (Order == Gbl.Prjs.SelectedOrder) fprintf (Gbl.F.Out,""); } - fprintf (Gbl.F.Out,"%s",Txt_START_END_TIME[Order]); + fprintf (Gbl.F.Out,"%s",Txt_PROJECT_ORDER[Order]); if (!PrintView) { if (Order == Gbl.Prjs.SelectedOrder) @@ -241,15 +239,6 @@ static void Prj_PutHeadForSeeing (bool PrintView) fprintf (Gbl.F.Out,""); } - fprintf (Gbl.F.Out,"" - "%s" - "" - "" - "%s" - "" - "", - Txt_Project, - Txt_Department); } /*****************************************************************************/ @@ -1045,10 +1034,10 @@ static bool Prj_CheckIfICanRemUsrFromPrj (void) static void Prj_GetParamPrjOrder (void) { - Gbl.Prjs.SelectedOrder = (Dat_StartEndTime_t) + Gbl.Prjs.SelectedOrder = (Prj_Order_t) Par_GetParToUnsignedLong ("Order", 0, - Dat_NUM_START_END_TIME - 1, + Prj_NUM_ORDERS - 1, (unsigned long) Prj_ORDER_DEFAULT); } @@ -1127,30 +1116,83 @@ void Prj_GetListProjects (void) Prj_FreeListProjects (); /***** Get list of projects from database *****/ - switch (Gbl.Usrs.Me.Role.Logged) - { - case Rol_TCH: - case Rol_SYS_ADM: - HiddenSubQuery[0] = '\0'; - break; - default: - sprintf (HiddenSubQuery," AND Hidden='N'"); - break; - } switch (Gbl.Prjs.SelectedOrder) { - case Dat_START_TIME: - sprintf (OrderBySubQuery,"StartTime DESC,EndTime DESC,Title DESC"); + case Prj_ORDER_START_TIME: + case Prj_ORDER_END_TIME: + case Prj_ORDER_TITLE: + /* Hidden subquery */ + switch (Gbl.Usrs.Me.Role.Logged) + { + case Rol_TCH: + case Rol_SYS_ADM: + HiddenSubQuery[0] = '\0'; + break; + default: + sprintf (HiddenSubQuery," AND Hidden='N'"); + break; + } + + /* Order subquery */ + switch (Gbl.Prjs.SelectedOrder) + { + case Prj_ORDER_START_TIME: + sprintf (OrderBySubQuery,"StartTime DESC," + "EndTime DESC," + "Title"); + break; + case Prj_ORDER_END_TIME: + sprintf (OrderBySubQuery,"EndTime DESC," + "StartTime DESC," + "Title"); + break; + case Prj_ORDER_TITLE: + sprintf (OrderBySubQuery,"Title," + "StartTime DESC," + "EndTime DESC"); + break; + case Prj_ORDER_DEPARTMENT: // Not applicable + break; + } + + /* Query */ + sprintf (Query,"SELECT PrjCod" + " FROM projects" + " WHERE CrsCod=%ld%s" + " ORDER BY %s", + Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery, + OrderBySubQuery); break; - case Dat_END_TIME: - sprintf (OrderBySubQuery,"EndTime DESC,StartTime DESC,Title DESC"); + case Prj_ORDER_DEPARTMENT: + /* Hidden subquery */ + switch (Gbl.Usrs.Me.Role.Logged) + { + case Rol_TCH: + case Rol_SYS_ADM: + HiddenSubQuery[0] = '\0'; + break; + default: + sprintf (HiddenSubQuery," AND projects.Hidden='N'"); + break; + } + + /* Order subquery */ + sprintf (OrderBySubQuery,"departments.FullName," + "projects.StartTime DESC," + "projects.EndTime DESC," + "projects.Title"); + + /* Query */ + 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; } - sprintf (Query,"SELECT PrjCod" - " FROM projects" - " WHERE CrsCod=%ld%s" - " ORDER BY %s", - Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,OrderBySubQuery); + NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get projects"); if (NumRows) // Projects found... diff --git a/swad_project.h b/swad_project.h index 6d2d62b28..fedbbf4e6 100644 --- a/swad_project.h +++ b/swad_project.h @@ -72,7 +72,15 @@ struct Project char URL[Cns_MAX_BYTES_WWW + 1]; }; -#define Prj_ORDER_DEFAULT Dat_START_TIME +#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 /*****************************************************************************/ /***************************** Public prototypes *****************************/ diff --git a/swad_text.c b/swad_text.c index 627819aec..3d96fab1c 100644 --- a/swad_text.c +++ b/swad_text.c @@ -30720,27 +30720,6 @@ const char *Txt_Private_available_to_certain_users_identified = "Privado, disponível para alguns usuários identificados"; #endif -const char *Txt_Project = -#if L==1 - "Projecte"; -#elif L==2 - "Projekt"; -#elif L==3 - "Project"; -#elif L==4 - "Proyecto"; -#elif L==5 - "Projet"; -#elif L==6 - "Proyecto"; // Okoteve traducción -#elif L==7 - "Progetto"; -#elif L==8 - "Projekt"; -#elif L==9 - "Projeto"; -#endif - const char *Txt_Project_data = #if L==1 "Dades del projecte"; @@ -30825,6 +30804,180 @@ const char *Txt_Project_members = "Membros do projeto"; #endif +const char *Txt_PROJECT_ORDER[Prj_NUM_ORDERS] = + { + // Prj_ORDER_START_TIME +#if L==1 + "Inici" +#elif L==2 + "Start" +#elif L==3 + "Start" +#elif L==4 + "Inicio" +#elif L==5 + "Début" +#elif L==6 + "Ñepyrũ" +#elif L==7 + "Inizio" +#elif L==8 + "Początek" +#elif L==9 + "Início" +#endif + , + // Prj_ORDER_END_TIME +#if L==1 + "Final" +#elif L==2 + "Ende" +#elif L==3 + "End" +#elif L==4 + "Final" +#elif L==5 + "Fin" +#elif L==6 + "Paha" +#elif L==7 + "Fine" +#elif L==8 + "Koniec" +#elif L==9 + "Fim" +#endif + , + // Prj_ORDER_TITLE +#if L==1 + "Projecte" +#elif L==2 + "Projekt" +#elif L==3 + "Project" +#elif L==4 + "Proyecto" +#elif L==5 + "Projet" +#elif L==6 + "Proyecto" // Okoteve traducción +#elif L==7 + "Progetto" +#elif L==8 + "Projekt" +#elif L==9 + "Projeto" +#endif + , + // Prj_ORDER_DEPARTMENT +#if L==1 + "Departament" +#elif L==2 + "Abteilung" +#elif L==3 + "Department" +#elif L==4 + "Departamento" +#elif L==5 + "Département" +#elif L==6 + "Pehẽ" +#elif L==7 + "Dipartimento" +#elif L==8 + "Wydział" +#elif L==9 + "Departamento" +#endif + }; + +const char *Txt_PROJECT_ORDER_HELP[Prj_NUM_ORDERS] = + { + // Prj_ORDER_START_TIME +#if L==1 + "Ordenar per data de començament" +#elif L==2 + "Sortieren nach Startdatum" +#elif L==3 + "Sort by start date" +#elif L==4 + "Ordenar por fecha de comienzo" +#elif L==5 + "Trier par date de début" +#elif L==6 + "Ordenar por fecha de comienzo" // Okoteve traducción +#elif L==7 + "Ordina per data di inizio" +#elif L==8 + "Sortuj wedlug daty rozpoczecia" +#elif L==9 + "Classificar por data de início" +#endif + , + // Prj_ORDER_END_TIME +#if L==1 + "Ordenar per data de finalització" +#elif L==2 + "Sortieren nach Enddatum" +#elif L==3 + "Sort by end date" +#elif L==4 + "Ordenar por fecha de finalización" +#elif L==5 + "Trier par date de fin" +#elif L==6 + "Ordenar por fecha de finalización" // Okoteve traducción +#elif L==7 + "Ordina per data di fine" +#elif L==8 + "Sortuj wedlug daty zakonczenia" +#elif L==9 + "Classificar por data de término" +#endif + , + // Prj_ORDER_TITLE +#if L==1 + "Ordenar per títol" +#elif L==2 + "Sortieren nach Titel" +#elif L==3 + "Sort by title" +#elif L==4 + "Ordenar por título" +#elif L==5 + "Trier par date de début" +#elif L==6 + "Ordenar por título" // Okoteve traducción +#elif L==7 + "Ordina per titolo" +#elif L==8 + "Sortuj wedlug tytuł" +#elif L==9 + "Classificar por título" +#endif + , + // Prj_ORDER_DEPARTMENT +#if L==1 + "Ordenar per departament" +#elif L==2 + "Sortieren nach Abteilung" +#elif L==3 + "Sort by department" +#elif L==4 + "Ordenar por departamento" +#elif L==5 + "Trier par département" +#elif L==6 + "Ordenar por departamento" // Okoteve traducción +#elif L==7 + "Ordina per dipartimento" +#elif L==8 + "Sortuj wedlug wydział" +#elif L==9 + "Classificar por departamento" +#endif + }; + const char *Txt_Project_X_removed = // Warning: it is very important to include %s in the following sentences #if L==1 "Projecte %s eliminat.";