mirror of https://github.com/acanas/swad-core.git
Version 17.8
This commit is contained in:
parent
69c1e43fe7
commit
3534acdf30
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
120
swad_project.c
120
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,"<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...
|
||||
|
|
|
@ -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 *****************************/
|
||||
|
|
195
swad_text.c
195
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 <strong>%s</strong> eliminat.";
|
||||
|
|
Loading…
Reference in New Issue