mirror of
https://github.com/acanas/swad-core.git
synced 2024-06-17 22:15:43 +02:00
Version 16.161
This commit is contained in:
parent
c5373b7181
commit
465d72923a
|
@ -2361,6 +2361,8 @@ a:hover img.CENTRE_PHOTO_SHOW
|
||||||
padding:6px;
|
padding:6px;
|
||||||
text-align:center;
|
text-align:center;
|
||||||
vertical-align:middle;
|
vertical-align:middle;
|
||||||
|
border:solid 1px;
|
||||||
|
border-color:transparent;
|
||||||
}
|
}
|
||||||
.PREF_ON
|
.PREF_ON
|
||||||
{
|
{
|
213
swad_agenda.c
213
swad_agenda.c
|
@ -993,113 +993,166 @@ static void Agd_GetParamEventOrder (void)
|
||||||
/************************* Get list of agenda events *************************/
|
/************************* Get list of agenda events *************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
#define Agd_MAX_BYTES_SUBQUERY 128
|
||||||
|
|
||||||
static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
|
static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
|
||||||
{
|
{
|
||||||
char Past__FutureEventsSubQuery[256];
|
char UsrSubQuery[Agd_MAX_BYTES_SUBQUERY];
|
||||||
char OrderBySubQuery[256];
|
char Past__FutureEventsSubQuery[Agd_MAX_BYTES_SUBQUERY];
|
||||||
char Query[1024];
|
char PrivatPublicEventsSubQuery[Agd_MAX_BYTES_SUBQUERY];
|
||||||
|
char HiddenVisiblEventsSubQuery[Agd_MAX_BYTES_SUBQUERY];
|
||||||
|
char OrderBySubQuery[Agd_MAX_BYTES_SUBQUERY];
|
||||||
|
char Query[128 + Agd_MAX_BYTES_SUBQUERY * 5];
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
unsigned long NumRows;
|
unsigned long NumRows;
|
||||||
unsigned NumEvent;
|
unsigned NumEvent;
|
||||||
|
bool DoQuery = true;
|
||||||
|
|
||||||
if (Gbl.Agenda.LstIsRead)
|
/***** Initialize list of events *****/
|
||||||
Agd_FreeListEvents ();
|
Agd_FreeListEvents ();
|
||||||
|
|
||||||
/***** Get list of events from database *****/
|
/***** Get list of events from database *****/
|
||||||
switch (Gbl.Agenda.SelectedOrder)
|
/* Build events subqueries */
|
||||||
{
|
|
||||||
case Agd_ORDER_BY_START_DATE:
|
|
||||||
sprintf (OrderBySubQuery,"StartTime,"
|
|
||||||
"EndTime,"
|
|
||||||
"Event,"
|
|
||||||
"Location");
|
|
||||||
break;
|
|
||||||
case Agd_ORDER_BY_END_DATE:
|
|
||||||
sprintf (OrderBySubQuery,"EndTime,"
|
|
||||||
"StartTime,"
|
|
||||||
"Event,"
|
|
||||||
"Location");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (AgendaType)
|
switch (AgendaType)
|
||||||
{
|
{
|
||||||
case Agd_MY_AGENDA_TODAY:
|
case Agd_MY_AGENDA_TODAY:
|
||||||
case Agd_ANOTHER_AGENDA_TODAY: // Today events
|
|
||||||
sprintf (Past__FutureEventsSubQuery,
|
|
||||||
" AND DATE(StartTime)<=CURDATE()"
|
|
||||||
" AND DATE(EndTime)>=CURDATE()");
|
|
||||||
break;
|
|
||||||
case Agd_MY_AGENDA:
|
case Agd_MY_AGENDA:
|
||||||
case Agd_ANOTHER_AGENDA:
|
if (Gbl.Agenda.Past__FutureEvents == 0 ||
|
||||||
switch (Gbl.Agenda.Past__FutureEvents)
|
Gbl.Agenda.PrivatPublicEvents == 0 ||
|
||||||
|
Gbl.Agenda.HiddenVisiblEvents == 0) // All selectors are off
|
||||||
|
DoQuery = false; // Nothing to get from database
|
||||||
|
else
|
||||||
{
|
{
|
||||||
case (1 << Agd_PAST___EVENTS): // Past and today events
|
sprintf (UsrSubQuery,"UsrCod='%ld'",Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||||
sprintf (Past__FutureEventsSubQuery,
|
if (AgendaType == Agd_MY_AGENDA_TODAY)
|
||||||
" AND DATE(StartTime)<=CURDATE()");
|
Str_Copy (Past__FutureEventsSubQuery,
|
||||||
break;
|
" AND DATE(StartTime)<=CURDATE()"
|
||||||
case (1 << Agd_FUTURE_EVENTS): // Today and future events
|
" AND DATE(EndTime)>=CURDATE()",
|
||||||
sprintf (Past__FutureEventsSubQuery,
|
Agd_MAX_BYTES_SUBQUERY); // Today events
|
||||||
" AND DATE(EndTime)>=CURDATE()");
|
else
|
||||||
break;
|
switch (Gbl.Agenda.Past__FutureEvents)
|
||||||
default: // All events
|
{
|
||||||
Past__FutureEventsSubQuery[0] = '\0';
|
case (1 << Agd_PAST___EVENTS):
|
||||||
break;
|
Str_Copy (Past__FutureEventsSubQuery,
|
||||||
|
" AND DATE(StartTime)<=CURDATE()",
|
||||||
|
Agd_MAX_BYTES_SUBQUERY); // Past and today events
|
||||||
|
break;
|
||||||
|
case (1 << Agd_FUTURE_EVENTS):
|
||||||
|
Str_Copy (Past__FutureEventsSubQuery,
|
||||||
|
" AND DATE(EndTime)>=CURDATE()",
|
||||||
|
Agd_MAX_BYTES_SUBQUERY); // Today and future events
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Past__FutureEventsSubQuery[0] = '\0'; // All events
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (Gbl.Agenda.PrivatPublicEvents)
|
||||||
|
{
|
||||||
|
case (1 << Agd_PRIVAT_EVENTS):
|
||||||
|
Str_Copy (PrivatPublicEventsSubQuery," AND Public='N'",
|
||||||
|
Agd_MAX_BYTES_SUBQUERY); // Private events
|
||||||
|
break;
|
||||||
|
case (1 << Agd_PUBLIC_EVENTS):
|
||||||
|
Str_Copy (PrivatPublicEventsSubQuery," AND Public='Y'",
|
||||||
|
Agd_MAX_BYTES_SUBQUERY); // Public events
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
PrivatPublicEventsSubQuery[0] = '\0'; // All events
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (Gbl.Agenda.HiddenVisiblEvents)
|
||||||
|
{
|
||||||
|
case (1 << Agd_HIDDEN_EVENTS):
|
||||||
|
Str_Copy (HiddenVisiblEventsSubQuery," AND Hidden='Y'",
|
||||||
|
Agd_MAX_BYTES_SUBQUERY); // Hidden events
|
||||||
|
break;
|
||||||
|
case (1 << Agd_VISIBL_EVENTS):
|
||||||
|
Str_Copy (HiddenVisiblEventsSubQuery," AND Hidden='N'",
|
||||||
|
Agd_MAX_BYTES_SUBQUERY); // Visible events
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
HiddenVisiblEventsSubQuery[0] = '\0'; // All events
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
switch (AgendaType)
|
|
||||||
{
|
|
||||||
case Agd_MY_AGENDA_TODAY:
|
|
||||||
case Agd_MY_AGENDA:
|
|
||||||
sprintf (Query,"SELECT AgdCod FROM agendas"
|
|
||||||
" WHERE UsrCod='%ld'%s"
|
|
||||||
" ORDER BY %s",
|
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
|
||||||
Past__FutureEventsSubQuery,
|
|
||||||
OrderBySubQuery);
|
|
||||||
break;
|
|
||||||
case Agd_ANOTHER_AGENDA_TODAY:
|
case Agd_ANOTHER_AGENDA_TODAY:
|
||||||
case Agd_ANOTHER_AGENDA:
|
case Agd_ANOTHER_AGENDA:
|
||||||
sprintf (Query,"SELECT AgdCod FROM agendas"
|
sprintf (UsrSubQuery,"UsrCod='%ld'",Gbl.Usrs.Other.UsrDat.UsrCod);
|
||||||
" WHERE UsrCod='%ld'%s"
|
if (AgendaType == Agd_ANOTHER_AGENDA_TODAY)
|
||||||
" AND Public='Y' AND Hidden='N'"
|
Str_Copy (Past__FutureEventsSubQuery,
|
||||||
" AND DATE(EndTime)>=CURDATE()" // Only today and future events
|
" AND DATE(StartTime)<=CURDATE()"
|
||||||
" ORDER BY %s",
|
" AND DATE(EndTime)>=CURDATE()",
|
||||||
Gbl.Usrs.Other.UsrDat.UsrCod,
|
Agd_MAX_BYTES_SUBQUERY); // Today events
|
||||||
Past__FutureEventsSubQuery,
|
else
|
||||||
OrderBySubQuery);
|
Str_Copy (Past__FutureEventsSubQuery,
|
||||||
break;
|
" AND DATE(EndTime)>=CURDATE()",
|
||||||
|
Agd_MAX_BYTES_SUBQUERY); // Today and future events
|
||||||
|
Str_Copy (PrivatPublicEventsSubQuery," AND Public='Y'",
|
||||||
|
Agd_MAX_BYTES_SUBQUERY); // Public events
|
||||||
|
Str_Copy (HiddenVisiblEventsSubQuery," AND Hidden='N'",
|
||||||
|
Agd_MAX_BYTES_SUBQUERY); // Visible events
|
||||||
}
|
}
|
||||||
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get agenda events");
|
|
||||||
|
|
||||||
if (NumRows) // Events found...
|
if (DoQuery)
|
||||||
{
|
{
|
||||||
Gbl.Agenda.Num = (unsigned) NumRows;
|
/* Build order subquery */
|
||||||
|
switch (Gbl.Agenda.SelectedOrder)
|
||||||
|
{
|
||||||
|
case Agd_ORDER_BY_START_DATE:
|
||||||
|
Str_Copy (OrderBySubQuery,"StartTime,"
|
||||||
|
"EndTime,"
|
||||||
|
"Event,"
|
||||||
|
"Location",
|
||||||
|
Agd_MAX_BYTES_SUBQUERY);
|
||||||
|
break;
|
||||||
|
case Agd_ORDER_BY_END_DATE:
|
||||||
|
Str_Copy (OrderBySubQuery,"EndTime,"
|
||||||
|
"StartTime,"
|
||||||
|
"Event,"
|
||||||
|
"Location",
|
||||||
|
Agd_MAX_BYTES_SUBQUERY);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/***** Create list of events *****/
|
/* Build full query */
|
||||||
if ((Gbl.Agenda.LstAgdCods = (long *) calloc (NumRows,sizeof (long))) == NULL)
|
sprintf (Query,"SELECT AgdCod FROM agendas"
|
||||||
Lay_ShowErrorAndExit ("Not enough memory to store list of agenda events.");
|
" WHERE %s%s%s%s"
|
||||||
|
" ORDER BY %s",
|
||||||
|
UsrSubQuery,
|
||||||
|
Past__FutureEventsSubQuery,
|
||||||
|
PrivatPublicEventsSubQuery,
|
||||||
|
HiddenVisiblEventsSubQuery,
|
||||||
|
OrderBySubQuery);
|
||||||
|
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get agenda events");
|
||||||
|
|
||||||
/***** Get the events codes *****/
|
if (NumRows) // Events found...
|
||||||
for (NumEvent = 0;
|
{
|
||||||
NumEvent < Gbl.Agenda.Num;
|
Gbl.Agenda.Num = (unsigned) NumRows;
|
||||||
NumEvent++)
|
|
||||||
{
|
/***** Create list of events *****/
|
||||||
/* Get next event code */
|
if ((Gbl.Agenda.LstAgdCods = (long *) calloc (NumRows,sizeof (long))) == NULL)
|
||||||
row = mysql_fetch_row (mysql_res);
|
Lay_ShowErrorAndExit ("Not enough memory to store list of agenda events.");
|
||||||
if ((Gbl.Agenda.LstAgdCods[NumEvent] = Str_ConvertStrCodToLongCod (row[0])) < 0)
|
|
||||||
Lay_ShowErrorAndExit ("Error: wrong event code.");
|
/***** Get the events codes *****/
|
||||||
}
|
for (NumEvent = 0;
|
||||||
|
NumEvent < Gbl.Agenda.Num;
|
||||||
|
NumEvent++)
|
||||||
|
{
|
||||||
|
/* Get next event code */
|
||||||
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
if ((Gbl.Agenda.LstAgdCods[NumEvent] = Str_ConvertStrCodToLongCod (row[0])) < 0)
|
||||||
|
Lay_ShowErrorAndExit ("Error: wrong event code.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/***** Free structure that stores the query result *****/
|
||||||
|
DB_FreeMySQLResult (&mysql_res);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Gbl.Agenda.Num = 0;
|
Gbl.Agenda.Num = 0;
|
||||||
|
|
||||||
/***** Free structure that stores the query result *****/
|
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
|
||||||
|
|
||||||
Gbl.Agenda.LstIsRead = true;
|
Gbl.Agenda.LstIsRead = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -210,13 +210,14 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 16.160.1 (2017-03-21)"
|
#define Log_PLATFORM_VERSION "SWAD 16.161 (2017-03-22)"
|
||||||
#define CSS_FILE "swad16.157.css"
|
#define CSS_FILE "swad16.161.css"
|
||||||
#define JS_FILE "swad16.144.js"
|
#define JS_FILE "swad16.144.js"
|
||||||
|
|
||||||
// Number of lines (includes comments but not blank lines) has been got with the following command:
|
// 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
|
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
|
||||||
/*
|
/*
|
||||||
|
Version 16.161: Mar 22, 2017 Changes in agenda. (217404 lines)
|
||||||
Version 16.160.2: Mar 21, 2017 Changes in agenda. Not finished. (217348 lines)
|
Version 16.160.2: Mar 21, 2017 Changes in agenda. Not finished. (217348 lines)
|
||||||
Version 16.160.1: Mar 21, 2017 Changes in agenda. Not finished. (217347 lines)
|
Version 16.160.1: Mar 21, 2017 Changes in agenda. Not finished. (217347 lines)
|
||||||
Version 16.160: Mar 21, 2017 Changes in agenda. Not finished. (217413 lines)
|
Version 16.160: Mar 21, 2017 Changes in agenda. Not finished. (217413 lines)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user