mirror of https://github.com/acanas/swad-core.git
Version 18.8
This commit is contained in:
parent
8a4804bd33
commit
c54ed0e6eb
|
@ -25,8 +25,6 @@
|
|||
/*********************************** Headers *********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define _GNU_SOURCE // For asprintf
|
||||
#include <stdio.h> // For asprintf
|
||||
#include <string.h> // For string functions
|
||||
|
||||
#include "swad_account.h"
|
||||
|
@ -183,7 +181,6 @@ void Acc_CheckIfEmptyAccountExists (void)
|
|||
unsigned NumUsrs;
|
||||
unsigned NumUsr;
|
||||
struct UsrData UsrDat;
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
|
||||
|
@ -203,14 +200,13 @@ void Acc_CheckIfEmptyAccountExists (void)
|
|||
/***** Check if there are users with this user's ID *****/
|
||||
if (ID_CheckIfUsrIDIsValid (ID))
|
||||
{
|
||||
if (asprintf (&Query,"SELECT usr_IDs.UsrCod"
|
||||
" FROM usr_IDs,usr_data"
|
||||
" WHERE usr_IDs.UsrID='%s'"
|
||||
" AND usr_IDs.UsrCod=usr_data.UsrCod"
|
||||
" AND usr_data.Password=''",
|
||||
ID) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumUsrs = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get user's codes");
|
||||
DB_BuildQuery ("SELECT usr_IDs.UsrCod"
|
||||
" FROM usr_IDs,usr_data"
|
||||
" WHERE usr_IDs.UsrID='%s'"
|
||||
" AND usr_IDs.UsrCod=usr_data.UsrCod"
|
||||
" AND usr_data.Password=''",
|
||||
ID);
|
||||
NumUsrs = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get user's codes");
|
||||
|
||||
if (NumUsrs)
|
||||
{
|
||||
|
|
|
@ -5120,16 +5120,14 @@ char *Act_GetActionTextFromDB (long ActCod,
|
|||
char ActTxt[Act_MAX_BYTES_ACTION_TXT + 1])
|
||||
{
|
||||
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
|
||||
/***** Get test for an action from database *****/
|
||||
if (asprintf (&Query,"SELECT Txt FROM actions"
|
||||
" WHERE ActCod=%ld AND Language='%s'",
|
||||
ActCod,Txt_STR_LANG_ID[Txt_LANGUAGE_ES]) < 0) // !!! TODO: Replace Txt_LANGUAGE_ES by Gbl.Prefs.Language !!!
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get text for an action"))
|
||||
DB_BuildQuery ("SELECT Txt FROM actions"
|
||||
" WHERE ActCod=%ld AND Language='%s'",
|
||||
ActCod,Txt_STR_LANG_ID[Txt_LANGUAGE_ES]); // !!! TODO: Replace Txt_LANGUAGE_ES by Gbl.Prefs.Language !!!
|
||||
if (DB_QuerySELECT_new (&mysql_res,"can not get text for an action"))
|
||||
{
|
||||
/***** Get text *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
|
230
swad_agenda.c
230
swad_agenda.c
|
@ -987,7 +987,6 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
|
|||
char PrivatPublicEventsSubQuery[Agd_MAX_BYTES_SUBQUERY];
|
||||
char HiddenVisiblEventsSubQuery[Agd_MAX_BYTES_SUBQUERY];
|
||||
char OrderBySubQuery[Agd_MAX_BYTES_SUBQUERY];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
|
@ -1102,16 +1101,15 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
|
|||
}
|
||||
|
||||
/* Build full query */
|
||||
if (asprintf (&Query,"SELECT AgdCod FROM agendas"
|
||||
" WHERE %s%s%s%s"
|
||||
" ORDER BY %s",
|
||||
UsrSubQuery,
|
||||
Past__FutureEventsSubQuery,
|
||||
PrivatPublicEventsSubQuery,
|
||||
HiddenVisiblEventsSubQuery,
|
||||
OrderBySubQuery) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get agenda events");
|
||||
DB_BuildQuery ("SELECT AgdCod FROM agendas"
|
||||
" WHERE %s%s%s%s"
|
||||
" ORDER BY %s",
|
||||
UsrSubQuery,
|
||||
Past__FutureEventsSubQuery,
|
||||
PrivatPublicEventsSubQuery,
|
||||
HiddenVisiblEventsSubQuery,
|
||||
OrderBySubQuery);
|
||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get agenda events");
|
||||
|
||||
if (NumRows) // Events found...
|
||||
{
|
||||
|
@ -1148,24 +1146,22 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
|
|||
|
||||
static void Agd_GetDataOfEventByCod (struct AgendaEvent *AgdEvent)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
|
||||
/***** Build query *****/
|
||||
if (asprintf (&Query,"SELECT AgdCod,Public,Hidden,"
|
||||
"UNIX_TIMESTAMP(StartTime),"
|
||||
"UNIX_TIMESTAMP(EndTime),"
|
||||
"NOW()>EndTime," // Past event?
|
||||
"NOW()<StartTime," // Future event?
|
||||
"Event,Location"
|
||||
" FROM agendas"
|
||||
" WHERE AgdCod=%ld AND UsrCod=%ld",
|
||||
AgdEvent->AgdCod,AgdEvent->UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT AgdCod,Public,Hidden,"
|
||||
"UNIX_TIMESTAMP(StartTime),"
|
||||
"UNIX_TIMESTAMP(EndTime),"
|
||||
"NOW()>EndTime," // Past event?
|
||||
"NOW()<StartTime," // Future event?
|
||||
"Event,Location"
|
||||
" FROM agendas"
|
||||
" WHERE AgdCod=%ld AND UsrCod=%ld",
|
||||
AgdEvent->AgdCod,AgdEvent->UsrCod);
|
||||
|
||||
/***** Get data of event from database *****/
|
||||
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get agenda event data")) // Event found...
|
||||
if (DB_QuerySELECT_new (&mysql_res,"can not get agenda event data")) // Event found...
|
||||
{
|
||||
/* Get row:
|
||||
row[0] AgdCod
|
||||
|
@ -1248,17 +1244,15 @@ void Agd_FreeListEvents (void)
|
|||
static void Agd_GetEventTxtFromDB (struct AgendaEvent *AgdEvent,
|
||||
char Txt[Cns_MAX_BYTES_TEXT + 1])
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
|
||||
/***** Get text of event from database *****/
|
||||
if (asprintf (&Query,"SELECT Txt FROM agendas"
|
||||
" WHERE AgdCod=%ld AND UsrCod=%ld",
|
||||
AgdEvent->AgdCod,AgdEvent->UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get event text");
|
||||
DB_BuildQuery ("SELECT Txt FROM agendas"
|
||||
" WHERE AgdCod=%ld AND UsrCod=%ld",
|
||||
AgdEvent->AgdCod,AgdEvent->UsrCod);
|
||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get event text");
|
||||
|
||||
/***** The result of the query must have one row or none *****/
|
||||
if (NumRows == 1)
|
||||
|
@ -1797,7 +1791,6 @@ unsigned Agd_GetNumEventsFromUsr (long UsrCod)
|
|||
|
||||
unsigned Agd_GetNumUsrsWithEvents (Sco_Scope_t Scope)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumUsrs;
|
||||
|
@ -1806,70 +1799,64 @@ unsigned Agd_GetNumUsrsWithEvents (Sco_Scope_t Scope)
|
|||
switch (Scope)
|
||||
{
|
||||
case Sco_SCOPE_SYS:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT UsrCod)"
|
||||
" FROM agendas"
|
||||
" WHERE UsrCod>0") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT UsrCod)"
|
||||
" FROM agendas"
|
||||
" WHERE UsrCod>0");
|
||||
break;
|
||||
case Sco_SCOPE_CTY:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT agendas.UsrCod)"
|
||||
" FROM institutions,centres,degrees,courses,crs_usr,agendas"
|
||||
" WHERE institutions.CtyCod=%ld"
|
||||
" AND institutions.InsCod=centres.InsCod"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentCty.Cty.CtyCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT agendas.UsrCod)"
|
||||
" FROM institutions,centres,degrees,courses,crs_usr,agendas"
|
||||
" WHERE institutions.CtyCod=%ld"
|
||||
" AND institutions.InsCod=centres.InsCod"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentCty.Cty.CtyCod);
|
||||
break;
|
||||
case Sco_SCOPE_INS:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT agendas.UsrCod)"
|
||||
" FROM centres,degrees,courses,crs_usr,agendas"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentIns.Ins.InsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT agendas.UsrCod)"
|
||||
" FROM centres,degrees,courses,crs_usr,agendas"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentIns.Ins.InsCod);
|
||||
break;
|
||||
case Sco_SCOPE_CTR:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT agendas.UsrCod)"
|
||||
" FROM degrees,courses,crs_usr,agendas"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT agendas.UsrCod)"
|
||||
" FROM degrees,courses,crs_usr,agendas"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod);
|
||||
break;
|
||||
case Sco_SCOPE_DEG:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT agendas.UsrCod)"
|
||||
" FROM courses,crs_usr,agendas"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT agendas.UsrCod)"
|
||||
" FROM courses,crs_usr,agendas"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod);
|
||||
break;
|
||||
case Sco_SCOPE_CRS:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT agendas.UsrCod)"
|
||||
" FROM crs_usr,agendas"
|
||||
" WHERE crs_usr.CrsCod=%ld"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentCrs.Crs.CrsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT agendas.UsrCod)"
|
||||
" FROM crs_usr,agendas"
|
||||
" WHERE crs_usr.CrsCod=%ld"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentCrs.Crs.CrsCod);
|
||||
break;
|
||||
default:
|
||||
Lay_WrongScopeExit ();
|
||||
break;
|
||||
}
|
||||
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of users with events");
|
||||
DB_QuerySELECT_new (&mysql_res,"can not get number of users with events");
|
||||
|
||||
/***** Get number of users *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -1889,7 +1876,6 @@ unsigned Agd_GetNumUsrsWithEvents (Sco_Scope_t Scope)
|
|||
|
||||
unsigned Agd_GetNumEvents (Sco_Scope_t Scope)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumEvents;
|
||||
|
@ -1898,66 +1884,60 @@ unsigned Agd_GetNumEvents (Sco_Scope_t Scope)
|
|||
switch (Scope)
|
||||
{
|
||||
case Sco_SCOPE_SYS:
|
||||
if (asprintf (&Query,"SELECT COUNT(*)"
|
||||
" FROM agendas"
|
||||
" WHERE UsrCod>0") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*)"
|
||||
" FROM agendas"
|
||||
" WHERE UsrCod>0");
|
||||
break;
|
||||
case Sco_SCOPE_CTY:
|
||||
if (asprintf (&Query,"SELECT COUNT(*)"
|
||||
" FROM institutions,centres,degrees,courses,crs_usr,agendas"
|
||||
" WHERE institutions.CtyCod=%ld"
|
||||
" AND institutions.InsCod=centres.InsCod"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentCty.Cty.CtyCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*)"
|
||||
" FROM institutions,centres,degrees,courses,crs_usr,agendas"
|
||||
" WHERE institutions.CtyCod=%ld"
|
||||
" AND institutions.InsCod=centres.InsCod"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentCty.Cty.CtyCod);
|
||||
break;
|
||||
case Sco_SCOPE_INS:
|
||||
if (asprintf (&Query,"SELECT COUNT(*)"
|
||||
" FROM centres,degrees,courses,crs_usr,agendas"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentIns.Ins.InsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*)"
|
||||
" FROM centres,degrees,courses,crs_usr,agendas"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentIns.Ins.InsCod);
|
||||
break;
|
||||
case Sco_SCOPE_CTR:
|
||||
if (asprintf (&Query,"SELECT COUNT(*)"
|
||||
" FROM degrees,courses,crs_usr,agendas"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*)"
|
||||
" FROM degrees,courses,crs_usr,agendas"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod);
|
||||
break;
|
||||
case Sco_SCOPE_DEG:
|
||||
if (asprintf (&Query,"SELECT COUNT(*)"
|
||||
" FROM courses,crs_usr,agendas"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*)"
|
||||
" FROM courses,crs_usr,agendas"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod);
|
||||
break;
|
||||
case Sco_SCOPE_CRS:
|
||||
if (asprintf (&Query,"SELECT COUNT(*)"
|
||||
" FROM crs_usr,agendas"
|
||||
" WHERE crs_usr.CrsCod=%ld"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentCrs.Crs.CrsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*)"
|
||||
" FROM crs_usr,agendas"
|
||||
" WHERE crs_usr.CrsCod=%ld"
|
||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||
Gbl.CurrentCrs.Crs.CrsCod);
|
||||
break;
|
||||
default:
|
||||
Lay_WrongScopeExit ();
|
||||
break;
|
||||
}
|
||||
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of events");
|
||||
DB_QuerySELECT_new (&mysql_res,"can not get number of events");
|
||||
|
||||
/***** Get number of events *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
|
|
@ -83,7 +83,6 @@ void Ann_ShowAllAnnouncements (void)
|
|||
extern const char *Hlp_MESSAGES_Announcements;
|
||||
extern const char *Txt_Announcements;
|
||||
extern const char *Txt_No_announcements;
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumAnnouncements;
|
||||
|
@ -100,34 +99,31 @@ void Ann_ShowAllAnnouncements (void)
|
|||
if (ICanEdit)
|
||||
{
|
||||
/* Select all announcements */
|
||||
if (asprintf (&Query,"SELECT AnnCod,Status,Roles,Subject,Content"
|
||||
" FROM announcements"
|
||||
" ORDER BY AnnCod DESC") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT AnnCod,Status,Roles,Subject,Content"
|
||||
" FROM announcements"
|
||||
" ORDER BY AnnCod DESC");
|
||||
}
|
||||
else if (Gbl.Usrs.Me.Logged)
|
||||
{
|
||||
/* Select only announcements I can see */
|
||||
Rol_GetRolesInAllCrssIfNotYetGot (&Gbl.Usrs.Me.UsrDat);
|
||||
if (asprintf (&Query,"SELECT AnnCod,Status,Roles,Subject,Content"
|
||||
" FROM announcements"
|
||||
" WHERE (Roles&%u)<>0 "
|
||||
" ORDER BY AnnCod DESC",
|
||||
(unsigned) Gbl.Usrs.Me.UsrDat.Roles.InCrss) < 0) // All my roles in different courses
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT AnnCod,Status,Roles,Subject,Content"
|
||||
" FROM announcements"
|
||||
" WHERE (Roles&%u)<>0 "
|
||||
" ORDER BY AnnCod DESC",
|
||||
(unsigned) Gbl.Usrs.Me.UsrDat.Roles.InCrss); // All my roles in different courses
|
||||
}
|
||||
else // No user logged
|
||||
{
|
||||
/* Select only active announcements for unknown users */
|
||||
if (asprintf (&Query,"SELECT AnnCod,Status,Roles,Subject,Content"
|
||||
" FROM announcements"
|
||||
" WHERE Status=%u AND (Roles&%u)<>0 "
|
||||
" ORDER BY AnnCod DESC",
|
||||
(unsigned) Ann_ACTIVE_ANNOUNCEMENT,
|
||||
(unsigned) (1 << Rol_UNK)) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT AnnCod,Status,Roles,Subject,Content"
|
||||
" FROM announcements"
|
||||
" WHERE Status=%u AND (Roles&%u)<>0 "
|
||||
" ORDER BY AnnCod DESC",
|
||||
(unsigned) Ann_ACTIVE_ANNOUNCEMENT,
|
||||
(unsigned) (1 << Rol_UNK));
|
||||
}
|
||||
NumAnnouncements = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get announcements");
|
||||
NumAnnouncements = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get announcements");
|
||||
|
||||
/***** Start box *****/
|
||||
Box_StartBox ("550px",Txt_Announcements,
|
||||
|
@ -216,7 +212,6 @@ static void Ann_PutButtonToAddNewAnnouncement (void)
|
|||
|
||||
void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumAnnouncements;
|
||||
|
@ -227,16 +222,15 @@ void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void)
|
|||
|
||||
/***** Select announcements not seen *****/
|
||||
Rol_GetRolesInAllCrssIfNotYetGot (&Gbl.Usrs.Me.UsrDat);
|
||||
if (asprintf (&Query,"SELECT AnnCod,Subject,Content FROM announcements"
|
||||
" WHERE Status=%u AND (Roles&%u)<>0 "
|
||||
" AND AnnCod NOT IN"
|
||||
" (SELECT AnnCod FROM ann_seen WHERE UsrCod=%ld)"
|
||||
" ORDER BY AnnCod DESC", // Newest first
|
||||
(unsigned) Ann_ACTIVE_ANNOUNCEMENT,
|
||||
(unsigned) Gbl.Usrs.Me.UsrDat.Roles.InCrss, // All my roles in different courses
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumAnnouncements = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get announcements");
|
||||
DB_BuildQuery ("SELECT AnnCod,Subject,Content FROM announcements"
|
||||
" WHERE Status=%u AND (Roles&%u)<>0 "
|
||||
" AND AnnCod NOT IN"
|
||||
" (SELECT AnnCod FROM ann_seen WHERE UsrCod=%ld)"
|
||||
" ORDER BY AnnCod DESC", // Newest first
|
||||
(unsigned) Ann_ACTIVE_ANNOUNCEMENT,
|
||||
(unsigned) Gbl.Usrs.Me.UsrDat.Roles.InCrss, // All my roles in different courses
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
NumAnnouncements = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get announcements");
|
||||
|
||||
/***** Show the announcements *****/
|
||||
if (NumAnnouncements)
|
||||
|
|
|
@ -81,7 +81,7 @@ static void Asg_GetParamAsgOrder (void);
|
|||
|
||||
static void Asg_PutFormsToRemEditOneAsg (long AsgCod,bool Hidden);
|
||||
static void Asg_PutParams (void);
|
||||
static void Asg_GetDataOfAssignment (struct Assignment *Asg,const char *Query);
|
||||
static void Asg_GetDataOfAssignment (struct Assignment *Asg);
|
||||
static void Asg_ResetAssignment (struct Assignment *Asg);
|
||||
static void Asg_GetAssignmentTxtFromDB (long AsgCod,char Txt[Cns_MAX_BYTES_TEXT + 1]);
|
||||
static void Asg_PutParamAsgCod (long AsgCod);
|
||||
|
@ -623,7 +623,6 @@ void Asg_GetListAssignments (void)
|
|||
{
|
||||
char HiddenSubQuery[256];
|
||||
char OrderBySubQuery[256];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
|
@ -653,30 +652,24 @@ void Asg_GetListAssignments (void)
|
|||
break;
|
||||
}
|
||||
if (Gbl.CurrentCrs.Grps.WhichGrps == Grp_ONLY_MY_GROUPS)
|
||||
{
|
||||
if (asprintf (&Query,"SELECT AsgCod"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod=%ld%s"
|
||||
" AND (AsgCod NOT IN (SELECT AsgCod FROM asg_grp) OR"
|
||||
" AsgCod IN (SELECT asg_grp.AsgCod FROM asg_grp,crs_grp_usr"
|
||||
" WHERE crs_grp_usr.UsrCod=%ld AND asg_grp.GrpCod=crs_grp_usr.GrpCod))"
|
||||
" ORDER BY %s",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
HiddenSubQuery,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
OrderBySubQuery) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
}
|
||||
DB_BuildQuery ("SELECT AsgCod"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod=%ld%s"
|
||||
" AND (AsgCod NOT IN (SELECT AsgCod FROM asg_grp) OR"
|
||||
" AsgCod IN (SELECT asg_grp.AsgCod FROM asg_grp,crs_grp_usr"
|
||||
" WHERE crs_grp_usr.UsrCod=%ld AND asg_grp.GrpCod=crs_grp_usr.GrpCod))"
|
||||
" ORDER BY %s",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
HiddenSubQuery,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
OrderBySubQuery);
|
||||
else // Gbl.CurrentCrs.Grps.WhichGrps == Grp_ALL_GROUPS
|
||||
{
|
||||
if (asprintf (&Query,"SELECT AsgCod"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod=%ld%s"
|
||||
" ORDER BY %s",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,OrderBySubQuery) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
}
|
||||
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get assignments");
|
||||
DB_BuildQuery ("SELECT AsgCod"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod=%ld%s"
|
||||
" ORDER BY %s",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,OrderBySubQuery);
|
||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get assignments");
|
||||
|
||||
if (NumRows) // Assignments found...
|
||||
{
|
||||
|
@ -712,23 +705,20 @@ void Asg_GetListAssignments (void)
|
|||
|
||||
void Asg_GetDataOfAssignmentByCod (struct Assignment *Asg)
|
||||
{
|
||||
char *Query;
|
||||
|
||||
if (Asg->AsgCod > 0)
|
||||
{
|
||||
/***** Build query *****/
|
||||
if (asprintf (&Query,"SELECT AsgCod,Hidden,UsrCod,"
|
||||
"UNIX_TIMESTAMP(StartTime),"
|
||||
"UNIX_TIMESTAMP(EndTime),"
|
||||
"NOW() BETWEEN StartTime AND EndTime,"
|
||||
"Title,Folder"
|
||||
" FROM assignments"
|
||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
||||
Asg->AsgCod,Gbl.CurrentCrs.Crs.CrsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT AsgCod,Hidden,UsrCod,"
|
||||
"UNIX_TIMESTAMP(StartTime),"
|
||||
"UNIX_TIMESTAMP(EndTime),"
|
||||
"NOW() BETWEEN StartTime AND EndTime,"
|
||||
"Title,Folder"
|
||||
" FROM assignments"
|
||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
||||
Asg->AsgCod,Gbl.CurrentCrs.Crs.CrsCod);
|
||||
|
||||
/***** Get data of assignment *****/
|
||||
Asg_GetDataOfAssignment (Asg,Query);
|
||||
Asg_GetDataOfAssignment (Asg);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -744,23 +734,20 @@ void Asg_GetDataOfAssignmentByCod (struct Assignment *Asg)
|
|||
|
||||
void Asg_GetDataOfAssignmentByFolder (struct Assignment *Asg)
|
||||
{
|
||||
char *Query;
|
||||
|
||||
if (Asg->Folder[0])
|
||||
{
|
||||
/***** Query database *****/
|
||||
if (asprintf (&Query,"SELECT AsgCod,Hidden,UsrCod,"
|
||||
"UNIX_TIMESTAMP(StartTime),"
|
||||
"UNIX_TIMESTAMP(EndTime),"
|
||||
"NOW() BETWEEN StartTime AND EndTime,"
|
||||
"Title,Folder"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod=%ld AND Folder='%s'",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,Asg->Folder) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT AsgCod,Hidden,UsrCod,"
|
||||
"UNIX_TIMESTAMP(StartTime),"
|
||||
"UNIX_TIMESTAMP(EndTime),"
|
||||
"NOW() BETWEEN StartTime AND EndTime,"
|
||||
"Title,Folder"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod=%ld AND Folder='%s'",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,Asg->Folder);
|
||||
|
||||
/***** Get data of assignment *****/
|
||||
Asg_GetDataOfAssignment (Asg,Query);
|
||||
Asg_GetDataOfAssignment (Asg);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -774,7 +761,7 @@ void Asg_GetDataOfAssignmentByFolder (struct Assignment *Asg)
|
|||
/************************* Get assignment data *******************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Asg_GetDataOfAssignment (struct Assignment *Asg,const char *Query)
|
||||
static void Asg_GetDataOfAssignment (struct Assignment *Asg)
|
||||
{
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
|
@ -783,7 +770,7 @@ static void Asg_GetDataOfAssignment (struct Assignment *Asg,const char *Query)
|
|||
Asg_ResetAssignment (Asg);
|
||||
|
||||
/***** Get data of assignment from database *****/
|
||||
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get assignment data")) // Assignment found...
|
||||
if (DB_QuerySELECT_new (&mysql_res,"can not get assignment data")) // Assignment found...
|
||||
{
|
||||
/* Get row */
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -865,17 +852,15 @@ void Asg_FreeListAssignments (void)
|
|||
|
||||
static void Asg_GetAssignmentTxtFromDB (long AsgCod,char Txt[Cns_MAX_BYTES_TEXT + 1])
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
|
||||
/***** Get text of assignment from database *****/
|
||||
if (asprintf (&Query,"SELECT Txt FROM assignments"
|
||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
||||
AsgCod,Gbl.CurrentCrs.Crs.CrsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get assignment text");
|
||||
DB_BuildQuery ("SELECT Txt FROM assignments"
|
||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
||||
AsgCod,Gbl.CurrentCrs.Crs.CrsCod);
|
||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get assignment text");
|
||||
|
||||
/***** The result of the query must have one row or none *****/
|
||||
if (NumRows == 1)
|
||||
|
@ -904,7 +889,6 @@ void Asg_GetNotifAssignment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
|||
char **ContentStr,
|
||||
long AsgCod,bool GetContent)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
|
@ -913,10 +897,8 @@ void Asg_GetNotifAssignment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
|||
SummaryStr[0] = '\0'; // Return nothing on error
|
||||
|
||||
/***** Build query *****/
|
||||
if (asprintf (&Query,"SELECT Title,Txt FROM assignments WHERE AsgCod=%ld",
|
||||
AsgCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get assignment title and text");
|
||||
DB_BuildQuery ("SELECT Title,Txt FROM assignments WHERE AsgCod=%ld",AsgCod);
|
||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get assignment title and text");
|
||||
|
||||
/***** Result should have a unique row *****/
|
||||
if (NumRows == 1)
|
||||
|
@ -1668,22 +1650,20 @@ static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Assignment *Asg)
|
|||
extern const char *Txt_Groups;
|
||||
extern const char *Txt_and;
|
||||
extern const char *Txt_The_whole_course;
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRow;
|
||||
unsigned long NumRows;
|
||||
|
||||
/***** Get groups associated to an assignment from database *****/
|
||||
if (asprintf (&Query,"SELECT crs_grp_types.GrpTypName,crs_grp.GrpName"
|
||||
" FROM asg_grp,crs_grp,crs_grp_types"
|
||||
" WHERE asg_grp.AsgCod=%ld"
|
||||
" AND asg_grp.GrpCod=crs_grp.GrpCod"
|
||||
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
|
||||
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
|
||||
Asg->AsgCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get groups of an assignment");
|
||||
DB_BuildQuery ("SELECT crs_grp_types.GrpTypName,crs_grp.GrpName"
|
||||
" FROM asg_grp,crs_grp,crs_grp_types"
|
||||
" WHERE asg_grp.AsgCod=%ld"
|
||||
" AND asg_grp.GrpCod=crs_grp.GrpCod"
|
||||
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
|
||||
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
|
||||
Asg->AsgCod);
|
||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get groups of an assignment");
|
||||
|
||||
/***** Write heading *****/
|
||||
fprintf (Gbl.F.Out,"<div class=\"%s\">%s: ",
|
||||
|
@ -1811,7 +1791,6 @@ unsigned Asg_GetNumAssignmentsInCrs (long CrsCod)
|
|||
|
||||
unsigned Asg_GetNumCoursesWithAssignments (Sco_Scope_t Scope)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumCourses;
|
||||
|
@ -1820,65 +1799,59 @@ unsigned Asg_GetNumCoursesWithAssignments (Sco_Scope_t Scope)
|
|||
switch (Scope)
|
||||
{
|
||||
case Sco_SCOPE_SYS:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT CrsCod)"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod>0") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT CrsCod)"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod>0");
|
||||
break;
|
||||
case Sco_SCOPE_CTY:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||
" FROM institutions,centres,degrees,courses,assignments"
|
||||
" WHERE institutions.CtyCod=%ld"
|
||||
" AND institutions.InsCod=centres.InsCod"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentCty.Cty.CtyCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||
" FROM institutions,centres,degrees,courses,assignments"
|
||||
" WHERE institutions.CtyCod=%ld"
|
||||
" AND institutions.InsCod=centres.InsCod"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentCty.Cty.CtyCod);
|
||||
break;
|
||||
case Sco_SCOPE_INS:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||
" FROM centres,degrees,courses,assignments"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentIns.Ins.InsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||
" FROM centres,degrees,courses,assignments"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentIns.Ins.InsCod);
|
||||
break;
|
||||
case Sco_SCOPE_CTR:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||
" FROM degrees,courses,assignments"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||
" FROM degrees,courses,assignments"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod);
|
||||
break;
|
||||
case Sco_SCOPE_DEG:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||
" FROM courses,assignments"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||
" FROM courses,assignments"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod);
|
||||
break;
|
||||
case Sco_SCOPE_CRS:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT CrsCod)"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod=%ld",
|
||||
Gbl.CurrentCrs.Crs.CrsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT CrsCod)"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod=%ld",
|
||||
Gbl.CurrentCrs.Crs.CrsCod);
|
||||
break;
|
||||
default:
|
||||
Lay_WrongScopeExit ();
|
||||
break;
|
||||
}
|
||||
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of courses with assignments");
|
||||
DB_QuerySELECT_new (&mysql_res,"can not get number of courses with assignments");
|
||||
|
||||
/***** Get number of courses *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -1899,7 +1872,6 @@ unsigned Asg_GetNumCoursesWithAssignments (Sco_Scope_t Scope)
|
|||
|
||||
unsigned Asg_GetNumAssignments (Sco_Scope_t Scope,unsigned *NumNotif)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumAssignments;
|
||||
|
@ -1908,61 +1880,55 @@ unsigned Asg_GetNumAssignments (Sco_Scope_t Scope,unsigned *NumNotif)
|
|||
switch (Scope)
|
||||
{
|
||||
case Sco_SCOPE_SYS:
|
||||
if (asprintf (&Query,"SELECT COUNT(*),SUM(NumNotif)"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod>0") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*),SUM(NumNotif)"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod>0");
|
||||
break;
|
||||
case Sco_SCOPE_CTY:
|
||||
if (asprintf (&Query,"SELECT COUNT(*),SUM(assignments.NumNotif)"
|
||||
" FROM institutions,centres,degrees,courses,assignments"
|
||||
" WHERE institutions.CtyCod=%ld"
|
||||
" AND institutions.InsCod=centres.InsCod"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentCty.Cty.CtyCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*),SUM(assignments.NumNotif)"
|
||||
" FROM institutions,centres,degrees,courses,assignments"
|
||||
" WHERE institutions.CtyCod=%ld"
|
||||
" AND institutions.InsCod=centres.InsCod"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentCty.Cty.CtyCod);
|
||||
break;
|
||||
case Sco_SCOPE_INS:
|
||||
if (asprintf (&Query,"SELECT COUNT(*),SUM(assignments.NumNotif)"
|
||||
" FROM centres,degrees,courses,assignments"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentIns.Ins.InsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*),SUM(assignments.NumNotif)"
|
||||
" FROM centres,degrees,courses,assignments"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentIns.Ins.InsCod);
|
||||
break;
|
||||
case Sco_SCOPE_CTR:
|
||||
if (asprintf (&Query,"SELECT COUNT(*),SUM(assignments.NumNotif)"
|
||||
" FROM degrees,courses,assignments"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*),SUM(assignments.NumNotif)"
|
||||
" FROM degrees,courses,assignments"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod);
|
||||
break;
|
||||
case Sco_SCOPE_DEG:
|
||||
if (asprintf (&Query,"SELECT COUNT(*),SUM(assignments.NumNotif)"
|
||||
" FROM courses,assignments"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*),SUM(assignments.NumNotif)"
|
||||
" FROM courses,assignments"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.CrsCod=assignments.CrsCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod);
|
||||
break;
|
||||
case Sco_SCOPE_CRS:
|
||||
if (asprintf (&Query,"SELECT COUNT(*),SUM(NumNotif)"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod=%ld",
|
||||
Gbl.CurrentCrs.Crs.CrsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*),SUM(NumNotif)"
|
||||
" FROM assignments"
|
||||
" WHERE CrsCod=%ld",
|
||||
Gbl.CurrentCrs.Crs.CrsCod);
|
||||
break;
|
||||
default:
|
||||
Lay_WrongScopeExit ();
|
||||
break;
|
||||
}
|
||||
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of assignments");
|
||||
DB_QuerySELECT_new (&mysql_res,"can not get number of assignments");
|
||||
|
||||
/***** Get number of assignments *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
|
|
@ -606,7 +606,6 @@ static void Att_GetListAttEvents (Att_OrderTime_t Order)
|
|||
{
|
||||
char HiddenSubQuery[256];
|
||||
char OrderBySubQuery[256];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
|
@ -642,30 +641,24 @@ static void Att_GetListAttEvents (Att_OrderTime_t Order)
|
|||
break;
|
||||
}
|
||||
if (Gbl.CurrentCrs.Grps.WhichGrps == Grp_ONLY_MY_GROUPS)
|
||||
{
|
||||
if (asprintf (&Query,"SELECT AttCod"
|
||||
" FROM att_events"
|
||||
" WHERE CrsCod=%ld%s"
|
||||
" AND (AttCod NOT IN (SELECT AttCod FROM att_grp) OR"
|
||||
" AttCod IN (SELECT att_grp.AttCod FROM att_grp,crs_grp_usr"
|
||||
" WHERE crs_grp_usr.UsrCod=%ld"
|
||||
" AND att_grp.GrpCod=crs_grp_usr.GrpCod))"
|
||||
" ORDER BY %s",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,OrderBySubQuery) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
}
|
||||
DB_BuildQuery ("SELECT AttCod"
|
||||
" FROM att_events"
|
||||
" WHERE CrsCod=%ld%s"
|
||||
" AND (AttCod NOT IN (SELECT AttCod FROM att_grp) OR"
|
||||
" AttCod IN (SELECT att_grp.AttCod FROM att_grp,crs_grp_usr"
|
||||
" WHERE crs_grp_usr.UsrCod=%ld"
|
||||
" AND att_grp.GrpCod=crs_grp_usr.GrpCod))"
|
||||
" ORDER BY %s",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,OrderBySubQuery);
|
||||
else // Gbl.CurrentCrs.Grps.WhichGrps == Grp_ALL_GROUPS
|
||||
{
|
||||
if (asprintf (&Query,"SELECT AttCod"
|
||||
" FROM att_events"
|
||||
" WHERE CrsCod=%ld%s"
|
||||
" ORDER BY %s",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,OrderBySubQuery) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
}
|
||||
DB_BuildQuery ("SELECT AttCod"
|
||||
" FROM att_events"
|
||||
" WHERE CrsCod=%ld%s"
|
||||
" ORDER BY %s",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,OrderBySubQuery);
|
||||
|
||||
if ((NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get attendance events"))) // Attendance events found...
|
||||
if ((NumRows = DB_QuerySELECT_new (&mysql_res,"can not get attendance events"))) // Attendance events found...
|
||||
{
|
||||
Gbl.AttEvents.Num = (unsigned) NumRows;
|
||||
|
||||
|
@ -716,7 +709,6 @@ static void Att_GetDataOfAttEventByCodAndCheckCrs (struct AttendanceEvent *Att)
|
|||
|
||||
bool Att_GetDataOfAttEventByCod (struct AttendanceEvent *Att)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
bool Found = false;
|
||||
|
@ -727,19 +719,18 @@ bool Att_GetDataOfAttEventByCod (struct AttendanceEvent *Att)
|
|||
if (Att->AttCod > 0)
|
||||
{
|
||||
/***** Build query *****/
|
||||
if (asprintf (&Query,"SELECT AttCod,CrsCod,Hidden,UsrCod,"
|
||||
"UNIX_TIMESTAMP(StartTime),"
|
||||
"UNIX_TIMESTAMP(EndTime),"
|
||||
"NOW() BETWEEN StartTime AND EndTime,"
|
||||
"CommentTchVisible,"
|
||||
"Title"
|
||||
" FROM att_events"
|
||||
" WHERE AttCod=%ld",
|
||||
Att->AttCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT AttCod,CrsCod,Hidden,UsrCod,"
|
||||
"UNIX_TIMESTAMP(StartTime),"
|
||||
"UNIX_TIMESTAMP(EndTime),"
|
||||
"NOW() BETWEEN StartTime AND EndTime,"
|
||||
"CommentTchVisible,"
|
||||
"Title"
|
||||
" FROM att_events"
|
||||
" WHERE AttCod=%ld",
|
||||
Att->AttCod);
|
||||
|
||||
/***** Get data of attendance event from database *****/
|
||||
if ((Found = (DB_QuerySELECT_free (Query,&mysql_res,"can not get attendance event data") != 0))) // Attendance event found...
|
||||
if ((Found = (DB_QuerySELECT_new (&mysql_res,"can not get attendance event data") != 0))) // Attendance event found...
|
||||
{
|
||||
/* Get row */
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -825,17 +816,15 @@ void Att_FreeListAttEvents (void)
|
|||
|
||||
static void Att_GetAttEventTxtFromDB (long AttCod,char Txt[Cns_MAX_BYTES_TEXT + 1])
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
|
||||
/***** Get text of attendance event from database *****/
|
||||
if (asprintf (&Query,"SELECT Txt FROM att_events"
|
||||
" WHERE AttCod=%ld AND CrsCod=%ld",
|
||||
AttCod,Gbl.CurrentCrs.Crs.CrsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get attendance event text");
|
||||
DB_BuildQuery ("SELECT Txt FROM att_events"
|
||||
" WHERE AttCod=%ld AND CrsCod=%ld",
|
||||
AttCod,Gbl.CurrentCrs.Crs.CrsCod);
|
||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get attendance event text");
|
||||
|
||||
/***** The result of the query must have one row or none *****/
|
||||
if (NumRows == 1)
|
||||
|
@ -1536,22 +1525,20 @@ static void Att_GetAndWriteNamesOfGrpsAssociatedToAttEvent (struct AttendanceEve
|
|||
extern const char *Txt_Groups;
|
||||
extern const char *Txt_and;
|
||||
extern const char *Txt_The_whole_course;
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumGrp;
|
||||
unsigned NumGrps;
|
||||
|
||||
/***** Get groups associated to an attendance event from database *****/
|
||||
if (asprintf (&Query,"SELECT crs_grp_types.GrpTypName,crs_grp.GrpName"
|
||||
" FROM att_grp,crs_grp,crs_grp_types"
|
||||
" WHERE att_grp.AttCod=%ld"
|
||||
" AND att_grp.GrpCod=crs_grp.GrpCod"
|
||||
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
|
||||
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
|
||||
Att->AttCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumGrps = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get groups of an attendance event");
|
||||
DB_BuildQuery ("SELECT crs_grp_types.GrpTypName,crs_grp.GrpName"
|
||||
" FROM att_grp,crs_grp,crs_grp_types"
|
||||
" WHERE att_grp.AttCod=%ld"
|
||||
" AND att_grp.GrpCod=crs_grp.GrpCod"
|
||||
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
|
||||
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
|
||||
Att->AttCod);
|
||||
NumGrps = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get groups of an attendance event");
|
||||
|
||||
/***** Write heading *****/
|
||||
fprintf (Gbl.F.Out,"<div class=\"%s\">%s: ",
|
||||
|
@ -1708,7 +1695,6 @@ unsigned Att_GetNumAttEventsInCrs (long CrsCod)
|
|||
|
||||
unsigned Att_GetNumCoursesWithAttEvents (Sco_Scope_t Scope)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumCourses;
|
||||
|
@ -1717,53 +1703,48 @@ unsigned Att_GetNumCoursesWithAttEvents (Sco_Scope_t Scope)
|
|||
switch (Scope)
|
||||
{
|
||||
case Sco_SCOPE_SYS:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT CrsCod)"
|
||||
" FROM att_events"
|
||||
" WHERE CrsCod>0") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT CrsCod)"
|
||||
" FROM att_events"
|
||||
" WHERE CrsCod>0");
|
||||
break;
|
||||
case Sco_SCOPE_INS:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT att_events.CrsCod)"
|
||||
" FROM centres,degrees,courses,att_events"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=att_events.CrsCod",
|
||||
Gbl.CurrentIns.Ins.InsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT att_events.CrsCod)"
|
||||
" FROM centres,degrees,courses,att_events"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=att_events.CrsCod",
|
||||
Gbl.CurrentIns.Ins.InsCod);
|
||||
break;
|
||||
case Sco_SCOPE_CTR:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT att_events.CrsCod)"
|
||||
" FROM degrees,courses,att_events"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=att_events.CrsCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT att_events.CrsCod)"
|
||||
" FROM degrees,courses,att_events"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=att_events.CrsCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod);
|
||||
break;
|
||||
case Sco_SCOPE_DEG:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT att_events.CrsCod)"
|
||||
" FROM courses,att_events"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=att_events.CrsCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT att_events.CrsCod)"
|
||||
" FROM courses,att_events"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.Status=0"
|
||||
" AND courses.CrsCod=att_events.CrsCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod);
|
||||
break;
|
||||
case Sco_SCOPE_CRS:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT CrsCod)"
|
||||
" FROM att_events"
|
||||
" WHERE CrsCod=%ld",
|
||||
Gbl.CurrentCrs.Crs.CrsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT CrsCod)"
|
||||
" FROM att_events"
|
||||
" WHERE CrsCod=%ld",
|
||||
Gbl.CurrentCrs.Crs.CrsCod);
|
||||
break;
|
||||
default:
|
||||
Lay_WrongScopeExit ();
|
||||
break;
|
||||
}
|
||||
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of courses with attendance events");
|
||||
DB_QuerySELECT_new (&mysql_res,"can not get number of courses with attendance events");
|
||||
|
||||
/***** Get number of courses *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -1784,7 +1765,6 @@ unsigned Att_GetNumCoursesWithAttEvents (Sco_Scope_t Scope)
|
|||
|
||||
unsigned Att_GetNumAttEvents (Sco_Scope_t Scope,unsigned *NumNotif)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumAttEvents;
|
||||
|
@ -1793,50 +1773,45 @@ unsigned Att_GetNumAttEvents (Sco_Scope_t Scope,unsigned *NumNotif)
|
|||
switch (Scope)
|
||||
{
|
||||
case Sco_SCOPE_SYS:
|
||||
if (asprintf (&Query,"SELECT COUNT(*),SUM(NumNotif)"
|
||||
" FROM att_events"
|
||||
" WHERE CrsCod>0") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*),SUM(NumNotif)"
|
||||
" FROM att_events"
|
||||
" WHERE CrsCod>0");
|
||||
break;
|
||||
case Sco_SCOPE_INS:
|
||||
if (asprintf (&Query,"SELECT COUNT(*),SUM(att_events.NumNotif)"
|
||||
" FROM centres,degrees,courses,att_events"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=att_events.CrsCod",
|
||||
Gbl.CurrentIns.Ins.InsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*),SUM(att_events.NumNotif)"
|
||||
" FROM centres,degrees,courses,att_events"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=att_events.CrsCod",
|
||||
Gbl.CurrentIns.Ins.InsCod);
|
||||
break;
|
||||
case Sco_SCOPE_CTR:
|
||||
if (asprintf (&Query,"SELECT COUNT(*),SUM(att_events.NumNotif)"
|
||||
" FROM degrees,courses,att_events"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=att_events.CrsCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*),SUM(att_events.NumNotif)"
|
||||
" FROM degrees,courses,att_events"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=att_events.CrsCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod);
|
||||
break;
|
||||
case Sco_SCOPE_DEG:
|
||||
if (asprintf (&Query,"SELECT COUNT(*),SUM(att_events.NumNotif)"
|
||||
" FROM courses,att_events"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.CrsCod=att_events.CrsCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*),SUM(att_events.NumNotif)"
|
||||
" FROM courses,att_events"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.CrsCod=att_events.CrsCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod);
|
||||
break;
|
||||
case Sco_SCOPE_CRS:
|
||||
if (asprintf (&Query,"SELECT COUNT(*),SUM(NumNotif)"
|
||||
" FROM att_events"
|
||||
" WHERE CrsCod=%ld",
|
||||
Gbl.CurrentCrs.Crs.CrsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(*),SUM(NumNotif)"
|
||||
" FROM att_events"
|
||||
" WHERE CrsCod=%ld",
|
||||
Gbl.CurrentCrs.Crs.CrsCod);
|
||||
break;
|
||||
default:
|
||||
Lay_WrongScopeExit ();
|
||||
break;
|
||||
}
|
||||
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of attendance events");
|
||||
DB_QuerySELECT_new (&mysql_res,"can not get number of attendance events");
|
||||
|
||||
/***** Get number of attendance events *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -2241,7 +2216,6 @@ static void Att_WriteRowStdToCallTheRoll (unsigned NumStd,
|
|||
|
||||
static void Att_PutParamsCodGrps (long AttCod)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumGrp;
|
||||
|
@ -2250,11 +2224,10 @@ static void Att_PutParamsCodGrps (long AttCod)
|
|||
/***** Get groups associated to an attendance event from database *****/
|
||||
if (Gbl.CurrentCrs.Grps.NumGrps)
|
||||
{
|
||||
if (asprintf (&Query,"SELECT GrpCod FROM att_grp"
|
||||
" WHERE att_grp.AttCod=%ld",
|
||||
AttCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumGrps = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get groups of an attendance event");
|
||||
DB_BuildQuery ("SELECT GrpCod FROM att_grp"
|
||||
" WHERE att_grp.AttCod=%ld",
|
||||
AttCod);
|
||||
NumGrps = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get groups of an attendance event");
|
||||
}
|
||||
else
|
||||
NumGrps = 0;
|
||||
|
@ -2537,18 +2510,16 @@ static unsigned Att_GetNumStdsFromAListWhoAreInAttEvent (long AttCod,long LstSel
|
|||
|
||||
static bool Att_CheckIfUsrIsInTableAttUsr (long AttCod,long UsrCod,bool *Present)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumRows;
|
||||
bool InDBTable;
|
||||
|
||||
/***** Check if a student is registered in an event in database *****/
|
||||
if (asprintf (&Query,"SELECT Present FROM att_usr"
|
||||
" WHERE AttCod=%ld AND UsrCod=%ld",
|
||||
AttCod,UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
if ((NumRows = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get if a student is already registered in an event")))
|
||||
DB_BuildQuery ("SELECT Present FROM att_usr"
|
||||
" WHERE AttCod=%ld AND UsrCod=%ld",
|
||||
AttCod,UsrCod);
|
||||
if ((NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get if a student is already registered in an event")))
|
||||
{
|
||||
InDBTable = true;
|
||||
|
||||
|
@ -2591,18 +2562,16 @@ static bool Att_CheckIfUsrIsPresentInAttEventAndGetComments (long AttCod,long Us
|
|||
char CommentStd[Cns_MAX_BYTES_TEXT + 1],
|
||||
char CommentTch[Cns_MAX_BYTES_TEXT + 1])
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumRows;
|
||||
bool Present;
|
||||
|
||||
/***** Check if a students is registered in an event in database *****/
|
||||
if (asprintf (&Query,"SELECT Present,CommentStd,CommentTch FROM att_usr"
|
||||
" WHERE AttCod=%ld AND UsrCod=%ld",
|
||||
AttCod,UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
if ((NumRows = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get if a student is already registered in an event")))
|
||||
DB_BuildQuery ("SELECT Present,CommentStd,CommentTch FROM att_usr"
|
||||
" WHERE AttCod=%ld AND UsrCod=%ld",
|
||||
AttCod,UsrCod);
|
||||
if ((NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get if a student is already registered in an event")))
|
||||
{
|
||||
/* Get row */
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -3022,7 +2991,6 @@ static void Att_GetListSelectedAttCods (char **StrAttCodsSelected)
|
|||
const char *Ptr;
|
||||
long AttCod;
|
||||
char LongStr[1 + 10 + 1];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumGrpsInThisEvent;
|
||||
|
@ -3088,11 +3056,10 @@ static void Att_GetListSelectedAttCods (char **StrAttCodsSelected)
|
|||
else // No students attended to this event
|
||||
{
|
||||
/***** Get groups associated to an attendance event from database *****/
|
||||
if (asprintf (&Query,"SELECT GrpCod FROM att_grp"
|
||||
" WHERE att_grp.AttCod=%ld",
|
||||
Gbl.AttEvents.Lst[NumAttEvent].AttCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumGrpsInThisEvent = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get groups of an attendance event");
|
||||
DB_BuildQuery ("SELECT GrpCod FROM att_grp"
|
||||
" WHERE att_grp.AttCod=%ld",
|
||||
Gbl.AttEvents.Lst[NumAttEvent].AttCod);
|
||||
NumGrpsInThisEvent = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get groups of an attendance event");
|
||||
|
||||
if (NumGrpsInThisEvent) // This event is associated to groups
|
||||
/* Get groups associated to this event */
|
||||
|
|
|
@ -65,7 +65,7 @@ extern struct Globals Gbl;
|
|||
|
||||
static void Ban_WriteListOfBanners (void);
|
||||
static void Ban_PutFormToEditBanners (void);
|
||||
static void Ban_GetListBanners (const char *Query);
|
||||
static void Ban_GetListBanners (void);
|
||||
static void Ban_PutIconToViewBanners (void);
|
||||
static void Ban_ListBannersForEdition (void);
|
||||
static void Ban_PutParamBanCod (long BanCod);
|
||||
|
@ -103,7 +103,6 @@ void Ban_SeeBanners (void)
|
|||
extern const char *Txt_Banners;
|
||||
extern const char *Txt_No_banners;
|
||||
extern const char *Txt_New_banner;
|
||||
char *Query;
|
||||
|
||||
/***** Put contextual links *****/
|
||||
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_MENU\">");
|
||||
|
@ -114,12 +113,11 @@ void Ban_SeeBanners (void)
|
|||
fprintf (Gbl.F.Out,"</div>");
|
||||
|
||||
/***** Get list of banners *****/
|
||||
if (asprintf (&Query,"SELECT BanCod,Hidden,ShortName,FullName,Img,WWW"
|
||||
" FROM banners"
|
||||
" WHERE Hidden='N'"
|
||||
" ORDER BY ShortName") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
Ban_GetListBanners (Query);
|
||||
DB_BuildQuery ("SELECT BanCod,Hidden,ShortName,FullName,Img,WWW"
|
||||
" FROM banners"
|
||||
" WHERE Hidden='N'"
|
||||
" ORDER BY ShortName");
|
||||
Ban_GetListBanners ();
|
||||
|
||||
/***** Start box *****/
|
||||
Box_StartBox (NULL,Txt_Banners,Ban_PutFormToEditBanners,
|
||||
|
@ -198,7 +196,6 @@ void Ban_EditBanners (void)
|
|||
{
|
||||
extern const char *Hlp_SYSTEM_Banners_edit;
|
||||
extern const char *Txt_Banners;
|
||||
char *Query;
|
||||
|
||||
/***** Put contextual links *****/
|
||||
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_MENU\">");
|
||||
|
@ -209,10 +206,9 @@ void Ban_EditBanners (void)
|
|||
fprintf (Gbl.F.Out,"</div>");
|
||||
|
||||
/***** Get list of banners *****/
|
||||
if (asprintf (&Query,"SELECT BanCod,Hidden,ShortName,FullName,Img,WWW"
|
||||
" FROM banners ORDER BY ShortName") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
Ban_GetListBanners (Query);
|
||||
DB_BuildQuery ("SELECT BanCod,Hidden,ShortName,FullName,Img,WWW"
|
||||
" FROM banners ORDER BY ShortName");
|
||||
Ban_GetListBanners ();
|
||||
|
||||
/***** Start box *****/
|
||||
Box_StartBox (NULL,Txt_Banners,Ban_PutIconToViewBanners,
|
||||
|
@ -236,7 +232,7 @@ void Ban_EditBanners (void)
|
|||
/**************************** List all the banners ***************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Ban_GetListBanners (const char *Query)
|
||||
static void Ban_GetListBanners (void)
|
||||
{
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
|
@ -247,7 +243,7 @@ static void Ban_GetListBanners (const char *Query)
|
|||
if (Gbl.DB.DatabaseIsOpen)
|
||||
{
|
||||
/***** Get banners from database *****/
|
||||
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get banners");
|
||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get banners");
|
||||
|
||||
if (NumRows) // Banners found...
|
||||
{
|
||||
|
@ -305,7 +301,6 @@ static void Ban_GetListBanners (const char *Query)
|
|||
|
||||
void Ban_GetDataOfBannerByCod (struct Banner *Ban)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
|
@ -318,11 +313,10 @@ void Ban_GetDataOfBannerByCod (struct Banner *Ban)
|
|||
if (Ban->BanCod > 0)
|
||||
{
|
||||
/***** Get data of a banner from database *****/
|
||||
if (asprintf (&Query,"SELECT Hidden,ShortName,FullName,Img,WWW"
|
||||
" FROM banners WHERE BanCod=%ld",
|
||||
Ban->BanCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get data of a banner");
|
||||
DB_BuildQuery ("SELECT Hidden,ShortName,FullName,Img,WWW"
|
||||
" FROM banners WHERE BanCod=%ld",
|
||||
Ban->BanCod);
|
||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get data of a banner");
|
||||
|
||||
if (NumRows) // Banner found...
|
||||
{
|
||||
|
@ -1027,19 +1021,17 @@ static void Ban_CreateBanner (struct Banner *Ban)
|
|||
|
||||
void Ban_WriteMenuWithBanners (void)
|
||||
{
|
||||
char *Query;
|
||||
unsigned NumBan;
|
||||
|
||||
/***** Get random banner *****/
|
||||
// The banner(s) will change once in a while
|
||||
if (asprintf (&Query,"SELECT BanCod,Hidden,ShortName,FullName,Img,WWW"
|
||||
" FROM banners"
|
||||
" WHERE Hidden='N'"
|
||||
" ORDER BY RAND(%lu) LIMIT %u",
|
||||
(unsigned long) (Gbl.StartExecutionTimeUTC / Cfg_TIME_TO_CHANGE_BANNER),
|
||||
Cfg_NUMBER_OF_BANNERS) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
Ban_GetListBanners (Query);
|
||||
DB_BuildQuery ("SELECT BanCod,Hidden,ShortName,FullName,Img,WWW"
|
||||
" FROM banners"
|
||||
" WHERE Hidden='N'"
|
||||
" ORDER BY RAND(%lu) LIMIT %u",
|
||||
(unsigned long) (Gbl.StartExecutionTimeUTC / Cfg_TIME_TO_CHANGE_BANNER),
|
||||
Cfg_NUMBER_OF_BANNERS);
|
||||
Ban_GetListBanners ();
|
||||
|
||||
/***** Write all the banners *****/
|
||||
for (NumBan = 0;
|
||||
|
|
163
swad_centre.c
163
swad_centre.c
|
@ -133,7 +133,6 @@ void Ctr_SeeCtrWithPendingDegs (void)
|
|||
extern const char *Txt_Centre;
|
||||
extern const char *Txt_Degrees_ABBREVIATION;
|
||||
extern const char *Txt_There_are_no_centres_with_requests_for_degrees_to_be_confirmed;
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumCtrs;
|
||||
|
@ -145,31 +144,29 @@ void Ctr_SeeCtrWithPendingDegs (void)
|
|||
switch (Gbl.Usrs.Me.Role.Logged)
|
||||
{
|
||||
case Rol_CTR_ADM:
|
||||
if (asprintf (&Query,"SELECT degrees.CtrCod,COUNT(*)"
|
||||
" FROM degrees,ctr_admin,centres"
|
||||
" WHERE (degrees.Status & %u)<>0"
|
||||
" AND degrees.CtrCod=ctr_admin.CtrCod"
|
||||
" AND ctr_admin.UsrCod=%ld"
|
||||
" AND degrees.CtrCod=centres.CtrCod"
|
||||
" GROUP BY degrees.CtrCod ORDER BY centres.ShortName",
|
||||
(unsigned) Deg_STATUS_BIT_PENDING,Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT degrees.CtrCod,COUNT(*)"
|
||||
" FROM degrees,ctr_admin,centres"
|
||||
" WHERE (degrees.Status & %u)<>0"
|
||||
" AND degrees.CtrCod=ctr_admin.CtrCod"
|
||||
" AND ctr_admin.UsrCod=%ld"
|
||||
" AND degrees.CtrCod=centres.CtrCod"
|
||||
" GROUP BY degrees.CtrCod ORDER BY centres.ShortName",
|
||||
(unsigned) Deg_STATUS_BIT_PENDING,Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
break;
|
||||
case Rol_SYS_ADM:
|
||||
if (asprintf (&Query,"SELECT degrees.CtrCod,COUNT(*)"
|
||||
" FROM degrees,centres"
|
||||
" WHERE (degrees.Status & %u)<>0"
|
||||
" AND degrees.CtrCod=centres.CtrCod"
|
||||
" GROUP BY degrees.CtrCod ORDER BY centres.ShortName",
|
||||
(unsigned) Deg_STATUS_BIT_PENDING) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT degrees.CtrCod,COUNT(*)"
|
||||
" FROM degrees,centres"
|
||||
" WHERE (degrees.Status & %u)<>0"
|
||||
" AND degrees.CtrCod=centres.CtrCod"
|
||||
" GROUP BY degrees.CtrCod ORDER BY centres.ShortName",
|
||||
(unsigned) Deg_STATUS_BIT_PENDING);
|
||||
break;
|
||||
default: // Forbidden for other users
|
||||
return;
|
||||
}
|
||||
|
||||
/***** Get centres *****/
|
||||
if ((NumCtrs = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get centres with pending degrees")))
|
||||
if ((NumCtrs = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get centres with pending degrees")))
|
||||
{
|
||||
/***** Start box and table *****/
|
||||
Box_StartBoxTable (NULL,Txt_Centres_with_pending_degrees,NULL,
|
||||
|
@ -1037,7 +1034,6 @@ static void Ctr_PutIconToViewCentres (void)
|
|||
void Ctr_GetListCentres (long InsCod)
|
||||
{
|
||||
char OrderBySubQuery[256];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
|
@ -1054,27 +1050,26 @@ void Ctr_GetListCentres (long InsCod)
|
|||
sprintf (OrderBySubQuery,"NumUsrs DESC,FullName");
|
||||
break;
|
||||
}
|
||||
if (asprintf (&Query,"(SELECT centres.CtrCod,centres.InsCod,centres.PlcCod,"
|
||||
"centres.Status,centres.RequesterUsrCod,"
|
||||
"centres.ShortName,centres.FullName,centres.WWW,"
|
||||
"COUNT(DISTINCT usr_data.UsrCod) AS NumUsrs"
|
||||
" FROM centres,usr_data"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=usr_data.CtrCod"
|
||||
" GROUP BY centres.CtrCod)"
|
||||
" UNION "
|
||||
"(SELECT CtrCod,InsCod,PlcCod,Status,RequesterUsrCod,"
|
||||
"ShortName,FullName,WWW,0 AS NumUsrs"
|
||||
" FROM centres"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND CtrCod NOT IN"
|
||||
" (SELECT DISTINCT CtrCod FROM usr_data))"
|
||||
" ORDER BY %s",
|
||||
InsCod,
|
||||
InsCod,
|
||||
OrderBySubQuery) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get centres");
|
||||
DB_BuildQuery ("(SELECT centres.CtrCod,centres.InsCod,centres.PlcCod,"
|
||||
"centres.Status,centres.RequesterUsrCod,"
|
||||
"centres.ShortName,centres.FullName,centres.WWW,"
|
||||
"COUNT(DISTINCT usr_data.UsrCod) AS NumUsrs"
|
||||
" FROM centres,usr_data"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=usr_data.CtrCod"
|
||||
" GROUP BY centres.CtrCod)"
|
||||
" UNION "
|
||||
"(SELECT CtrCod,InsCod,PlcCod,Status,RequesterUsrCod,"
|
||||
"ShortName,FullName,WWW,0 AS NumUsrs"
|
||||
" FROM centres"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND CtrCod NOT IN"
|
||||
" (SELECT DISTINCT CtrCod FROM usr_data))"
|
||||
" ORDER BY %s",
|
||||
InsCod,
|
||||
InsCod,
|
||||
OrderBySubQuery);
|
||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get centres");
|
||||
|
||||
if (NumRows) // Centres found...
|
||||
{
|
||||
|
@ -1151,7 +1146,6 @@ void Ctr_GetListCentres (long InsCod)
|
|||
|
||||
bool Ctr_GetDataOfCentreByCod (struct Centre *Ctr)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
bool CtrFound = false;
|
||||
|
@ -1173,27 +1167,26 @@ bool Ctr_GetDataOfCentreByCod (struct Centre *Ctr)
|
|||
if (Ctr->CtrCod > 0)
|
||||
{
|
||||
/***** Get data of a centre from database *****/
|
||||
if (asprintf (&Query,"(SELECT centres.InsCod,centres.PlcCod,"
|
||||
"centres.Status,centres.RequesterUsrCod,"
|
||||
"centres.ShortName,centres.FullName,centres.WWW,"
|
||||
"COUNT(DISTINCT usr_data.UsrCod) AS NumUsrs"
|
||||
" FROM centres,usr_data"
|
||||
" WHERE centres.CtrCod=%ld"
|
||||
" AND centres.CtrCod=usr_data.CtrCod"
|
||||
" GROUP BY centres.CtrCod)"
|
||||
" UNION "
|
||||
"(SELECT InsCod,PlcCod,"
|
||||
"Status,RequesterUsrCod,"
|
||||
"ShortName,FullName,WWW,"
|
||||
"0 AS NumUsrs"
|
||||
" FROM centres"
|
||||
" WHERE CtrCod=%ld"
|
||||
" AND CtrCod NOT IN"
|
||||
" (SELECT DISTINCT CtrCod FROM usr_data))",
|
||||
Ctr->CtrCod,
|
||||
Ctr->CtrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get data of a centre")) // Centre found...
|
||||
DB_BuildQuery ("(SELECT centres.InsCod,centres.PlcCod,"
|
||||
"centres.Status,centres.RequesterUsrCod,"
|
||||
"centres.ShortName,centres.FullName,centres.WWW,"
|
||||
"COUNT(DISTINCT usr_data.UsrCod) AS NumUsrs"
|
||||
" FROM centres,usr_data"
|
||||
" WHERE centres.CtrCod=%ld"
|
||||
" AND centres.CtrCod=usr_data.CtrCod"
|
||||
" GROUP BY centres.CtrCod)"
|
||||
" UNION "
|
||||
"(SELECT InsCod,PlcCod,"
|
||||
"Status,RequesterUsrCod,"
|
||||
"ShortName,FullName,WWW,"
|
||||
"0 AS NumUsrs"
|
||||
" FROM centres"
|
||||
" WHERE CtrCod=%ld"
|
||||
" AND CtrCod NOT IN"
|
||||
" (SELECT DISTINCT CtrCod FROM usr_data))",
|
||||
Ctr->CtrCod,
|
||||
Ctr->CtrCod);
|
||||
if (DB_QuerySELECT_new (&mysql_res,"can not get data of a centre")) // Centre found...
|
||||
{
|
||||
/* Get row */
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -1253,7 +1246,6 @@ bool Ctr_GetDataOfCentreByCod (struct Centre *Ctr)
|
|||
|
||||
long Ctr_GetInsCodOfCentreByCod (long CtrCod)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
long InsCod = -1L;
|
||||
|
@ -1261,10 +1253,9 @@ long Ctr_GetInsCodOfCentreByCod (long CtrCod)
|
|||
if (CtrCod > 0)
|
||||
{
|
||||
/***** Get the institution code of a centre from database *****/
|
||||
if (asprintf (&Query,"SELECT InsCod FROM centres WHERE CtrCod=%ld",
|
||||
CtrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get the institution of a centre") == 1)
|
||||
DB_BuildQuery ("SELECT InsCod FROM centres WHERE CtrCod=%ld",
|
||||
CtrCod);
|
||||
if (DB_QuerySELECT_new (&mysql_res,"can not get the institution of a centre") == 1)
|
||||
{
|
||||
/***** Get the institution code of this centre *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -1284,7 +1275,6 @@ long Ctr_GetInsCodOfCentreByCod (long CtrCod)
|
|||
|
||||
void Ctr_GetShortNameOfCentreByCod (struct Centre *Ctr)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
|
||||
|
@ -1292,11 +1282,10 @@ void Ctr_GetShortNameOfCentreByCod (struct Centre *Ctr)
|
|||
if (Ctr->CtrCod > 0)
|
||||
{
|
||||
/***** Get the short name of a centre from database *****/
|
||||
if (asprintf (&Query,"SELECT ShortName FROM centres"
|
||||
" WHERE CtrCod=%ld",
|
||||
Ctr->CtrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get the short name of a centre") == 1)
|
||||
DB_BuildQuery ("SELECT ShortName FROM centres"
|
||||
" WHERE CtrCod=%ld",
|
||||
Ctr->CtrCod);
|
||||
if (DB_QuerySELECT_new (&mysql_res,"can not get the short name of a centre") == 1)
|
||||
{
|
||||
/***** Get the short name of this centre *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -1316,7 +1305,6 @@ void Ctr_GetShortNameOfCentreByCod (struct Centre *Ctr)
|
|||
|
||||
static void Ctr_GetPhotoAttribution (long CtrCod,char **PhotoAttribution)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
size_t Length;
|
||||
|
@ -1325,11 +1313,10 @@ static void Ctr_GetPhotoAttribution (long CtrCod,char **PhotoAttribution)
|
|||
Ctr_FreePhotoAttribution (PhotoAttribution);
|
||||
|
||||
/***** Get photo attribution from database *****/
|
||||
if (asprintf (&Query,"SELECT PhotoAttribution"
|
||||
" FROM centres WHERE CtrCod=%ld",
|
||||
CtrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get photo attribution"))
|
||||
DB_BuildQuery ("SELECT PhotoAttribution"
|
||||
" FROM centres WHERE CtrCod=%ld",
|
||||
CtrCod);
|
||||
if (DB_QuerySELECT_new (&mysql_res,"can not get photo attribution"))
|
||||
{
|
||||
/* Get row */
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -1385,7 +1372,6 @@ void Ctr_FreeListCentres (void)
|
|||
void Ctr_WriteSelectorOfCentre (void)
|
||||
{
|
||||
extern const char *Txt_Centre;
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumCtrs;
|
||||
|
@ -1409,13 +1395,12 @@ void Ctr_WriteSelectorOfCentre (void)
|
|||
if (Gbl.CurrentIns.Ins.InsCod > 0)
|
||||
{
|
||||
/***** Get centres from database *****/
|
||||
if (asprintf (&Query,"SELECT DISTINCT CtrCod,ShortName"
|
||||
" FROM centres"
|
||||
" WHERE InsCod=%ld"
|
||||
" ORDER BY ShortName",
|
||||
Gbl.CurrentIns.Ins.InsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumCtrs = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get centres");
|
||||
DB_BuildQuery ("SELECT DISTINCT CtrCod,ShortName"
|
||||
" FROM centres"
|
||||
" WHERE InsCod=%ld"
|
||||
" ORDER BY ShortName",
|
||||
Gbl.CurrentIns.Ins.InsCod);
|
||||
NumCtrs = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get centres");
|
||||
|
||||
/***** Get centres *****/
|
||||
for (NumCtr = 0;
|
||||
|
@ -2996,7 +2981,7 @@ unsigned Ctr_GetNumCtrsWithUsrs (Rol_Role_t Role,const char *SubQuery)
|
|||
/*****************************************************************************/
|
||||
// Returns number of centres found
|
||||
|
||||
unsigned Ctr_ListCtrsFound (const char *Query)
|
||||
unsigned Ctr_ListCtrsFound (void)
|
||||
{
|
||||
extern const char *Txt_centre;
|
||||
extern const char *Txt_centres;
|
||||
|
@ -3007,7 +2992,7 @@ unsigned Ctr_ListCtrsFound (const char *Query)
|
|||
struct Centre Ctr;
|
||||
|
||||
/***** Query database *****/
|
||||
if ((NumCtrs = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get centres")))
|
||||
if ((NumCtrs = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get centres")))
|
||||
{
|
||||
/***** Start box and table *****/
|
||||
/* Number of centres found */
|
||||
|
|
|
@ -134,6 +134,6 @@ unsigned Ctr_GetNumCtrsWithDegs (const char *SubQuery);
|
|||
unsigned Ctr_GetNumCtrsWithCrss (const char *SubQuery);
|
||||
unsigned Ctr_GetNumCtrsWithUsrs (Rol_Role_t Role,const char *SubQuery);
|
||||
|
||||
unsigned Ctr_ListCtrsFound (const char *Query);
|
||||
unsigned Ctr_ListCtrsFound (void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -355,10 +355,11 @@ En OpenSWAD:
|
|||
ps2pdf source.ps destination.pdf
|
||||
*/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 18.7.42 (2018-10-25)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 18.8 (2018-10-25)"
|
||||
#define CSS_FILE "swad18.4.css"
|
||||
#define JS_FILE "swad17.17.1.js"
|
||||
/*
|
||||
Version 18.8: Oct 25, 2018 New internal functions to build database queries. (238043 lines)
|
||||
Version 18.7.42: Oct 25, 2018 Some sprintf for database queries changed by asprintf. (238146 lines)
|
||||
Version 18.7.41: Oct 24, 2018 Some sprintf for database queries changed by asprintf. (238125 lines)
|
||||
Version 18.7.40: Oct 24, 2018 Some sprintf for database queries changed by asprintf. (238060 lines)
|
||||
|
|
16
swad_chat.c
16
swad_chat.c
|
@ -268,16 +268,14 @@ void Cht_ShowListOfChatRoomsWithUsrs (void)
|
|||
extern const char *Txt_Rooms_with_users;
|
||||
extern const char *Txt_CHAT_Room_code;
|
||||
extern const char *Txt_No_of_users;
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRow,NumRows;
|
||||
|
||||
/***** Get chat rooms with connected users from database *****/
|
||||
if (asprintf (&Query,"SELECT RoomCode,NumUsrs FROM chat"
|
||||
" WHERE NumUsrs>0 ORDER BY NumUsrs DESC,RoomCode") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get chat rooms with connected users");
|
||||
DB_BuildQuery ("SELECT RoomCode,NumUsrs FROM chat"
|
||||
" WHERE NumUsrs>0 ORDER BY NumUsrs DESC,RoomCode");
|
||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get chat rooms with connected users");
|
||||
|
||||
if (NumRows > 0) // If not empty chat rooms found
|
||||
{
|
||||
|
@ -378,16 +376,14 @@ void Cht_WriteParamsRoomCodeAndNames (const char *RoomCode,const char *RoomShrtN
|
|||
|
||||
static unsigned Cht_GetNumUsrsInChatRoom (const char *RoomCode)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumUsrs = 0;
|
||||
|
||||
/***** Get number of users connected to chat rooms from database *****/
|
||||
if (asprintf (&Query,"SELECT NumUsrs FROM chat WHERE RoomCode='%s'",
|
||||
RoomCode) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get number of users connected to a chat room"))
|
||||
DB_BuildQuery ("SELECT NumUsrs FROM chat WHERE RoomCode='%s'",
|
||||
RoomCode);
|
||||
if (DB_QuerySELECT_new (&mysql_res,"can not get number of users connected to a chat room"))
|
||||
{
|
||||
/* Get number of users connected to the chat room */
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
|
446
swad_connected.c
446
swad_connected.c
|
@ -192,7 +192,6 @@ void Con_GetAndShowLastClicks (void)
|
|||
extern const char *Txt_Degree;
|
||||
extern const char *Txt_Action;
|
||||
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumRow;
|
||||
|
@ -208,21 +207,20 @@ void Con_GetAndShowLastClicks (void)
|
|||
/***** Get last clicks from database *****/
|
||||
/* Important for maximum performance:
|
||||
do the LIMIT in the big log table before the JOIN */
|
||||
if (asprintf (&Query,"SELECT last_logs.LogCod,last_logs.ActCod,"
|
||||
"last_logs.Dif,last_logs.Role,"
|
||||
"last_logs.CtyCod,last_logs.InsCod,"
|
||||
"last_logs.CtrCod,last_logs.DegCod,"
|
||||
"actions.Txt"
|
||||
" FROM"
|
||||
" (SELECT LogCod,ActCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(ClickTime) AS Dif,"
|
||||
"Role,CtyCod,InsCod,CtrCod,DegCod"
|
||||
" FROM log_recent ORDER BY LogCod DESC LIMIT 20)"
|
||||
" AS last_logs,actions"
|
||||
" WHERE last_logs.ActCod=actions.ActCod"
|
||||
" AND actions.Language='es'") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get last clicks");
|
||||
DB_BuildQuery ("SELECT last_logs.LogCod,last_logs.ActCod,"
|
||||
"last_logs.Dif,last_logs.Role,"
|
||||
"last_logs.CtyCod,last_logs.InsCod,"
|
||||
"last_logs.CtrCod,last_logs.DegCod,"
|
||||
"actions.Txt"
|
||||
" FROM"
|
||||
" (SELECT LogCod,ActCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(ClickTime) AS Dif,"
|
||||
"Role,CtyCod,InsCod,CtrCod,DegCod"
|
||||
" FROM log_recent ORDER BY LogCod DESC LIMIT 20)"
|
||||
" AS last_logs,actions"
|
||||
" WHERE last_logs.ActCod=actions.ActCod"
|
||||
" AND actions.Language='es'");
|
||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get last clicks");
|
||||
|
||||
/***** Write list of connected users *****/
|
||||
Tbl_StartTableCenter (1);
|
||||
|
@ -698,7 +696,6 @@ static unsigned Con_GetConnectedUsrsTotal (Rol_Role_t Role)
|
|||
static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t Role,struct ConnectedUsrs *Usrs)
|
||||
{
|
||||
extern const char *Usr_StringsSexDB[Usr_NUM_SEXS];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumSexs;
|
||||
|
@ -711,71 +708,65 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
|
|||
switch (Gbl.Scope.Current)
|
||||
{
|
||||
case Sco_SCOPE_SYS: // Show connected users in the whole platform
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM connected,usr_data"
|
||||
" WHERE connected.UsrCod=usr_data.UsrCod") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM connected,usr_data"
|
||||
" WHERE connected.UsrCod=usr_data.UsrCod");
|
||||
break;
|
||||
case Sco_SCOPE_CTY: // Show connected users in the current country
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM institutions,centres,degrees,courses,crs_usr,connected,usr_data"
|
||||
" WHERE institutions.CtyCod=%ld"
|
||||
" AND institutions.InsCod=centres.InsCod"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentCty.Cty.CtyCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM institutions,centres,degrees,courses,crs_usr,connected,usr_data"
|
||||
" WHERE institutions.CtyCod=%ld"
|
||||
" AND institutions.InsCod=centres.InsCod"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentCty.Cty.CtyCod);
|
||||
break;
|
||||
case Sco_SCOPE_INS: // Show connected users in the current institution
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM centres,degrees,courses,crs_usr,connected,usr_data"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentIns.Ins.InsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM centres,degrees,courses,crs_usr,connected,usr_data"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentIns.Ins.InsCod);
|
||||
break;
|
||||
case Sco_SCOPE_CTR: // Show connected users in the current centre
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM degrees,courses,crs_usr,connected,usr_data"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM degrees,courses,crs_usr,connected,usr_data"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod);
|
||||
break;
|
||||
case Sco_SCOPE_DEG: // Show connected users in the current degree
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM courses,crs_usr,connected,usr_data"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM courses,crs_usr,connected,usr_data"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod);
|
||||
break;
|
||||
case Sco_SCOPE_CRS: // Show connected users in the current course
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM crs_usr,connected,usr_data"
|
||||
" WHERE crs_usr.CrsCod=%ld"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentCrs.Crs.CrsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM crs_usr,connected,usr_data"
|
||||
" WHERE crs_usr.CrsCod=%ld"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentCrs.Crs.CrsCod);
|
||||
break;
|
||||
default:
|
||||
Lay_WrongScopeExit ();
|
||||
|
@ -783,12 +774,11 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
|
|||
}
|
||||
break;
|
||||
case Rol_GST:
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM connected,usr_data"
|
||||
" WHERE connected.UsrCod NOT IN (SELECT UsrCod FROM crs_usr)"
|
||||
" AND connected.UsrCod=usr_data.UsrCod") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM connected,usr_data"
|
||||
" WHERE connected.UsrCod NOT IN (SELECT UsrCod FROM crs_usr)"
|
||||
" AND connected.UsrCod=usr_data.UsrCod");
|
||||
break;
|
||||
case Rol_STD:
|
||||
case Rol_NET:
|
||||
|
@ -796,84 +786,78 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
|
|||
switch (Gbl.Scope.Current)
|
||||
{
|
||||
case Sco_SCOPE_SYS: // Show connected users in the whole platform
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM connected,crs_usr,usr_data"
|
||||
" WHERE connected.UsrCod=crs_usr.UsrCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
(unsigned) Role) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM connected,crs_usr,usr_data"
|
||||
" WHERE connected.UsrCod=crs_usr.UsrCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
(unsigned) Role);
|
||||
break;
|
||||
case Sco_SCOPE_CTY: // Show connected users in the current country
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM institutions,centres,degrees,courses,crs_usr,connected,usr_data"
|
||||
" WHERE institutions.CtyCod=%ld"
|
||||
" AND institutions.InsCod=centres.InsCod"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentCty.Cty.CtyCod,
|
||||
(unsigned) Role) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM institutions,centres,degrees,courses,crs_usr,connected,usr_data"
|
||||
" WHERE institutions.CtyCod=%ld"
|
||||
" AND institutions.InsCod=centres.InsCod"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentCty.Cty.CtyCod,
|
||||
(unsigned) Role);
|
||||
break;
|
||||
case Sco_SCOPE_INS: // Show connected users in the current institution
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM centres,degrees,courses,crs_usr,connected,usr_data"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM centres,degrees,courses,crs_usr,connected,usr_data"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentIns.Ins.InsCod,
|
||||
(unsigned) Role) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
(unsigned) Role);
|
||||
break;
|
||||
case Sco_SCOPE_CTR: // Show connected users in the current centre
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM degrees,courses,crs_usr,connected,usr_data"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod,
|
||||
(unsigned) Role) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM degrees,courses,crs_usr,connected,usr_data"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod,
|
||||
(unsigned) Role);
|
||||
break;
|
||||
case Sco_SCOPE_DEG: // Show connected users in the current degree
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM courses,crs_usr,connected,usr_data"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod,
|
||||
(unsigned) Role) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM courses,crs_usr,connected,usr_data"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod,
|
||||
(unsigned) Role);
|
||||
break;
|
||||
case Sco_SCOPE_CRS: // Show connected users in the current course
|
||||
if (asprintf (&Query,"SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM crs_usr,connected,usr_data"
|
||||
" WHERE crs_usr.CrsCod=%ld"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
(unsigned) Role) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod),"
|
||||
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
|
||||
" FROM crs_usr,connected,usr_data"
|
||||
" WHERE crs_usr.CrsCod=%ld"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" AND connected.UsrCod=usr_data.UsrCod",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
(unsigned) Role);
|
||||
break;
|
||||
default:
|
||||
Lay_WrongScopeExit ();
|
||||
|
@ -884,7 +868,7 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
|
|||
Lay_ShowErrorAndExit ("Wrong role.");
|
||||
break;
|
||||
}
|
||||
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of connected users who belong to this location");
|
||||
DB_QuerySELECT_new (&mysql_res,"can not get number of connected users who belong to this location");
|
||||
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
||||
|
@ -918,25 +902,23 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
|
|||
|
||||
static void Con_ComputeConnectedUsrsWithARoleCurrentCrsOneByOne (Rol_Role_t Role)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
unsigned NumUsr = Gbl.Usrs.Connected.NumUsrs; // Save current number of users
|
||||
|
||||
/***** Get connected users who belong to current course from database *****/
|
||||
if (asprintf (&Query,"SELECT connected.UsrCod,connected.LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
|
||||
" FROM connected,crs_usr"
|
||||
" WHERE crs_usr.CrsCod=%ld AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" ORDER BY Dif",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
(unsigned) Role) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumRows = DB_QuerySELECT_free (Query,&mysql_res,
|
||||
"can not get list of connected users"
|
||||
" who belong to this course");
|
||||
DB_BuildQuery ("SELECT connected.UsrCod,connected.LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
|
||||
" FROM connected,crs_usr"
|
||||
" WHERE crs_usr.CrsCod=%ld AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" ORDER BY Dif",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
(unsigned) Role);
|
||||
NumRows = DB_QuerySELECT_new (&mysql_res,
|
||||
"can not get list of connected users"
|
||||
" who belong to this course");
|
||||
Gbl.Usrs.Connected.NumUsrs += (unsigned) NumRows;
|
||||
Gbl.Usrs.Connected.NumUsrsToList += (unsigned) NumRows;
|
||||
if (Gbl.Usrs.Connected.NumUsrsToList > Cfg_MAX_CONNECTED_SHOWN)
|
||||
|
@ -1077,7 +1059,6 @@ static void Con_WriteRowConnectedUsrOnRightColumn (Rol_Role_t Role)
|
|||
|
||||
static void Con_ShowConnectedUsrsCurrentLocationOneByOneOnMainZone (Rol_Role_t Role)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumUsrs;
|
||||
|
@ -1098,12 +1079,11 @@ static void Con_ShowConnectedUsrsCurrentLocationOneByOneOnMainZone (Rol_Role_t R
|
|||
switch (Role)
|
||||
{
|
||||
case Rol_GST:
|
||||
if (asprintf (&Query,"SELECT UsrCod,LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(LastTime) AS Dif"
|
||||
" FROM connected"
|
||||
" WHERE UsrCod NOT IN (SELECT UsrCod FROM crs_usr)"
|
||||
" ORDER BY Dif") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT UsrCod,LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(LastTime) AS Dif"
|
||||
" FROM connected"
|
||||
" WHERE UsrCod NOT IN (SELECT UsrCod FROM crs_usr)"
|
||||
" ORDER BY Dif");
|
||||
break;
|
||||
case Rol_STD:
|
||||
case Rol_NET:
|
||||
|
@ -1111,84 +1091,78 @@ static void Con_ShowConnectedUsrsCurrentLocationOneByOneOnMainZone (Rol_Role_t R
|
|||
switch (Gbl.Scope.Current)
|
||||
{
|
||||
case Sco_SCOPE_SYS: // Show connected users in the whole platform
|
||||
if (asprintf (&Query,"SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
|
||||
" FROM connected,crs_usr"
|
||||
" WHERE connected.UsrCod=crs_usr.UsrCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" ORDER BY Dif",
|
||||
(unsigned) Role) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
|
||||
" FROM connected,crs_usr"
|
||||
" WHERE connected.UsrCod=crs_usr.UsrCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" ORDER BY Dif",
|
||||
(unsigned) Role);
|
||||
break;
|
||||
case Sco_SCOPE_CTY: // Show connected users in the current country
|
||||
if (asprintf (&Query,"SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
|
||||
" FROM institutions,centres,degrees,courses,crs_usr,connected"
|
||||
" WHERE institutions.CtyCod=%ld"
|
||||
" AND institutions.InsCod=centres.InsCod"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" ORDER BY Dif",
|
||||
Gbl.CurrentCty.Cty.CtyCod,
|
||||
(unsigned) Role) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
|
||||
" FROM institutions,centres,degrees,courses,crs_usr,connected"
|
||||
" WHERE institutions.CtyCod=%ld"
|
||||
" AND institutions.InsCod=centres.InsCod"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" ORDER BY Dif",
|
||||
Gbl.CurrentCty.Cty.CtyCod,
|
||||
(unsigned) Role);
|
||||
break;
|
||||
case Sco_SCOPE_INS: // Show connected users in the current institution
|
||||
if (asprintf (&Query,"SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
|
||||
" FROM centres,degrees,courses,crs_usr,connected"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" ORDER BY Dif",
|
||||
Gbl.CurrentIns.Ins.InsCod,
|
||||
(unsigned) Role) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
|
||||
" FROM centres,degrees,courses,crs_usr,connected"
|
||||
" WHERE centres.InsCod=%ld"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" ORDER BY Dif",
|
||||
Gbl.CurrentIns.Ins.InsCod,
|
||||
(unsigned) Role);
|
||||
break;
|
||||
case Sco_SCOPE_CTR: // Show connected users in the current centre
|
||||
if (asprintf (&Query,"SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
|
||||
" FROM degrees,courses,crs_usr,connected"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" ORDER BY Dif",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod,
|
||||
(unsigned) Role) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
|
||||
" FROM degrees,courses,crs_usr,connected"
|
||||
" WHERE degrees.CtrCod=%ld"
|
||||
" AND degrees.DegCod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" ORDER BY Dif",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod,
|
||||
(unsigned) Role);
|
||||
break;
|
||||
case Sco_SCOPE_DEG: // Show connected users in the current degree
|
||||
if (asprintf (&Query,"SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
|
||||
" FROM courses,crs_usr,connected"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" ORDER BY Dif",
|
||||
Gbl.CurrentDeg.Deg.DegCod,
|
||||
(unsigned) Role) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
|
||||
" FROM courses,crs_usr,connected"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" ORDER BY Dif",
|
||||
Gbl.CurrentDeg.Deg.DegCod,
|
||||
(unsigned) Role);
|
||||
break;
|
||||
case Sco_SCOPE_CRS: // Show connected users in the current course
|
||||
if (asprintf (&Query,"SELECT connected.UsrCod,connected.LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
|
||||
" FROM crs_usr,connected"
|
||||
" WHERE crs_usr.CrsCod=%ld"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" ORDER BY Dif",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
(unsigned) Role) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT connected.UsrCod,connected.LastCrsCod,"
|
||||
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
|
||||
" FROM crs_usr,connected"
|
||||
" WHERE crs_usr.CrsCod=%ld"
|
||||
" AND crs_usr.Role=%u"
|
||||
" AND crs_usr.UsrCod=connected.UsrCod"
|
||||
" ORDER BY Dif",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
(unsigned) Role);
|
||||
break;
|
||||
default:
|
||||
Lay_WrongScopeExit ();
|
||||
|
@ -1200,9 +1174,9 @@ static void Con_ShowConnectedUsrsCurrentLocationOneByOneOnMainZone (Rol_Role_t R
|
|||
break;
|
||||
}
|
||||
|
||||
NumUsrs = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,
|
||||
"can not get list of connected users"
|
||||
" who belong to this location");
|
||||
NumUsrs = (unsigned) DB_QuerySELECT_new (&mysql_res,
|
||||
"can not get list of connected users"
|
||||
" who belong to this location");
|
||||
|
||||
if (NumUsrs)
|
||||
{
|
||||
|
|
136
swad_country.c
136
swad_country.c
|
@ -111,7 +111,6 @@ void Cty_SeeCtyWithPendingInss (void)
|
|||
extern const char *Txt_Country;
|
||||
extern const char *Txt_Institutions_ABBREVIATION;
|
||||
extern const char *Txt_There_are_no_countries_with_requests_for_institutions_to_be_confirmed;
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumCtys;
|
||||
|
@ -123,24 +122,23 @@ void Cty_SeeCtyWithPendingInss (void)
|
|||
switch (Gbl.Usrs.Me.Role.Logged)
|
||||
{
|
||||
case Rol_SYS_ADM:
|
||||
if (asprintf (&Query,"SELECT institutions.CtyCod,COUNT(*)"
|
||||
" FROM institutions,countries"
|
||||
" WHERE (institutions.Status & %u)<>0"
|
||||
" AND institutions.CtyCod=countries.CtyCod"
|
||||
" GROUP BY institutions.CtyCod"
|
||||
" ORDER BY countries.Name_%s",
|
||||
(unsigned) Ins_STATUS_BIT_PENDING,
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language]) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT institutions.CtyCod,COUNT(*)"
|
||||
" FROM institutions,countries"
|
||||
" WHERE (institutions.Status & %u)<>0"
|
||||
" AND institutions.CtyCod=countries.CtyCod"
|
||||
" GROUP BY institutions.CtyCod"
|
||||
" ORDER BY countries.Name_%s",
|
||||
(unsigned) Ins_STATUS_BIT_PENDING,
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
|
||||
break;
|
||||
default: // Forbidden for other users
|
||||
return;
|
||||
}
|
||||
|
||||
/***** Get countries *****/
|
||||
if ((NumCtys = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,
|
||||
"can not get countries"
|
||||
"with pending institutions")))
|
||||
if ((NumCtys = (unsigned) DB_QuerySELECT_new (&mysql_res,
|
||||
"can not get countries"
|
||||
"with pending institutions")))
|
||||
{
|
||||
/***** Start box and table *****/
|
||||
Box_StartBoxTable (NULL,Txt_Countries_with_pending_institutions,NULL,
|
||||
|
@ -1001,7 +999,6 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData)
|
|||
char SubQueryWWW1[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
|
||||
char SubQueryWWW2[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
|
||||
char OrderBySubQuery[256];
|
||||
char *Query = NULL; // Initialized to avoid warning
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
|
@ -1013,11 +1010,10 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData)
|
|||
switch (GetExtraData)
|
||||
{
|
||||
case Cty_GET_BASIC_DATA:
|
||||
if (asprintf (&Query,"SELECT CtyCod,Alpha2,Name_%s"
|
||||
" FROM countries ORDER BY Name_%s",
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language]) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT CtyCod,Alpha2,Name_%s"
|
||||
" FROM countries ORDER BY Name_%s",
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
|
||||
break;
|
||||
case Cty_GET_EXTRA_DATA:
|
||||
SubQueryNam1[0] = '\0';
|
||||
|
@ -1062,24 +1058,23 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData)
|
|||
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
|
||||
break;
|
||||
}
|
||||
if (asprintf (&Query,"(SELECT countries.CtyCod,countries.Alpha2,%s%sCOUNT(*) AS NumUsrs"
|
||||
" FROM countries,usr_data"
|
||||
" WHERE countries.CtyCod=usr_data.CtyCod"
|
||||
" GROUP BY countries.CtyCod)"
|
||||
" UNION "
|
||||
"(SELECT CtyCod,Alpha2,%s%s0 AS NumUsrs"
|
||||
" FROM countries"
|
||||
" WHERE CtyCod NOT IN"
|
||||
" (SELECT DISTINCT CtyCod FROM usr_data))"
|
||||
" ORDER BY %s",
|
||||
SubQueryNam1,SubQueryWWW1,
|
||||
SubQueryNam2,SubQueryWWW2,OrderBySubQuery) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("(SELECT countries.CtyCod,countries.Alpha2,%s%sCOUNT(*) AS NumUsrs"
|
||||
" FROM countries,usr_data"
|
||||
" WHERE countries.CtyCod=usr_data.CtyCod"
|
||||
" GROUP BY countries.CtyCod)"
|
||||
" UNION "
|
||||
"(SELECT CtyCod,Alpha2,%s%s0 AS NumUsrs"
|
||||
" FROM countries"
|
||||
" WHERE CtyCod NOT IN"
|
||||
" (SELECT DISTINCT CtyCod FROM usr_data))"
|
||||
" ORDER BY %s",
|
||||
SubQueryNam1,SubQueryWWW1,
|
||||
SubQueryNam2,SubQueryWWW2,OrderBySubQuery);
|
||||
break;
|
||||
}
|
||||
|
||||
/***** Count number of rows in result *****/
|
||||
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get countries");
|
||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get countries");
|
||||
if (NumRows) // Countries found...
|
||||
{
|
||||
Gbl.Ctys.Num = (unsigned) NumRows;
|
||||
|
@ -1174,7 +1169,6 @@ void Cty_WriteSelectorOfCountry (void)
|
|||
{
|
||||
extern const char *Txt_Country;
|
||||
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumCtys;
|
||||
|
@ -1193,13 +1187,12 @@ void Cty_WriteSelectorOfCountry (void)
|
|||
Txt_Country);
|
||||
|
||||
/***** Get countries from database *****/
|
||||
if (asprintf (&Query,"SELECT DISTINCT CtyCod,Name_%s"
|
||||
" FROM countries"
|
||||
" ORDER BY countries.Name_%s",
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language]) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumCtys = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get countries");
|
||||
DB_BuildQuery ("SELECT DISTINCT CtyCod,Name_%s"
|
||||
" FROM countries"
|
||||
" ORDER BY countries.Name_%s",
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
|
||||
NumCtys = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get countries");
|
||||
|
||||
/***** List countries *****/
|
||||
for (NumCty = 0;
|
||||
|
@ -1272,7 +1265,6 @@ bool Cty_GetDataOfCountryByCod (struct Country *Cty,Cty_GetExtraData_t GetExtraD
|
|||
char SubQueryNam2[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
|
||||
char SubQueryWWW1[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
|
||||
char SubQueryWWW2[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
|
||||
char *Query = NULL; // Initialized to avoid warning
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
|
@ -1314,13 +1306,12 @@ bool Cty_GetDataOfCountryByCod (struct Country *Cty,Cty_GetExtraData_t GetExtraD
|
|||
switch (GetExtraData)
|
||||
{
|
||||
case Cty_GET_BASIC_DATA:
|
||||
if (asprintf (&Query,"SELECT Alpha2,Name_%s,WWW_%s"
|
||||
" FROM countries"
|
||||
" WHERE CtyCod='%03ld'",
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
||||
Cty->CtyCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("SELECT Alpha2,Name_%s,WWW_%s"
|
||||
" FROM countries"
|
||||
" WHERE CtyCod='%03ld'",
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
||||
Cty->CtyCod);
|
||||
break;
|
||||
case Cty_GET_EXTRA_DATA:
|
||||
SubQueryNam1[0] = '\0';
|
||||
|
@ -1353,23 +1344,22 @@ bool Cty_GetDataOfCountryByCod (struct Country *Cty,Cty_GetExtraData_t GetExtraD
|
|||
Str_Concat (SubQueryWWW2,StrField,
|
||||
Cty_MAX_BYTES_SUBQUERY_CTYS);
|
||||
}
|
||||
if (asprintf (&Query,"(SELECT countries.Alpha2,%s%sCOUNT(*) AS NumUsrs"
|
||||
" FROM countries,usr_data"
|
||||
" WHERE countries.CtyCod='%03ld'"
|
||||
" AND countries.CtyCod=usr_data.CtyCod)"
|
||||
" UNION "
|
||||
"(SELECT Alpha2,%s%s0 AS NumUsrs"
|
||||
" FROM countries"
|
||||
" WHERE CtyCod='%03ld'"
|
||||
" AND CtyCod NOT IN"
|
||||
" (SELECT DISTINCT CtyCod FROM usr_data))",
|
||||
SubQueryNam1,SubQueryWWW1,Cty->CtyCod,
|
||||
SubQueryNam2,SubQueryWWW2,Cty->CtyCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_BuildQuery ("(SELECT countries.Alpha2,%s%sCOUNT(*) AS NumUsrs"
|
||||
" FROM countries,usr_data"
|
||||
" WHERE countries.CtyCod='%03ld'"
|
||||
" AND countries.CtyCod=usr_data.CtyCod)"
|
||||
" UNION "
|
||||
"(SELECT Alpha2,%s%s0 AS NumUsrs"
|
||||
" FROM countries"
|
||||
" WHERE CtyCod='%03ld'"
|
||||
" AND CtyCod NOT IN"
|
||||
" (SELECT DISTINCT CtyCod FROM usr_data))",
|
||||
SubQueryNam1,SubQueryWWW1,Cty->CtyCod,
|
||||
SubQueryNam2,SubQueryWWW2,Cty->CtyCod);
|
||||
break;
|
||||
}
|
||||
|
||||
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get data of a country");
|
||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get data of a country");
|
||||
|
||||
/***** Count number of rows in result *****/
|
||||
if (NumRows) // Country found...
|
||||
|
@ -1440,7 +1430,6 @@ void Cty_FlushCacheCountryName (void)
|
|||
void Cty_GetCountryName (long CtyCod,char CtyName[Cty_MAX_BYTES_NAME + 1])
|
||||
{
|
||||
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
|
||||
|
@ -1462,10 +1451,9 @@ void Cty_GetCountryName (long CtyCod,char CtyName[Cty_MAX_BYTES_NAME + 1])
|
|||
/***** 3. Slow: get country name from database *****/
|
||||
Gbl.Cache.CountryName.CtyCod = CtyCod;
|
||||
|
||||
if (asprintf (&Query,"SELECT Name_%s FROM countries WHERE CtyCod='%03ld'",
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language],CtyCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get the name of a country")) // Country found...
|
||||
DB_BuildQuery ("SELECT Name_%s FROM countries WHERE CtyCod='%03ld'",
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language],CtyCod);
|
||||
if (DB_QuerySELECT_new (&mysql_res,"can not get the name of a country")) // Country found...
|
||||
{
|
||||
/* Get row */
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -1490,7 +1478,6 @@ void Cty_GetCountryName (long CtyCod,char CtyName[Cty_MAX_BYTES_NAME + 1])
|
|||
|
||||
static void Cty_GetMapAttribution (long CtyCod,char **MapAttribution)
|
||||
{
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
size_t Length;
|
||||
|
@ -1499,10 +1486,9 @@ static void Cty_GetMapAttribution (long CtyCod,char **MapAttribution)
|
|||
Cty_FreeMapAttribution (MapAttribution);
|
||||
|
||||
/***** Get photo attribution from database *****/
|
||||
if (asprintf (&Query,"SELECT MapAttribution FROM countries WHERE CtyCod=%ld",
|
||||
CtyCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get photo attribution"))
|
||||
DB_BuildQuery ("SELECT MapAttribution FROM countries WHERE CtyCod=%ld",
|
||||
CtyCod);
|
||||
if (DB_QuerySELECT_new (&mysql_res,"can not get photo attribution"))
|
||||
{
|
||||
/* Get row */
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -2418,7 +2404,7 @@ unsigned Cty_GetNumCtysWithUsrs (Rol_Role_t Role,const char *SubQuery)
|
|||
/*****************************************************************************/
|
||||
// Returns number of countries found
|
||||
|
||||
unsigned Cty_ListCtysFound (const char *Query)
|
||||
unsigned Cty_ListCtysFound (void)
|
||||
{
|
||||
extern const char *Txt_country;
|
||||
extern const char *Txt_countries;
|
||||
|
@ -2429,7 +2415,7 @@ unsigned Cty_ListCtysFound (const char *Query)
|
|||
struct Country Cty;
|
||||
|
||||
/***** Query database *****/
|
||||
if ((NumCtys = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get countries")))
|
||||
if ((NumCtys = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get countries")))
|
||||
{
|
||||
/***** Start box and table *****/
|
||||
/* Number of countries found */
|
||||
|
|
|
@ -116,6 +116,6 @@ unsigned Cty_GetNumCtysWithDegs (const char *SubQuery);
|
|||
unsigned Cty_GetNumCtysWithCrss (const char *SubQuery);
|
||||
unsigned Cty_GetNumCtysWithUsrs (Rol_Role_t Role,const char *SubQuery);
|
||||
|
||||
unsigned Cty_ListCtysFound (const char *Query);
|
||||
unsigned Cty_ListCtysFound (void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -26,9 +26,10 @@
|
|||
/*********************************** Headers *********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define _GNU_SOURCE // For vasprintf
|
||||
#include <linux/stddef.h> // For NULL
|
||||
#include <mysql/mysql.h> // To access MySQL databases
|
||||
#include <stdio.h> // For FILE,fprintf
|
||||
#include <stdio.h> // For FILE, fprintf, vasprintf
|
||||
|
||||
#include "swad_config.h"
|
||||
#include "swad_database.h"
|
||||
|
@ -51,6 +52,8 @@ extern struct Globals Gbl;
|
|||
|
||||
static void DB_CreateTable (const char *Query);
|
||||
|
||||
// static void DB_QueryPrintf (char **strp,const char *fmt,...);
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Database tables *******************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -3062,6 +3065,67 @@ void DB_CloseDBConnection (void)
|
|||
}
|
||||
}
|
||||
|
||||
void DB_BuildQuery (const char *fmt,...)
|
||||
{
|
||||
int NumBytesPrinted;
|
||||
va_list ap;
|
||||
|
||||
if (Gbl.DB.QueryPtr != NULL)
|
||||
Lay_ShowErrorAndExit ("Error building query.");
|
||||
|
||||
va_start (ap,fmt);
|
||||
NumBytesPrinted = vasprintf (&Gbl.DB.QueryPtr,fmt,ap);
|
||||
va_end (ap);
|
||||
|
||||
if (NumBytesPrinted < 0) // If memory allocation wasn't possible,
|
||||
// or some other error occurs,
|
||||
// vasprintf will return -1
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
}
|
||||
/*
|
||||
static void DB_QueryPrintf (char **strp,const char *fmt,...)
|
||||
{
|
||||
int NumBytesPrinted;
|
||||
va_list ap;
|
||||
|
||||
va_start (ap, fmt);
|
||||
NumBytesPrinted = vasprintf (strp, fmt, ap);
|
||||
va_end (ap);
|
||||
|
||||
if (NumBytesPrinted < 0) // If memory allocation wasn't possible,
|
||||
// or some other error occurs,
|
||||
// vasprintf will return -1
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
}
|
||||
*/
|
||||
/*****************************************************************************/
|
||||
/******************** Make a SELECT query from database **********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned long DB_QuerySELECT_new (MYSQL_RES **mysql_res,const char *MsgError)
|
||||
{
|
||||
int Result;
|
||||
|
||||
/***** Check that query string pointer
|
||||
does not point to an allocated string *****/
|
||||
if (Gbl.DB.QueryPtr == NULL)
|
||||
Lay_ShowErrorAndExit ("Wrong query string.");
|
||||
|
||||
/***** Query database and free query string pointer *****/
|
||||
Result = mysql_query (&Gbl.mysql,Gbl.DB.QueryPtr); // Returns 0 on success
|
||||
free ((void *) Gbl.DB.QueryPtr);
|
||||
Gbl.DB.QueryPtr = NULL;
|
||||
if (Result)
|
||||
DB_ExitOnMySQLError (MsgError);
|
||||
|
||||
/***** Store query result *****/
|
||||
if ((*mysql_res = mysql_store_result (&Gbl.mysql)) == NULL)
|
||||
DB_ExitOnMySQLError (MsgError);
|
||||
|
||||
/***** Return number of rows of result *****/
|
||||
return (unsigned long) mysql_num_rows (*mysql_res);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************** Make a SELECT query from database **********************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -37,6 +37,9 @@ void DB_CreateTablesIfNotExist (void);
|
|||
void DB_OpenDBConnection (void);
|
||||
void DB_CloseDBConnection (void);
|
||||
|
||||
void DB_BuildQuery (const char *fmt,...);
|
||||
|
||||
unsigned long DB_QuerySELECT_new (MYSQL_RES **mysql_res,const char *MsgError);
|
||||
unsigned long DB_QuerySELECT_free (const char *Query,MYSQL_RES **mysql_res,const char *MsgError);
|
||||
unsigned long DB_QuerySELECT (const char *Query,MYSQL_RES **mysql_res,const char *MsgError);
|
||||
|
||||
|
|
|
@ -126,6 +126,7 @@ void Gbl_InitializeGlobals (void)
|
|||
|
||||
Gbl.DB.DatabaseIsOpen = false;
|
||||
Gbl.DB.LockedTables = false;
|
||||
Gbl.DB.QueryPtr = NULL;
|
||||
|
||||
Gbl.HiddenParamsInsertedIntoDB = false;
|
||||
|
||||
|
|
|
@ -142,6 +142,7 @@ struct Globals
|
|||
{
|
||||
bool DatabaseIsOpen;
|
||||
bool LockedTables;
|
||||
char *QueryPtr; // Pointer to query string, allocated dinamically
|
||||
} DB;
|
||||
|
||||
bool HiddenParamsInsertedIntoDB; // If parameters are inserted in the database in this execution
|
||||
|
|
|
@ -355,6 +355,7 @@ void Ntf_ShowMyNotifications (void)
|
|||
sprintf (SubQuery," AND (Status&%u)=0",
|
||||
Ntf_STATUS_BIT_READ |
|
||||
Ntf_STATUS_BIT_REMOVED);
|
||||
/*
|
||||
if (asprintf (&Query,"SELECT NotifyEvent,FromUsrCod,InsCod,CtrCod,DegCod,CrsCod,"
|
||||
"Cod,UNIX_TIMESTAMP(TimeNotif),Status"
|
||||
" FROM notif"
|
||||
|
@ -362,7 +363,14 @@ void Ntf_ShowMyNotifications (void)
|
|||
" ORDER BY TimeNotif DESC",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,SubQuery) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumNotifications = DB_QuerySELECT_free (Query,&mysql_res,"can not get your notifications");
|
||||
*/
|
||||
DB_BuildQuery ("SELECT NotifyEvent,FromUsrCod,InsCod,CtrCod,DegCod,CrsCod,"
|
||||
"Cod,UNIX_TIMESTAMP(TimeNotif),Status"
|
||||
" FROM notif"
|
||||
" WHERE ToUsrCod=%ld%s"
|
||||
" ORDER BY TimeNotif DESC",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,SubQuery);
|
||||
NumNotifications = DB_QuerySELECT_new (&mysql_res,"can not get your notifications");
|
||||
|
||||
/***** Contextual links *****/
|
||||
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_MENU\">");
|
||||
|
|
|
@ -616,7 +616,6 @@ static unsigned Sch_SearchCountriesInDB (const char *RangeQuery)
|
|||
{
|
||||
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
|
||||
char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1];
|
||||
char *Query;
|
||||
char FieldName[4+1+2+1]; // Example: Name_en
|
||||
|
||||
/***** Check scope *****/
|
||||
|
@ -634,14 +633,13 @@ static unsigned Sch_SearchCountriesInDB (const char *RangeQuery)
|
|||
if (Sch_BuildSearchQuery (SearchQuery,FieldName,NULL,NULL))
|
||||
{
|
||||
/***** Query database and list institutions found *****/
|
||||
if (asprintf (&Query,"SELECT CtyCod"
|
||||
" FROM countries"
|
||||
" WHERE %s%s"
|
||||
" ORDER BY Name_%s",
|
||||
SearchQuery,RangeQuery,
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language]) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
return Cty_ListCtysFound (Query);
|
||||
DB_BuildQuery ("SELECT CtyCod"
|
||||
" FROM countries"
|
||||
" WHERE %s%s"
|
||||
" ORDER BY Name_%s",
|
||||
SearchQuery,RangeQuery,
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
|
||||
return Cty_ListCtysFound ();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -691,7 +689,6 @@ static unsigned Sch_SearchInstitutionsInDB (const char *RangeQuery)
|
|||
static unsigned Sch_SearchCentresInDB (const char *RangeQuery)
|
||||
{
|
||||
char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1];
|
||||
char *Query;
|
||||
|
||||
/***** Check scope *****/
|
||||
if (Gbl.Scope.Current != Sco_SCOPE_DEG &&
|
||||
|
@ -702,16 +699,15 @@ static unsigned Sch_SearchCentresInDB (const char *RangeQuery)
|
|||
if (Sch_BuildSearchQuery (SearchQuery,"centres.FullName",NULL,NULL))
|
||||
{
|
||||
/***** Query database and list centres found *****/
|
||||
if (asprintf (&Query,"SELECT centres.CtrCod"
|
||||
" FROM centres,institutions,countries"
|
||||
" WHERE %s"
|
||||
" AND centres.InsCod=institutions.InsCod"
|
||||
" AND institutions.CtyCod=countries.CtyCod"
|
||||
"%s"
|
||||
" ORDER BY centres.FullName,institutions.FullName",
|
||||
SearchQuery,RangeQuery) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
return Ctr_ListCtrsFound (Query);
|
||||
DB_BuildQuery ("SELECT centres.CtrCod"
|
||||
" FROM centres,institutions,countries"
|
||||
" WHERE %s"
|
||||
" AND centres.InsCod=institutions.InsCod"
|
||||
" AND institutions.CtyCod=countries.CtyCod"
|
||||
"%s"
|
||||
" ORDER BY centres.FullName,institutions.FullName",
|
||||
SearchQuery,RangeQuery);
|
||||
return Ctr_ListCtrsFound ();
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue