Version 18.7.30

This commit is contained in:
Antonio Cañas Vargas 2018-10-22 12:36:35 +02:00
parent a7ee271156
commit a8db616f03
3 changed files with 275 additions and 218 deletions

View File

@ -25,8 +25,10 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
#define _GNU_SOURCE // For asprintf
#include <ctype.h> // For isalnum, isdigit, etc.
#include <stdbool.h> // For boolean type
#include <stdio.h> // For asprintf
#include <stdlib.h> // For exit, system, malloc, free, rand, etc.
#include <string.h> // For string functions
@ -86,7 +88,7 @@ static void ID_InsertANewUsrIDInDB (long UsrCod,const char *NewID,bool Confirmed
void ID_GetListIDsFromUsrCod (struct UsrData *UsrDat)
{
char Query[256];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumIDs;
@ -100,11 +102,12 @@ void ID_GetListIDsFromUsrCod (struct UsrData *UsrDat)
/***** Get user's IDs from database *****/
// First the confirmed (Confirmed == 'Y')
// Then the unconfirmed (Confirmed == 'N')
sprintf (Query,"SELECT UsrID,Confirmed FROM usr_IDs"
" WHERE UsrCod=%ld"
" ORDER BY Confirmed DESC,UsrID",
UsrDat->UsrCod);
if ((NumIDs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get user's IDs")))
if (asprintf (&Query,"SELECT UsrID,Confirmed FROM usr_IDs"
" WHERE UsrCod=%ld"
" ORDER BY Confirmed DESC,UsrID",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
if ((NumIDs = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get user's IDs")))
{
/***** Allocate space for the list *****/
ID_ReallocateListIDs (UsrDat,NumIDs);
@ -843,13 +846,14 @@ static void ID_RemoveUsrID (const struct UsrData *UsrDat,bool ItsMe)
static bool ID_CheckIfConfirmed (long UsrCod,const char *UsrID)
{
char Query[128];
char *Query;
/***** Get if ID is confirmed from database *****/
sprintf (Query,"SELECT COUNT(*) FROM usr_IDs"
" WHERE UsrCod=%ld AND UsrID='%s' AND Confirmed='Y'",
UsrCod,UsrID);
return (DB_QueryCOUNT (Query,"can not check if ID is confirmed") != 0);
if (asprintf (&Query,"SELECT COUNT(*) FROM usr_IDs"
" WHERE UsrCod=%ld AND UsrID='%s' AND Confirmed='Y'",
UsrCod,UsrID) < 0)
Lay_NotEnoughMemoryExit ();
return (DB_QueryCOUNT_free (Query,"can not check if ID is confirmed") != 0);
}
/*****************************************************************************/
@ -858,13 +862,14 @@ static bool ID_CheckIfConfirmed (long UsrCod,const char *UsrID)
static void ID_RemoveUsrIDFromDB (long UsrCod,const char *UsrID)
{
char Query[256 + ID_MAX_BYTES_USR_ID];
char *Query;
/***** Remove one of my user's IDs *****/
sprintf (Query,"DELETE FROM usr_IDs"
" WHERE UsrCod=%ld AND UsrID='%s'",
UsrCod,UsrID);
DB_QueryREPLACE (Query,"can not remove a user's ID");
if (asprintf (&Query,"DELETE FROM usr_IDs"
" WHERE UsrCod=%ld AND UsrID='%s'",
UsrCod,UsrID) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryREPLACE_free (Query,"can not remove a user's ID");
}
/*****************************************************************************/
@ -1020,17 +1025,18 @@ static void ID_NewUsrID (const struct UsrData *UsrDat,bool ItsMe)
static void ID_InsertANewUsrIDInDB (long UsrCod,const char *NewID,bool Confirmed)
{
char Query[256 + ID_MAX_BYTES_USR_ID];
char *Query;
/***** Update my nickname in database *****/
sprintf (Query,"INSERT INTO usr_IDs"
" (UsrCod,UsrID,CreatTime,Confirmed)"
" VALUES"
" (%ld,'%s',NOW(),'%c')",
UsrCod,NewID,
Confirmed ? 'Y' :
'N');
DB_QueryINSERT (Query,"can not insert a new ID");
if (asprintf (&Query,"INSERT INTO usr_IDs"
" (UsrCod,UsrID,CreatTime,Confirmed)"
" VALUES"
" (%ld,'%s',NOW(),'%c')",
UsrCod,NewID,
Confirmed ? 'Y' :
'N') < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryINSERT_free (Query,"can not insert a new ID");
}
/*****************************************************************************/
@ -1155,11 +1161,12 @@ void ID_ConfirmOtherUsrID (void)
void ID_ConfirmUsrID (const struct UsrData *UsrDat,const char *UsrID)
{
char Query[256 + ID_MAX_BYTES_USR_ID];
char *Query;
/***** Update database *****/
sprintf (Query,"UPDATE usr_IDs SET Confirmed='Y'"
" WHERE UsrCod=%ld AND UsrID='%s' AND Confirmed<>'Y'",
UsrDat->UsrCod,UsrID);
DB_QueryINSERT (Query,"can not confirm a user's ID");
if (asprintf (&Query,"UPDATE usr_IDs SET Confirmed='Y'"
" WHERE UsrCod=%ld AND UsrID='%s' AND Confirmed<>'Y'",
UsrDat->UsrCod,UsrID) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryINSERT_free (Query,"can not confirm a user's ID");
}

View File

@ -355,10 +355,11 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 18.7.29 (2018-10-22)"
#define Log_PLATFORM_VERSION "SWAD 18.7.30 (2018-10-22)"
#define CSS_FILE "swad18.4.css"
#define JS_FILE "swad17.17.1.js"
/*
Version 18.7.30: Oct 22, 2018 Some sprintf for database queries changed by asprintf. (237744 lines)
Version 18.7.29: Oct 22, 2018 Some sprintf for database queries changed by asprintf. (237687 lines)
Version 18.7.28: Oct 22, 2018 Some sprintf for database queries changed by asprintf. (237674 lines)
Version 18.7.27: Oct 22, 2018 Some sprintf for database queries changed by asprintf. (237661 lines)

View File

@ -25,8 +25,9 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
#define _GNU_SOURCE // For asprintf
#include <linux/stddef.h> // For NULL
#include <stdio.h> // For fprintf
#include <stdio.h> // For aprintf
#include <mysql/mysql.h> // To access MySQL databases
#include "swad_action.h"
@ -326,7 +327,7 @@ static void Ind_GetParamNumIndicators (void)
static unsigned Ind_GetTableOfCourses (MYSQL_RES **mysql_res)
{
char Query[1024];
char *Query;
switch (Gbl.Scope.Current)
{
@ -334,170 +335,212 @@ static unsigned Ind_GetTableOfCourses (MYSQL_RES **mysql_res)
if (Gbl.Stat.DptCod >= 0) // 0 means another department
{
if (Gbl.Stat.DegTypCod > 0)
sprintf (Query,"SELECT DISTINCTROW degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses,crs_usr,usr_data"
" WHERE degrees.DegTypCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.DptCod=%ld"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.Stat.DegTypCod,
(unsigned) Rol_TCH,
Gbl.Stat.DptCod);
{
if (asprintf (&Query,"SELECT DISTINCTROW degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses,crs_usr,usr_data"
" WHERE degrees.DegTypCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.DptCod=%ld"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.Stat.DegTypCod,
(unsigned) Rol_TCH,
Gbl.Stat.DptCod) < 0)
Lay_NotEnoughMemoryExit ();
}
else
sprintf (Query,"SELECT DISTINCTROW degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses,crs_usr,usr_data"
" WHERE degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.DptCod=%ld"
" ORDER BY degrees.FullName,courses.FullName",
(unsigned) Rol_TCH,
Gbl.Stat.DptCod);
{
if (asprintf (&Query,"SELECT DISTINCTROW degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses,crs_usr,usr_data"
" WHERE degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.DptCod=%ld"
" ORDER BY degrees.FullName,courses.FullName",
(unsigned) Rol_TCH,
Gbl.Stat.DptCod) < 0)
Lay_NotEnoughMemoryExit ();
}
}
else
{
if (Gbl.Stat.DegTypCod > 0)
sprintf (Query,"SELECT degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses"
" WHERE degrees.DegTypCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.Stat.DegTypCod);
{
if (asprintf (&Query,"SELECT degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses"
" WHERE degrees.DegTypCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.Stat.DegTypCod) < 0)
Lay_NotEnoughMemoryExit ();
}
else
sprintf (Query,"SELECT degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses"
" WHERE degrees.DegCod=courses.DegCod"
" ORDER BY degrees.FullName,courses.FullName");
{
if (asprintf (&Query,"SELECT degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses"
" WHERE degrees.DegCod=courses.DegCod"
" ORDER BY degrees.FullName,courses.FullName") < 0)
Lay_NotEnoughMemoryExit ();
}
}
break;
case Sco_SCOPE_CTY:
if (Gbl.Stat.DptCod >= 0) // 0 means another department
sprintf (Query,"SELECT DISTINCTROW degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM institutions,centres,degrees,courses,crs_usr,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=usr_data.UsrCod"
" AND usr_data.DptCod=%ld"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentCty.Cty.CtyCod,
(unsigned) Rol_TCH,
Gbl.Stat.DptCod);
{
if (asprintf (&Query,"SELECT DISTINCTROW degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM institutions,centres,degrees,courses,crs_usr,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=usr_data.UsrCod"
" AND usr_data.DptCod=%ld"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentCty.Cty.CtyCod,
(unsigned) Rol_TCH,
Gbl.Stat.DptCod) < 0)
Lay_NotEnoughMemoryExit ();
}
else
sprintf (Query,"SELECT degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM institutions,centres,degrees,courses"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentCty.Cty.CtyCod);
{
if (asprintf (&Query,"SELECT degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM institutions,centres,degrees,courses"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentCty.Cty.CtyCod) < 0)
Lay_NotEnoughMemoryExit ();
}
break;
case Sco_SCOPE_INS:
if (Gbl.Stat.DptCod >= 0) // 0 means another department
sprintf (Query,"SELECT DISTINCTROW degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM centres,degrees,courses,crs_usr,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=usr_data.UsrCod"
" AND usr_data.DptCod=%ld"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentIns.Ins.InsCod,
(unsigned) Rol_TCH,
Gbl.Stat.DptCod);
{
if (asprintf (&Query,"SELECT DISTINCTROW degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM centres,degrees,courses,crs_usr,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=usr_data.UsrCod"
" AND usr_data.DptCod=%ld"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentIns.Ins.InsCod,
(unsigned) Rol_TCH,
Gbl.Stat.DptCod) < 0)
Lay_NotEnoughMemoryExit ();
}
else
sprintf (Query,"SELECT degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM centres,degrees,courses"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentIns.Ins.InsCod);
{
if (asprintf (&Query,"SELECT degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM centres,degrees,courses"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentIns.Ins.InsCod) < 0)
Lay_NotEnoughMemoryExit ();
}
break;
case Sco_SCOPE_CTR:
if (Gbl.Stat.DptCod >= 0) // 0 means another department
sprintf (Query,"SELECT DISTINCTROW degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses,crs_usr,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=usr_data.UsrCod"
" AND usr_data.DptCod=%ld"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentCtr.Ctr.CtrCod,
(unsigned) Rol_TCH,
Gbl.Stat.DptCod);
{
if (asprintf (&Query,"SELECT DISTINCTROW degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses,crs_usr,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=usr_data.UsrCod"
" AND usr_data.DptCod=%ld"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentCtr.Ctr.CtrCod,
(unsigned) Rol_TCH,
Gbl.Stat.DptCod) < 0)
Lay_NotEnoughMemoryExit ();
}
else
sprintf (Query,"SELECT degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentCtr.Ctr.CtrCod);
{
if (asprintf (&Query,"SELECT degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
Lay_NotEnoughMemoryExit ();
}
break;
case Sco_SCOPE_DEG:
if (Gbl.Stat.DptCod >= 0) // 0 means another department
sprintf (Query,"SELECT DISTINCTROW degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses,crs_usr,usr_data"
" WHERE degrees.DegCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.DptCod=%ld"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentDeg.Deg.DegCod,
(unsigned) Rol_TCH,
Gbl.Stat.DptCod);
{
if (asprintf (&Query,"SELECT DISTINCTROW degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses,crs_usr,usr_data"
" WHERE degrees.DegCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.DptCod=%ld"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentDeg.Deg.DegCod,
(unsigned) Rol_TCH,
Gbl.Stat.DptCod) < 0)
Lay_NotEnoughMemoryExit ();
}
else
sprintf (Query,"SELECT degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses"
" WHERE degrees.DegCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentDeg.Deg.DegCod);
{
if (asprintf (&Query,"SELECT degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses"
" WHERE degrees.DegCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentDeg.Deg.DegCod) < 0)
Lay_NotEnoughMemoryExit ();
}
break;
case Sco_SCOPE_CRS:
if (Gbl.Stat.DptCod >= 0) // 0 means another department
sprintf (Query,"SELECT DISTINCTROW degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses,crs_usr,usr_data"
" WHERE courses.CrsCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.CrsCod=%ld"
" AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.DptCod=%ld"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.CurrentCrs.Crs.CrsCod,
(unsigned) Rol_TCH,
Gbl.Stat.DptCod);
{
if (asprintf (&Query,"SELECT DISTINCTROW degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses,crs_usr,usr_data"
" WHERE courses.CrsCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.CrsCod=%ld"
" AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=usr_data.UsrCod"
" AND usr_data.DptCod=%ld"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.CurrentCrs.Crs.CrsCod,
(unsigned) Rol_TCH,
Gbl.Stat.DptCod) < 0)
Lay_NotEnoughMemoryExit ();
}
else
sprintf (Query,"SELECT degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses"
" WHERE courses.CrsCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentCrs.Crs.CrsCod);
{
if (asprintf (&Query,"SELECT degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses"
" WHERE courses.CrsCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" ORDER BY degrees.FullName,courses.FullName",
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
}
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
break;
}
return (unsigned) DB_QuerySELECT (Query,mysql_res,"can not get courses");
return (unsigned) DB_QuerySELECT_free (Query,mysql_res,"can not get courses");
}
/*****************************************************************************/
@ -1390,15 +1433,16 @@ static unsigned Ind_GetAndUpdateNumIndicatorsCrs (long CrsCod)
int Ind_GetNumIndicatorsCrsFromDB (long CrsCod)
{
char Query[128];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
int NumIndicatorsFromDB = -1; // -1 means not yet calculated
/***** Get number of indicators of a course from database *****/
sprintf (Query,"SELECT NumIndicators FROM courses WHERE CrsCod=%ld",
CrsCod);
if (DB_QuerySELECT (Query,&mysql_res,"can not get number of indicators"))
if (asprintf (&Query,"SELECT NumIndicators FROM courses WHERE CrsCod=%ld",
CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get number of indicators"))
{
/***** Get row *****/
row = mysql_fetch_row (mysql_res);
@ -1420,12 +1464,13 @@ int Ind_GetNumIndicatorsCrsFromDB (long CrsCod)
static void Ind_StoreIndicatorsCrsIntoDB (long CrsCod,unsigned NumIndicators)
{
char Query[128];
char *Query;
/***** Store number of indicators of a course in database *****/
sprintf (Query,"UPDATE courses SET NumIndicators=%u WHERE CrsCod=%ld",
NumIndicators,CrsCod);
DB_QueryUPDATE (Query,"can not store number of indicators of a course");
if (asprintf (&Query,"UPDATE courses SET NumIndicators=%u WHERE CrsCod=%ld",
NumIndicators,CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryUPDATE_free (Query,"can not store number of indicators of a course");
}
/*****************************************************************************/
@ -1507,27 +1552,28 @@ void Ind_ComputeAndStoreIndicatorsCrs (long CrsCod,int NumIndicatorsFromDB,
static unsigned long Ind_GetNumFilesInDocumZonesOfCrsFromDB (long CrsCod)
{
extern const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER];
char Query[1024];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumFiles;
/***** Get number of files in document zones of a course from database *****/
sprintf (Query,"SELECT"
" (SELECT COALESCE(SUM(NumFiles),0)"
" FROM file_browser_size"
" WHERE FileBrowser=%u AND Cod=%ld) +"
" (SELECT COALESCE(SUM(file_browser_size.NumFiles),0)"
" FROM crs_grp_types,crs_grp,file_browser_size"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND file_browser_size.FileBrowser=%u"
" AND file_browser_size.Cod=crs_grp.GrpCod)",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_DOC_CRS],
CrsCod,
CrsCod,
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_DOC_GRP]);
DB_QuerySELECT (Query,&mysql_res,"can not get the number of files");
if (asprintf (&Query,"SELECT"
" (SELECT COALESCE(SUM(NumFiles),0)"
" FROM file_browser_size"
" WHERE FileBrowser=%u AND Cod=%ld) +"
" (SELECT COALESCE(SUM(file_browser_size.NumFiles),0)"
" FROM crs_grp_types,crs_grp,file_browser_size"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND file_browser_size.FileBrowser=%u"
" AND file_browser_size.Cod=crs_grp.GrpCod)",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_DOC_CRS],
CrsCod,
CrsCod,
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_DOC_GRP]) < 0)
Lay_NotEnoughMemoryExit ();
DB_QuerySELECT_free (Query,&mysql_res,"can not get the number of files");
/***** Get row *****/
row = mysql_fetch_row (mysql_res);
@ -1549,27 +1595,28 @@ static unsigned long Ind_GetNumFilesInDocumZonesOfCrsFromDB (long CrsCod)
static unsigned long Ind_GetNumFilesInShareZonesOfCrsFromDB (long CrsCod)
{
extern const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER];
char Query[1024];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumFiles;
/***** Get number of files in document zones of a course from database *****/
sprintf (Query,"SELECT"
" (SELECT COALESCE(SUM(NumFiles),0)"
" FROM file_browser_size"
" WHERE FileBrowser=%u AND Cod=%ld) +"
" (SELECT COALESCE(SUM(file_browser_size.NumFiles),0)"
" FROM crs_grp_types,crs_grp,file_browser_size"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND file_browser_size.FileBrowser=%u"
" AND file_browser_size.Cod=crs_grp.GrpCod)",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_SHR_CRS],
CrsCod,
CrsCod,
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_SHR_GRP]);
DB_QuerySELECT (Query,&mysql_res,"can not get the number of files");
if (asprintf (&Query,"SELECT"
" (SELECT COALESCE(SUM(NumFiles),0)"
" FROM file_browser_size"
" WHERE FileBrowser=%u AND Cod=%ld) +"
" (SELECT COALESCE(SUM(file_browser_size.NumFiles),0)"
" FROM crs_grp_types,crs_grp,file_browser_size"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND file_browser_size.FileBrowser=%u"
" AND file_browser_size.Cod=crs_grp.GrpCod)",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_SHR_CRS],
CrsCod,
CrsCod,
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_SHR_GRP]) < 0)
Lay_NotEnoughMemoryExit ();
DB_QuerySELECT_free (Query,&mysql_res,"can not get the number of files");
/***** Get row *****/
row = mysql_fetch_row (mysql_res);
@ -1591,18 +1638,19 @@ static unsigned long Ind_GetNumFilesInShareZonesOfCrsFromDB (long CrsCod)
static unsigned long Ind_GetNumFilesInAssigZonesOfCrsFromDB (long CrsCod)
{
extern const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER];
char Query[256];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumFiles;
/***** Get number of files in document zones of a course from database *****/
sprintf (Query,"SELECT COALESCE(SUM(NumFiles),0)"
" FROM file_browser_size"
" WHERE FileBrowser=%u AND Cod=%ld",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_ASG_USR],
CrsCod);
DB_QuerySELECT (Query,&mysql_res,"can not get the number of files");
if (asprintf (&Query,"SELECT COALESCE(SUM(NumFiles),0)"
" FROM file_browser_size"
" WHERE FileBrowser=%u AND Cod=%ld",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_ASG_USR],
CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QuerySELECT_free (Query,&mysql_res,"can not get the number of files");
/***** Get row *****/
row = mysql_fetch_row (mysql_res);
@ -1624,18 +1672,19 @@ static unsigned long Ind_GetNumFilesInAssigZonesOfCrsFromDB (long CrsCod)
static unsigned long Ind_GetNumFilesInWorksZonesOfCrsFromDB (long CrsCod)
{
extern const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER];
char Query[256];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumFiles;
/***** Get number of files in document zones of a course from database *****/
sprintf (Query,"SELECT COALESCE(SUM(NumFiles),0)"
" FROM file_browser_size"
" WHERE FileBrowser=%u AND Cod=%ld",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_WRK_USR],
CrsCod);
DB_QuerySELECT (Query,&mysql_res,"can not get the number of files");
if (asprintf (&Query,"SELECT COALESCE(SUM(NumFiles),0)"
" FROM file_browser_size"
" WHERE FileBrowser=%u AND Cod=%ld",
(unsigned) Brw_FileBrowserForDB_files[Brw_ADMI_WRK_USR],
CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QuerySELECT_free (Query,&mysql_res,"can not get the number of files");
/***** Get row *****/
row = mysql_fetch_row (mysql_res);