Version 18.11.2

This commit is contained in:
Antonio Cañas Vargas 2018-10-30 14:47:31 +01:00
parent c1559c1d52
commit adb9c1020d
7 changed files with 338 additions and 311 deletions

View File

@ -355,10 +355,11 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf ps2pdf source.ps destination.pdf
*/ */
#define Log_PLATFORM_VERSION "SWAD 18.11.1 (2018-10-30)" #define Log_PLATFORM_VERSION "SWAD 18.11.2 (2018-10-30)"
#define CSS_FILE "swad18.4.css" #define CSS_FILE "swad18.4.css"
#define JS_FILE "swad17.17.1.js" #define JS_FILE "swad17.17.1.js"
/* /*
Version 18.11.2: Oct 30, 2018 Joining building and performing query into one function. (235531 lines)
Version 18.11.1: Oct 30, 2018 Joining building and performing query into one function. (235497 lines) Version 18.11.1: Oct 30, 2018 Joining building and performing query into one function. (235497 lines)
Version 18.11: Oct 30, 2018 Joining building and performing query into one function. (235465 lines) Version 18.11: Oct 30, 2018 Joining building and performing query into one function. (235465 lines)
Version 18.10.2: Oct 30, 2018 Fixed bugs in access to database. (235414 lines) Version 18.10.2: Oct 30, 2018 Fixed bugs in access to database. (235414 lines)

View File

@ -194,8 +194,8 @@ void Con_GetAndShowLastClicks (void)
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumRow; unsigned long NumRow;
unsigned NumRows; unsigned long NumRows;
long ActCod; long ActCod;
const char *ClassRow; const char *ClassRow;
time_t TimeDiff; time_t TimeDiff;
@ -207,20 +207,20 @@ void Con_GetAndShowLastClicks (void)
/***** Get last clicks from database *****/ /***** Get last clicks from database *****/
/* Important for maximum performance: /* Important for maximum performance:
do the LIMIT in the big log table before the JOIN */ do the LIMIT in the big log table before the JOIN */
DB_BuildQuery ("SELECT last_logs.LogCod,last_logs.ActCod," NumRows = DB_QuerySELECT (&mysql_res,"can not get last clicks",
"last_logs.Dif,last_logs.Role," "SELECT last_logs.LogCod,last_logs.ActCod,"
"last_logs.CtyCod,last_logs.InsCod," "last_logs.Dif,last_logs.Role,"
"last_logs.CtrCod,last_logs.DegCod," "last_logs.CtyCod,last_logs.InsCod,"
"actions.Txt" "last_logs.CtrCod,last_logs.DegCod,"
" FROM" "actions.Txt"
" (SELECT LogCod,ActCod," " FROM"
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(ClickTime) AS Dif," " (SELECT LogCod,ActCod,"
"Role,CtyCod,InsCod,CtrCod,DegCod" "UNIX_TIMESTAMP()-UNIX_TIMESTAMP(ClickTime) AS Dif,"
" FROM log_recent ORDER BY LogCod DESC LIMIT 20)" "Role,CtyCod,InsCod,CtrCod,DegCod"
" AS last_logs,actions" " FROM log_recent ORDER BY LogCod DESC LIMIT 20)"
" WHERE last_logs.ActCod=actions.ActCod" " AS last_logs,actions"
" AND actions.Language='es'"); " WHERE last_logs.ActCod=actions.ActCod"
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get last clicks"); " AND actions.Language='es'");
/***** Write list of connected users *****/ /***** Write list of connected users *****/
Tbl_StartTableCenter (1); Tbl_StartTableCenter (1);
@ -777,78 +777,96 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
switch (Gbl.Scope.Current) switch (Gbl.Scope.Current)
{ {
case Sco_SCOPE_SYS: // Show connected users in the whole platform case Sco_SCOPE_SYS: // Show connected users in the whole platform
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod)," DB_QuerySELECT (&mysql_res,"can not get number"
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" " of connected users"
" FROM connected,crs_usr,usr_data" " who belong to this location",
" WHERE connected.UsrCod=crs_usr.UsrCod" "SELECT COUNT(DISTINCT connected.UsrCod),"
" AND crs_usr.Role=%u" "COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
" AND connected.UsrCod=usr_data.UsrCod", " FROM connected,crs_usr,usr_data"
(unsigned) Role); " WHERE connected.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u"
" AND connected.UsrCod=usr_data.UsrCod",
(unsigned) Role);
break; break;
case Sco_SCOPE_CTY: // Show connected users in the current country case Sco_SCOPE_CTY: // Show connected users in the current country
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod)," DB_QuerySELECT (&mysql_res,"can not get number"
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" " of connected users"
" FROM institutions,centres,degrees,courses,crs_usr,connected,usr_data" " who belong to this location",
" WHERE institutions.CtyCod=%ld" "SELECT COUNT(DISTINCT connected.UsrCod),"
" AND institutions.InsCod=centres.InsCod" "COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
" AND centres.CtrCod=degrees.CtrCod" " FROM institutions,centres,degrees,courses,crs_usr,connected,usr_data"
" AND degrees.DegCod=courses.DegCod" " WHERE institutions.CtyCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod" " AND institutions.InsCod=centres.InsCod"
" AND crs_usr.Role=%u" " AND centres.CtrCod=degrees.CtrCod"
" AND crs_usr.UsrCod=connected.UsrCod" " AND degrees.DegCod=courses.DegCod"
" AND connected.UsrCod=usr_data.UsrCod", " AND courses.CrsCod=crs_usr.CrsCod"
Gbl.CurrentCty.Cty.CtyCod, " AND crs_usr.Role=%u"
(unsigned) Role); " AND crs_usr.UsrCod=connected.UsrCod"
" AND connected.UsrCod=usr_data.UsrCod",
Gbl.CurrentCty.Cty.CtyCod,
(unsigned) Role);
break; break;
case Sco_SCOPE_INS: // Show connected users in the current institution case Sco_SCOPE_INS: // Show connected users in the current institution
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod)," DB_QuerySELECT (&mysql_res,"can not get number"
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" " of connected users"
" FROM centres,degrees,courses,crs_usr,connected,usr_data" " who belong to this location",
" WHERE centres.InsCod=%ld" "SELECT COUNT(DISTINCT connected.UsrCod),"
" AND centres.CtrCod=degrees.CtrCod" "COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
" AND degrees.DegCod=courses.DegCod" " FROM centres,degrees,courses,crs_usr,connected,usr_data"
" AND courses.CrsCod=crs_usr.CrsCod" " WHERE centres.InsCod=%ld"
" AND crs_usr.Role=%u" " AND centres.CtrCod=degrees.CtrCod"
" AND crs_usr.UsrCod=connected.UsrCod" " AND degrees.DegCod=courses.DegCod"
" AND connected.UsrCod=usr_data.UsrCod", " AND courses.CrsCod=crs_usr.CrsCod"
Gbl.CurrentIns.Ins.InsCod, " AND crs_usr.Role=%u"
(unsigned) Role); " AND crs_usr.UsrCod=connected.UsrCod"
" AND connected.UsrCod=usr_data.UsrCod",
Gbl.CurrentIns.Ins.InsCod,
(unsigned) Role);
break; break;
case Sco_SCOPE_CTR: // Show connected users in the current centre case Sco_SCOPE_CTR: // Show connected users in the current centre
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod)," DB_QuerySELECT (&mysql_res,"can not get number"
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" " of connected users"
" FROM degrees,courses,crs_usr,connected,usr_data" " who belong to this location",
" WHERE degrees.CtrCod=%ld" "SELECT COUNT(DISTINCT connected.UsrCod),"
" AND degrees.DegCod=courses.DegCod" "COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
" AND courses.CrsCod=crs_usr.CrsCod" " FROM degrees,courses,crs_usr,connected,usr_data"
" AND crs_usr.Role=%u" " WHERE degrees.CtrCod=%ld"
" AND crs_usr.UsrCod=connected.UsrCod" " AND degrees.DegCod=courses.DegCod"
" AND connected.UsrCod=usr_data.UsrCod", " AND courses.CrsCod=crs_usr.CrsCod"
Gbl.CurrentCtr.Ctr.CtrCod, " AND crs_usr.Role=%u"
(unsigned) Role); " AND crs_usr.UsrCod=connected.UsrCod"
" AND connected.UsrCod=usr_data.UsrCod",
Gbl.CurrentCtr.Ctr.CtrCod,
(unsigned) Role);
break; break;
case Sco_SCOPE_DEG: // Show connected users in the current degree case Sco_SCOPE_DEG: // Show connected users in the current degree
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod)," DB_QuerySELECT (&mysql_res,"can not get number"
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" " of connected users"
" FROM courses,crs_usr,connected,usr_data" " who belong to this location",
" WHERE courses.DegCod=%ld" "SELECT COUNT(DISTINCT connected.UsrCod),"
" AND courses.CrsCod=crs_usr.CrsCod" "COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
" AND crs_usr.Role=%u" " FROM courses,crs_usr,connected,usr_data"
" AND crs_usr.UsrCod=connected.UsrCod" " WHERE courses.DegCod=%ld"
" AND connected.UsrCod=usr_data.UsrCod", " AND courses.CrsCod=crs_usr.CrsCod"
Gbl.CurrentDeg.Deg.DegCod, " AND crs_usr.Role=%u"
(unsigned) Role); " AND crs_usr.UsrCod=connected.UsrCod"
" AND connected.UsrCod=usr_data.UsrCod",
Gbl.CurrentDeg.Deg.DegCod,
(unsigned) Role);
break; break;
case Sco_SCOPE_CRS: // Show connected users in the current course case Sco_SCOPE_CRS: // Show connected users in the current course
DB_BuildQuery ("SELECT COUNT(DISTINCT connected.UsrCod)," DB_QuerySELECT (&mysql_res,"can not get number"
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" " of connected users"
" FROM crs_usr,connected,usr_data" " who belong to this location",
" WHERE crs_usr.CrsCod=%ld" "SELECT COUNT(DISTINCT connected.UsrCod),"
" AND crs_usr.Role=%u" "COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)"
" AND crs_usr.UsrCod=connected.UsrCod" " FROM crs_usr,connected,usr_data"
" AND connected.UsrCod=usr_data.UsrCod", " WHERE crs_usr.CrsCod=%ld"
Gbl.CurrentCrs.Crs.CrsCod, " AND crs_usr.Role=%u"
(unsigned) Role); " AND crs_usr.UsrCod=connected.UsrCod"
" AND connected.UsrCod=usr_data.UsrCod",
Gbl.CurrentCrs.Crs.CrsCod,
(unsigned) Role);
break; break;
default: default:
Lay_WrongScopeExit (); Lay_WrongScopeExit ();
@ -859,7 +877,6 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
Lay_ShowErrorAndExit ("Wrong role."); Lay_ShowErrorAndExit ("Wrong role.");
break; break;
} }
DB_QuerySELECT_new (&mysql_res,"can not get number of connected users who belong to this location");
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -899,17 +916,16 @@ static void Con_ComputeConnectedUsrsWithARoleCurrentCrsOneByOne (Rol_Role_t Role
unsigned NumUsr = Gbl.Usrs.Connected.NumUsrs; // Save current number of users unsigned NumUsr = Gbl.Usrs.Connected.NumUsrs; // Save current number of users
/***** Get connected users who belong to current course from database *****/ /***** Get connected users who belong to current course from database *****/
DB_BuildQuery ("SELECT connected.UsrCod,connected.LastCrsCod," NumRows = DB_QuerySELECT (&mysql_res,"can not get list of connected users"
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif" " who belong to this course",
" FROM connected,crs_usr" "SELECT connected.UsrCod,connected.LastCrsCod,"
" WHERE crs_usr.CrsCod=%ld AND crs_usr.Role=%u" "UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
" AND crs_usr.UsrCod=connected.UsrCod" " FROM connected,crs_usr"
" ORDER BY Dif", " WHERE crs_usr.CrsCod=%ld AND crs_usr.Role=%u"
Gbl.CurrentCrs.Crs.CrsCod, " AND crs_usr.UsrCod=connected.UsrCod"
(unsigned) Role); " ORDER BY Dif",
NumRows = DB_QuerySELECT_new (&mysql_res, Gbl.CurrentCrs.Crs.CrsCod,
"can not get list of connected users" (unsigned) Role);
" who belong to this course");
Gbl.Usrs.Connected.NumUsrs += (unsigned) NumRows; Gbl.Usrs.Connected.NumUsrs += (unsigned) NumRows;
Gbl.Usrs.Connected.NumUsrsToList += (unsigned) NumRows; Gbl.Usrs.Connected.NumUsrsToList += (unsigned) NumRows;
if (Gbl.Usrs.Connected.NumUsrsToList > Cfg_MAX_CONNECTED_SHOWN) if (Gbl.Usrs.Connected.NumUsrsToList > Cfg_MAX_CONNECTED_SHOWN)
@ -1052,7 +1068,7 @@ static void Con_ShowConnectedUsrsCurrentLocationOneByOneOnMainZone (Rol_Role_t R
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumUsrs; unsigned NumUsrs = 0; // Initialized to avoid warning
unsigned NumUsr; unsigned NumUsr;
bool ThisCrs; bool ThisCrs;
time_t TimeDiff; time_t TimeDiff;
@ -1070,11 +1086,13 @@ static void Con_ShowConnectedUsrsCurrentLocationOneByOneOnMainZone (Rol_Role_t R
switch (Role) switch (Role)
{ {
case Rol_GST: case Rol_GST:
DB_BuildQuery ("SELECT UsrCod,LastCrsCod," NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get list of connected users"
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(LastTime) AS Dif" " who belong to this location",
" FROM connected" "SELECT UsrCod,LastCrsCod,"
" WHERE UsrCod NOT IN (SELECT UsrCod FROM crs_usr)" "UNIX_TIMESTAMP()-UNIX_TIMESTAMP(LastTime) AS Dif"
" ORDER BY Dif"); " FROM connected"
" WHERE UsrCod NOT IN (SELECT UsrCod FROM crs_usr)"
" ORDER BY Dif");
break; break;
case Rol_STD: case Rol_STD:
case Rol_NET: case Rol_NET:
@ -1082,78 +1100,90 @@ static void Con_ShowConnectedUsrsCurrentLocationOneByOneOnMainZone (Rol_Role_t R
switch (Gbl.Scope.Current) switch (Gbl.Scope.Current)
{ {
case Sco_SCOPE_SYS: // Show connected users in the whole platform case Sco_SCOPE_SYS: // Show connected users in the whole platform
DB_BuildQuery ("SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod," NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get list of connected users"
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif" " who belong to this location",
" FROM connected,crs_usr" "SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod,"
" WHERE connected.UsrCod=crs_usr.UsrCod" "UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
" AND crs_usr.Role=%u" " FROM connected,crs_usr"
" ORDER BY Dif", " WHERE connected.UsrCod=crs_usr.UsrCod"
(unsigned) Role); " AND crs_usr.Role=%u"
" ORDER BY Dif",
(unsigned) Role);
break; break;
case Sco_SCOPE_CTY: // Show connected users in the current country case Sco_SCOPE_CTY: // Show connected users in the current country
DB_BuildQuery ("SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod," NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get list of connected users"
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif" " who belong to this location",
" FROM institutions,centres,degrees,courses,crs_usr,connected" "SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod,"
" WHERE institutions.CtyCod=%ld" "UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
" AND institutions.InsCod=centres.InsCod" " FROM institutions,centres,degrees,courses,crs_usr,connected"
" AND centres.CtrCod=degrees.CtrCod" " WHERE institutions.CtyCod=%ld"
" AND degrees.DegCod=courses.DegCod" " AND institutions.InsCod=centres.InsCod"
" AND courses.CrsCod=crs_usr.CrsCod" " AND centres.CtrCod=degrees.CtrCod"
" AND crs_usr.Role=%u" " AND degrees.DegCod=courses.DegCod"
" AND crs_usr.UsrCod=connected.UsrCod" " AND courses.CrsCod=crs_usr.CrsCod"
" ORDER BY Dif", " AND crs_usr.Role=%u"
Gbl.CurrentCty.Cty.CtyCod, " AND crs_usr.UsrCod=connected.UsrCod"
(unsigned) Role); " ORDER BY Dif",
Gbl.CurrentCty.Cty.CtyCod,
(unsigned) Role);
break; break;
case Sco_SCOPE_INS: // Show connected users in the current institution case Sco_SCOPE_INS: // Show connected users in the current institution
DB_BuildQuery ("SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod," NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get list of connected users"
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif" " who belong to this location",
" FROM centres,degrees,courses,crs_usr,connected" "SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod,"
" WHERE centres.InsCod=%ld" "UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
" AND centres.CtrCod=degrees.CtrCod" " FROM centres,degrees,courses,crs_usr,connected"
" AND degrees.DegCod=courses.DegCod" " WHERE centres.InsCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod" " AND centres.CtrCod=degrees.CtrCod"
" AND crs_usr.Role=%u" " AND degrees.DegCod=courses.DegCod"
" AND crs_usr.UsrCod=connected.UsrCod" " AND courses.CrsCod=crs_usr.CrsCod"
" ORDER BY Dif", " AND crs_usr.Role=%u"
Gbl.CurrentIns.Ins.InsCod, " AND crs_usr.UsrCod=connected.UsrCod"
(unsigned) Role); " ORDER BY Dif",
Gbl.CurrentIns.Ins.InsCod,
(unsigned) Role);
break; break;
case Sco_SCOPE_CTR: // Show connected users in the current centre case Sco_SCOPE_CTR: // Show connected users in the current centre
DB_BuildQuery ("SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod," NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get list of connected users"
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif" " who belong to this location",
" FROM degrees,courses,crs_usr,connected" "SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod,"
" WHERE degrees.CtrCod=%ld" "UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
" AND degrees.DegCod=courses.DegCod" " FROM degrees,courses,crs_usr,connected"
" AND courses.CrsCod=crs_usr.CrsCod" " WHERE degrees.CtrCod=%ld"
" AND crs_usr.Role=%u" " AND degrees.DegCod=courses.DegCod"
" AND crs_usr.UsrCod=connected.UsrCod" " AND courses.CrsCod=crs_usr.CrsCod"
" ORDER BY Dif", " AND crs_usr.Role=%u"
Gbl.CurrentCtr.Ctr.CtrCod, " AND crs_usr.UsrCod=connected.UsrCod"
(unsigned) Role); " ORDER BY Dif",
Gbl.CurrentCtr.Ctr.CtrCod,
(unsigned) Role);
break; break;
case Sco_SCOPE_DEG: // Show connected users in the current degree case Sco_SCOPE_DEG: // Show connected users in the current degree
DB_BuildQuery ("SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod," NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get list of connected users"
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif" " who belong to this location",
" FROM courses,crs_usr,connected" "SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod,"
" WHERE courses.DegCod=%ld" "UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
" AND courses.CrsCod=crs_usr.CrsCod" " FROM courses,crs_usr,connected"
" AND crs_usr.Role=%u" " WHERE courses.DegCod=%ld"
" AND crs_usr.UsrCod=connected.UsrCod" " AND courses.CrsCod=crs_usr.CrsCod"
" ORDER BY Dif", " AND crs_usr.Role=%u"
Gbl.CurrentDeg.Deg.DegCod, " AND crs_usr.UsrCod=connected.UsrCod"
(unsigned) Role); " ORDER BY Dif",
Gbl.CurrentDeg.Deg.DegCod,
(unsigned) Role);
break; break;
case Sco_SCOPE_CRS: // Show connected users in the current course case Sco_SCOPE_CRS: // Show connected users in the current course
DB_BuildQuery ("SELECT connected.UsrCod,connected.LastCrsCod," NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get list of connected users"
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif" " who belong to this location",
" FROM crs_usr,connected" "SELECT connected.UsrCod,connected.LastCrsCod,"
" WHERE crs_usr.CrsCod=%ld" "UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif"
" AND crs_usr.Role=%u" " FROM crs_usr,connected"
" AND crs_usr.UsrCod=connected.UsrCod" " WHERE crs_usr.CrsCod=%ld"
" ORDER BY Dif", " AND crs_usr.Role=%u"
Gbl.CurrentCrs.Crs.CrsCod, " AND crs_usr.UsrCod=connected.UsrCod"
(unsigned) Role); " ORDER BY Dif",
Gbl.CurrentCrs.Crs.CrsCod,
(unsigned) Role);
break; break;
default: default:
Lay_WrongScopeExit (); Lay_WrongScopeExit ();
@ -1164,11 +1194,6 @@ static void Con_ShowConnectedUsrsCurrentLocationOneByOneOnMainZone (Rol_Role_t R
Lay_ShowErrorAndExit ("Wrong role."); Lay_ShowErrorAndExit ("Wrong role.");
break; break;
} }
NumUsrs = (unsigned) DB_QuerySELECT_new (&mysql_res,
"can not get list of connected users"
" who belong to this location");
if (NumUsrs) if (NumUsrs)
{ {
/***** Initialize structure with user's data *****/ /***** Initialize structure with user's data *****/

View File

@ -122,23 +122,23 @@ void Cty_SeeCtyWithPendingInss (void)
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
case Rol_SYS_ADM: case Rol_SYS_ADM:
DB_BuildQuery ("SELECT institutions.CtyCod,COUNT(*)" NumCtys = (unsigned) DB_QuerySELECT (&mysql_res,"can not get countries"
" FROM institutions,countries" "with pending institutions",
" WHERE (institutions.Status & %u)<>0" "SELECT institutions.CtyCod,COUNT(*)"
" AND institutions.CtyCod=countries.CtyCod" " FROM institutions,countries"
" GROUP BY institutions.CtyCod" " WHERE (institutions.Status & %u)<>0"
" ORDER BY countries.Name_%s", " AND institutions.CtyCod=countries.CtyCod"
(unsigned) Ins_STATUS_BIT_PENDING, " GROUP BY institutions.CtyCod"
Txt_STR_LANG_ID[Gbl.Prefs.Language]); " ORDER BY countries.Name_%s",
(unsigned) Ins_STATUS_BIT_PENDING,
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
break; break;
default: // Forbidden for other users default: // Forbidden for other users
return; return;
} }
/***** Get countries *****/ /***** Get countries *****/
if ((NumCtys = (unsigned) DB_QuerySELECT_new (&mysql_res, if (NumCtys)
"can not get countries"
"with pending institutions")))
{ {
/***** Start box and table *****/ /***** Start box and table *****/
Box_StartBoxTable (NULL,Txt_Countries_with_pending_institutions,NULL, Box_StartBoxTable (NULL,Txt_Countries_with_pending_institutions,NULL,
@ -993,10 +993,10 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData)
char SubQueryNam2[Cty_MAX_BYTES_SUBQUERY_CTYS + 1]; char SubQueryNam2[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
char SubQueryWWW1[Cty_MAX_BYTES_SUBQUERY_CTYS + 1]; char SubQueryWWW1[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
char SubQueryWWW2[Cty_MAX_BYTES_SUBQUERY_CTYS + 1]; char SubQueryWWW2[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
char *OrderBySubQuery; char *OrderBySubQuery = NULL;
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned long NumRows; unsigned long NumRows = 0;
unsigned NumCty; unsigned NumCty;
struct Country *Cty; struct Country *Cty;
Txt_Language_t Lan; Txt_Language_t Lan;
@ -1005,11 +1005,11 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData)
switch (GetExtraData) switch (GetExtraData)
{ {
case Cty_GET_BASIC_DATA: case Cty_GET_BASIC_DATA:
DB_BuildQuery ("SELECT CtyCod,Alpha2,Name_%s" NumRows = DB_QuerySELECT (&mysql_res,"can not get countries",
" FROM countries ORDER BY Name_%s", "SELECT CtyCod,Alpha2,Name_%s"
Txt_STR_LANG_ID[Gbl.Prefs.Language], " FROM countries ORDER BY Name_%s",
Txt_STR_LANG_ID[Gbl.Prefs.Language]); Txt_STR_LANG_ID[Gbl.Prefs.Language],
OrderBySubQuery = NULL; Txt_STR_LANG_ID[Gbl.Prefs.Language]);
break; break;
case Cty_GET_EXTRA_DATA: case Cty_GET_EXTRA_DATA:
SubQueryNam1[0] = '\0'; SubQueryNam1[0] = '\0';
@ -1056,24 +1056,24 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
break; break;
} }
DB_BuildQuery ("(SELECT countries.CtyCod,countries.Alpha2,%s%sCOUNT(*) AS NumUsrs"
" FROM countries,usr_data" NumRows = DB_QuerySELECT (&mysql_res,"can not get countries",
" WHERE countries.CtyCod=usr_data.CtyCod" "(SELECT countries.CtyCod,countries.Alpha2,"
" GROUP BY countries.CtyCod)" "%s%sCOUNT(*) AS NumUsrs"
" UNION " " FROM countries,usr_data"
"(SELECT CtyCod,Alpha2,%s%s0 AS NumUsrs" " WHERE countries.CtyCod=usr_data.CtyCod"
" FROM countries" " GROUP BY countries.CtyCod)"
" WHERE CtyCod NOT IN" " UNION "
" (SELECT DISTINCT CtyCod FROM usr_data))" "(SELECT CtyCod,Alpha2,%s%s0 AS NumUsrs"
" ORDER BY %s", " FROM countries"
SubQueryNam1,SubQueryWWW1, " WHERE CtyCod NOT IN"
SubQueryNam2,SubQueryWWW2,OrderBySubQuery); " (SELECT DISTINCT CtyCod FROM usr_data))"
" ORDER BY %s",
SubQueryNam1,SubQueryWWW1,
SubQueryNam2,SubQueryWWW2,OrderBySubQuery);
break; break;
} }
/***** Count number of rows in result *****/
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get countries");
/***** Free memory for subquery *****/ /***** Free memory for subquery *****/
if (OrderBySubQuery) if (OrderBySubQuery)
free ((void *) OrderBySubQuery); free ((void *) OrderBySubQuery);
@ -1190,12 +1190,12 @@ void Cty_WriteSelectorOfCountry (void)
Txt_Country); Txt_Country);
/***** Get countries from database *****/ /***** Get countries from database *****/
DB_BuildQuery ("SELECT DISTINCT CtyCod,Name_%s" NumCtys = (unsigned) DB_QuerySELECT (&mysql_res,"can not get countries",
" FROM countries" "SELECT DISTINCT CtyCod,Name_%s"
" ORDER BY countries.Name_%s", " FROM countries"
Txt_STR_LANG_ID[Gbl.Prefs.Language], " 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"); Txt_STR_LANG_ID[Gbl.Prefs.Language]);
/***** List countries *****/ /***** List countries *****/
for (NumCty = 0; for (NumCty = 0;
@ -1270,7 +1270,7 @@ bool Cty_GetDataOfCountryByCod (struct Country *Cty,Cty_GetExtraData_t GetExtraD
char SubQueryWWW2[Cty_MAX_BYTES_SUBQUERY_CTYS + 1]; char SubQueryWWW2[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned long NumRows; unsigned long NumRows = 0;
Txt_Language_t Lan; Txt_Language_t Lan;
bool CtyFound; bool CtyFound;
@ -1309,12 +1309,13 @@ bool Cty_GetDataOfCountryByCod (struct Country *Cty,Cty_GetExtraData_t GetExtraD
switch (GetExtraData) switch (GetExtraData)
{ {
case Cty_GET_BASIC_DATA: case Cty_GET_BASIC_DATA:
DB_BuildQuery ("SELECT Alpha2,Name_%s,WWW_%s" NumRows = DB_QuerySELECT (&mysql_res,"can not get data of a country",
" FROM countries" "SELECT Alpha2,Name_%s,WWW_%s"
" WHERE CtyCod='%03ld'", " FROM countries"
Txt_STR_LANG_ID[Gbl.Prefs.Language], " WHERE CtyCod='%03ld'",
Txt_STR_LANG_ID[Gbl.Prefs.Language], Txt_STR_LANG_ID[Gbl.Prefs.Language],
Cty->CtyCod); Txt_STR_LANG_ID[Gbl.Prefs.Language],
Cty->CtyCod);
break; break;
case Cty_GET_EXTRA_DATA: case Cty_GET_EXTRA_DATA:
SubQueryNam1[0] = '\0'; SubQueryNam1[0] = '\0';
@ -1347,23 +1348,22 @@ bool Cty_GetDataOfCountryByCod (struct Country *Cty,Cty_GetExtraData_t GetExtraD
Str_Concat (SubQueryWWW2,StrField, Str_Concat (SubQueryWWW2,StrField,
Cty_MAX_BYTES_SUBQUERY_CTYS); Cty_MAX_BYTES_SUBQUERY_CTYS);
} }
DB_BuildQuery ("(SELECT countries.Alpha2,%s%sCOUNT(*) AS NumUsrs" NumRows = DB_QuerySELECT (&mysql_res,"can not get data of a country",
" FROM countries,usr_data" "(SELECT countries.Alpha2,%s%sCOUNT(*) AS NumUsrs"
" WHERE countries.CtyCod='%03ld'" " FROM countries,usr_data"
" AND countries.CtyCod=usr_data.CtyCod)" " WHERE countries.CtyCod='%03ld'"
" UNION " " AND countries.CtyCod=usr_data.CtyCod)"
"(SELECT Alpha2,%s%s0 AS NumUsrs" " UNION "
" FROM countries" "(SELECT Alpha2,%s%s0 AS NumUsrs"
" WHERE CtyCod='%03ld'" " FROM countries"
" AND CtyCod NOT IN" " WHERE CtyCod='%03ld'"
" (SELECT DISTINCT CtyCod FROM usr_data))", " AND CtyCod NOT IN"
SubQueryNam1,SubQueryWWW1,Cty->CtyCod, " (SELECT DISTINCT CtyCod FROM usr_data))",
SubQueryNam2,SubQueryWWW2,Cty->CtyCod); SubQueryNam1,SubQueryWWW1,Cty->CtyCod,
SubQueryNam2,SubQueryWWW2,Cty->CtyCod);
break; break;
} }
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get data of a country");
/***** Count number of rows in result *****/ /***** Count number of rows in result *****/
if (NumRows) // Country found... if (NumRows) // Country found...
{ {
@ -1454,9 +1454,9 @@ void Cty_GetCountryName (long CtyCod,char CtyName[Cty_MAX_BYTES_NAME + 1])
/***** 3. Slow: get country name from database *****/ /***** 3. Slow: get country name from database *****/
Gbl.Cache.CountryName.CtyCod = CtyCod; Gbl.Cache.CountryName.CtyCod = CtyCod;
DB_BuildQuery ("SELECT Name_%s FROM countries WHERE CtyCod='%03ld'", if (DB_QuerySELECT (&mysql_res,"can not get the name of a country",
Txt_STR_LANG_ID[Gbl.Prefs.Language],CtyCod); "SELECT Name_%s FROM countries WHERE CtyCod='%03ld'",
if (DB_QuerySELECT_new (&mysql_res,"can not get the name of a country")) // Country found... Txt_STR_LANG_ID[Gbl.Prefs.Language],CtyCod)) // Country found...
{ {
/* Get row */ /* Get row */
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -1489,9 +1489,9 @@ static void Cty_GetMapAttribution (long CtyCod,char **MapAttribution)
Cty_FreeMapAttribution (MapAttribution); Cty_FreeMapAttribution (MapAttribution);
/***** Get photo attribution from database *****/ /***** Get photo attribution from database *****/
DB_BuildQuery ("SELECT MapAttribution FROM countries WHERE CtyCod=%ld", if (DB_QuerySELECT (&mysql_res,"can not get photo attribution",
CtyCod); "SELECT MapAttribution FROM countries WHERE CtyCod=%ld",
if (DB_QuerySELECT_new (&mysql_res,"can not get photo attribution")) CtyCod))
{ {
/* Get row */ /* Get row */
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -2365,20 +2365,17 @@ unsigned Cty_GetNumCtysWithUsrs (Rol_Role_t Role,const char *SubQuery)
/*****************************************************************************/ /*****************************************************************************/
/***************************** List countries found **************************/ /***************************** List countries found **************************/
/*****************************************************************************/ /*****************************************************************************/
// Returns number of countries found
unsigned Cty_ListCtysFound (void) void Cty_ListCtysFound (MYSQL_RES **mysql_res,unsigned NumCtys)
{ {
extern const char *Txt_country; extern const char *Txt_country;
extern const char *Txt_countries; extern const char *Txt_countries;
MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumCtys;
unsigned NumCty; unsigned NumCty;
struct Country Cty; struct Country Cty;
/***** Query database *****/ /***** Query database *****/
if ((NumCtys = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get countries"))) if (NumCtys)
{ {
/***** Start box and table *****/ /***** Start box and table *****/
/* Number of countries found */ /* Number of countries found */
@ -2398,7 +2395,7 @@ unsigned Cty_ListCtysFound (void)
NumCty++) NumCty++)
{ {
/* Get next country */ /* Get next country */
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (*mysql_res);
/* Get country code (row[0]) */ /* Get country code (row[0]) */
Cty.CtyCod = Str_ConvertStrCodToLongCod (row[0]); Cty.CtyCod = Str_ConvertStrCodToLongCod (row[0]);
@ -2415,7 +2412,5 @@ unsigned Cty_ListCtysFound (void)
} }
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res); DB_FreeMySQLResult (mysql_res);
return NumCtys;
} }

View File

@ -27,6 +27,7 @@
/********************************* Headers ***********************************/ /********************************* Headers ***********************************/
/*****************************************************************************/ /*****************************************************************************/
#include <mysql/mysql.h> // To access MySQL databases
#include <stdbool.h> // For boolean type #include <stdbool.h> // For boolean type
#include "swad_action.h" #include "swad_action.h"
@ -116,6 +117,6 @@ unsigned Cty_GetNumCtysWithDegs (const char *SubQuery);
unsigned Cty_GetNumCtysWithCrss (const char *SubQuery); unsigned Cty_GetNumCtysWithCrss (const char *SubQuery);
unsigned Cty_GetNumCtysWithUsrs (Rol_Role_t Role,const char *SubQuery); unsigned Cty_GetNumCtysWithUsrs (Rol_Role_t Role,const char *SubQuery);
unsigned Cty_ListCtysFound (void); void Cty_ListCtysFound (MYSQL_RES **mysql_res,unsigned NumCtys);
#endif #endif

View File

@ -902,11 +902,12 @@ void Crs_WriteSelectorOfCourse (void)
if (Gbl.CurrentDeg.Deg.DegCod > 0) if (Gbl.CurrentDeg.Deg.DegCod > 0)
{ {
/***** Get courses belonging to the current degree from database *****/ /***** Get courses belonging to the current degree from database *****/
DB_BuildQuery ("SELECT CrsCod,ShortName FROM courses" NumCrss = (unsigned) DB_QuerySELECT (&mysql_res,"can not get courses"
" WHERE DegCod=%ld" " of a degree",
" ORDER BY ShortName", "SELECT CrsCod,ShortName FROM courses"
Gbl.CurrentDeg.Deg.DegCod); " WHERE DegCod=%ld"
NumCrss = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get courses of a degree"); " ORDER BY ShortName",
Gbl.CurrentDeg.Deg.DegCod);
/***** Get courses of this degree *****/ /***** Get courses of this degree *****/
for (NumCrs = 0; for (NumCrs = 0;
@ -975,23 +976,25 @@ static void Crs_GetListCoursesInDegree (Crs_WhatCourses_t WhatCourses)
switch (WhatCourses) switch (WhatCourses)
{ {
case Crs_ACTIVE_COURSES: case Crs_ACTIVE_COURSES:
DB_BuildQuery ("SELECT CrsCod,DegCod,Year,InsCrsCod,Status,RequesterUsrCod,ShortName,FullName" NumCrss = (unsigned) DB_QuerySELECT (&mysql_res,"can not get courses"
" FROM courses WHERE DegCod=%ld AND Status=0" " of a degree",
" ORDER BY Year,ShortName", "SELECT CrsCod,DegCod,Year,InsCrsCod,Status,RequesterUsrCod,ShortName,FullName"
Gbl.CurrentDeg.Deg.DegCod); " FROM courses WHERE DegCod=%ld AND Status=0"
" ORDER BY Year,ShortName",
Gbl.CurrentDeg.Deg.DegCod);
break; break;
case Crs_ALL_COURSES_EXCEPT_REMOVED: case Crs_ALL_COURSES_EXCEPT_REMOVED:
DB_BuildQuery ("SELECT CrsCod,DegCod,Year,InsCrsCod,Status,RequesterUsrCod,ShortName,FullName" NumCrss = (unsigned) DB_QuerySELECT (&mysql_res,"can not get courses"
" FROM courses WHERE DegCod=%ld AND (Status & %u)=0" " of a degree",
" ORDER BY Year,ShortName", "SELECT CrsCod,DegCod,Year,InsCrsCod,Status,RequesterUsrCod,ShortName,FullName"
Gbl.CurrentDeg.Deg.DegCod, " FROM courses WHERE DegCod=%ld AND (Status & %u)=0"
(unsigned) Crs_STATUS_BIT_REMOVED); " ORDER BY Year,ShortName",
Gbl.CurrentDeg.Deg.DegCod,
(unsigned) Crs_STATUS_BIT_REMOVED);
break; break;
default: default:
break; break;
} }
NumCrss = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get the courses of a degree");
if (NumCrss) // Courses found... if (NumCrss) // Courses found...
{ {
/***** Create list with courses in degree *****/ /***** Create list with courses in degree *****/
@ -2011,10 +2014,10 @@ bool Crs_GetDataOfCourseByCod (struct Course *Crs)
if (Crs->CrsCod > 0) if (Crs->CrsCod > 0)
{ {
/***** Get data of a course from database *****/ /***** Get data of a course from database *****/
DB_BuildQuery ("SELECT CrsCod,DegCod,Year,InsCrsCod,Status,RequesterUsrCod,ShortName,FullName" if (DB_QuerySELECT (&mysql_res,"can not get data of a course",
" FROM courses WHERE CrsCod=%ld", "SELECT CrsCod,DegCod,Year,InsCrsCod,Status,RequesterUsrCod,ShortName,FullName"
Crs->CrsCod); " FROM courses WHERE CrsCod=%ld",
if (DB_QuerySELECT_new (&mysql_res,"can not get data of a course")) // Course found... Crs->CrsCod)) // Course found...
{ {
/***** Get data of the course *****/ /***** Get data of the course *****/
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -2091,12 +2094,12 @@ static void Crs_GetShortNamesByCod (long CrsCod,
if (CrsCod > 0) if (CrsCod > 0)
{ {
/***** Get the short name of a degree from database *****/ /***** Get the short name of a degree from database *****/
DB_BuildQuery ("SELECT courses.ShortName,degrees.ShortName" if (DB_QuerySELECT (&mysql_res,"can not get the short name of a course",
" FROM courses,degrees" "SELECT courses.ShortName,degrees.ShortName"
" WHERE courses.CrsCod=%ld" " FROM courses,degrees"
" AND courses.DegCod=degrees.DegCod", " WHERE courses.CrsCod=%ld"
CrsCod); " AND courses.DegCod=degrees.DegCod",
if (DB_QuerySELECT_new (&mysql_res,"can not get the short name of a course") == 1) CrsCod) == 1)
{ {
/***** Get the short name of this course *****/ /***** Get the short name of this course *****/
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -3045,16 +3048,16 @@ void Crs_GetAndWriteCrssOfAUsr (const struct UsrData *UsrDat,Rol_Role_t Role)
if (asprintf (&SubQuery," AND crs_usr.Role=%u",(unsigned) Role) < 0) if (asprintf (&SubQuery," AND crs_usr.Role=%u",(unsigned) Role) < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
} }
DB_BuildQuery ("SELECT degrees.DegCod,courses.CrsCod,degrees.ShortName,degrees.FullName," NumCrss = (unsigned) DB_QuerySELECT (&mysql_res,"can not get courses of a user",
"courses.Year,courses.FullName,centres.ShortName,crs_usr.Accepted" "SELECT degrees.DegCod,courses.CrsCod,degrees.ShortName,degrees.FullName,"
" FROM crs_usr,courses,degrees,centres" "courses.Year,courses.FullName,centres.ShortName,crs_usr.Accepted"
" WHERE crs_usr.UsrCod=%ld%s" " FROM crs_usr,courses,degrees,centres"
" AND crs_usr.CrsCod=courses.CrsCod" " WHERE crs_usr.UsrCod=%ld%s"
" AND courses.DegCod=degrees.DegCod" " AND crs_usr.CrsCod=courses.CrsCod"
" AND degrees.CtrCod=centres.CtrCod" " AND courses.DegCod=degrees.DegCod"
" ORDER BY degrees.FullName,courses.Year,courses.FullName", " AND degrees.CtrCod=centres.CtrCod"
UsrDat->UsrCod,SubQuery); " ORDER BY degrees.FullName,courses.Year,courses.FullName",
NumCrss = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get courses of a user"); UsrDat->UsrCod,SubQuery);
/***** Free allocated memory for subquery *****/ /***** Free allocated memory for subquery *****/
free ((void *) SubQuery); free ((void *) SubQuery);
@ -3125,7 +3128,7 @@ void Crs_GetAndWriteCrssOfAUsr (const struct UsrData *UsrDat,Rol_Role_t Role)
/*****************************************************************************/ /*****************************************************************************/
// Returns number of courses found // Returns number of courses found
unsigned Crs_ListCrssFound (void) void Crs_ListCrssFound (MYSQL_RES **mysql_res,unsigned NumCrss)
{ {
extern const char *Txt_course; extern const char *Txt_course;
extern const char *Txt_courses; extern const char *Txt_courses;
@ -3133,14 +3136,9 @@ unsigned Crs_ListCrssFound (void)
extern const char *Txt_Year_OF_A_DEGREE; extern const char *Txt_Year_OF_A_DEGREE;
extern const char *Txt_Course; extern const char *Txt_Course;
extern const char *Txt_ROLES_PLURAL_BRIEF_Abc[Rol_NUM_ROLES]; extern const char *Txt_ROLES_PLURAL_BRIEF_Abc[Rol_NUM_ROLES];
MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumCrss;
unsigned NumCrs; unsigned NumCrs;
/***** Query database *****/
NumCrss = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get courses");
/***** List the courses (one row per course) *****/ /***** List the courses (one row per course) *****/
if (NumCrss) if (NumCrss)
{ {
@ -3184,7 +3182,7 @@ unsigned Crs_ListCrssFound (void)
NumCrs++) NumCrs++)
{ {
/* Get next course */ /* Get next course */
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (*mysql_res);
/* Write data of this course */ /* Write data of this course */
Crs_WriteRowCrsData (NumCrs,row,false); Crs_WriteRowCrsData (NumCrs,row,false);
@ -3195,9 +3193,7 @@ unsigned Crs_ListCrssFound (void)
} }
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res); DB_FreeMySQLResult (mysql_res);
return NumCrss;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -3446,11 +3442,12 @@ void Crs_RemoveOldCrss (void)
SecondsWithoutAccess = (unsigned long) MonthsWithoutAccess * Dat_SECONDS_IN_ONE_MONTH; SecondsWithoutAccess = (unsigned long) MonthsWithoutAccess * Dat_SECONDS_IN_ONE_MONTH;
/***** Get old courses from database *****/ /***** Get old courses from database *****/
DB_BuildQuery ("SELECT CrsCod FROM crs_last WHERE" NumCrss = DB_QuerySELECT (&mysql_res,"can not get old courses",
" LastTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-'%lu')" "SELECT CrsCod FROM crs_last WHERE"
" AND CrsCod NOT IN (SELECT DISTINCT CrsCod FROM crs_usr)", " LastTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-'%lu')"
SecondsWithoutAccess); " AND CrsCod NOT IN (SELECT DISTINCT CrsCod FROM crs_usr)",
if ((NumCrss = DB_QuerySELECT_new (&mysql_res,"can not get old users"))) SecondsWithoutAccess);
if (NumCrss)
{ {
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt), snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
Txt_Eliminating_X_courses_whithout_users_and_with_more_than_Y_months_without_access, Txt_Eliminating_X_courses_whithout_users_and_with_more_than_Y_months_without_access,

View File

@ -137,7 +137,7 @@ void Crs_ReqSelectOneOfMyCourses (void);
void Crs_GetAndWriteCrssOfAUsr (const struct UsrData *UsrDat,Rol_Role_t Role); void Crs_GetAndWriteCrssOfAUsr (const struct UsrData *UsrDat,Rol_Role_t Role);
unsigned Crs_ListCrssFound (void); void Crs_ListCrssFound (MYSQL_RES **mysql_res,unsigned NumCrss);
void Crs_UpdateCrsLast (void); void Crs_UpdateCrsLast (void);

View File

@ -617,6 +617,8 @@ static unsigned Sch_SearchCountriesInDB (const char *RangeQuery)
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES]; extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1]; char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1];
char FieldName[4+1+2+1]; // Example: Name_en char FieldName[4+1+2+1]; // Example: Name_en
MYSQL_RES *mysql_res;
unsigned NumCtys;
/***** Check scope *****/ /***** Check scope *****/
if (Gbl.Scope.Current != Sco_SCOPE_INS && if (Gbl.Scope.Current != Sco_SCOPE_INS &&
@ -633,13 +635,15 @@ static unsigned Sch_SearchCountriesInDB (const char *RangeQuery)
if (Sch_BuildSearchQuery (SearchQuery,FieldName,NULL,NULL)) if (Sch_BuildSearchQuery (SearchQuery,FieldName,NULL,NULL))
{ {
/***** Query database and list institutions found *****/ /***** Query database and list institutions found *****/
DB_BuildQuery ("SELECT CtyCod" NumCtys = (unsigned) DB_QuerySELECT (&mysql_res,"can not get countries",
" FROM countries" "SELECT CtyCod"
" WHERE %s%s" " FROM countries"
" ORDER BY Name_%s", " WHERE %s%s"
SearchQuery,RangeQuery, " ORDER BY Name_%s",
Txt_STR_LANG_ID[Gbl.Prefs.Language]); SearchQuery,RangeQuery,
return Cty_ListCtysFound (); Txt_STR_LANG_ID[Gbl.Prefs.Language]);
Cty_ListCtysFound (&mysql_res,NumCtys);
return NumCtys;
} }
} }
@ -756,6 +760,8 @@ static unsigned Sch_SearchDegreesInDB (const char *RangeQuery)
static unsigned Sch_SearchCoursesInDB (const char *RangeQuery) static unsigned Sch_SearchCoursesInDB (const char *RangeQuery)
{ {
char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1]; char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1];
MYSQL_RES *mysql_res;
unsigned NumCrss;
/***** Check user's permission *****/ /***** Check user's permission *****/
if (Sch_CheckIfIHavePermissionToSearch (Sch_SEARCH_COURSES)) if (Sch_CheckIfIHavePermissionToSearch (Sch_SEARCH_COURSES))
@ -763,18 +769,20 @@ static unsigned Sch_SearchCoursesInDB (const char *RangeQuery)
if (Sch_BuildSearchQuery (SearchQuery,"courses.FullName",NULL,NULL)) if (Sch_BuildSearchQuery (SearchQuery,"courses.FullName",NULL,NULL))
{ {
/***** Query database and list courses found *****/ /***** Query database and list courses found *****/
DB_BuildQuery ("SELECT degrees.DegCod,courses.CrsCod,degrees.ShortName,degrees.FullName," NumCrss = (unsigned) DB_QuerySELECT (&mysql_res,"can not get courses",
"courses.Year,courses.FullName,centres.ShortName" "SELECT degrees.DegCod,courses.CrsCod,degrees.ShortName,degrees.FullName,"
" FROM courses,degrees,centres,institutions,countries" "courses.Year,courses.FullName,centres.ShortName"
" WHERE %s" " FROM courses,degrees,centres,institutions,countries"
" AND courses.DegCod=degrees.DegCod" " WHERE %s"
" AND degrees.CtrCod=centres.CtrCod" " AND courses.DegCod=degrees.DegCod"
" AND centres.InsCod=institutions.InsCod" " AND degrees.CtrCod=centres.CtrCod"
" AND institutions.CtyCod=countries.CtyCod" " AND centres.InsCod=institutions.InsCod"
"%s" " AND institutions.CtyCod=countries.CtyCod"
" ORDER BY courses.FullName,institutions.FullName,degrees.FullName,courses.Year", "%s"
SearchQuery,RangeQuery); " ORDER BY courses.FullName,institutions.FullName,degrees.FullName,courses.Year",
return Crs_ListCrssFound (); SearchQuery,RangeQuery);
Crs_ListCrssFound (&mysql_res,NumCrss);
return NumCrss;
} }
return 0; return 0;