Version 18.8

This commit is contained in:
Antonio Cañas Vargas 2018-10-25 11:26:44 +02:00
parent 8a4804bd33
commit c54ed0e6eb
20 changed files with 845 additions and 937 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -126,6 +126,7 @@ void Gbl_InitializeGlobals (void)
Gbl.DB.DatabaseIsOpen = false;
Gbl.DB.LockedTables = false;
Gbl.DB.QueryPtr = NULL;
Gbl.HiddenParamsInsertedIntoDB = false;

View File

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

View File

@ -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\">");

View File

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