Version 17.8

This commit is contained in:
Antonio Cañas Vargas 2017-09-23 21:15:17 +02:00
parent 69c1e43fe7
commit 3534acdf30
5 changed files with 268 additions and 63 deletions

View File

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

View File

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

View File

@ -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,"<tr>"
"<th class=\"CONTEXT_COL\"></th>"); // 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,"<th class=\"LEFT_MIDDLE\">");
@ -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,"<u>");
}
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,"</th>");
}
fprintf (Gbl.F.Out,"<th class=\"LEFT_MIDDLE\">"
"%s"
"</th>"
"<th class=\"LEFT_MIDDLE\">"
"%s"
"</th>"
"</tr>",
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...

View File

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

View File

@ -30720,27 +30720,6 @@ const char *Txt_Private_available_to_certain_users_identified =
"Privado, dispon&iacute;vel para alguns usu&aacute;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&eacute;but"
#elif L==6
"&Ntilde;epyr&utilde;"
#elif L==7
"Inizio"
#elif L==8
"Pocz&aogon;tek"
#elif L==9
"In&iacute;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&eacute;partement"
#elif L==6
"Peh&#7869;"
#elif L==7
"Dipartimento"
#elif L==8
"Wydzia&lstrok;"
#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&ccedil;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&eacute;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&iacute;cio"
#endif
,
// Prj_ORDER_END_TIME
#if L==1
"Ordenar per data de finalitzaci&oacute;"
#elif L==2
"Sortieren nach Enddatum"
#elif L==3
"Sort by end date"
#elif L==4
"Ordenar por fecha de finalizaci&oacute;n"
#elif L==5
"Trier par date de fin"
#elif L==6
"Ordenar por fecha de finalizaci&oacute;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&eacute;rmino"
#endif
,
// Prj_ORDER_TITLE
#if L==1
"Ordenar per t&iacute;tol"
#elif L==2
"Sortieren nach Titel"
#elif L==3
"Sort by title"
#elif L==4
"Ordenar por t&iacute;tulo"
#elif L==5
"Trier par date de d&eacute;but"
#elif L==6
"Ordenar por t&iacute;tulo" // Okoteve traducción
#elif L==7
"Ordina per titolo"
#elif L==8
"Sortuj wedlug tytu&lstrok;"
#elif L==9
"Classificar por t&iacute;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&eacute;partement"
#elif L==6
"Ordenar por departamento" // Okoteve traducción
#elif L==7
"Ordina per dipartimento"
#elif L==8
"Sortuj wedlug wydzia&lstrok;"
#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 <strong>%s</strong> eliminat.";