Version 18.8.6

This commit is contained in:
Antonio Cañas Vargas 2018-10-26 01:54:22 +02:00
parent 1707123a8b
commit 90e2b164ea
29 changed files with 1372 additions and 1697 deletions

View File

@ -88,7 +88,6 @@ static void ID_InsertANewUsrIDInDB (long UsrCod,const char *NewID,bool Confirmed
void ID_GetListIDsFromUsrCod (struct UsrData *UsrDat)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumIDs;
@ -102,12 +101,11 @@ void ID_GetListIDsFromUsrCod (struct UsrData *UsrDat)
/***** Get user's IDs from database *****/
// First the confirmed (Confirmed == 'Y')
// Then the unconfirmed (Confirmed == 'N')
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")))
DB_BuildQuery ("SELECT UsrID,Confirmed FROM usr_IDs"
" WHERE UsrCod=%ld"
" ORDER BY Confirmed DESC,UsrID",
UsrDat->UsrCod);
if ((NumIDs = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get user's IDs")))
{
/***** Allocate space for the list *****/
ID_ReallocateListIDs (UsrDat,NumIDs);

View File

@ -100,7 +100,6 @@ void MFU_FreeMFUActions (struct MFU_ListMFUActions *ListMFUActions)
void MFU_GetMFUActions (struct MFU_ListMFUActions *ListMFUActions,unsigned MaxActionsShown)
{
extern Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRow,NumRows;
@ -108,11 +107,10 @@ void MFU_GetMFUActions (struct MFU_ListMFUActions *ListMFUActions,unsigned MaxAc
Act_Action_t Action;
/***** Get most frequently used actions *****/
if (asprintf (&Query,"SELECT ActCod FROM actions_MFU"
" WHERE UsrCod=%ld ORDER BY Score DESC,LastClick DESC",
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get most frequently used actions");
DB_BuildQuery ("SELECT ActCod FROM actions_MFU"
" WHERE UsrCod=%ld ORDER BY Score DESC,LastClick DESC",
Gbl.Usrs.Me.UsrDat.UsrCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get most frequently used actions");
/***** Write list of frequently used actions *****/
for (NumRow = 0, ListMFUActions->NumActions = 0;
@ -141,7 +139,6 @@ void MFU_GetMFUActions (struct MFU_ListMFUActions *ListMFUActions,unsigned MaxAc
Act_Action_t MFU_GetMyLastActionInCurrentTab (void)
{
extern Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumActions;
@ -153,12 +150,11 @@ Act_Action_t MFU_GetMyLastActionInCurrentTab (void)
if (Gbl.Usrs.Me.UsrDat.UsrCod > 0)
{
/***** Get my most frequently used actions *****/
if (asprintf (&Query,"SELECT ActCod FROM actions_MFU"
" WHERE UsrCod=%ld"
" ORDER BY LastClick DESC,Score DESC",
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
NumActions = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get most frequently used actions");
DB_BuildQuery ("SELECT ActCod FROM actions_MFU"
" WHERE UsrCod=%ld"
" ORDER BY LastClick DESC,Score DESC",
Gbl.Usrs.Me.UsrDat.UsrCod);
NumActions = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get most frequently used actions");
/***** Loop over list of frequently used actions *****/
for (NumAct = 0;
@ -357,11 +353,10 @@ void MFU_UpdateMFUActions (void)
Str_SetDecimalPointToUS (); // To get the decimal point as a dot
/***** Get current score *****/
if (asprintf (&Query,"SELECT Score FROM actions_MFU"
" WHERE UsrCod=%ld AND ActCod=%ld",
Gbl.Usrs.Me.UsrDat.UsrCod,ActCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get score for current action"))
DB_BuildQuery ("SELECT Score FROM actions_MFU"
" WHERE UsrCod=%ld AND ActCod=%ld",
Gbl.Usrs.Me.UsrDat.UsrCod,ActCod);
if (DB_QuerySELECT_new (&mysql_res,"can not get score for current action"))
{
row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%f",&Score) != 1)

View File

@ -150,7 +150,6 @@ void RSS_UpdateRSSFileForACrs (struct Course *Crs)
static void RSS_WriteNotices (FILE *FileRSS,struct Course *Crs)
{
extern const char *Txt_Notice;
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
struct UsrData UsrDat;
@ -161,13 +160,12 @@ static void RSS_WriteNotices (FILE *FileRSS,struct Course *Crs)
char Content[Cns_MAX_BYTES_TEXT + 1];
/***** Get active notices in course *****/
if (asprintf (&Query,"SELECT NotCod,UNIX_TIMESTAMP(CreatTime) AS T,UsrCod,Content"
" FROM notices"
" WHERE CrsCod=%ld AND Status=%u"
" ORDER BY T DESC",
Crs->CrsCod,(unsigned) Not_ACTIVE_NOTICE) < 0)
Lay_NotEnoughMemoryExit ();
NumNotices = DB_QuerySELECT_free (Query,&mysql_res,"can not get notices from database");
DB_BuildQuery ("SELECT NotCod,UNIX_TIMESTAMP(CreatTime) AS T,UsrCod,Content"
" FROM notices"
" WHERE CrsCod=%ld AND Status=%u"
" ORDER BY T DESC",
Crs->CrsCod,(unsigned) Not_ACTIVE_NOTICE);
NumNotices = DB_QuerySELECT_new (&mysql_res,"can not get notices from database");
/***** Write items with notices *****/
if (NumNotices)
@ -248,7 +246,6 @@ static void RSS_WriteNotices (FILE *FileRSS,struct Course *Crs)
static void RSS_WriteExamAnnouncements (FILE *FileRSS,struct Course *Crs)
{
extern const char *Txt_Exam;
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
struct UsrData UsrDat;
@ -260,15 +257,14 @@ static void RSS_WriteExamAnnouncements (FILE *FileRSS,struct Course *Crs)
if (Gbl.DB.DatabaseIsOpen)
{
/***** Get exam announcements (only future exams) in current course from database *****/
if (asprintf (&Query,"SELECT ExaCod,UNIX_TIMESTAMP(CallDate) AS T,"
"DATE_FORMAT(ExamDate,'%%d/%%m/%%Y %%H:%%i')"
" FROM exam_announcements"
" WHERE CrsCod=%ld AND Status=%u AND ExamDate>=NOW()"
" ORDER BY T",
Gbl.CurrentCrs.Crs.CrsCod,
(unsigned) Exa_VISIBLE_EXAM_ANNOUNCEMENT) < 0)
Lay_NotEnoughMemoryExit ();
NumExamAnnouncements = DB_QuerySELECT_free (Query,&mysql_res,"can not get exam announcements");
DB_BuildQuery ("SELECT ExaCod,UNIX_TIMESTAMP(CallDate) AS T,"
"DATE_FORMAT(ExamDate,'%%d/%%m/%%Y %%H:%%i')"
" FROM exam_announcements"
" WHERE CrsCod=%ld AND Status=%u AND ExamDate>=NOW()"
" ORDER BY T",
Gbl.CurrentCrs.Crs.CrsCod,
(unsigned) Exa_VISIBLE_EXAM_ANNOUNCEMENT);
NumExamAnnouncements = DB_QuerySELECT_new (&mysql_res,"can not get exam announcements");
/***** Write items with notices *****/
if (NumExamAnnouncements)

View File

@ -355,10 +355,11 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 18.8.5 (2018-10-26)"
#define Log_PLATFORM_VERSION "SWAD 18.8.6 (2018-10-26)"
#define CSS_FILE "swad18.4.css"
#define JS_FILE "swad17.17.1.js"
/*
Version 18.8.6: Oct 26, 2018 Some asprintf for database queries changed by internal function. (237407 lines)
Version 18.8.5: Oct 26, 2018 Some asprintf for database queries changed by internal function. (237723 lines)
Version 18.8.4: Oct 25, 2018 Some asprintf for database queries changed by internal function. (237916 lines)
Version 18.8.3: Oct 25, 2018 Some asprintf for database queries changed by internal function. (237968 lines)

View File

@ -1125,83 +1125,75 @@ void Fol_UnfollowUsr2 (void)
void Fol_GetAndShowRankingFollowers (void)
{
char *Query;
/***** Get ranking from database *****/
switch (Gbl.Scope.Current)
{
case Sco_SCOPE_SYS:
if (asprintf (&Query,"SELECT FollowedCod,COUNT(FollowerCod) AS N"
" FROM usr_follow"
" GROUP BY FollowedCod"
" ORDER BY N DESC,FollowedCod LIMIT 100") < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT FollowedCod,COUNT(FollowerCod) AS N"
" FROM usr_follow"
" GROUP BY FollowedCod"
" ORDER BY N DESC,FollowedCod LIMIT 100");
break;
case Sco_SCOPE_CTY:
if (asprintf (&Query,"SELECT usr_follow.FollowedCod,COUNT(DISTINCT usr_follow.FollowerCod) AS N"
" FROM institutions,centres,degrees,courses,crs_usr,usr_follow"
" 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=usr_follow.FollowedCod"
" GROUP BY usr_follow.FollowedCod"
" ORDER BY N DESC,usr_follow.FollowedCod LIMIT 100",
Gbl.CurrentCty.Cty.CtyCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT usr_follow.FollowedCod,COUNT(DISTINCT usr_follow.FollowerCod) AS N"
" FROM institutions,centres,degrees,courses,crs_usr,usr_follow"
" 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=usr_follow.FollowedCod"
" GROUP BY usr_follow.FollowedCod"
" ORDER BY N DESC,usr_follow.FollowedCod LIMIT 100",
Gbl.CurrentCty.Cty.CtyCod);
break;
case Sco_SCOPE_INS:
if (asprintf (&Query,"SELECT usr_follow.FollowedCod,COUNT(DISTINCT usr_follow.FollowerCod) AS N"
" FROM centres,degrees,courses,crs_usr,usr_follow"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_follow.FollowedCod"
" GROUP BY usr_follow.FollowedCod"
" ORDER BY N DESC,usr_follow.FollowedCod LIMIT 100",
Gbl.CurrentIns.Ins.InsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT usr_follow.FollowedCod,COUNT(DISTINCT usr_follow.FollowerCod) AS N"
" FROM centres,degrees,courses,crs_usr,usr_follow"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_follow.FollowedCod"
" GROUP BY usr_follow.FollowedCod"
" ORDER BY N DESC,usr_follow.FollowedCod LIMIT 100",
Gbl.CurrentIns.Ins.InsCod);
break;
case Sco_SCOPE_CTR:
if (asprintf (&Query,"SELECT usr_follow.FollowedCod,COUNT(DISTINCT usr_follow.FollowerCod) AS N"
" FROM degrees,courses,crs_usr,usr_follow"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_follow.FollowedCod"
" GROUP BY usr_follow.FollowedCod"
" ORDER BY N DESC,usr_follow.FollowedCod LIMIT 100",
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT usr_follow.FollowedCod,COUNT(DISTINCT usr_follow.FollowerCod) AS N"
" FROM degrees,courses,crs_usr,usr_follow"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_follow.FollowedCod"
" GROUP BY usr_follow.FollowedCod"
" ORDER BY N DESC,usr_follow.FollowedCod LIMIT 100",
Gbl.CurrentCtr.Ctr.CtrCod);
break;
case Sco_SCOPE_DEG:
if (asprintf (&Query,"SELECT usr_follow.FollowedCod,COUNT(DISTINCT usr_follow.FollowerCod) AS N"
" FROM courses,crs_usr,usr_follow"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_follow.FollowedCod"
" GROUP BY usr_follow.FollowedCod"
" ORDER BY N DESC,usr_follow.FollowedCod LIMIT 100",
Gbl.CurrentDeg.Deg.DegCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT usr_follow.FollowedCod,COUNT(DISTINCT usr_follow.FollowerCod) AS N"
" FROM courses,crs_usr,usr_follow"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_follow.FollowedCod"
" GROUP BY usr_follow.FollowedCod"
" ORDER BY N DESC,usr_follow.FollowedCod LIMIT 100",
Gbl.CurrentDeg.Deg.DegCod);
break;
case Sco_SCOPE_CRS:
if (asprintf (&Query,"SELECT usr_follow.FollowedCod,COUNT(DISTINCT usr_follow.FollowerCod) AS N"
" FROM crs_usr,usr_follow"
" WHERE crs_usr.CrsCod=%ld"
" AND crs_usr.UsrCod=usr_follow.FollowedCod"
" GROUP BY usr_follow.FollowedCod"
" ORDER BY N DESC,usr_follow.FollowedCod LIMIT 100",
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT usr_follow.FollowedCod,COUNT(DISTINCT usr_follow.FollowerCod) AS N"
" FROM crs_usr,usr_follow"
" WHERE crs_usr.CrsCod=%ld"
" AND crs_usr.UsrCod=usr_follow.FollowedCod"
" GROUP BY usr_follow.FollowedCod"
" ORDER BY N DESC,usr_follow.FollowedCod LIMIT 100",
Gbl.CurrentCrs.Crs.CrsCod);
break;
default:
Lay_WrongScopeExit ();
break;
}
Prf_ShowRankingFigure (Query);
Prf_ShowRankingFigure ();
}
/*****************************************************************************/

View File

@ -2688,7 +2688,6 @@ static void Grp_PutFormToCreateGroup (void)
void Grp_GetListGrpTypesInThisCrs (Grp_WhichGroupTypes_t WhichGroupTypes)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRow;
@ -2705,44 +2704,42 @@ void Grp_GetListGrpTypesInThisCrs (Grp_WhichGroupTypes_t WhichGroupTypes)
switch (WhichGroupTypes)
{
case Grp_ONLY_GROUP_TYPES_WITH_GROUPS:
if (asprintf (&Query,"SELECT crs_grp_types.GrpTypCod,crs_grp_types.GrpTypName,"
"crs_grp_types.Mandatory,crs_grp_types.Multiple,"
"crs_grp_types.MustBeOpened,"
"UNIX_TIMESTAMP(crs_grp_types.OpenTime),"
"COUNT(crs_grp.GrpCod)"
" FROM crs_grp_types,crs_grp"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" GROUP BY crs_grp_types.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName",
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT crs_grp_types.GrpTypCod,crs_grp_types.GrpTypName,"
"crs_grp_types.Mandatory,crs_grp_types.Multiple,"
"crs_grp_types.MustBeOpened,"
"UNIX_TIMESTAMP(crs_grp_types.OpenTime),"
"COUNT(crs_grp.GrpCod)"
" FROM crs_grp_types,crs_grp"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" GROUP BY crs_grp_types.GrpTypCod"
" ORDER BY crs_grp_types.GrpTypName",
Gbl.CurrentCrs.Crs.CrsCod);
break;
case Grp_ALL_GROUP_TYPES:
if (asprintf (&Query,"(SELECT crs_grp_types.GrpTypCod,crs_grp_types.GrpTypName AS GrpTypName,"
"crs_grp_types.Mandatory,crs_grp_types.Multiple,"
"crs_grp_types.MustBeOpened,"
"UNIX_TIMESTAMP(crs_grp_types.OpenTime),"
"COUNT(crs_grp.GrpCod)"
" FROM crs_grp_types,crs_grp"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" GROUP BY crs_grp_types.GrpTypCod)"
" UNION "
"(SELECT GrpTypCod,GrpTypName,"
"Mandatory,Multiple,"
"MustBeOpened,"
"UNIX_TIMESTAMP(OpenTime),"
"0"
" FROM crs_grp_types WHERE CrsCod=%ld"
" AND GrpTypCod NOT IN (SELECT GrpTypCod FROM crs_grp))"
" ORDER BY GrpTypName",
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("(SELECT crs_grp_types.GrpTypCod,crs_grp_types.GrpTypName AS GrpTypName,"
"crs_grp_types.Mandatory,crs_grp_types.Multiple,"
"crs_grp_types.MustBeOpened,"
"UNIX_TIMESTAMP(crs_grp_types.OpenTime),"
"COUNT(crs_grp.GrpCod)"
" FROM crs_grp_types,crs_grp"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" GROUP BY crs_grp_types.GrpTypCod)"
" UNION "
"(SELECT GrpTypCod,GrpTypName,"
"Mandatory,Multiple,"
"MustBeOpened,"
"UNIX_TIMESTAMP(OpenTime),"
"0"
" FROM crs_grp_types WHERE CrsCod=%ld"
" AND GrpTypCod NOT IN (SELECT GrpTypCod FROM crs_grp))"
" ORDER BY GrpTypName",
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.CurrentCrs.Crs.CrsCod);
break;
}
Gbl.CurrentCrs.Grps.GrpTypes.Num = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get types of group of a course");
Gbl.CurrentCrs.Grps.GrpTypes.Num = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get types of group of a course");
/***** Get group types *****/
Gbl.CurrentCrs.Grps.GrpTypes.NumGrpsTotal = 0;
@ -2813,13 +2810,12 @@ void Grp_OpenGroupsAutomatically (void)
long GrpTypCod;
/***** Find group types to be opened *****/
if (asprintf (&Query,"SELECT GrpTypCod FROM crs_grp_types"
" WHERE CrsCod=%ld AND MustBeOpened='Y'"
" AND OpenTime<=NOW()",
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
NumGrpTypes = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,
"can not get the types of group to be opened");
DB_BuildQuery ("SELECT GrpTypCod FROM crs_grp_types"
" WHERE CrsCod=%ld AND MustBeOpened='Y'"
" AND OpenTime<=NOW()",
Gbl.CurrentCrs.Crs.CrsCod);
NumGrpTypes = (unsigned) DB_QuerySELECT_new (&mysql_res,
"can not get the types of group to be opened");
for (NumGrpTyp = 0;
NumGrpTyp < NumGrpTypes;
NumGrpTyp++)
@ -3001,16 +2997,13 @@ static unsigned Grp_CountNumGrpsInThisCrsOfType (long GrpTypCod)
unsigned long Grp_GetGrpsOfType (long GrpTypCod,MYSQL_RES **mysql_res)
{
char *Query;
/***** Get groups of a type from database *****/
if (asprintf (&Query,"SELECT GrpCod,GrpName,MaxStudents,Open,FileZones"
" FROM crs_grp"
" WHERE GrpTypCod=%ld"
" ORDER BY GrpName",
GrpTypCod) < 0)
Lay_NotEnoughMemoryExit ();
return DB_QuerySELECT_free (Query,mysql_res,"can not get groups of a type");
DB_BuildQuery ("SELECT GrpCod,GrpName,MaxStudents,Open,FileZones"
" FROM crs_grp"
" WHERE GrpTypCod=%ld"
" ORDER BY GrpName",
GrpTypCod);
return DB_QuerySELECT_new (mysql_res,"can not get groups of a type");
}
/*****************************************************************************/
@ -3020,18 +3013,16 @@ unsigned long Grp_GetGrpsOfType (long GrpTypCod,MYSQL_RES **mysql_res)
static void Grp_GetDataOfGroupTypeByCod (struct GroupType *GrpTyp)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
/***** Get data of a type of group from database *****/
if (asprintf (&Query,"SELECT GrpTypName,Mandatory,Multiple,MustBeOpened,UNIX_TIMESTAMP(OpenTime)"
" FROM crs_grp_types"
" WHERE CrsCod=%ld AND GrpTypCod=%ld",
Gbl.CurrentCrs.Crs.CrsCod,GrpTyp->GrpTypCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get type of group");
DB_BuildQuery ("SELECT GrpTypName,Mandatory,Multiple,MustBeOpened,UNIX_TIMESTAMP(OpenTime)"
" FROM crs_grp_types"
" WHERE CrsCod=%ld AND GrpTypCod=%ld",
Gbl.CurrentCrs.Crs.CrsCod,GrpTyp->GrpTypCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get type of group");
/***** Count number of rows in result *****/
if (NumRows != 1)
@ -3056,16 +3047,14 @@ static void Grp_GetDataOfGroupTypeByCod (struct GroupType *GrpTyp)
static bool Grp_GetMultipleEnrolmentOfAGroupType (long GrpTypCod)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
bool MultipleEnrolment;
/***** Get data of a type of group from database *****/
if (asprintf (&Query,"SELECT Multiple FROM crs_grp_types WHERE GrpTypCod=%ld",
GrpTypCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get if type of group has multiple enrolment") != 1)
DB_BuildQuery ("SELECT Multiple FROM crs_grp_types WHERE GrpTypCod=%ld",
GrpTypCod);
if (DB_QuerySELECT_new (&mysql_res,"can not get if type of group has multiple enrolment") != 1)
Lay_ShowErrorAndExit ("Error when getting type of group.");
/***** Get multiple enrolment *****/
@ -3084,7 +3073,6 @@ static bool Grp_GetMultipleEnrolmentOfAGroupType (long GrpTypCod)
void Grp_GetDataOfGroupByCod (struct GroupData *GrpDat)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -3103,16 +3091,15 @@ void Grp_GetDataOfGroupByCod (struct GroupData *GrpDat)
if (GrpDat->GrpCod > 0)
{
/***** Get data of a group from database *****/
if (asprintf (&Query,"SELECT crs_grp_types.GrpTypCod,crs_grp_types.CrsCod,"
"crs_grp_types.GrpTypName,crs_grp_types.Multiple,"
"crs_grp.GrpName,crs_grp.MaxStudents,"
"crs_grp.Open,crs_grp.FileZones"
" FROM crs_grp,crs_grp_types"
" WHERE crs_grp.GrpCod=%ld"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod",
GrpDat->GrpCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get data of a group");
DB_BuildQuery ("SELECT crs_grp_types.GrpTypCod,crs_grp_types.CrsCod,"
"crs_grp_types.GrpTypName,crs_grp_types.Multiple,"
"crs_grp.GrpName,crs_grp.MaxStudents,"
"crs_grp.Open,crs_grp.FileZones"
" FROM crs_grp,crs_grp_types"
" WHERE crs_grp.GrpCod=%ld"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod",
GrpDat->GrpCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get data of a group");
if (NumRows == 1)
{
@ -3159,16 +3146,13 @@ void Grp_GetDataOfGroupByCod (struct GroupData *GrpDat)
static long Grp_GetTypeOfGroupOfAGroup (long GrpCod)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long GrpTypCod;
/***** Get data of a group from database *****/
if (asprintf (&Query,"SELECT GrpTypCod FROM crs_grp WHERE GrpCod=%ld",
GrpCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get the type of a group") != 1)
DB_BuildQuery ("SELECT GrpTypCod FROM crs_grp WHERE GrpCod=%ld",GrpCod);
if (DB_QuerySELECT_new (&mysql_res,"can not get the type of a group") != 1)
Lay_ShowErrorAndExit ("Error when getting group.");
/***** Get data of group *****/
@ -3244,23 +3228,21 @@ unsigned Grp_CountNumUsrsInGrp (Rol_Role_t Role,long GrpCod)
static unsigned Grp_CountNumUsrsInNoGrpsOfType (Rol_Role_t Role,long GrpTypCod)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumUsrs;
/***** Get number of users not belonging to groups of a type ******/
if (asprintf (&Query,"SELECT COUNT(UsrCod) FROM crs_usr"
" WHERE CrsCod=%ld AND Role=%u"
" AND UsrCod NOT IN"
" (SELECT DISTINCT crs_grp_usr.UsrCod"
" FROM crs_grp,crs_grp_usr"
" WHERE crs_grp.GrpTypCod=%ld"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod)",
Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Role,GrpTypCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QuerySELECT_free (Query,&mysql_res,"can not get the number of users"
" not belonging to groups of a type");
DB_BuildQuery ("SELECT COUNT(UsrCod) FROM crs_usr"
" WHERE CrsCod=%ld AND Role=%u"
" AND UsrCod NOT IN"
" (SELECT DISTINCT crs_grp_usr.UsrCod"
" FROM crs_grp,crs_grp_usr"
" WHERE crs_grp.GrpTypCod=%ld"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod)",
Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Role,GrpTypCod);
DB_QuerySELECT_new (&mysql_res,"can not get the number of users"
" not belonging to groups of a type");
/***** Get the number of users (row[0]) *****/
row = mysql_fetch_row (mysql_res);
@ -3281,20 +3263,18 @@ static unsigned Grp_CountNumUsrsInNoGrpsOfType (Rol_Role_t Role,long GrpTypCod)
static long Grp_GetFirstCodGrpIBelongTo (long GrpTypCod)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
long CodGrpIBelong;
/***** Get a group which I belong to from database *****/
if (asprintf (&Query,"SELECT crs_grp.GrpCod FROM crs_grp,crs_grp_usr"
" WHERE crs_grp.GrpTypCod=%ld"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld",
GrpTypCod,Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not check if you belong to a group");
DB_BuildQuery ("SELECT crs_grp.GrpCod FROM crs_grp,crs_grp_usr"
" WHERE crs_grp.GrpTypCod=%ld"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld",
GrpTypCod,Gbl.Usrs.Me.UsrDat.UsrCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not check if you belong to a group");
/***** Get the group *****/
if (NumRows == 0)
@ -3543,46 +3523,37 @@ static bool Grp_GetIfGrpIsAvailable (long GrpTypCod)
static void Grp_GetLstCodGrpsUsrBelongs (long CrsCod,long GrpTypCod,
long UsrCod,struct ListCodGrps *LstGrps)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumGrp;
/***** Get groups which a user belong to from database *****/
if (CrsCod < 0) // Query the groups from all the user's courses
{
if (asprintf (&Query,"SELECT GrpCod"
" FROM crs_grp_usr"
" WHERE UsrCod=%ld", // Groups will be unordered
UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
}
DB_BuildQuery ("SELECT GrpCod"
" FROM crs_grp_usr"
" WHERE UsrCod=%ld", // Groups will be unordered
UsrCod);
else if (GrpTypCod < 0) // Query the groups of any type in the course
{
if (asprintf (&Query,"SELECT crs_grp.GrpCod"
" FROM crs_grp_types,crs_grp,crs_grp_usr"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
Gbl.CurrentCrs.Crs.CrsCod,UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
}
DB_BuildQuery ("SELECT crs_grp.GrpCod"
" FROM crs_grp_types,crs_grp,crs_grp_usr"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
Gbl.CurrentCrs.Crs.CrsCod,UsrCod);
else // Query only the groups of specified type in the course
{
if (asprintf (&Query,"SELECT crs_grp.GrpCod"
" FROM crs_grp_types,crs_grp,crs_grp_usr"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp.GrpName",
Gbl.CurrentCrs.Crs.CrsCod,GrpTypCod,UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
}
LstGrps->NumGrps = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get the groups which a user belongs to");
DB_BuildQuery ("SELECT crs_grp.GrpCod"
" FROM crs_grp_types,crs_grp,crs_grp_usr"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp.GrpName",
Gbl.CurrentCrs.Crs.CrsCod,GrpTypCod,UsrCod);
LstGrps->NumGrps = (unsigned) DB_QuerySELECT_new (&mysql_res,
"can not get the groups which a user belongs to");
/***** Get the groups *****/
if (LstGrps->NumGrps)
@ -3612,23 +3583,21 @@ static void Grp_GetLstCodGrpsUsrBelongs (long CrsCod,long GrpTypCod,
void Grp_GetLstCodGrpsWithFileZonesIBelong (struct ListCodGrps *LstGrps)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumGrp;
/***** Get groups which I belong to from database *****/
if (asprintf (&Query,"SELECT crs_grp.GrpCod"
" FROM crs_grp_types,crs_grp,crs_grp_usr"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND crs_grp.FileZones='Y'"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
Gbl.CurrentCrs.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
LstGrps->NumGrps = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get the groups which I belong to");
DB_BuildQuery ("SELECT crs_grp.GrpCod"
" FROM crs_grp_types,crs_grp,crs_grp_usr"
" WHERE crs_grp_types.CrsCod=%ld"
" AND crs_grp_types.GrpTypCod=crs_grp.GrpTypCod"
" AND crs_grp.FileZones='Y'"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
Gbl.CurrentCrs.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod);
LstGrps->NumGrps = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get the groups which I belong to");
/***** Get the groups *****/
if (LstGrps->NumGrps)
@ -3674,7 +3643,6 @@ static bool Grp_CheckIfGrpIsInList (long GrpCod,struct ListCodGrps *LstGrps)
void Grp_GetNamesGrpsStdBelongsTo (long GrpTypCod,long UsrCod,char *GroupNames)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRow;
@ -3682,14 +3650,13 @@ void Grp_GetNamesGrpsStdBelongsTo (long GrpTypCod,long UsrCod,char *GroupNames)
size_t MaxLength = (Grp_MAX_BYTES_GROUP_NAME + 2) * Gbl.CurrentCrs.Grps.GrpTypes.NumGrpsTotal;
/***** Get the names of groups which a user belongs to, from database *****/
if (asprintf (&Query,"SELECT crs_grp.GrpName FROM crs_grp,crs_grp_usr"
" WHERE crs_grp.GrpTypCod=%ld"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp.GrpName",
GrpTypCod,UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get the names of groups a user belongs to");
DB_BuildQuery ("SELECT crs_grp.GrpName FROM crs_grp,crs_grp_usr"
" WHERE crs_grp.GrpTypCod=%ld"
" AND crs_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=%ld"
" ORDER BY crs_grp.GrpName",
GrpTypCod,UsrCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get the names of groups a user belongs to");
/***** Get the groups *****/
GroupNames[0] = '\0';

View File

@ -249,7 +249,6 @@ void Hld_EditHolidays (void)
void Hld_GetListHolidays (void)
{
char OrderBySubQuery[256];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumHld;
@ -270,31 +269,30 @@ void Hld_GetListHolidays (void)
sprintf (OrderBySubQuery,"StartDate,Place");
break;
}
if (asprintf (&Query,"(SELECT holidays.HldCod,holidays.PlcCod,"
"places.FullName as Place,HldTyp,"
"DATE_FORMAT(holidays.StartDate,'%%Y%%m%%d') AS StartDate,"
"DATE_FORMAT(holidays.EndDate,'%%Y%%m%%d') AS EndDate,"
"holidays.Name"
" FROM holidays,places"
" WHERE holidays.InsCod=%ld"
" AND holidays.PlcCod=places.PlcCod"
" AND places.InsCod=%ld)"
" UNION "
"(SELECT HldCod,PlcCod,'' as Place,HldTyp,"
"DATE_FORMAT(StartDate,'%%Y%%m%%d') AS StartDate,"
"DATE_FORMAT(EndDate,'%%Y%%m%%d') AS EndDate,Name"
" FROM holidays"
" WHERE InsCod=%ld"
" AND PlcCod NOT IN"
"(SELECT DISTINCT PlcCod FROM places WHERE InsCod=%ld))"
" ORDER BY %s",
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
OrderBySubQuery) < 0)
Lay_NotEnoughMemoryExit ();
if ((Gbl.Hlds.Num = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get holidays"))) // Holidays found...
DB_BuildQuery ("(SELECT holidays.HldCod,holidays.PlcCod,"
"places.FullName as Place,HldTyp,"
"DATE_FORMAT(holidays.StartDate,'%%Y%%m%%d') AS StartDate,"
"DATE_FORMAT(holidays.EndDate,'%%Y%%m%%d') AS EndDate,"
"holidays.Name"
" FROM holidays,places"
" WHERE holidays.InsCod=%ld"
" AND holidays.PlcCod=places.PlcCod"
" AND places.InsCod=%ld)"
" UNION "
"(SELECT HldCod,PlcCod,'' as Place,HldTyp,"
"DATE_FORMAT(StartDate,'%%Y%%m%%d') AS StartDate,"
"DATE_FORMAT(EndDate,'%%Y%%m%%d') AS EndDate,Name"
" FROM holidays"
" WHERE InsCod=%ld"
" AND PlcCod NOT IN"
"(SELECT DISTINCT PlcCod FROM places WHERE InsCod=%ld))"
" ORDER BY %s",
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
OrderBySubQuery);
if ((Gbl.Hlds.Num = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get holidays"))) // Holidays found...
{
/***** Create list of holidays *****/
if ((Gbl.Hlds.Lst = (struct Holiday *) calloc ((size_t) Gbl.Hlds.Num,sizeof (struct Holiday))) == NULL)
@ -361,7 +359,6 @@ void Hld_GetListHolidays (void)
static void Hld_GetDataOfHolidayByCod (struct Holiday *Hld)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -378,31 +375,30 @@ static void Hld_GetDataOfHolidayByCod (struct Holiday *Hld)
Lay_ShowErrorAndExit ("Wrong code of holiday.");
/***** Get data of holiday from database *****/
if (asprintf (&Query,"(SELECT holidays.PlcCod,places.FullName as Place,HldTyp,"
"DATE_FORMAT(holidays.StartDate,'%%Y%%m%%d'),"
"DATE_FORMAT(holidays.EndDate,'%%Y%%m%%d'),holidays.Name"
" FROM holidays,places"
" WHERE holidays.HldCod=%ld"
" AND holidays.InsCod=%ld"
" AND holidays.PlcCod=places.PlcCod"
" AND places.InsCod=%ld)"
" UNION "
"(SELECT PlcCod,'' as Place,HldTyp,"
"DATE_FORMAT(StartDate,'%%Y%%m%%d'),"
"DATE_FORMAT(EndDate,'%%Y%%m%%d'),Name"
" FROM holidays"
" WHERE HldCod=%ld"
" AND InsCod=%ld"
" AND PlcCod NOT IN"
"(SELECT DISTINCT PlcCod FROM places WHERE InsCod=%ld))",
Hld->HldCod,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
Hld->HldCod,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get data of a holiday")) // Holiday found...
DB_BuildQuery ("(SELECT holidays.PlcCod,places.FullName as Place,HldTyp,"
"DATE_FORMAT(holidays.StartDate,'%%Y%%m%%d'),"
"DATE_FORMAT(holidays.EndDate,'%%Y%%m%%d'),holidays.Name"
" FROM holidays,places"
" WHERE holidays.HldCod=%ld"
" AND holidays.InsCod=%ld"
" AND holidays.PlcCod=places.PlcCod"
" AND places.InsCod=%ld)"
" UNION "
"(SELECT PlcCod,'' as Place,HldTyp,"
"DATE_FORMAT(StartDate,'%%Y%%m%%d'),"
"DATE_FORMAT(EndDate,'%%Y%%m%%d'),Name"
" FROM holidays"
" WHERE HldCod=%ld"
" AND InsCod=%ld"
" AND PlcCod NOT IN"
"(SELECT DISTINCT PlcCod FROM places WHERE InsCod=%ld))",
Hld->HldCod,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
Hld->HldCod,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod);
if (DB_QuerySELECT_new (&mysql_res,"can not get data of a holiday")) // Holiday found...
{
/* Get row */
row = mysql_fetch_row (mysql_res);

View File

@ -327,220 +327,176 @@ static void Ind_GetParamNumIndicators (void)
static unsigned Ind_GetTableOfCourses (MYSQL_RES **mysql_res)
{
char *Query;
switch (Gbl.Scope.Current)
{
case Sco_SCOPE_SYS:
if (Gbl.Stat.DptCod >= 0) // 0 means another department
{
if (Gbl.Stat.DegTypCod > 0)
{
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 ();
}
DB_BuildQuery ("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);
else
{
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 ();
}
DB_BuildQuery ("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);
}
else
{
if (Gbl.Stat.DegTypCod > 0)
{
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 ();
}
DB_BuildQuery ("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);
else
{
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 ();
}
DB_BuildQuery ("SELECT degrees.FullName,courses.FullName,courses.CrsCod,courses.InsCrsCod"
" FROM degrees,courses"
" WHERE degrees.DegCod=courses.DegCod"
" ORDER BY degrees.FullName,courses.FullName");
}
break;
case Sco_SCOPE_CTY:
if (Gbl.Stat.DptCod >= 0) // 0 means another department
{
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 ();
}
DB_BuildQuery ("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);
else
{
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 ();
}
DB_BuildQuery ("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);
break;
case Sco_SCOPE_INS:
if (Gbl.Stat.DptCod >= 0) // 0 means another department
{
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 ();
}
DB_BuildQuery ("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);
else
{
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 ();
}
DB_BuildQuery ("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);
break;
case Sco_SCOPE_CTR:
if (Gbl.Stat.DptCod >= 0) // 0 means another department
{
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 ();
}
DB_BuildQuery ("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);
else
{
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 ();
}
DB_BuildQuery ("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);
break;
case Sco_SCOPE_DEG:
if (Gbl.Stat.DptCod >= 0) // 0 means another department
{
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 ();
}
DB_BuildQuery ("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);
else
{
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 ();
}
DB_BuildQuery ("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);
break;
case Sco_SCOPE_CRS:
if (Gbl.Stat.DptCod >= 0) // 0 means another department
{
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 ();
}
DB_BuildQuery ("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);
else
{
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 ();
}
DB_BuildQuery ("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);
break;
default:
Lay_WrongScopeExit ();
break;
}
return (unsigned) DB_QuerySELECT_free (Query,mysql_res,"can not get courses");
return (unsigned) DB_QuerySELECT_new (mysql_res,"can not get courses");
}
/*****************************************************************************/
@ -1433,16 +1389,13 @@ static unsigned Ind_GetAndUpdateNumIndicatorsCrs (long CrsCod)
int Ind_GetNumIndicatorsCrsFromDB (long CrsCod)
{
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 *****/
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"))
DB_BuildQuery ("SELECT NumIndicators FROM courses WHERE CrsCod=%ld",CrsCod);
if (DB_QuerySELECT_new (&mysql_res,"can not get number of indicators"))
{
/***** Get row *****/
row = mysql_fetch_row (mysql_res);
@ -1552,28 +1505,26 @@ 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;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumFiles;
/***** Get number of files in document zones of a course from database *****/
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");
DB_BuildQuery ("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_new (&mysql_res,"can not get the number of files");
/***** Get row *****/
row = mysql_fetch_row (mysql_res);
@ -1595,28 +1546,26 @@ 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;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumFiles;
/***** Get number of files in document zones of a course from database *****/
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");
DB_BuildQuery ("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_new (&mysql_res,"can not get the number of files");
/***** Get row *****/
row = mysql_fetch_row (mysql_res);
@ -1638,19 +1587,17 @@ 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;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumFiles;
/***** Get number of files in document zones of a course from database *****/
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");
DB_BuildQuery ("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_new (&mysql_res,"can not get the number of files");
/***** Get row *****/
row = mysql_fetch_row (mysql_res);
@ -1672,19 +1619,17 @@ 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;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumFiles;
/***** Get number of files in document zones of a course from database *****/
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");
DB_BuildQuery ("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_new (&mysql_res,"can not get the number of files");
/***** Get row *****/
row = mysql_fetch_row (mysql_res);

View File

@ -540,7 +540,6 @@ static bool Inf_CheckIfIHaveReadInfo (void)
bool Inf_GetIfIMustReadAnyCrsInfoInThisCrs (void)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRow,NumRows;
@ -553,15 +552,14 @@ bool Inf_GetIfIMustReadAnyCrsInfoInThisCrs (void)
Gbl.CurrentCrs.Info.MustBeRead[InfoType] = false;
/***** Get info types where students must read info *****/
if (asprintf (&Query,"SELECT InfoType FROM crs_info_src"
" WHERE CrsCod=%ld AND MustBeRead='Y'"
" AND InfoType NOT IN"
" (SELECT InfoType FROM crs_info_read"
" WHERE UsrCod=%ld AND CrsCod=%ld)",
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.Usrs.Me.UsrDat.UsrCod,Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get if you must read any course info");
DB_BuildQuery ("SELECT InfoType FROM crs_info_src"
" WHERE CrsCod=%ld AND MustBeRead='Y'"
" AND InfoType NOT IN"
" (SELECT InfoType FROM crs_info_read"
" WHERE UsrCod=%ld AND CrsCod=%ld)",
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.Usrs.Me.UsrDat.UsrCod,Gbl.CurrentCrs.Crs.CrsCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get if you must read any course info");
/***** Set must-be-read to true for each rown in result *****/
for (NumRow = 0;
@ -1542,17 +1540,15 @@ void Inf_SetInfoSrcIntoDB (Inf_InfoSrc_t InfoSrc)
Inf_InfoSrc_t Inf_GetInfoSrcFromDB (long CrsCod,Inf_InfoType_t InfoType)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
Inf_InfoSrc_t InfoSrc;
/***** Get info source for a specific type of info from database *****/
if (asprintf (&Query,"SELECT InfoSrc FROM crs_info_src"
" WHERE CrsCod=%ld AND InfoType='%s'",
CrsCod,Inf_NamesInDBForInfoType[InfoType]) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get info source"))
DB_BuildQuery ("SELECT InfoSrc FROM crs_info_src"
" WHERE CrsCod=%ld AND InfoType='%s'",
CrsCod,Inf_NamesInDBForInfoType[InfoType]);
if (DB_QuerySELECT_new (&mysql_res,"can not get info source"))
{
/* Get row */
row = mysql_fetch_row (mysql_res);
@ -1577,7 +1573,6 @@ void Inf_GetAndCheckInfoSrcFromDB (long CrsCod,
Inf_InfoType_t InfoType,
Inf_InfoSrc_t *InfoSrc,bool *MustBeRead)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -1587,11 +1582,10 @@ void Inf_GetAndCheckInfoSrcFromDB (long CrsCod,
*MustBeRead = false;
/***** Get info source for a specific type of info from database *****/
if (asprintf (&Query,"SELECT InfoSrc,MustBeRead FROM crs_info_src"
" WHERE CrsCod=%ld AND InfoType='%s'",
CrsCod,Inf_NamesInDBForInfoType[InfoType]) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get info source");
DB_BuildQuery ("SELECT InfoSrc,MustBeRead FROM crs_info_src"
" WHERE CrsCod=%ld AND InfoType='%s'",
CrsCod,Inf_NamesInDBForInfoType[InfoType]);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get info source");
/***** The result of the query must have one row or none *****/
if (NumRows == 1)

View File

@ -118,7 +118,6 @@ void Ins_SeeInsWithPendingCtrs (void)
extern const char *Txt_Institution;
extern const char *Txt_Centres_ABBREVIATION;
extern const char *Txt_There_are_no_institutions_with_requests_for_centres_to_be_confirmed;
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumInss;
@ -130,30 +129,29 @@ void Ins_SeeInsWithPendingCtrs (void)
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_INS_ADM:
if (asprintf (&Query,"SELECT centres.InsCod,COUNT(*)"
" FROM centres,ins_admin,institutions"
" WHERE (centres.Status & %u)<>0"
" AND centres.InsCod=ins_admin.InsCod AND ins_admin.UsrCod=%ld"
" AND centres.InsCod=institutions.InsCod"
" GROUP BY centres.InsCod ORDER BY institutions.ShortName",
(unsigned) Ctr_STATUS_BIT_PENDING,Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT centres.InsCod,COUNT(*)"
" FROM centres,ins_admin,institutions"
" WHERE (centres.Status & %u)<>0"
" AND centres.InsCod=ins_admin.InsCod AND ins_admin.UsrCod=%ld"
" AND centres.InsCod=institutions.InsCod"
" GROUP BY centres.InsCod ORDER BY institutions.ShortName",
(unsigned) Ctr_STATUS_BIT_PENDING,
Gbl.Usrs.Me.UsrDat.UsrCod);
break;
case Rol_SYS_ADM:
if (asprintf (&Query,"SELECT centres.InsCod,COUNT(*)"
" FROM centres,institutions"
" WHERE (centres.Status & %u)<>0"
" AND centres.InsCod=institutions.InsCod"
" GROUP BY centres.InsCod ORDER BY institutions.ShortName",
(unsigned) Ctr_STATUS_BIT_PENDING) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT centres.InsCod,COUNT(*)"
" FROM centres,institutions"
" WHERE (centres.Status & %u)<>0"
" AND centres.InsCod=institutions.InsCod"
" GROUP BY centres.InsCod ORDER BY institutions.ShortName",
(unsigned) Ctr_STATUS_BIT_PENDING);
break;
default: // Forbidden for other users
return;
}
/***** Get institutions *****/
if ((NumInss = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get institutions with pending centres")))
if ((NumInss = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get institutions with pending centres")))
{
/***** Start box and table *****/
Box_StartBoxTable (NULL,Txt_Institutions_with_pending_centres,NULL,
@ -965,7 +963,6 @@ static void Ins_PutIconToViewInstitutions (void)
void Ins_GetListInstitutions (long CtyCod,Ins_GetExtraData_t GetExtraData)
{
char OrderBySubQuery[256];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -976,12 +973,11 @@ void Ins_GetListInstitutions (long CtyCod,Ins_GetExtraData_t GetExtraData)
switch (GetExtraData)
{
case Ins_GET_BASIC_DATA:
if (asprintf (&Query,"SELECT InsCod,CtyCod,Status,RequesterUsrCod,ShortName,FullName,WWW"
" FROM institutions"
" WHERE CtyCod=%ld"
" ORDER BY FullName",
CtyCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT InsCod,CtyCod,Status,RequesterUsrCod,ShortName,FullName,WWW"
" FROM institutions"
" WHERE CtyCod=%ld"
" ORDER BY FullName",
CtyCod);
break;
case Ins_GET_EXTRA_DATA:
switch (Gbl.Inss.SelectedOrder)
@ -993,27 +989,26 @@ void Ins_GetListInstitutions (long CtyCod,Ins_GetExtraData_t GetExtraData)
sprintf (OrderBySubQuery,"NumUsrs DESC,FullName");
break;
}
if (asprintf (&Query,"(SELECT institutions.InsCod,institutions.CtyCod,"
"institutions.Status,institutions.RequesterUsrCod,"
"institutions.ShortName,institutions.FullName,"
"institutions.WWW,COUNT(*) AS NumUsrs"
" FROM institutions,usr_data"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=usr_data.InsCod"
" GROUP BY institutions.InsCod)"
" UNION "
"(SELECT InsCod,CtyCod,Status,RequesterUsrCod,ShortName,FullName,WWW,0 AS NumUsrs"
" FROM institutions"
" WHERE CtyCod=%ld"
" AND InsCod NOT IN"
" (SELECT DISTINCT InsCod FROM usr_data))"
" ORDER BY %s",
CtyCod,CtyCod,
OrderBySubQuery) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("(SELECT institutions.InsCod,institutions.CtyCod,"
"institutions.Status,institutions.RequesterUsrCod,"
"institutions.ShortName,institutions.FullName,"
"institutions.WWW,COUNT(*) AS NumUsrs"
" FROM institutions,usr_data"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=usr_data.InsCod"
" GROUP BY institutions.InsCod)"
" UNION "
"(SELECT InsCod,CtyCod,Status,RequesterUsrCod,ShortName,FullName,WWW,0 AS NumUsrs"
" FROM institutions"
" WHERE CtyCod=%ld"
" AND InsCod NOT IN"
" (SELECT DISTINCT InsCod FROM usr_data))"
" ORDER BY %s",
CtyCod,CtyCod,
OrderBySubQuery);
break;
}
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get institutions");
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get institutions");
if (NumRows) // Institutions found...
{
@ -1123,7 +1118,6 @@ void Ins_WriteInstitutionNameAndCty (long InsCod)
bool Ins_GetDataOfInstitutionByCod (struct Instit *Ins,
Ins_GetExtraData_t GetExtraData)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
bool InsFound = false;
@ -1143,13 +1137,12 @@ bool Ins_GetDataOfInstitutionByCod (struct Instit *Ins,
if (Ins->InsCod > 0)
{
/***** Get data of an institution from database *****/
if (asprintf (&Query,"SELECT CtyCod,Status,RequesterUsrCod,ShortName,FullName,WWW"
" FROM institutions WHERE InsCod=%ld",
Ins->InsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT CtyCod,Status,RequesterUsrCod,ShortName,FullName,WWW"
" FROM institutions WHERE InsCod=%ld",
Ins->InsCod);
/***** Count number of rows in result *****/
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get data of an institution")) // Institution found...
if (DB_QuerySELECT_new (&mysql_res,"can not get data of an institution")) // Institution found...
{
/* Get row */
row = mysql_fetch_row (mysql_res);
@ -1215,7 +1208,6 @@ void Ins_FlushCacheShortNameOfInstitution (void)
void Ins_GetShortNameOfInstitution (struct Instit *Ins)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -1237,10 +1229,9 @@ void Ins_GetShortNameOfInstitution (struct Instit *Ins)
/***** 3. Slow: get short name of institution from database *****/
Gbl.Cache.InstitutionShrtName.InsCod = Ins->InsCod;
if (asprintf (&Query,"SELECT ShortName FROM institutions WHERE InsCod=%ld",
Ins->InsCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get the short name of an institution") == 1)
DB_BuildQuery ("SELECT ShortName FROM institutions WHERE InsCod=%ld",
Ins->InsCod);
if (DB_QuerySELECT_new (&mysql_res,"can not get the short name of an institution") == 1)
{
/* Get the short name of this institution */
row = mysql_fetch_row (mysql_res);
@ -1273,7 +1264,6 @@ static void Ins_GetFullNameAndCtyOfInstitution (struct Instit *Ins,
char CtyName[Hie_MAX_BYTES_FULL_NAME + 1])
{
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -1298,13 +1288,12 @@ static void Ins_GetFullNameAndCtyOfInstitution (struct Instit *Ins,
/***** 3. Slow: get full name and country of institution from database *****/
Gbl.Cache.InstitutionFullNameAndCty.InsCod = Ins->InsCod;
if (asprintf (&Query,"SELECT institutions.FullName,countries.Name_%s"
" FROM institutions,countries"
" WHERE institutions.InsCod=%ld"
" AND institutions.CtyCod=countries.CtyCod",
Txt_STR_LANG_ID[Gbl.Prefs.Language],Ins->InsCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get the full name of an institution") == 1)
DB_BuildQuery ("SELECT institutions.FullName,countries.Name_%s"
" FROM institutions,countries"
" WHERE institutions.InsCod=%ld"
" AND institutions.CtyCod=countries.CtyCod",
Txt_STR_LANG_ID[Gbl.Prefs.Language],Ins->InsCod);
if (DB_QuerySELECT_new (&mysql_res,"can not get the full name of an institution") == 1)
{
/* Get row */
row = mysql_fetch_row (mysql_res);
@ -1354,7 +1343,6 @@ void Ins_FreeListInstitutions (void)
void Ins_WriteSelectorOfInstitution (void)
{
extern const char *Txt_Institution;
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumInss;
@ -1378,12 +1366,11 @@ void Ins_WriteSelectorOfInstitution (void)
if (Gbl.CurrentCty.Cty.CtyCod > 0)
{
/***** Get institutions of selected country from database *****/
if (asprintf (&Query,"SELECT DISTINCT InsCod,ShortName FROM institutions"
" WHERE CtyCod=%ld"
" ORDER BY ShortName",
Gbl.CurrentCty.Cty.CtyCod) < 0)
Lay_NotEnoughMemoryExit ();
NumInss = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get institutions");
DB_BuildQuery ("SELECT DISTINCT InsCod,ShortName FROM institutions"
" WHERE CtyCod=%ld"
" ORDER BY ShortName",
Gbl.CurrentCty.Cty.CtyCod);
NumInss = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get institutions");
/***** List institutions *****/
for (NumIns = 0;

View File

@ -254,7 +254,6 @@ void Lnk_EditLinks (void)
void Lnk_GetListLinks (void)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -264,10 +263,9 @@ void Lnk_GetListLinks (void)
if (Gbl.DB.DatabaseIsOpen)
{
/***** Get institutional links from database *****/
if (asprintf (&Query,"SELECT LnkCod,ShortName,FullName,WWW"
" FROM links ORDER BY ShortName") < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get institutional links");
DB_BuildQuery ("SELECT LnkCod,ShortName,FullName,WWW"
" FROM links ORDER BY ShortName");
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get institutional links");
if (NumRows) // Places found...
{
@ -318,7 +316,6 @@ void Lnk_GetListLinks (void)
void Lnk_GetDataOfLinkByCod (struct Link *Lnk)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -330,11 +327,10 @@ void Lnk_GetDataOfLinkByCod (struct Link *Lnk)
if (Lnk->LnkCod > 0)
{
/***** Get data of an institutional link from database *****/
if (asprintf (&Query,"SELECT ShortName,FullName,WWW FROM links"
" WHERE LnkCod=%ld",
Lnk->LnkCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get data of an institutional link");
DB_BuildQuery ("SELECT ShortName,FullName,WWW FROM links"
" WHERE LnkCod=%ld",
Lnk->LnkCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get data of an institutional link");
if (NumRows) // Link found...
{

View File

@ -257,18 +257,17 @@ static void Mai_GetListMailDomainsAllowedForNotif (void)
sprintf (OrderBySubQuery,"N DESC,Info,Domain");
break;
}
if (asprintf (&Query,"(SELECT mail_domains.MaiCod,mail_domains.Domain AS Domain,mail_domains.Info AS Info,T1.N AS N"
" FROM mail_domains,T1"
" WHERE mail_domains.Domain=T1.Domain COLLATE 'latin1_bin')"
" UNION "
"(SELECT MaiCod,Domain,Info,0 AS N"
" FROM mail_domains"
" WHERE Domain NOT IN (SELECT Domain COLLATE 'latin1_bin' FROM T2))"
" ORDER BY %s", // COLLATE necessary to avoid error in comparisons
OrderBySubQuery) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("(SELECT mail_domains.MaiCod,mail_domains.Domain AS Domain,mail_domains.Info AS Info,T1.N AS N"
" FROM mail_domains,T1"
" WHERE mail_domains.Domain=T1.Domain COLLATE 'latin1_bin')"
" UNION "
"(SELECT MaiCod,Domain,Info,0 AS N"
" FROM mail_domains"
" WHERE Domain NOT IN (SELECT Domain COLLATE 'latin1_bin' FROM T2))"
" ORDER BY %s", // COLLATE necessary to avoid error in comparisons
OrderBySubQuery);
if ((NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get mail domains"))) // Mail domains found...
if ((NumRows = DB_QuerySELECT_new (&mysql_res,"can not get mail domains"))) // Mail domains found...
{
Gbl.Mails.Num = (unsigned) NumRows;
@ -396,7 +395,6 @@ void Mai_WriteWarningEmailNotifications (void)
void Mai_GetDataOfMailDomainByCod (struct Mail *Mai)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -408,10 +406,9 @@ void Mai_GetDataOfMailDomainByCod (struct Mail *Mai)
if (Mai->MaiCod > 0)
{
/***** Get data of a mail domain from database *****/
if (asprintf (&Query,"SELECT Domain,Info FROM mail_domains WHERE MaiCod=%ld",
Mai->MaiCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get data of a mail domain");
DB_BuildQuery ("SELECT Domain,Info FROM mail_domains WHERE MaiCod=%ld",
Mai->MaiCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get data of a mail domain");
if (NumRows) // Mail found...
{
@ -1076,18 +1073,16 @@ bool Mai_CheckIfEmailIsValid (const char *Email)
bool Mai_GetEmailFromUsrCod (struct UsrData *UsrDat)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
bool Found;
/***** Get current (last updated) user's nickname from database *****/
if (asprintf (&Query,"SELECT E_mail,Confirmed FROM usr_emails"
" WHERE UsrCod=%ld ORDER BY CreatTime DESC LIMIT 1",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get email address");
DB_BuildQuery ("SELECT E_mail,Confirmed FROM usr_emails"
" WHERE UsrCod=%ld ORDER BY CreatTime DESC LIMIT 1",
UsrDat->UsrCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get email address");
if (NumRows == 0)
{
@ -1118,7 +1113,6 @@ bool Mai_GetEmailFromUsrCod (struct UsrData *UsrDat)
long Mai_GetUsrCodFromEmail (const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1])
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumUsrs;
@ -1129,12 +1123,11 @@ long Mai_GetUsrCodFromEmail (const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1])
{
/***** Get user's code from database *****/
/* Check if user code from table usr_emails is also in table usr_data */
if (asprintf (&Query,"SELECT usr_emails.UsrCod FROM usr_emails,usr_data"
" WHERE usr_emails.E_mail='%s'"
" AND usr_emails.UsrCod=usr_data.UsrCod",
Email) < 0)
Lay_NotEnoughMemoryExit ();
NumUsrs = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get user's code");
DB_BuildQuery ("SELECT usr_emails.UsrCod FROM usr_emails,usr_data"
" WHERE usr_emails.E_mail='%s'"
" AND usr_emails.UsrCod=usr_data.UsrCod",
Email);
NumUsrs = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get user's code");
if (NumUsrs == 0)
/* User not found for this email ==> set user's code to void */
UsrCod = -1L;
@ -1240,7 +1233,6 @@ static void Mai_ShowFormChangeUsrEmail (const struct UsrData *UsrDat,bool ItsMe,
extern const char *Txt_Email;
extern const char *Txt_Change_email;
extern const char *Txt_Save;
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumEmails;
@ -1259,12 +1251,11 @@ static void Mai_ShowFormChangeUsrEmail (const struct UsrData *UsrDat,bool ItsMe,
Ale_ShowAlert (Ale_WARNING,Txt_Please_confirm_your_email_address);
/***** Get my emails *****/
if (asprintf (&Query,"SELECT E_mail,Confirmed FROM usr_emails"
" WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
NumEmails = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get old email addresses of a user");
DB_BuildQuery ("SELECT E_mail,Confirmed FROM usr_emails"
" WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC",
UsrDat->UsrCod);
NumEmails = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get old email addresses of a user");
/***** Start table *****/
Tbl_StartTableWide (2);
@ -1840,11 +1831,10 @@ void Mai_ConfirmEmail (void)
Par_GetParToText ("key",MailKey,Mai_LENGTH_EMAIL_CONFIRM_KEY);
/***** Get user's code and email from key *****/
if (asprintf (&Query,"SELECT UsrCod,E_mail FROM pending_emails"
" WHERE MailKey='%s'",
MailKey) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get user's code and email from key"))
DB_BuildQuery ("SELECT UsrCod,E_mail FROM pending_emails"
" WHERE MailKey='%s'",
MailKey);
if (DB_QuerySELECT_new (&mysql_res,"can not get user's code and email from key"))
{
row = mysql_fetch_row (mysql_res);
@ -1871,11 +1861,10 @@ void Mai_ConfirmEmail (void)
/***** Check user's code and email
and get if email is already confirmed *****/
if (asprintf (&Query,"SELECT Confirmed FROM usr_emails"
" WHERE UsrCod=%ld AND E_mail='%s'",
UsrCod,Email) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get user's code and email"))
DB_BuildQuery ("SELECT Confirmed FROM usr_emails"
" WHERE UsrCod=%ld AND E_mail='%s'",
UsrCod,Email);
if (DB_QuerySELECT_new (&mysql_res,"can not get user's code and email"))
{
Confirmed = (row[0][0] == 'Y');

View File

@ -190,7 +190,6 @@ static void Mrk_GetNumRowsHeaderAndFooter (struct MarksProperties *Marks)
{
extern const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER];
long Cod = Brw_GetCodForFiles ();
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -199,18 +198,17 @@ static void Mrk_GetNumRowsHeaderAndFooter (struct MarksProperties *Marks)
/* There should be a single file in database.
If, due to an error, there is more than one file,
get the number of rows of the more recent file. */
if (asprintf (&Query,"SELECT marks_properties.%s,marks_properties.%s"
" FROM files,marks_properties"
" WHERE files.FileBrowser=%u AND files.Cod=%ld AND files.Path='%s'"
" AND files.FilCod=marks_properties.FilCod"
" ORDER BY files.FilCod DESC LIMIT 1", // On duplicate entries, get the more recent
Mrk_HeadOrFootStr[Brw_HEADER],
Mrk_HeadOrFootStr[Brw_FOOTER],
(unsigned) Brw_FileBrowserForDB_files[Gbl.FileBrowser.Type],
Cod,
Gbl.FileBrowser.Priv.FullPathInTree) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get the number of rows in header and footer");
DB_BuildQuery ("SELECT marks_properties.%s,marks_properties.%s"
" FROM files,marks_properties"
" WHERE files.FileBrowser=%u AND files.Cod=%ld AND files.Path='%s'"
" AND files.FilCod=marks_properties.FilCod"
" ORDER BY files.FilCod DESC LIMIT 1", // On duplicate entries, get the more recent
Mrk_HeadOrFootStr[Brw_HEADER],
Mrk_HeadOrFootStr[Brw_FOOTER],
(unsigned) Brw_FileBrowserForDB_files[Gbl.FileBrowser.Type],
Cod,
Gbl.FileBrowser.Priv.FullPathInTree);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get the number of rows in header and footer");
/***** The result of the query must have only one row *****/
if (NumRows == 1)
@ -736,7 +734,6 @@ void Mrk_GetNotifMyMarks (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
char **ContentStr,
long MrkCod,long UsrCod,bool GetContent)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
struct UsrData UsrDat;
@ -772,14 +769,13 @@ void Mrk_GetNotifMyMarks (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
ID_GetListIDsFromUsrCod (&UsrDat);
/***** Get subject of message from database *****/
if (asprintf (&Query,"SELECT files.FileBrowser,files.Cod,files.Path,"
"marks_properties.Header,marks_properties.Footer"
" FROM files,marks_properties"
" WHERE files.FilCod=%ld"
" AND files.FilCod=marks_properties.FilCod",
MrkCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get the number of rows in header and footer") == 1) // Result should have a unique row
DB_BuildQuery ("SELECT files.FileBrowser,files.Cod,files.Path,"
"marks_properties.Header,marks_properties.Footer"
" FROM files,marks_properties"
" WHERE files.FilCod=%ld"
" AND files.FilCod=marks_properties.FilCod",
MrkCod);
if (DB_QuerySELECT_new (&mysql_res,"can not get the number of rows in header and footer") == 1) // Result should have a unique row
{
/***** Get data of this file of marks *****/
row = mysql_fetch_row (mysql_res);

View File

@ -498,7 +498,6 @@ static void Msg_WriteFormSubjectAndContentMsgToUsrs (char Content[Cns_MAX_BYTES_
extern const char *Txt_MSG_Subject;
extern const char *Txt_MSG_Content;
extern const char *Txt_Original_message;
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -527,10 +526,9 @@ static void Msg_WriteFormSubjectAndContentMsgToUsrs (char Content[Cns_MAX_BYTES_
if (!SubjectAndContentComeFromForm)
{
/* Get subject and content of message from database */
if (asprintf (&Query,"SELECT Subject,Content FROM msg_content"
" WHERE MsgCod=%ld",MsgCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get message content");
DB_BuildQuery ("SELECT Subject,Content FROM msg_content"
" WHERE MsgCod=%ld",MsgCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get message content");
/* Result should have a unique row */
if (NumRows != 1)
@ -2530,7 +2528,6 @@ void Msg_PutHiddenParamsMsgsFilters (void)
void Msg_GetDistinctCoursesInMyMessages (void)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRow,NumRows;
@ -2540,28 +2537,26 @@ void Msg_GetDistinctCoursesInMyMessages (void)
switch (Gbl.Msg.TypeOfMessages)
{
case Msg_MESSAGES_RECEIVED:
if (asprintf (&Query,"SELECT DISTINCT courses.CrsCod,courses.ShortName"
" FROM msg_rcv,msg_snt,courses"
" WHERE msg_rcv.UsrCod=%ld"
" AND msg_rcv.MsgCod=msg_snt.MsgCod"
" AND msg_snt.CrsCod=courses.CrsCod"
" ORDER BY courses.ShortName",
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT DISTINCT courses.CrsCod,courses.ShortName"
" FROM msg_rcv,msg_snt,courses"
" WHERE msg_rcv.UsrCod=%ld"
" AND msg_rcv.MsgCod=msg_snt.MsgCod"
" AND msg_snt.CrsCod=courses.CrsCod"
" ORDER BY courses.ShortName",
Gbl.Usrs.Me.UsrDat.UsrCod);
break;
case Msg_MESSAGES_SENT:
if (asprintf (&Query,"SELECT DISTINCT courses.CrsCod,courses.ShortName"
" FROM msg_snt,courses"
" WHERE msg_snt.UsrCod=%ld"
" AND msg_snt.CrsCod=courses.CrsCod"
" ORDER BY courses.ShortName",
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT DISTINCT courses.CrsCod,courses.ShortName"
" FROM msg_snt,courses"
" WHERE msg_snt.UsrCod=%ld"
" AND msg_snt.CrsCod=courses.CrsCod"
" ORDER BY courses.ShortName",
Gbl.Usrs.Me.UsrDat.UsrCod);
break;
default: // Not aplicable here
break;
}
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get distinct courses in your messages");
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get distinct courses in your messages");
/***** Get distinct courses in messages from database *****/
Gbl.Msg.NumCourses = 0;
@ -2717,27 +2712,24 @@ static void Msg_GetMsgSntData (long MsgCod,long *CrsCod,long *UsrCod,
char Subject[Cns_MAX_BYTES_SUBJECT + 1],
bool *Deleted)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
/***** Get data of message from table msg_snt *****/
*Deleted = false;
if (asprintf (&Query,"SELECT CrsCod,UsrCod,UNIX_TIMESTAMP(CreatTime)"
" FROM msg_snt WHERE MsgCod=%ld",
MsgCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get data of a message");
DB_BuildQuery ("SELECT CrsCod,UsrCod,UNIX_TIMESTAMP(CreatTime)"
" FROM msg_snt WHERE MsgCod=%ld",
MsgCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get data of a message");
if (NumRows == 0) // If not result ==> sent message is deleted
{
/***** Get data of message from table msg_snt_deleted *****/
if (asprintf (&Query,"SELECT CrsCod,UsrCod,UNIX_TIMESTAMP(CreatTime)"
" FROM msg_snt_deleted WHERE MsgCod=%ld",
MsgCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get data of a message");
DB_BuildQuery ("SELECT CrsCod,UsrCod,UNIX_TIMESTAMP(CreatTime)"
" FROM msg_snt_deleted WHERE MsgCod=%ld",
MsgCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get data of a message");
*Deleted = true;
}
@ -2771,16 +2763,14 @@ static void Msg_GetMsgSntData (long MsgCod,long *CrsCod,long *UsrCod,
void Msg_GetMsgSubject (long MsgCod,char Subject[Cns_MAX_BYTES_SUBJECT + 1])
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
/***** Get subject of message from database *****/
if (asprintf (&Query,"SELECT Subject FROM msg_content WHERE MsgCod=%ld",MsgCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT Subject FROM msg_content WHERE MsgCod=%ld",MsgCod);
/***** Result should have a unique row *****/
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get the subject of a message") == 1)
if (DB_QuerySELECT_new (&mysql_res,"can not get the subject of a message") == 1)
{
/***** Get subject *****/
row = mysql_fetch_row (mysql_res);
@ -2801,17 +2791,15 @@ void Msg_GetMsgSubject (long MsgCod,char Subject[Cns_MAX_BYTES_SUBJECT + 1])
static void Msg_GetMsgContent (long MsgCod,char Content[Cns_MAX_BYTES_LONG_TEXT + 1],
struct Image *Image)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
/***** Get content of message from database *****/
if (asprintf (&Query,"SELECT Content,ImageName,ImageTitle,ImageURL"
" FROM msg_content WHERE MsgCod=%ld",
MsgCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get the content of a message");
DB_BuildQuery ("SELECT Content,ImageName,ImageTitle,ImageURL"
" FROM msg_content WHERE MsgCod=%ld",
MsgCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get the content of a message");
/***** Result should have a unique row *****/
if (NumRows != 1)
@ -2837,17 +2825,15 @@ static void Msg_GetMsgContent (long MsgCod,char Content[Cns_MAX_BYTES_LONG_TEXT
static void Msg_GetStatusOfSentMsg (long MsgCod,bool *Expanded)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
/***** Get if sent message has been replied/expanded from database *****/
if (asprintf (&Query,"SELECT Expanded FROM msg_snt"
" WHERE MsgCod=%ld AND UsrCod=%ld",
MsgCod,Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get if a sent message has been replied/expanded");
DB_BuildQuery ("SELECT Expanded FROM msg_snt"
" WHERE MsgCod=%ld AND UsrCod=%ld",
MsgCod,Gbl.Usrs.Me.UsrDat.UsrCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get if a sent message has been replied/expanded");
/***** Result should have a unique row *****/
if (NumRows != 1)
@ -2869,17 +2855,15 @@ static void Msg_GetStatusOfSentMsg (long MsgCod,bool *Expanded)
static void Msg_GetStatusOfReceivedMsg (long MsgCod,bool *Open,bool *Replied,bool *Expanded)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
/***** Get if received message has been replied/expanded from database *****/
if (asprintf (&Query,"SELECT Open,Replied,Expanded FROM msg_rcv"
" WHERE MsgCod=%ld AND UsrCod=%ld",
MsgCod,Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get if a received message has been replied/expanded");
DB_BuildQuery ("SELECT Open,Replied,Expanded FROM msg_rcv"
" WHERE MsgCod=%ld AND UsrCod=%ld",
MsgCod,Gbl.Usrs.Me.UsrDat.UsrCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get if a received message has been replied/expanded");
/***** Result should have a unique row *****/
if (NumRows != 1)
@ -3088,7 +3072,6 @@ void Msg_GetNotifMessage (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
char **ContentStr,long MsgCod,bool GetContent)
{
extern const char *Txt_MSG_Subject;
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
size_t Length;
@ -3097,12 +3080,11 @@ void Msg_GetNotifMessage (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
// This function may be called inside a web service, so don't report error
/***** Get subject of message from database *****/
if (asprintf (&Query,"SELECT Subject,Content FROM msg_content"
" WHERE MsgCod=%ld",
MsgCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT Subject,Content FROM msg_content"
" WHERE MsgCod=%ld",
MsgCod);
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get subject and content of a message") == 1) // Result should have a unique row
if (DB_QuerySELECT_new (&mysql_res,"can not get subject and content of a message") == 1) // Result should have a unique row
{
/***** Get subject and content of the message *****/
row = mysql_fetch_row (mysql_res);
@ -3457,19 +3439,18 @@ static void Msg_WriteMsgTo (long MsgCod)
NumRecipientsTotal = (unsigned) DB_QueryCOUNT_free (Query,"can not get number of recipients");
/***** Get recipients of a message from database *****/
if (asprintf (&Query,"(SELECT msg_rcv.UsrCod,'N',msg_rcv.Open,"
"usr_data.Surname1 AS S1,usr_data.Surname2 AS S2,usr_data.FirstName AS FN"
" FROM msg_rcv,usr_data"
" WHERE msg_rcv.MsgCod=%ld AND msg_rcv.UsrCod=usr_data.UsrCod)"
" UNION "
"(SELECT msg_rcv_deleted.UsrCod,'Y',msg_rcv_deleted.Open,"
"usr_data.Surname1 AS S1,usr_data.Surname2 AS S2,usr_data.FirstName AS FN"
" FROM msg_rcv_deleted,usr_data"
" WHERE msg_rcv_deleted.MsgCod=%ld AND msg_rcv_deleted.UsrCod=usr_data.UsrCod)"
" ORDER BY S1,S2,FN",
MsgCod,MsgCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRecipientsKnown = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get recipients of a message");
DB_BuildQuery ("(SELECT msg_rcv.UsrCod,'N',msg_rcv.Open,"
"usr_data.Surname1 AS S1,usr_data.Surname2 AS S2,usr_data.FirstName AS FN"
" FROM msg_rcv,usr_data"
" WHERE msg_rcv.MsgCod=%ld AND msg_rcv.UsrCod=usr_data.UsrCod)"
" UNION "
"(SELECT msg_rcv_deleted.UsrCod,'Y',msg_rcv_deleted.Open,"
"usr_data.Surname1 AS S1,usr_data.Surname2 AS S2,usr_data.FirstName AS FN"
" FROM msg_rcv_deleted,usr_data"
" WHERE msg_rcv_deleted.MsgCod=%ld AND msg_rcv_deleted.UsrCod=usr_data.UsrCod)"
" ORDER BY S1,S2,FN",
MsgCod,MsgCod);
NumRecipientsKnown = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get recipients of a message");
/***** Check number of recipients *****/
if (NumRecipientsTotal)
@ -3830,7 +3811,6 @@ void Msg_ListBannedUsrs (void)
extern const char *Txt_You_have_not_banned_any_sender;
extern const char *Txt_Banned_users;
extern const char *Txt_Sender_banned_click_to_unban_him;
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumUsr,NumUsrs;
@ -3839,13 +3819,12 @@ void Msg_ListBannedUsrs (void)
char PhotoURL[PATH_MAX + 1];
/***** Get my banned users *****/
if (asprintf (&Query,"SELECT msg_banned.FromUsrCod FROM msg_banned,usr_data"
" WHERE msg_banned.ToUsrCod=%ld"
" AND msg_banned.FromUsrCod=usr_data.UsrCod"
" ORDER BY usr_data.Surname1,usr_data.Surname2,usr_data.FirstName",
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
NumUsrs = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get banned users");
DB_BuildQuery ("SELECT msg_banned.FromUsrCod FROM msg_banned,usr_data"
" WHERE msg_banned.ToUsrCod=%ld"
" AND msg_banned.FromUsrCod=usr_data.UsrCod"
" ORDER BY usr_data.Surname1,usr_data.Surname2,usr_data.FirstName",
Gbl.Usrs.Me.UsrDat.UsrCod);
NumUsrs = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get banned users");
if (NumUsrs == 0) // If not result ==> sent message is deleted
Ale_ShowAlert (Ale_INFO,Txt_You_have_not_banned_any_sender);

View File

@ -205,7 +205,6 @@ static void Net_GetMyWebsAndSocialNetsFromForm (void);
void Net_ShowWebsAndSocialNets (const struct UsrData *UsrDat)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
Net_WebsAndSocialNetworks_t NumURL;
@ -224,13 +223,12 @@ void Net_ShowWebsAndSocialNets (const struct UsrData *UsrDat)
NumURL++)
{
/***** Get user's web / social network from database *****/
if (asprintf (&Query,"SELECT URL FROM usr_webs"
" WHERE UsrCod=%ld AND Web='%s'",
UsrDat->UsrCod,Net_WebsAndSocialNetworksDB[NumURL]) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT URL FROM usr_webs"
" WHERE UsrCod=%ld AND Web='%s'",
UsrDat->UsrCod,Net_WebsAndSocialNetworksDB[NumURL]);
/***** Check if exists the web / social network for this user *****/
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get user's web / social network"))
if (DB_QuerySELECT_new (&mysql_res,"can not get user's web / social network"))
{
/* Get URL */
row = mysql_fetch_row (mysql_res);
@ -281,7 +279,6 @@ void Net_ShowFormMyWebsAndSocialNets (void)
extern const char *Hlp_PROFILE_Webs;
extern const char *The_ClassForm[The_NUM_THEMES];
extern const char *Txt_Webs_social_networks;
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
Net_WebsAndSocialNetworks_t NumURL;
@ -304,14 +301,13 @@ void Net_ShowFormMyWebsAndSocialNets (void)
NumURL++)
{
/***** Get user's web / social network from database *****/
if (asprintf (&Query,"SELECT URL FROM usr_webs"
" WHERE UsrCod=%ld AND Web='%s'",
Gbl.Usrs.Me.UsrDat.UsrCod,
Net_WebsAndSocialNetworksDB[NumURL]) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT URL FROM usr_webs"
" WHERE UsrCod=%ld AND Web='%s'",
Gbl.Usrs.Me.UsrDat.UsrCod,
Net_WebsAndSocialNetworksDB[NumURL]);
/***** Check number of rows in result *****/
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get user's web / social network"))
if (DB_QuerySELECT_new (&mysql_res,"can not get user's web / social network"))
{
/***** Read the data comunes a all the users *****/
row = mysql_fetch_row (mysql_res);
@ -442,7 +438,6 @@ void Net_ShowWebAndSocialNetworksStats (void)
extern const char *Txt_Web_social_network;
extern const char *Txt_No_of_users;
extern const char *Txt_PERCENT_of_users;
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRows;
@ -463,83 +458,77 @@ void Net_ShowWebAndSocialNetworksStats (void)
switch (Gbl.Scope.Current)
{
case Sco_SCOPE_SYS:
if (asprintf (&Query,"SELECT Web,COUNT(*) AS N"
" FROM usr_webs"
" GROUP BY Web"
" ORDER BY N DESC,Web") < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT Web,COUNT(*) AS N"
" FROM usr_webs"
" GROUP BY Web"
" ORDER BY N DESC,Web");
break;
case Sco_SCOPE_CTY:
if (asprintf (&Query,"SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM institutions,centres,degrees,courses,crs_usr,usr_webs"
" 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=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentCty.Cty.CtyCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM institutions,centres,degrees,courses,crs_usr,usr_webs"
" 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=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentCty.Cty.CtyCod);
break;
case Sco_SCOPE_INS:
if (asprintf (&Query,"SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM centres,degrees,courses,crs_usr,usr_webs"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentIns.Ins.InsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM centres,degrees,courses,crs_usr,usr_webs"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentIns.Ins.InsCod);
break;
case Sco_SCOPE_CTR:
if (asprintf (&Query,"SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM degrees,courses,crs_usr,usr_webs"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM degrees,courses,crs_usr,usr_webs"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentCtr.Ctr.CtrCod);
break;
case Sco_SCOPE_DEG:
if (asprintf (&Query,"SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM courses,crs_usr,usr_webs"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentDeg.Deg.DegCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM courses,crs_usr,usr_webs"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentDeg.Deg.DegCod);
break;
case Sco_SCOPE_CRS:
if (asprintf (&Query,"SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM crs_usr,usr_webs"
" WHERE crs_usr.CrsCod=%ld"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM crs_usr,usr_webs"
" WHERE crs_usr.CrsCod=%ld"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentCrs.Crs.CrsCod);
break;
default:
Lay_WrongScopeExit ();
break;
}
NumRows = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,
"can not get number of users with webs / social networks");
NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,
"can not get number of users with webs / social networks");
/***** Start box and table *****/
Box_StartBoxTable (NULL,Txt_STAT_USE_STAT_TYPES[Sta_SOCIAL_NETWORKS],NULL,

View File

@ -115,17 +115,15 @@ bool Nck_CheckIfNickWithArrobaIsValid (const char *NicknameWithArroba)
bool Nck_GetNicknameFromUsrCod (long UsrCod,
char Nickname[Nck_MAX_BYTES_NICKNAME_WITHOUT_ARROBA + 1])
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
bool Found;
/***** Get current (last updated) user's nickname from database *****/
if (asprintf (&Query,"SELECT Nickname FROM usr_nicknames"
" WHERE UsrCod=%ld ORDER BY CreatTime DESC LIMIT 1",
UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get nickname"))
DB_BuildQuery ("SELECT Nickname FROM usr_nicknames"
" WHERE UsrCod=%ld ORDER BY CreatTime DESC LIMIT 1",
UsrCod);
if (DB_QuerySELECT_new (&mysql_res,"can not get nickname"))
{
/* Get nickname */
row = mysql_fetch_row (mysql_res);
@ -154,7 +152,6 @@ bool Nck_GetNicknameFromUsrCod (long UsrCod,
long Nck_GetUsrCodFromNickname (const char *Nickname)
{
char NicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long UsrCod = -1L;
@ -169,13 +166,12 @@ long Nck_GetUsrCodFromNickname (const char *Nickname)
/***** Get user's code from database *****/
/* Check if user code from table usr_nicknames is also in table usr_data */
if (asprintf (&Query,"SELECT usr_nicknames.UsrCod"
" FROM usr_nicknames,usr_data"
" WHERE usr_nicknames.Nickname='%s'"
" AND usr_nicknames.UsrCod=usr_data.UsrCod",
NicknameWithoutArroba) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get user's code"))
DB_BuildQuery ("SELECT usr_nicknames.UsrCod"
" FROM usr_nicknames,usr_data"
" WHERE usr_nicknames.Nickname='%s'"
" AND usr_nicknames.UsrCod=usr_data.UsrCod",
NicknameWithoutArroba);
if (DB_QuerySELECT_new (&mysql_res,"can not get user's code"))
{
/* Get row */
row = mysql_fetch_row (mysql_res);
@ -230,7 +226,6 @@ static void Nck_ShowFormChangeUsrNickname (const struct UsrData *UsrDat,bool Its
extern const char *Txt_New_nickname;
extern const char *Txt_Change_nickname;
extern const char *Txt_Save;
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
char StrRecordWidth[10 + 1];
@ -242,12 +237,11 @@ static void Nck_ShowFormChangeUsrNickname (const struct UsrData *UsrDat,bool Its
Lay_StartSection (Nck_NICKNAME_SECTION_ID);
/***** Get my nicknames *****/
if (asprintf (&Query,"SELECT Nickname FROM usr_nicknames"
" WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
NumNicks = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get nicknames of a user");
DB_BuildQuery ("SELECT Nickname FROM usr_nicknames"
" WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC",
UsrDat->UsrCod);
NumNicks = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get nicknames of a user");
/***** Start box *****/
snprintf (StrRecordWidth,sizeof (StrRecordWidth),

View File

@ -356,7 +356,6 @@ void Not_ShowNotices (Not_Listing_t TypeNoticesListing)
extern const char *Txt_All_notices;
extern const char *Txt_Notices;
extern const char *Txt_No_notices;
char *Query = NULL;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
char StrWidth[10 + 2 + 1];
@ -377,24 +376,22 @@ void Not_ShowNotices (Not_Listing_t TypeNoticesListing)
switch (TypeNoticesListing)
{
case Not_LIST_BRIEF_NOTICES:
if (asprintf (&Query,"SELECT NotCod,UNIX_TIMESTAMP(CreatTime) AS F,UsrCod,Content,Status"
" FROM notices"
" WHERE CrsCod=%ld AND Status=%u"
" ORDER BY CreatTime DESC",
Gbl.CurrentCrs.Crs.CrsCod,
(unsigned) Not_ACTIVE_NOTICE) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT NotCod,UNIX_TIMESTAMP(CreatTime) AS F,UsrCod,Content,Status"
" FROM notices"
" WHERE CrsCod=%ld AND Status=%u"
" ORDER BY CreatTime DESC",
Gbl.CurrentCrs.Crs.CrsCod,
(unsigned) Not_ACTIVE_NOTICE);
break;
case Not_LIST_FULL_NOTICES:
if (asprintf (&Query,"SELECT NotCod,UNIX_TIMESTAMP(CreatTime) AS F,UsrCod,Content,Status"
DB_BuildQuery ("SELECT NotCod,UNIX_TIMESTAMP(CreatTime) AS F,UsrCod,Content,Status"
" FROM notices"
" WHERE CrsCod=%ld"
" ORDER BY CreatTime DESC",
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
Gbl.CurrentCrs.Crs.CrsCod);
break;
}
NumNotices = DB_QuerySELECT_free (Query,&mysql_res,"can not get notices from database");
NumNotices = DB_QuerySELECT_new (&mysql_res,"can not get notices from database");
if (TypeNoticesListing == Not_LIST_FULL_NOTICES)
{
@ -550,7 +547,6 @@ static void Not_PutButtonToAddNewNotice (void)
static void Not_GetDataAndShowNotice (long NotCod)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
char Content[Cns_MAX_BYTES_TEXT + 1];
@ -560,13 +556,12 @@ static void Not_GetDataAndShowNotice (long NotCod)
Not_Status_t Status;
/***** Get notice data from database *****/
if (asprintf (&Query,"SELECT UNIX_TIMESTAMP(CreatTime) AS F,UsrCod,Content,Status"
" FROM notices"
" WHERE NotCod=%ld AND CrsCod=%ld",
NotCod,
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get notice from database"))
DB_BuildQuery ("SELECT UNIX_TIMESTAMP(CreatTime) AS F,UsrCod,Content,Status"
" FROM notices"
" WHERE NotCod=%ld AND CrsCod=%ld",
NotCod,
Gbl.CurrentCrs.Crs.CrsCod);
if (DB_QuerySELECT_new (&mysql_res,"can not get notice from database"))
{
row = mysql_fetch_row (mysql_res);
@ -766,7 +761,6 @@ void Not_GetSummaryAndContentNotice (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
char **ContentStr,
long NotCod,bool GetContent)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
size_t Length;
@ -775,10 +769,8 @@ void Not_GetSummaryAndContentNotice (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
// This function may be called inside a web service, so don't report error
/***** Get subject of message from database *****/
if (asprintf (&Query,"SELECT Content FROM notices WHERE NotCod=%ld",
NotCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get content of notice") == 1) // Result should have a unique row
DB_BuildQuery ("SELECT Content FROM notices WHERE NotCod=%ld",NotCod);
if (DB_QuerySELECT_new (&mysql_res,"can not get content of notice") == 1) // Result should have a unique row
{
/***** Get sumary / content *****/
row = mysql_fetch_row (mysql_res);
@ -818,7 +810,6 @@ void Not_GetSummaryAndContentNotice (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
unsigned Not_GetNumNotices (Sco_Scope_t Scope,Not_Status_t Status,unsigned *NumNotif)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumNotices;
@ -827,72 +818,66 @@ unsigned Not_GetNumNotices (Sco_Scope_t Scope,Not_Status_t Status,unsigned *NumN
switch (Scope)
{
case Sco_SCOPE_SYS:
if (asprintf (&Query,"SELECT COUNT(*),SUM(NumNotif)"
" FROM notices"
" WHERE Status=%u",
Status) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*),SUM(NumNotif)"
" FROM notices"
" WHERE Status=%u",
Status);
break;
case Sco_SCOPE_CTY:
if (asprintf (&Query,"SELECT COUNT(*),SUM(notices.NumNotif)"
" FROM institutions,centres,degrees,courses,notices"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=notices.CrsCod"
" AND notices.Status=%u",
Gbl.CurrentCty.Cty.CtyCod,
Status) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*),SUM(notices.NumNotif)"
" FROM institutions,centres,degrees,courses,notices"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=notices.CrsCod"
" AND notices.Status=%u",
Gbl.CurrentCty.Cty.CtyCod,
Status);
break;
case Sco_SCOPE_INS:
if (asprintf (&Query,"SELECT COUNT(*),SUM(notices.NumNotif)"
" FROM centres,degrees,courses,notices"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=notices.CrsCod"
" AND notices.Status=%u",
Gbl.CurrentIns.Ins.InsCod,
Status) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*),SUM(notices.NumNotif)"
" FROM centres,degrees,courses,notices"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=notices.CrsCod"
" AND notices.Status=%u",
Gbl.CurrentIns.Ins.InsCod,
Status);
break;
case Sco_SCOPE_CTR:
if (asprintf (&Query,"SELECT COUNT(*),SUM(notices.NumNotif)"
" FROM degrees,courses,notices"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=notices.CrsCod"
" AND notices.Status=%u",
Gbl.CurrentCtr.Ctr.CtrCod,
Status) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*),SUM(notices.NumNotif)"
" FROM degrees,courses,notices"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=notices.CrsCod"
" AND notices.Status=%u",
Gbl.CurrentCtr.Ctr.CtrCod,
Status);
break;
case Sco_SCOPE_DEG:
if (asprintf (&Query,"SELECT COUNT(*),SUM(notices.NumNotif)"
" FROM courses,notices"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=notices.CrsCod"
" AND notices.Status=%u",
Gbl.CurrentDeg.Deg.DegCod,
Status) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*),SUM(notices.NumNotif)"
" FROM courses,notices"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=notices.CrsCod"
" AND notices.Status=%u",
Gbl.CurrentDeg.Deg.DegCod,
Status);
break;
case Sco_SCOPE_CRS:
if (asprintf (&Query,"SELECT COUNT(*),SUM(NumNotif)"
" FROM notices"
" WHERE CrsCod=%ld"
" AND Status=%u",
Gbl.CurrentCrs.Crs.CrsCod,
Status) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*),SUM(NumNotif)"
" FROM notices"
" WHERE CrsCod=%ld"
" AND Status=%u",
Gbl.CurrentCrs.Crs.CrsCod,
Status);
break;
default:
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of notices");
DB_QuerySELECT_new (&mysql_res,"can not get number of notices");
/***** Get number of notices *****/
row = mysql_fetch_row (mysql_res);
@ -922,7 +907,6 @@ unsigned Not_GetNumNotices (Sco_Scope_t Scope,Not_Status_t Status,unsigned *NumN
unsigned Not_GetNumNoticesDeleted (Sco_Scope_t Scope,unsigned *NumNotif)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumNotices;
@ -931,60 +915,54 @@ unsigned Not_GetNumNoticesDeleted (Sco_Scope_t Scope,unsigned *NumNotif)
switch (Scope)
{
case Sco_SCOPE_SYS:
if (asprintf (&Query,"SELECT COUNT(*),SUM(NumNotif)"
" FROM notices_deleted") < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*),SUM(NumNotif)"
" FROM notices_deleted");
break;
case Sco_SCOPE_CTY:
if (asprintf (&Query,"SELECT COUNT(*),SUM(notices_deleted.NumNotif)"
" FROM institutions,centres,degrees,courses,notices_deleted"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=notices_deleted.CrsCod",
Gbl.CurrentCty.Cty.CtyCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*),SUM(notices_deleted.NumNotif)"
" FROM institutions,centres,degrees,courses,notices_deleted"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=notices_deleted.CrsCod",
Gbl.CurrentCty.Cty.CtyCod);
break;
case Sco_SCOPE_INS:
if (asprintf (&Query,"SELECT COUNT(*),SUM(notices_deleted.NumNotif)"
" FROM centres,degrees,courses,notices_deleted"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=notices_deleted.CrsCod",
Gbl.CurrentIns.Ins.InsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*),SUM(notices_deleted.NumNotif)"
" FROM centres,degrees,courses,notices_deleted"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=notices_deleted.CrsCod",
Gbl.CurrentIns.Ins.InsCod);
break;
case Sco_SCOPE_CTR:
if (asprintf (&Query,"SELECT COUNT(*),SUM(notices_deleted.NumNotif)"
" FROM degrees,courses,notices_deleted"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=notices_deleted.CrsCod",
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*),SUM(notices_deleted.NumNotif)"
" FROM degrees,courses,notices_deleted"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=notices_deleted.CrsCod",
Gbl.CurrentCtr.Ctr.CtrCod);
break;
case Sco_SCOPE_DEG:
if (asprintf (&Query,"SELECT COUNT(*),SUM(notices_deleted.NumNotif)"
" FROM courses,notices_deleted"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=notices_deleted.CrsCod",
Gbl.CurrentDeg.Deg.DegCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*),SUM(notices_deleted.NumNotif)"
" FROM courses,notices_deleted"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=notices_deleted.CrsCod",
Gbl.CurrentDeg.Deg.DegCod);
break;
case Sco_SCOPE_CRS:
if (asprintf (&Query,"SELECT COUNT(*),SUM(NumNotif)"
" FROM notices_deleted"
" WHERE CrsCod=%ld",
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*),SUM(NumNotif)"
" FROM notices_deleted"
" WHERE CrsCod=%ld",
Gbl.CurrentCrs.Crs.CrsCod);
break;
default:
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of deleted notices");
DB_QuerySELECT_new (&mysql_res,"can not get number of deleted notices");
/***** Get number of notices *****/
row = mysql_fetch_row (mysql_res);

View File

@ -1220,7 +1220,6 @@ void Ntf_MarkNotifFilesInGroupAsRemoved (long GrpCod)
unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
{
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRow;
@ -1244,46 +1243,42 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
case Brw_ADMI_DOC_CRS:
case Brw_ADMI_SHR_CRS:
case Brw_ADMI_MRK_CRS: // Notify all users in course except me
if (asprintf (&Query,"SELECT UsrCod FROM crs_usr"
" WHERE CrsCod=%ld"
" AND UsrCod<>%ld",
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT UsrCod FROM crs_usr"
" WHERE CrsCod=%ld"
" AND UsrCod<>%ld",
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
break;
case Brw_ADMI_TCH_CRS: // Notify all teachers in course except me
if (asprintf (&Query,"SELECT UsrCod FROM crs_usr"
" WHERE CrsCod=%ld"
" AND UsrCod<>%ld"
" AND Role=%u", // Notify teachers only
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Rol_TCH) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT UsrCod FROM crs_usr"
" WHERE CrsCod=%ld"
" AND UsrCod<>%ld"
" AND Role=%u", // Notify teachers only
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Rol_TCH);
break;
case Brw_ADMI_DOC_GRP:
case Brw_ADMI_SHR_GRP:
case Brw_ADMI_MRK_GRP: // Notify all users in group except me
if (asprintf (&Query,"SELECT UsrCod FROM crs_grp_usr"
" WHERE crs_grp_usr.GrpCod=%ld"
" AND crs_grp_usr.UsrCod<>%ld",
Gbl.CurrentCrs.Grps.GrpCod,
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT UsrCod FROM crs_grp_usr"
" WHERE crs_grp_usr.GrpCod=%ld"
" AND crs_grp_usr.UsrCod<>%ld",
Gbl.CurrentCrs.Grps.GrpCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
break;
case Brw_ADMI_TCH_GRP: // Notify all teachers in group except me
if (asprintf (&Query,"SELECT crs_grp_usr.UsrCod"
" FROM crs_grp_usr,crs_grp,crs_grp_types,crs_usr"
" WHERE crs_grp_usr.GrpCod=%ld"
" AND crs_grp_usr.UsrCod<>%ld"
" AND crs_grp_usr.GrpCod=crs_grp.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u", // Notify teachers only
Gbl.CurrentCrs.Grps.GrpCod,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Rol_TCH) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT crs_grp_usr.UsrCod"
" FROM crs_grp_usr,crs_grp,crs_grp_types,crs_usr"
" WHERE crs_grp_usr.GrpCod=%ld"
" AND crs_grp_usr.UsrCod<>%ld"
" AND crs_grp_usr.GrpCod=crs_grp.GrpCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u", // Notify teachers only
Gbl.CurrentCrs.Grps.GrpCod,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Rol_TCH);
break;
default: // This function should not be called in other cases
return 0;
@ -1293,30 +1288,28 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
// 1. If the assignment is available for the whole course ==> get all users enroled in the course except me
// 2. If the assignment is available only for some groups ==> get all users who belong to any of the groups except me
// Cases 1 and 2 are mutually exclusive, so the union returns the case 1 or 2
if (asprintf (&Query,"(SELECT crs_usr.UsrCod"
" FROM assignments,crs_usr"
" WHERE assignments.AsgCod=%ld"
" AND assignments.AsgCod NOT IN"
" (SELECT AsgCod FROM asg_grp WHERE AsgCod=%ld)"
" AND assignments.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod<>%ld)"
" UNION "
"(SELECT DISTINCT crs_grp_usr.UsrCod"
" FROM asg_grp,crs_grp_usr"
" WHERE asg_grp.AsgCod=%ld"
" AND asg_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod<>%ld)",
Cod,Cod,Gbl.Usrs.Me.UsrDat.UsrCod,
Cod,Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("(SELECT crs_usr.UsrCod"
" FROM assignments,crs_usr"
" WHERE assignments.AsgCod=%ld"
" AND assignments.AsgCod NOT IN"
" (SELECT AsgCod FROM asg_grp WHERE AsgCod=%ld)"
" AND assignments.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod<>%ld)"
" UNION "
"(SELECT DISTINCT crs_grp_usr.UsrCod"
" FROM asg_grp,crs_grp_usr"
" WHERE asg_grp.AsgCod=%ld"
" AND asg_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod<>%ld)",
Cod,Cod,Gbl.Usrs.Me.UsrDat.UsrCod,
Cod,Gbl.Usrs.Me.UsrDat.UsrCod);
break;
case Ntf_EVENT_EXAM_ANNOUNCEMENT:
case Ntf_EVENT_NOTICE:
if (asprintf (&Query,"SELECT UsrCod FROM crs_usr"
" WHERE CrsCod=%ld AND UsrCod<>%ld",
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT UsrCod FROM crs_usr"
" WHERE CrsCod=%ld AND UsrCod<>%ld",
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
break;
case Ntf_EVENT_ENROLMENT_STD: // This function should not be called in this case
case Ntf_EVENT_ENROLMENT_NET: // This function should not be called in this case
@ -1326,14 +1319,13 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
if (Gbl.CurrentCrs.Crs.NumUsrs[Rol_TCH])
{
// If this course has teachers ==> send notification to teachers
if (asprintf (&Query,"SELECT UsrCod FROM crs_usr"
" WHERE CrsCod=%ld"
" AND UsrCod<>%ld"
" AND Role=%u", // Notify teachers only
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Rol_TCH) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT UsrCod FROM crs_usr"
" WHERE CrsCod=%ld"
" AND UsrCod<>%ld"
" AND Role=%u", // Notify teachers only
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Rol_TCH);
}
else // Course without teachers
{
@ -1341,28 +1333,26 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
// and I want to be a teacher (checked before calling this function
// to not send requests to be a student to admins)
// ==> send notification to administrators or superusers
if (asprintf (&Query,"SELECT UsrCod FROM admin"
" WHERE (Scope='%s'"
" OR (Scope='%s' AND Cod=%ld)"
" OR (Scope='%s' AND Cod=%ld)"
" OR (Scope='%s' AND Cod=%ld))"
" AND UsrCod<>%ld",
Sco_ScopeDB[Sco_SCOPE_SYS],
Sco_ScopeDB[Sco_SCOPE_INS],Gbl.CurrentIns.Ins.InsCod,
Sco_ScopeDB[Sco_SCOPE_CTR],Gbl.CurrentCtr.Ctr.CtrCod,
Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentDeg.Deg.DegCod,
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT UsrCod FROM admin"
" WHERE (Scope='%s'"
" OR (Scope='%s' AND Cod=%ld)"
" OR (Scope='%s' AND Cod=%ld)"
" OR (Scope='%s' AND Cod=%ld))"
" AND UsrCod<>%ld",
Sco_ScopeDB[Sco_SCOPE_SYS],
Sco_ScopeDB[Sco_SCOPE_INS],Gbl.CurrentIns.Ins.InsCod,
Sco_ScopeDB[Sco_SCOPE_CTR],Gbl.CurrentCtr.Ctr.CtrCod,
Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentDeg.Deg.DegCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
}
break;
case Ntf_EVENT_TIMELINE_COMMENT: // New comment to one of my social notes or comments
// Cod is the code of the social publishing
if (asprintf (&Query,"SELECT DISTINCT(PublisherCod) FROM social_pubs"
" WHERE NotCod = (SELECT NotCod FROM social_pubs"
" WHERE PubCod=%ld)"
" AND PublisherCod<>%ld",
Cod,Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT DISTINCT(PublisherCod) FROM social_pubs"
" WHERE NotCod = (SELECT NotCod FROM social_pubs"
" WHERE PubCod=%ld)"
" AND PublisherCod<>%ld",
Cod,Gbl.Usrs.Me.UsrDat.UsrCod);
break;
case Ntf_EVENT_TIMELINE_FAV: // New favourite to one of my social notes or comments
case Ntf_EVENT_TIMELINE_SHARE: // New sharing of one of my social notes
@ -1376,31 +1366,28 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
switch (ForumSelected.Type)
{
case For_FORUM_COURSE_USRS:
if (asprintf (&Query,"SELECT UsrCod FROM crs_usr"
" WHERE CrsCod=%ld AND UsrCod<>%ld",
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT UsrCod FROM crs_usr"
" WHERE CrsCod=%ld AND UsrCod<>%ld",
Gbl.CurrentCrs.Crs.CrsCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
break;
case For_FORUM_COURSE_TCHS:
if (asprintf (&Query,"SELECT UsrCod FROM crs_usr"
" WHERE CrsCod=%ld AND Role=%u AND UsrCod<>%ld",
Gbl.CurrentCrs.Crs.CrsCod,
(unsigned) Rol_TCH,
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT UsrCod FROM crs_usr"
" WHERE CrsCod=%ld AND Role=%u AND UsrCod<>%ld",
Gbl.CurrentCrs.Crs.CrsCod,
(unsigned) Rol_TCH,
Gbl.Usrs.Me.UsrDat.UsrCod);
break;
default:
return 0;
}
break;
case Ntf_EVENT_FORUM_REPLY:
if (asprintf (&Query,"SELECT DISTINCT(UsrCod) FROM forum_post"
" WHERE ThrCod = (SELECT ThrCod FROM forum_post"
" WHERE PstCod=%ld)"
" AND UsrCod<>%ld",
Cod,Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT DISTINCT(UsrCod) FROM forum_post"
" WHERE ThrCod = (SELECT ThrCod FROM forum_post"
" WHERE PstCod=%ld)"
" AND UsrCod<>%ld",
Cod,Gbl.Usrs.Me.UsrDat.UsrCod);
break;
case Ntf_EVENT_MESSAGE: // This function should not be called in this case
return 0;
@ -1408,36 +1395,35 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
// 1. If the survey is available for the whole course ==> get users enroled in the course whose role is available in survey, except me
// 2. If the survey is available only for some groups ==> get users who belong to any of the groups and whose role is available in survey, except me
// Cases 1 and 2 are mutually exclusive, so the union returns the case 1 or 2
if (asprintf (&Query,"(SELECT crs_usr.UsrCod"
" FROM surveys,crs_usr"
" WHERE surveys.SvyCod=%ld"
" AND surveys.SvyCod NOT IN"
" (SELECT SvyCod FROM svy_grp WHERE SvyCod=%ld)"
" AND surveys.Scope='%s' AND surveys.Cod=crs_usr.CrsCod"
" AND crs_usr.UsrCod<>%ld"
" AND (surveys.Roles&(1<<crs_usr.Role))<>0)"
" UNION "
"(SELECT DISTINCT crs_grp_usr.UsrCod"
" FROM svy_grp,crs_grp_usr,surveys,crs_usr"
" WHERE svy_grp.SvyCod=%ld"
" AND svy_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=crs_usr.UsrCod"
" AND crs_grp_usr.UsrCod<>%ld"
" AND svy_grp.SvyCod=surveys.SvyCod"
" AND surveys.Scope='%s' AND surveys.Cod=crs_usr.CrsCod"
" AND (surveys.Roles&(1<<crs_usr.Role))<>0)",
Cod,
Cod,
Sco_ScopeDB[Sco_SCOPE_CRS],
Gbl.Usrs.Me.UsrDat.UsrCod,
Cod,
Gbl.Usrs.Me.UsrDat.UsrCod,
Sco_ScopeDB[Sco_SCOPE_CRS]) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("(SELECT crs_usr.UsrCod"
" FROM surveys,crs_usr"
" WHERE surveys.SvyCod=%ld"
" AND surveys.SvyCod NOT IN"
" (SELECT SvyCod FROM svy_grp WHERE SvyCod=%ld)"
" AND surveys.Scope='%s' AND surveys.Cod=crs_usr.CrsCod"
" AND crs_usr.UsrCod<>%ld"
" AND (surveys.Roles&(1<<crs_usr.Role))<>0)"
" UNION "
"(SELECT DISTINCT crs_grp_usr.UsrCod"
" FROM svy_grp,crs_grp_usr,surveys,crs_usr"
" WHERE svy_grp.SvyCod=%ld"
" AND svy_grp.GrpCod=crs_grp_usr.GrpCod"
" AND crs_grp_usr.UsrCod=crs_usr.UsrCod"
" AND crs_grp_usr.UsrCod<>%ld"
" AND svy_grp.SvyCod=surveys.SvyCod"
" AND surveys.Scope='%s' AND surveys.Cod=crs_usr.CrsCod"
" AND (surveys.Roles&(1<<crs_usr.Role))<>0)",
Cod,
Cod,
Sco_ScopeDB[Sco_SCOPE_CRS],
Gbl.Usrs.Me.UsrDat.UsrCod,
Cod,
Gbl.Usrs.Me.UsrDat.UsrCod,
Sco_ScopeDB[Sco_SCOPE_CRS]);
break;
}
if ((NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get users to be notified"))) // Users found
if ((NumRows = DB_QuerySELECT_new (&mysql_res,"can not get users to be notified"))) // Users found
{
/***** Initialize structure with user's data *****/
Usr_UsrDataConstructor (&UsrDat);
@ -1572,15 +1558,14 @@ void Ntf_SendPendingNotifByEMailToAllUsrs (void)
/***** Get users who must be notified from database ******/
// (Status & Ntf_STATUS_BIT_EMAIL) && !(Status & Ntf_STATUS_BIT_SENT) && !(Status & (Ntf_STATUS_BIT_READ | Ntf_STATUS_BIT_REMOVED))
if (asprintf (&Query,"SELECT DISTINCT ToUsrCod FROM notif"
" WHERE TimeNotif<FROM_UNIXTIME(UNIX_TIMESTAMP()-'%lu')"
" AND (Status & %u)<>0 AND (Status & %u)=0 AND (Status & %u)=0",
Cfg_TIME_TO_SEND_PENDING_NOTIF,
(unsigned) Ntf_STATUS_BIT_EMAIL,
(unsigned) Ntf_STATUS_BIT_SENT,
(unsigned) (Ntf_STATUS_BIT_READ | Ntf_STATUS_BIT_REMOVED)) < 0)
Lay_NotEnoughMemoryExit ();
if ((NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get users who must be notified"))) // Events found
DB_BuildQuery ("SELECT DISTINCT ToUsrCod FROM notif"
" WHERE TimeNotif<FROM_UNIXTIME(UNIX_TIMESTAMP()-'%lu')"
" AND (Status & %u)<>0 AND (Status & %u)=0 AND (Status & %u)=0",
Cfg_TIME_TO_SEND_PENDING_NOTIF,
(unsigned) Ntf_STATUS_BIT_EMAIL,
(unsigned) Ntf_STATUS_BIT_SENT,
(unsigned) (Ntf_STATUS_BIT_READ | Ntf_STATUS_BIT_REMOVED));
if ((NumRows = DB_QuerySELECT_new (&mysql_res,"can not get users who must be notified"))) // Events found
{
/***** Initialize structure with user's data *****/
Usr_UsrDataConstructor (&UsrDat);
@ -1664,16 +1649,15 @@ static void Ntf_SendPendingNotifByEMailToOneUsr (struct UsrData *ToUsrDat,unsign
if (Mai_CheckIfUsrCanReceiveEmailNotif (ToUsrDat))
{
/***** Get pending notifications of this user from database ******/
if (asprintf (&Query,"SELECT NotifyEvent,FromUsrCod,InsCod,CtrCod,DegCod,CrsCod,Cod"
" FROM notif WHERE ToUsrCod=%ld"
" AND (Status & %u)<>0 AND (Status & %u)=0 AND (Status & %u)=0"
" ORDER BY TimeNotif,NotifyEvent",
ToUsrDat->UsrCod,
(unsigned) Ntf_STATUS_BIT_EMAIL,
(unsigned) Ntf_STATUS_BIT_SENT,
(unsigned) (Ntf_STATUS_BIT_READ | Ntf_STATUS_BIT_REMOVED)) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get pending notifications of a user");
DB_BuildQuery ("SELECT NotifyEvent,FromUsrCod,InsCod,CtrCod,DegCod,CrsCod,Cod"
" FROM notif WHERE ToUsrCod=%ld"
" AND (Status & %u)<>0 AND (Status & %u)=0 AND (Status & %u)=0"
" ORDER BY TimeNotif,NotifyEvent",
ToUsrDat->UsrCod,
(unsigned) Ntf_STATUS_BIT_EMAIL,
(unsigned) Ntf_STATUS_BIT_SENT,
(unsigned) (Ntf_STATUS_BIT_READ | Ntf_STATUS_BIT_REMOVED));
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get pending notifications of a user");
if (NumRows) // Events found
{
@ -1874,17 +1858,15 @@ static void Ntf_GetNumNotifSent (long DegCod,long CrsCod,
Ntf_NotifyEvent_t NotifyEvent,
unsigned *NumEvents,unsigned *NumMails)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
/***** Get number of notifications sent by email from database *****/
if (asprintf (&Query,"SELECT NumEvents,NumMails FROM sta_notif"
" WHERE DegCod=%ld AND CrsCod=%ld AND NotifyEvent=%u",
DegCod,CrsCod,(unsigned) NotifyEvent) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get number of notifications sent by email");
DB_BuildQuery ("SELECT NumEvents,NumMails FROM sta_notif"
" WHERE DegCod=%ld AND CrsCod=%ld AND NotifyEvent=%u",
DegCod,CrsCod,(unsigned) NotifyEvent);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get number of notifications sent by email");
/***** Get number of rows *****/
if (NumRows)

View File

@ -817,19 +817,17 @@ void Pag_SaveLastPageMsgIntoSession (Pag_WhatPaginate_t WhatPaginate,unsigned Nu
unsigned Pag_GetLastPageMsgFromSession (Pag_WhatPaginate_t WhatPaginate)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
unsigned NumPage;
/***** Get last page of received/sent messages from database *****/
if (asprintf (&Query,"SELECT %s FROM sessions WHERE SessionId='%s'",
WhatPaginate == Pag_MESSAGES_RECEIVED ? "LastPageMsgRcv" :
"LastPageMsgSnt",
Gbl.Session.Id) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get last page of messages");
DB_BuildQuery ("SELECT %s FROM sessions WHERE SessionId='%s'",
WhatPaginate == Pag_MESSAGES_RECEIVED ? "LastPageMsgRcv" :
"LastPageMsgSnt",
Gbl.Session.Id);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get last page of messages");
/***** Check number of rows of the result ****/
if (NumRows != 1)

View File

@ -114,16 +114,14 @@ bool Pwd_CheckCurrentPassword (void)
bool Pwd_CheckPendingPassword (void)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
/***** Get pending password from database *****/
if (asprintf (&Query,"SELECT PendingPassword FROM pending_passwd"
" WHERE UsrCod=%ld",
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get pending password"))
DB_BuildQuery ("SELECT PendingPassword FROM pending_passwd"
" WHERE UsrCod=%ld",
Gbl.Usrs.Me.UsrDat.UsrCod);
if (DB_QuerySELECT_new (&mysql_res,"can not get pending password"))
{
/* Get encrypted pending password */
row = mysql_fetch_row (mysql_res);

View File

@ -121,7 +121,7 @@ static void Pho_PutLinkToCalculateDegreeStats (void);
static void Pho_GetMaxStdsPerDegree (void);
static void Pho_ShowOrPrintClassPhotoDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint);
static void Pho_ShowOrPrintListDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint);
static void Pho_BuildQueryOfDegrees (char **Query);
static void Pho_BuildQueryOfDegrees (void);
static void Pho_GetNumStdsInDegree (long DegCod,Usr_Sex_t Sex,int *NumStds,int *NumStdsWithPhoto);
static void Pho_UpdateDegStats (long DegCod,Usr_Sex_t Sex,unsigned NumStds,unsigned NumStdsWithPhoto,long TimeToComputeAvgPhoto);
static void Pho_ShowDegreeStat (int NumStds,int NumStdsWithPhoto);
@ -984,11 +984,10 @@ unsigned Pho_UpdateMyClicksWithoutPhoto (void)
unsigned NumClicks;
/***** Get number of clicks without photo from database *****/
if (asprintf (&Query,"SELECT NumClicks FROM clicks_without_photo"
" WHERE UsrCod=%ld",
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get number of clicks without photo");
DB_BuildQuery ("SELECT NumClicks FROM clicks_without_photo"
" WHERE UsrCod=%ld",
Gbl.Usrs.Me.UsrDat.UsrCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get number of clicks without photo");
/***** Update the list of clicks without photo *****/
if (NumRows) // The user exists ==> update number of clicks without photo
@ -1443,7 +1442,6 @@ void Pho_CalcPhotoDegree (void)
static long Pho_GetDegWithAvgPhotoLeastRecentlyUpdated (void)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows = 0;
@ -1455,17 +1453,16 @@ static long Pho_GetDegWithAvgPhotoLeastRecentlyUpdated (void)
/***** 1. If a degree is not in table of computed degrees,
choose it as least recently updated *****/
/* Get one degree with students not yet computed */
if (asprintf (&Query,"SELECT DISTINCT degrees.DegCod"
" FROM degrees,courses,crs_usr"
" WHERE degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" AND degrees.DegCod NOT IN"
" (SELECT DISTINCT DegCod FROM sta_degrees)"
" LIMIT 1",
(unsigned) Rol_STD) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get degrees");
DB_BuildQuery ("SELECT DISTINCT degrees.DegCod"
" FROM degrees,courses,crs_usr"
" WHERE degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" AND degrees.DegCod NOT IN"
" (SELECT DISTINCT DegCod FROM sta_degrees)"
" LIMIT 1",
(unsigned) Rol_STD);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get degrees");
/* If number of rows is 1, then get the degree code */
if (NumRows == 1)
@ -1485,17 +1482,16 @@ static long Pho_GetDegWithAvgPhotoLeastRecentlyUpdated (void)
/***** 2. If all the degrees are in table,
choose the least recently updated that has students *****/
/* Get degrees from database */
if (asprintf (&Query,"SELECT sta_degrees.DegCod"
" FROM sta_degrees,courses,crs_usr"
" WHERE sta_degrees.TimeAvgPhoto<FROM_UNIXTIME(UNIX_TIMESTAMP()-'%lu')"
" AND sta_degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" ORDER BY sta_degrees.TimeAvgPhoto LIMIT 1",
Cfg_MIN_TIME_TO_RECOMPUTE_AVG_PHOTO,
(unsigned) Rol_STD) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get degrees");
DB_BuildQuery ("SELECT sta_degrees.DegCod"
" FROM sta_degrees,courses,crs_usr"
" WHERE sta_degrees.TimeAvgPhoto<FROM_UNIXTIME(UNIX_TIMESTAMP()-'%lu')"
" AND sta_degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" ORDER BY sta_degrees.TimeAvgPhoto LIMIT 1",
Cfg_MIN_TIME_TO_RECOMPUTE_AVG_PHOTO,
(unsigned) Rol_STD);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get degrees");
/* If number of rows is 1, then get the degree code */
if (NumRows == 1)
@ -1535,19 +1531,17 @@ void Pho_RemoveObsoleteStatDegrees (void)
static long Pho_GetTimeAvgPhotoWasComputed (long DegCod)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
long TimeAvgPhotoWasComputed = 0L;
/***** Get last time an average photo was computed from database *****/
if (asprintf (&Query,"SELECT MIN(UNIX_TIMESTAMP(TimeAvgPhoto))"
" FROM sta_degrees WHERE DegCod=%ld",
DegCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,
"can not get last time an average photo was computed");
DB_BuildQuery ("SELECT MIN(UNIX_TIMESTAMP(TimeAvgPhoto))"
" FROM sta_degrees WHERE DegCod=%ld",
DegCod);
NumRows = DB_QuerySELECT_new (&mysql_res,
"can not get last time an average photo was computed");
if (NumRows == 1)
{
@ -1571,7 +1565,6 @@ static long Pho_GetTimeAvgPhotoWasComputed (long DegCod)
static long Pho_GetTimeToComputeAvgPhoto (long DegCod)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -1580,11 +1573,10 @@ static long Pho_GetTimeToComputeAvgPhoto (long DegCod)
long TotalTimeToComputeAvgPhoto = -1L;
/***** Get time to compute average photo from database *****/
if (asprintf (&Query,"SELECT TimeToComputeAvgPhoto FROM sta_degrees"
" WHERE DegCod=%ld",DegCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,
"can not get time to compute average photo");
DB_BuildQuery ("SELECT TimeToComputeAvgPhoto FROM sta_degrees"
" WHERE DegCod=%ld",DegCod);
NumRows = DB_QuerySELECT_new (&mysql_res,
"can not get time to compute average photo");
/***** Count number of rows in result *****/
if (NumRows == Usr_NUM_SEXS)
@ -2094,19 +2086,17 @@ static void Pho_PutLinkToCalculateDegreeStats (void)
static void Pho_GetMaxStdsPerDegree (void)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
/***** Get maximum number of students in a degree from database *****/
if (asprintf (&Query,"SELECT MAX(NumStds),MAX(NumStdsWithPhoto),"
"MAX(NumStdsWithPhoto/NumStds)"
" FROM sta_degrees"
" WHERE Sex='all' AND NumStds>0") < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,
"can not get maximum number of students in a degree");
DB_BuildQuery ("SELECT MAX(NumStds),MAX(NumStdsWithPhoto),"
"MAX(NumStdsWithPhoto/NumStds)"
" FROM sta_degrees"
" WHERE Sex='all' AND NumStds>0");
NumRows = DB_QuerySELECT_new (&mysql_res,
"can not get maximum number of students in a degree");
/***** Count number of rows in result *****/
if (NumRows == 1)
@ -2144,7 +2134,6 @@ static void Pho_GetMaxStdsPerDegree (void)
static void Pho_ShowOrPrintClassPhotoDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRow;
@ -2156,8 +2145,8 @@ static void Pho_ShowOrPrintClassPhotoDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrin
bool TRIsOpen = false;
/***** Get degrees from database *****/
Pho_BuildQueryOfDegrees (&Query);
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get degrees");
Pho_BuildQueryOfDegrees ();
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get degrees");
if (NumRows) // Degrees with students found
{
@ -2226,7 +2215,6 @@ static void Pho_ShowOrPrintListDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint)
extern const char *Txt_No_INDEX;
extern const char *Txt_Degree;
extern const char *Txt_SEX_PLURAL_Abc[Usr_NUM_SEXS];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRow;
@ -2238,8 +2226,8 @@ static void Pho_ShowOrPrintListDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint)
Usr_Sex_t Sex;
/***** Get degrees from database *****/
Pho_BuildQueryOfDegrees (&Query);
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get degrees");
Pho_BuildQueryOfDegrees ();
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get degrees");
if (NumRows) // Degrees with students found
{
@ -2335,50 +2323,46 @@ static void Pho_ShowOrPrintListDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint)
/****** Build a query to get the degrees ordered by different criteria *******/
/*****************************************************************************/
static void Pho_BuildQueryOfDegrees (char **Query)
static void Pho_BuildQueryOfDegrees (void)
{
switch (Gbl.Stat.DegPhotos.HowOrderDegrees)
{
case Pho_NUMBER_OF_STUDENTS:
if (asprintf (Query,"SELECT degrees.DegCod"
" FROM degrees,sta_degrees"
" WHERE sta_degrees.Sex='all'"
" AND sta_degrees.NumStds>0"
" AND degrees.DegCod=sta_degrees.DegCod"
" ORDER BY sta_degrees.NumStds DESC,"
"sta_degrees.NumStdsWithPhoto DESC,"
"degrees.ShortName") < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT degrees.DegCod"
" FROM degrees,sta_degrees"
" WHERE sta_degrees.Sex='all'"
" AND sta_degrees.NumStds>0"
" AND degrees.DegCod=sta_degrees.DegCod"
" ORDER BY sta_degrees.NumStds DESC,"
"sta_degrees.NumStdsWithPhoto DESC,"
"degrees.ShortName");
break;
case Pho_NUMBER_OF_PHOTOS:
if (asprintf (Query,"SELECT degrees.DegCod"
" FROM degrees,sta_degrees"
" WHERE sta_degrees.Sex='all'"
" AND sta_degrees.NumStds>0"
" AND degrees.DegCod=sta_degrees.DegCod"
" ORDER BY sta_degrees.NumStdsWithPhoto DESC,"
"sta_degrees.NumStds DESC,"
"degrees.ShortName") < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT degrees.DegCod"
" FROM degrees,sta_degrees"
" WHERE sta_degrees.Sex='all'"
" AND sta_degrees.NumStds>0"
" AND degrees.DegCod=sta_degrees.DegCod"
" ORDER BY sta_degrees.NumStdsWithPhoto DESC,"
"sta_degrees.NumStds DESC,"
"degrees.ShortName");
break;
case Pho_PERCENT:
if (asprintf (Query,"SELECT degrees.DegCod"
" FROM degrees,sta_degrees"
" WHERE sta_degrees.Sex='all'"
" AND sta_degrees.NumStds>0"
" AND degrees.DegCod=sta_degrees.DegCod"
" ORDER BY sta_degrees.NumStdsWithPhoto/sta_degrees.NumStds DESC,"
"degrees.ShortName") < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT degrees.DegCod"
" FROM degrees,sta_degrees"
" WHERE sta_degrees.Sex='all'"
" AND sta_degrees.NumStds>0"
" AND degrees.DegCod=sta_degrees.DegCod"
" ORDER BY sta_degrees.NumStdsWithPhoto/sta_degrees.NumStds DESC,"
"degrees.ShortName");
break;
case Pho_DEGREE_NAME:
if (asprintf (Query,"SELECT degrees.DegCod"
" FROM degrees,sta_degrees"
" WHERE sta_degrees.Sex='all'"
" AND sta_degrees.NumStds>0"
" AND degrees.DegCod=sta_degrees.DegCod"
" ORDER BY degrees.ShortName") < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT degrees.DegCod"
" FROM degrees,sta_degrees"
" WHERE sta_degrees.Sex='all'"
" AND sta_degrees.NumStds>0"
" AND degrees.DegCod=sta_degrees.DegCod"
" ORDER BY degrees.ShortName");
break;
}
}
@ -2390,17 +2374,15 @@ static void Pho_BuildQueryOfDegrees (char **Query)
static void Pho_GetNumStdsInDegree (long DegCod,Usr_Sex_t Sex,int *NumStds,int *NumStdsWithPhoto)
{
extern const char *Usr_StringsSexDB[Usr_NUM_SEXS];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
/***** Get the number of students in a degree from database *****/
if (asprintf (&Query,"SELECT NumStds,NumStdsWithPhoto FROM sta_degrees"
" WHERE DegCod=%ld AND Sex='%s'",
DegCod,Usr_StringsSexDB[Sex]) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get the number of students in a degree");
DB_BuildQuery ("SELECT NumStds,NumStdsWithPhoto FROM sta_degrees"
" WHERE DegCod=%ld AND Sex='%s'",
DegCod,Usr_StringsSexDB[Sex]);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get the number of students in a degree");
if (NumRows == 0)
*NumStds = *NumStdsWithPhoto = -1;

View File

@ -283,7 +283,6 @@ static void Plc_PutIconToViewPlacesWhenEditing (void)
void Plc_GetListPlaces (void)
{
char OrderBySubQuery[256];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -300,26 +299,25 @@ void Plc_GetListPlaces (void)
sprintf (OrderBySubQuery,"NumCtrs DESC,FullName");
break;
}
if (asprintf (&Query,"(SELECT places.PlcCod,places.ShortName,places.FullName,COUNT(*) AS NumCtrs"
" FROM places,centres"
" WHERE places.InsCod=%ld"
" AND places.PlcCod=centres.PlcCod"
" AND centres.InsCod=%ld"
" GROUP BY places.PlcCod)"
" UNION "
"(SELECT PlcCod,ShortName,FullName,0 AS NumCtrs"
" FROM places"
" WHERE InsCod=%ld"
" AND PlcCod NOT IN"
" (SELECT DISTINCT PlcCod FROM centres WHERE InsCod=%ld))"
" ORDER BY %s",
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
OrderBySubQuery) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get places");
DB_BuildQuery ("(SELECT places.PlcCod,places.ShortName,places.FullName,COUNT(*) AS NumCtrs"
" FROM places,centres"
" WHERE places.InsCod=%ld"
" AND places.PlcCod=centres.PlcCod"
" AND centres.InsCod=%ld"
" GROUP BY places.PlcCod)"
" UNION "
"(SELECT PlcCod,ShortName,FullName,0 AS NumCtrs"
" FROM places"
" WHERE InsCod=%ld"
" AND PlcCod NOT IN"
" (SELECT DISTINCT PlcCod FROM centres WHERE InsCod=%ld))"
" ORDER BY %s",
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
OrderBySubQuery);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get places");
/***** Count number of rows in result *****/
if (NumRows) // Places found...
@ -372,7 +370,6 @@ void Plc_GetDataOfPlaceByCod (struct Place *Plc)
{
extern const char *Txt_Place_unspecified;
extern const char *Txt_Another_place;
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -400,23 +397,22 @@ void Plc_GetDataOfPlaceByCod (struct Place *Plc)
else if (Plc->PlcCod > 0)
{
/***** Get data of a place from database *****/
if (asprintf (&Query,"(SELECT places.ShortName,places.FullName,COUNT(*)"
" FROM places,centres"
" WHERE places.PlcCod=%ld"
" AND places.PlcCod=centres.PlcCod"
" AND centres.PlcCod=%ld"
" GROUP BY places.PlcCod)"
" UNION "
"(SELECT ShortName,FullName,0"
" FROM places"
" WHERE PlcCod=%ld"
" AND PlcCod NOT IN"
" (SELECT DISTINCT PlcCod FROM centres))",
Plc->PlcCod,
Plc->PlcCod,
Plc->PlcCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get data of a place");
DB_BuildQuery ("(SELECT places.ShortName,places.FullName,COUNT(*)"
" FROM places,centres"
" WHERE places.PlcCod=%ld"
" AND places.PlcCod=centres.PlcCod"
" AND centres.PlcCod=%ld"
" GROUP BY places.PlcCod)"
" UNION "
"(SELECT ShortName,FullName,0"
" FROM places"
" WHERE PlcCod=%ld"
" AND PlcCod NOT IN"
" (SELECT DISTINCT PlcCod FROM centres))",
Plc->PlcCod,
Plc->PlcCod,
Plc->PlcCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get data of a place");
/***** Count number of rows in result *****/
if (NumRows) // Place found...

View File

@ -184,7 +184,6 @@ void Plg_EditPlugins (void)
static void Plg_GetListPlugins (void)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -192,10 +191,9 @@ static void Plg_GetListPlugins (void)
struct Plugin *Plg;
/***** Get plugins from database *****/
if (asprintf (&Query,"SELECT PlgCod,Name,Description,Logo,AppKey,URL,IP"
" FROM plugins ORDER BY Name") < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get plugins");
DB_BuildQuery ("SELECT PlgCod,Name,Description,Logo,AppKey,URL,IP"
" FROM plugins ORDER BY Name");
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get plugins");
/***** Count number of rows in result *****/
if (NumRows) // Plugins found...
@ -258,7 +256,6 @@ static void Plg_GetListPlugins (void)
bool Plg_GetDataOfPluginByCod (struct Plugin *Plg)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -277,12 +274,11 @@ bool Plg_GetDataOfPluginByCod (struct Plugin *Plg)
// Plg->PlgCod > 0
/***** Get data of a plugin from database *****/
if (asprintf (&Query,"SELECT Name,Description,Logo,AppKey,URL,IP"
" FROM plugins"
" WHERE PlgCod=%ld",
Plg->PlgCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get data of a plugin");
DB_BuildQuery ("SELECT Name,Description,Logo,AppKey,URL,IP"
" FROM plugins"
" WHERE PlgCod=%ld",
Plg->PlgCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get data of a plugin");
/***** Count number of rows in result *****/
if (NumRows) // Plugin found...

View File

@ -122,7 +122,6 @@ void Pre_EditPrefs (void)
void Pre_GetPrefsFromIP (void)
{
char *Query;
unsigned long NumRows;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -130,11 +129,10 @@ void Pre_GetPrefsFromIP (void)
if (Gbl.IP[0])
{
/***** Get preferences from database *****/
if (asprintf (&Query,"SELECT FirstDayOfWeek,DateFormat,Theme,IconSet,Menu,SideCols"
" FROM IP_prefs WHERE IP='%s'",
Gbl.IP) < 0)
Lay_NotEnoughMemoryExit ();
if ((NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get preferences")))
DB_BuildQuery ("SELECT FirstDayOfWeek,DateFormat,Theme,IconSet,Menu,SideCols"
" FROM IP_prefs WHERE IP='%s'",
Gbl.IP);
if ((NumRows = DB_QuerySELECT_new (&mysql_res,"can not get preferences")))
{
if (NumRows != 1)
Lay_ShowErrorAndExit ("Internal error while getting preferences.");

View File

@ -622,19 +622,17 @@ static void Prf_PutLinkToUpdateAction (Act_Action_t Action,const char *Encrypted
void Prf_GetUsrFigures (long UsrCod,struct UsrFigures *UsrFigures)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRows;
/***** Get user's figures from database *****/
if (asprintf (&Query,"SELECT UNIX_TIMESTAMP(FirstClickTime),"
"DATEDIFF(NOW(),FirstClickTime)+1,"
"NumClicks,NumFileViews,NumForPst,NumMsgSnt"
" FROM usr_figures WHERE UsrCod=%ld",
UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
if ((NumRows = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get user's figures")))
DB_BuildQuery ("SELECT UNIX_TIMESTAMP(FirstClickTime),"
"DATEDIFF(NOW(),FirstClickTime)+1,"
"NumClicks,NumFileViews,NumForPst,NumMsgSnt"
" FROM usr_figures WHERE UsrCod=%ld",
UsrCod);
if ((NumRows = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get user's figures")))
{
/***** Get user's figures *****/
row = mysql_fetch_row (mysql_res);
@ -856,12 +854,11 @@ static void Prf_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod)
Prf_ResetUsrFigures (&UsrFigures);
/***** Get first click from log table *****/
if (asprintf (&Query,"SELECT UNIX_TIMESTAMP("
"(SELECT MIN(ClickTime) FROM log_full WHERE UsrCod=%ld)"
")",
UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get user's first click"))
DB_BuildQuery ("SELECT UNIX_TIMESTAMP("
"(SELECT MIN(ClickTime) FROM log_full WHERE UsrCod=%ld)"
")",
UsrCod);
if (DB_QuerySELECT_new (&mysql_res,"can not get user's first click"))
{
/* Get first click */
row = mysql_fetch_row (mysql_res);
@ -1206,104 +1203,96 @@ void Prf_GetAndShowRankingMsgSnt (void)
static void Prf_GetAndShowRankingFigure (const char *FieldName)
{
char *Query;
/***** Get ranking from database *****/
switch (Gbl.Scope.Current)
{
case Sco_SCOPE_SYS:
if (asprintf (&Query,"SELECT UsrCod,%s"
" FROM usr_figures"
" WHERE %s>=0"
" AND UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY %s DESC,UsrCod LIMIT 100",
FieldName,
FieldName,FieldName) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT UsrCod,%s"
" FROM usr_figures"
" WHERE %s>=0"
" AND UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY %s DESC,UsrCod LIMIT 100",
FieldName,
FieldName,FieldName);
break;
case Sco_SCOPE_CTY:
if (asprintf (&Query,"SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.%s"
" FROM institutions,centres,degrees,courses,crs_usr,usr_figures"
" 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=usr_figures.UsrCod"
" AND usr_figures.%s>=0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100",
FieldName,
Gbl.CurrentCty.Cty.CtyCod,
FieldName,FieldName) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.%s"
" FROM institutions,centres,degrees,courses,crs_usr,usr_figures"
" 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=usr_figures.UsrCod"
" AND usr_figures.%s>=0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100",
FieldName,
Gbl.CurrentCty.Cty.CtyCod,
FieldName,FieldName);
break;
case Sco_SCOPE_INS:
if (asprintf (&Query,"SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.%s"
" FROM centres,degrees,courses,crs_usr,usr_figures"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.%s>=0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100",
FieldName,
Gbl.CurrentIns.Ins.InsCod,
FieldName,FieldName) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.%s"
" FROM centres,degrees,courses,crs_usr,usr_figures"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.%s>=0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100",
FieldName,
Gbl.CurrentIns.Ins.InsCod,
FieldName,FieldName);
break;
case Sco_SCOPE_CTR:
if (asprintf (&Query,"SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.%s"
" FROM degrees,courses,crs_usr,usr_figures"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.%s>=0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100",
FieldName,
Gbl.CurrentCtr.Ctr.CtrCod,
FieldName,FieldName) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.%s"
" FROM degrees,courses,crs_usr,usr_figures"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.%s>=0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100",
FieldName,
Gbl.CurrentCtr.Ctr.CtrCod,
FieldName,FieldName);
break;
case Sco_SCOPE_DEG:
if (asprintf (&Query,"SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.%s"
" FROM courses,crs_usr,usr_figures"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.%s>=0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100",
FieldName,
Gbl.CurrentDeg.Deg.DegCod,
FieldName,FieldName) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.%s"
" FROM courses,crs_usr,usr_figures"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.%s>=0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100",
FieldName,
Gbl.CurrentDeg.Deg.DegCod,
FieldName,FieldName);
break;
case Sco_SCOPE_CRS:
if (asprintf (&Query,"SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.%s"
" FROM crs_usr,usr_figures"
" WHERE crs_usr.CrsCod=%ld"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.%s>=0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100",
FieldName,
Gbl.CurrentCrs.Crs.CrsCod,
FieldName,FieldName) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.%s"
" FROM crs_usr,usr_figures"
" WHERE crs_usr.CrsCod=%ld"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.%s>=0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100",
FieldName,
Gbl.CurrentCrs.Crs.CrsCod,
FieldName,FieldName);
break;
default:
Lay_WrongScopeExit ();
break;
}
Prf_ShowRankingFigure (Query);
Prf_ShowRankingFigure ();
}
void Prf_ShowRankingFigure (const char *Query)
void Prf_ShowRankingFigure (void)
{
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -1314,7 +1303,7 @@ void Prf_ShowRankingFigure (const char *Query)
long FigureHigh = LONG_MAX;
long Figure;
NumUsrs = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get ranking");
NumUsrs = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get ranking");
if (NumUsrs)
{
/***** Initialize structure with user's data *****/
@ -1371,7 +1360,6 @@ void Prf_ShowRankingFigure (const char *Query)
void Prf_GetAndShowRankingClicksPerDay (void)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumUsrs;
@ -1385,100 +1373,94 @@ void Prf_GetAndShowRankingClicksPerDay (void)
switch (Gbl.Scope.Current)
{
case Sco_SCOPE_SYS:
if (asprintf (&Query,"SELECT UsrCod,"
"NumClicks/(DATEDIFF(NOW(),FirstClickTime)+1) AS NumClicksPerDay"
" FROM usr_figures"
" WHERE NumClicks>0"
" AND UNIX_TIMESTAMP(FirstClickTime)>0"
" AND UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,UsrCod LIMIT 100") < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT UsrCod,"
"NumClicks/(DATEDIFF(NOW(),FirstClickTime)+1) AS NumClicksPerDay"
" FROM usr_figures"
" WHERE NumClicks>0"
" AND UNIX_TIMESTAMP(FirstClickTime)>0"
" AND UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,UsrCod LIMIT 100");
break;
case Sco_SCOPE_CTY:
if (asprintf (&Query,"SELECT DISTINCTROW usr_figures.UsrCod,"
"usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay"
" FROM institutions,centres,degrees,courses,crs_usr,usr_figures"
" 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=usr_figures.UsrCod"
" AND usr_figures.NumClicks>0"
" AND UNIX_TIMESTAMP(usr_figures.FirstClickTime)>0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,usr_figures.UsrCod LIMIT 100",
Gbl.CurrentCty.Cty.CtyCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT DISTINCTROW usr_figures.UsrCod,"
"usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay"
" FROM institutions,centres,degrees,courses,crs_usr,usr_figures"
" 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=usr_figures.UsrCod"
" AND usr_figures.NumClicks>0"
" AND UNIX_TIMESTAMP(usr_figures.FirstClickTime)>0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,usr_figures.UsrCod LIMIT 100",
Gbl.CurrentCty.Cty.CtyCod);
break;
case Sco_SCOPE_INS:
if (asprintf (&Query,"SELECT DISTINCTROW usr_figures.UsrCod,"
"usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay"
" FROM centres,degrees,courses,crs_usr,usr_figures"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.NumClicks>0"
" AND UNIX_TIMESTAMP(usr_figures.FirstClickTime)>0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,usr_figures.UsrCod LIMIT 100",
Gbl.CurrentIns.Ins.InsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT DISTINCTROW usr_figures.UsrCod,"
"usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay"
" FROM centres,degrees,courses,crs_usr,usr_figures"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.NumClicks>0"
" AND UNIX_TIMESTAMP(usr_figures.FirstClickTime)>0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,usr_figures.UsrCod LIMIT 100",
Gbl.CurrentIns.Ins.InsCod);
break;
case Sco_SCOPE_CTR:
if (asprintf (&Query,"SELECT DISTINCTROW usr_figures.UsrCod,"
"usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay"
" FROM degrees,courses,crs_usr,usr_figures"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.NumClicks>0"
" AND UNIX_TIMESTAMP(usr_figures.FirstClickTime)>0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,usr_figures.UsrCod LIMIT 100",
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT DISTINCTROW usr_figures.UsrCod,"
"usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay"
" FROM degrees,courses,crs_usr,usr_figures"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.NumClicks>0"
" AND UNIX_TIMESTAMP(usr_figures.FirstClickTime)>0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,usr_figures.UsrCod LIMIT 100",
Gbl.CurrentCtr.Ctr.CtrCod);
break;
case Sco_SCOPE_DEG:
if (asprintf (&Query,"SELECT DISTINCTROW usr_figures.UsrCod,"
"usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay"
" FROM courses,crs_usr,usr_figures"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.NumClicks>0"
" AND UNIX_TIMESTAMP(usr_figures.FirstClickTime)>0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,usr_figures.UsrCod LIMIT 100",
Gbl.CurrentDeg.Deg.DegCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT DISTINCTROW usr_figures.UsrCod,"
"usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay"
" FROM courses,crs_usr,usr_figures"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.NumClicks>0"
" AND UNIX_TIMESTAMP(usr_figures.FirstClickTime)>0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,usr_figures.UsrCod LIMIT 100",
Gbl.CurrentDeg.Deg.DegCod);
break;
case Sco_SCOPE_CRS:
if (asprintf (&Query,"SELECT DISTINCTROW usr_figures.UsrCod,"
"usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay"
" FROM crs_usr,usr_figures"
" WHERE crs_usr.CrsCod=%ld"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.NumClicks>0"
" AND UNIX_TIMESTAMP(usr_figures.FirstClickTime)>0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,usr_figures.UsrCod LIMIT 100",
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT DISTINCTROW usr_figures.UsrCod,"
"usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay"
" FROM crs_usr,usr_figures"
" WHERE crs_usr.CrsCod=%ld"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.NumClicks>0"
" AND UNIX_TIMESTAMP(usr_figures.FirstClickTime)>0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,usr_figures.UsrCod LIMIT 100",
Gbl.CurrentCrs.Crs.CrsCod);
break;
default:
Lay_WrongScopeExit ();
break;
}
NumUsrs = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get ranking");
NumUsrs = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get ranking");
if (NumUsrs)
{
/***** Initialize structure with user's data *****/

View File

@ -77,7 +77,7 @@ void Prf_GetAndShowRankingClicks (void);
void Prf_GetAndShowRankingFileViews (void);
void Prf_GetAndShowRankingForPst (void);
void Prf_GetAndShowRankingMsgSnt (void);
void Prf_ShowRankingFigure (const char *Query);
void Prf_ShowRankingFigure (void);
void Prf_GetAndShowRankingClicksPerDay (void);
void Prf_ShowUsrInRanking (struct UsrData *UsrDat,unsigned Rank);

View File

@ -1799,21 +1799,18 @@ static void Prj_ShowTableAllProjectsMembersWithARole (const struct Project *Prj,
static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject,
MYSQL_RES **mysql_res)
{
char *Query;
/***** Get users in project from database *****/
if (asprintf (&Query,"SELECT prj_usr.UsrCod,"
"usr_data.Surname1 AS S1,"
"usr_data.Surname2 AS S2,"
"usr_data.FirstName AS FN"
" FROM prj_usr,usr_data"
" WHERE prj_usr.PrjCod=%ld AND RoleInProject=%u"
" AND prj_usr.UsrCod=usr_data.UsrCod"
" ORDER BY S1,S2,FN",
PrjCod,(unsigned) RoleInProject) < 0)
Lay_NotEnoughMemoryExit ();
return (unsigned) DB_QuerySELECT_free (Query,mysql_res,
"can not get users in project");
DB_BuildQuery ("SELECT prj_usr.UsrCod,"
"usr_data.Surname1 AS S1,"
"usr_data.Surname2 AS S2,"
"usr_data.FirstName AS FN"
" FROM prj_usr,usr_data"
" WHERE prj_usr.PrjCod=%ld AND RoleInProject=%u"
" AND prj_usr.UsrCod=usr_data.UsrCod"
" ORDER BY S1,S2,FN",
PrjCod,(unsigned) RoleInProject);
return (unsigned) DB_QuerySELECT_new (mysql_res,
"can not get users in project");
}
/*****************************************************************************/
@ -1828,7 +1825,6 @@ void Prj_FlushCacheMyRoleInProject (void)
Prj_RoleInProject_t Prj_GetMyRoleInProject (long PrjCod)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -1845,11 +1841,10 @@ Prj_RoleInProject_t Prj_GetMyRoleInProject (long PrjCod)
The result of the query will have one row or none *****/
Gbl.Cache.MyRoleInProject.PrjCod = PrjCod;
Gbl.Cache.MyRoleInProject.RoleInProject = Prj_ROLE_UNK;
if (asprintf (&Query,"SELECT RoleInProject FROM prj_usr"
" WHERE PrjCod=%ld AND UsrCod=%ld",
PrjCod,Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get my role in project"))
DB_BuildQuery ("SELECT RoleInProject FROM prj_usr"
" WHERE PrjCod=%ld AND UsrCod=%ld",
PrjCod,Gbl.Usrs.Me.UsrDat.UsrCod);
if (DB_QuerySELECT_new (&mysql_res,"can not get my role in project"))
{
row = mysql_fetch_row (mysql_res);
Gbl.Cache.MyRoleInProject.RoleInProject = Prj_ConvertUnsignedStrToRoleInProject (row[0]);
@ -2295,7 +2290,6 @@ void Prj_GetListProjects (void)
char HidVisSubQuery[Prj_MAX_BYTES_SUBQUERY];
char DptCodSubQuery[Prj_MAX_BYTES_SUBQUERY];
char OrderBySubQuery[Prj_MAX_BYTES_SUBQUERY];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -2396,33 +2390,31 @@ void Prj_GetListProjects (void)
case Prj_ORDER_START_TIME:
case Prj_ORDER_END_TIME:
case Prj_ORDER_TITLE:
if (asprintf (&Query,"SELECT projects.PrjCod"
" FROM projects,prj_usr"
" WHERE projects.CrsCod=%ld"
"%s%s%s"
" AND projects.PrjCod=prj_usr.PrjCod"
" AND prj_usr.UsrCod=%ld"
" ORDER BY %s",
Gbl.CurrentCrs.Crs.CrsCod,
PreNonSubQuery,HidVisSubQuery,DptCodSubQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,
OrderBySubQuery) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT projects.PrjCod"
" FROM projects,prj_usr"
" WHERE projects.CrsCod=%ld"
"%s%s%s"
" AND projects.PrjCod=prj_usr.PrjCod"
" AND prj_usr.UsrCod=%ld"
" ORDER BY %s",
Gbl.CurrentCrs.Crs.CrsCod,
PreNonSubQuery,HidVisSubQuery,DptCodSubQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,
OrderBySubQuery);
break;
case Prj_ORDER_DEPARTMENT:
if (asprintf (&Query,"SELECT projects.PrjCod"
" FROM prj_usr,projects LEFT JOIN departments"
" ON projects.DptCod=departments.DptCod"
" WHERE projects.CrsCod=%ld"
"%s%s%s"
" AND projects.PrjCod=prj_usr.PrjCod"
" AND prj_usr.UsrCod=%ld"
" ORDER BY %s",
Gbl.CurrentCrs.Crs.CrsCod,
PreNonSubQuery,HidVisSubQuery,DptCodSubQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,
OrderBySubQuery) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT projects.PrjCod"
" FROM prj_usr,projects LEFT JOIN departments"
" ON projects.DptCod=departments.DptCod"
" WHERE projects.CrsCod=%ld"
"%s%s%s"
" AND projects.PrjCod=prj_usr.PrjCod"
" AND prj_usr.UsrCod=%ld"
" ORDER BY %s",
Gbl.CurrentCrs.Crs.CrsCod,
PreNonSubQuery,HidVisSubQuery,DptCodSubQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,
OrderBySubQuery);
break;
}
else // Gbl.Prjs.My_All == Prj_ALL_PROJECTS
@ -2431,31 +2423,29 @@ void Prj_GetListProjects (void)
case Prj_ORDER_START_TIME:
case Prj_ORDER_END_TIME:
case Prj_ORDER_TITLE:
if (asprintf (&Query,"SELECT projects.PrjCod"
" FROM projects"
" WHERE projects.CrsCod=%ld"
"%s%s%s"
" ORDER BY %s",
Gbl.CurrentCrs.Crs.CrsCod,
PreNonSubQuery,HidVisSubQuery,DptCodSubQuery,
OrderBySubQuery) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT projects.PrjCod"
" FROM projects"
" WHERE projects.CrsCod=%ld"
"%s%s%s"
" ORDER BY %s",
Gbl.CurrentCrs.Crs.CrsCod,
PreNonSubQuery,HidVisSubQuery,DptCodSubQuery,
OrderBySubQuery);
break;
case Prj_ORDER_DEPARTMENT:
if (asprintf (&Query,"SELECT projects.PrjCod"
" FROM projects LEFT JOIN departments"
" ON projects.DptCod=departments.DptCod"
" WHERE projects.CrsCod=%ld"
"%s%s%s"
" ORDER BY %s",
Gbl.CurrentCrs.Crs.CrsCod,
PreNonSubQuery,HidVisSubQuery,DptCodSubQuery,
OrderBySubQuery) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT projects.PrjCod"
" FROM projects LEFT JOIN departments"
" ON projects.DptCod=departments.DptCod"
" WHERE projects.CrsCod=%ld"
"%s%s%s"
" ORDER BY %s",
Gbl.CurrentCrs.Crs.CrsCod,
PreNonSubQuery,HidVisSubQuery,DptCodSubQuery,
OrderBySubQuery);
break;
}
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get projects");
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get projects");
if (NumRows) // Projects found...
{
@ -2492,7 +2482,6 @@ void Prj_GetListProjects (void)
long Prj_GetCourseOfProject (long PrjCod)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long CrsCod = -1L;
@ -2500,10 +2489,8 @@ long Prj_GetCourseOfProject (long PrjCod)
if (PrjCod > 0)
{
/***** Get course code from database *****/
if (asprintf (&Query,"SELECT CrsCod FROM projects WHERE PrjCod=%ld",
PrjCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get project course")) // Project found...
DB_BuildQuery ("SELECT CrsCod FROM projects WHERE PrjCod=%ld",PrjCod);
if (DB_QuerySELECT_new (&mysql_res,"can not get project course")) // Project found...
{
/* Get row */
row = mysql_fetch_row (mysql_res);
@ -3504,7 +3491,6 @@ void Prj_RemoveUsrFromProjects (long UsrCod)
unsigned Prj_GetNumCoursesWithProjects (Sco_Scope_t Scope)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumCourses;
@ -3513,65 +3499,59 @@ unsigned Prj_GetNumCoursesWithProjects (Sco_Scope_t Scope)
switch (Scope)
{
case Sco_SCOPE_SYS:
if (asprintf (&Query,"SELECT COUNT(DISTINCT CrsCod)"
" FROM projects"
" WHERE CrsCod>0") < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(DISTINCT CrsCod)"
" FROM projects"
" WHERE CrsCod>0");
break;
case Sco_SCOPE_CTY:
if (asprintf (&Query,"SELECT COUNT(DISTINCT projects.CrsCod)"
" FROM institutions,centres,degrees,courses,projects"
" 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=projects.CrsCod",
Gbl.CurrentCty.Cty.CtyCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(DISTINCT projects.CrsCod)"
" FROM institutions,centres,degrees,courses,projects"
" 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=projects.CrsCod",
Gbl.CurrentCty.Cty.CtyCod);
break;
case Sco_SCOPE_INS:
if (asprintf (&Query,"SELECT COUNT(DISTINCT projects.CrsCod)"
" FROM centres,degrees,courses,projects"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.Status=0"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentIns.Ins.InsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(DISTINCT projects.CrsCod)"
" FROM centres,degrees,courses,projects"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.Status=0"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentIns.Ins.InsCod);
break;
case Sco_SCOPE_CTR:
if (asprintf (&Query,"SELECT COUNT(DISTINCT projects.CrsCod)"
" FROM degrees,courses,projects"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.Status=0"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(DISTINCT projects.CrsCod)"
" FROM degrees,courses,projects"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.Status=0"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentCtr.Ctr.CtrCod);
break;
case Sco_SCOPE_DEG:
if (asprintf (&Query,"SELECT COUNT(DISTINCT projects.CrsCod)"
" FROM courses,projects"
" WHERE courses.DegCod=%ld"
" AND courses.Status=0"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentDeg.Deg.DegCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(DISTINCT projects.CrsCod)"
" FROM courses,projects"
" WHERE courses.DegCod=%ld"
" AND courses.Status=0"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentDeg.Deg.DegCod);
break;
case Sco_SCOPE_CRS:
if (asprintf (&Query,"SELECT COUNT(DISTINCT CrsCod)"
" FROM projects"
" WHERE CrsCod=%ld",
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(DISTINCT CrsCod)"
" FROM projects"
" 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 projects");
DB_QuerySELECT_new (&mysql_res,"can not get number of courses with projects");
/***** Get number of courses *****/
row = mysql_fetch_row (mysql_res);
@ -3591,7 +3571,6 @@ unsigned Prj_GetNumCoursesWithProjects (Sco_Scope_t Scope)
unsigned Prj_GetNumProjects (Sco_Scope_t Scope)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumProjects;
@ -3600,61 +3579,55 @@ unsigned Prj_GetNumProjects (Sco_Scope_t Scope)
switch (Scope)
{
case Sco_SCOPE_SYS:
if (asprintf (&Query,"SELECT COUNT(*)"
DB_BuildQuery ("SELECT COUNT(*)"
" FROM projects"
" WHERE CrsCod>0") < 0)
Lay_NotEnoughMemoryExit ();
" WHERE CrsCod>0");
break;
case Sco_SCOPE_CTY:
if (asprintf (&Query,"SELECT COUNT(*)"
" FROM institutions,centres,degrees,courses,projects"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentCty.Cty.CtyCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*)"
" FROM institutions,centres,degrees,courses,projects"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentCty.Cty.CtyCod);
break;
case Sco_SCOPE_INS:
if (asprintf (&Query,"SELECT COUNT(*)"
" FROM centres,degrees,courses,projects"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentIns.Ins.InsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*)"
" FROM centres,degrees,courses,projects"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentIns.Ins.InsCod);
break;
case Sco_SCOPE_CTR:
if (asprintf (&Query,"SELECT COUNT(*)"
" FROM degrees,courses,projects"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*)"
" FROM degrees,courses,projects"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentCtr.Ctr.CtrCod);
break;
case Sco_SCOPE_DEG:
if (asprintf (&Query,"SELECT COUNT(*)"
" FROM courses,projects"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentDeg.Deg.DegCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*)"
" FROM courses,projects"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentDeg.Deg.DegCod);
break;
case Sco_SCOPE_CRS:
if (asprintf (&Query,"SELECT COUNT(*)"
" FROM projects"
" WHERE CrsCod=%ld",
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_BuildQuery ("SELECT COUNT(*)"
" FROM projects"
" WHERE CrsCod=%ld",
Gbl.CurrentCrs.Crs.CrsCod);
break;
default:
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of projects");
DB_QuerySELECT_new (&mysql_res,"can not get number of projects");
/***** Get number of projects *****/
row = mysql_fetch_row (mysql_res);

View File

@ -223,7 +223,6 @@ void Rec_ReqEditRecordFields (void)
void Rec_GetListRecordFieldsInCurrentCrs (void)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRow;
@ -233,12 +232,11 @@ void Rec_GetListRecordFieldsInCurrentCrs (void)
return;
/***** Get fields of cards of a course from database *****/
if (asprintf (&Query,"SELECT FieldCod,FieldName,NumLines,Visibility"
" FROM crs_record_fields"
" WHERE CrsCod=%ld ORDER BY FieldName",
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
Gbl.CurrentCrs.Records.LstFields.Num = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get fields of cards of a course");
DB_BuildQuery ("SELECT FieldCod,FieldName,NumLines,Visibility"
" FROM crs_record_fields"
" WHERE CrsCod=%ld ORDER BY FieldName",
Gbl.CurrentCrs.Crs.CrsCod);
Gbl.CurrentCrs.Records.LstFields.Num = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get fields of cards of a course");
/***** Get the fields of records *****/
if (Gbl.CurrentCrs.Records.LstFields.Num)
@ -559,16 +557,13 @@ bool Rec_CheckIfRecordFieldIsRepeated (const char *FieldName)
unsigned long Rec_GetAllFieldsInCurrCrs (MYSQL_RES **mysql_res)
{
char *Query;
/***** Get fields of cards of current course from database *****/
if (asprintf (&Query,"SELECT FieldCod,FieldName,Visibility"
" FROM crs_record_fields"
" WHERE CrsCod=%ld ORDER BY FieldName",
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
return DB_QuerySELECT_free (Query,mysql_res,
"can not get fields of cards of a course");
DB_BuildQuery ("SELECT FieldCod,FieldName,Visibility"
" FROM crs_record_fields"
" WHERE CrsCod=%ld ORDER BY FieldName",
Gbl.CurrentCrs.Crs.CrsCod);
return DB_QuerySELECT_new (mysql_res,
"can not get fields of cards of a course");
}
/*****************************************************************************/
@ -739,18 +734,16 @@ static void Rec_PutParamFielCod (void)
static void Rec_GetFieldByCod (long FieldCod,char Name[Rec_MAX_BYTES_NAME_FIELD + 1],
unsigned *NumLines,Rec_VisibilityRecordFields_t *Visibility)
{
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
unsigned Vis;
/***** Get a field of a record in a course from database *****/
if (asprintf (&Query,"SELECT FieldName,NumLines,Visibility FROM crs_record_fields"
" WHERE CrsCod=%ld AND FieldCod=%ld",
Gbl.CurrentCrs.Crs.CrsCod,FieldCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get a field of a record in a course");
DB_BuildQuery ("SELECT FieldName,NumLines,Visibility FROM crs_record_fields"
" WHERE CrsCod=%ld AND FieldCod=%ld",
Gbl.CurrentCrs.Crs.CrsCod,FieldCod);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get a field of a record in a course");
/***** Count number of rows in result *****/
if (NumRows != 1)
@ -1961,14 +1954,11 @@ static void Rec_ShowCrsRecord (Rec_CourseRecordViewType_t TypeOfView,
unsigned long Rec_GetFieldFromCrsRecord (long UsrCod,long FieldCod,MYSQL_RES **mysql_res)
{
char *Query;
/***** Get the text of a field of a record from database *****/
if (asprintf (&Query,"SELECT Txt FROM crs_records"
" WHERE FieldCod=%ld AND UsrCod=%ld",
FieldCod,UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
return DB_QuerySELECT_free (Query,mysql_res,"can not get the text of a field of a record.");
DB_BuildQuery ("SELECT Txt FROM crs_records"
" WHERE FieldCod=%ld AND UsrCod=%ld",
FieldCod,UsrCod);
return DB_QuerySELECT_new (mysql_res,"can not get the text of a field of a record.");
}
/*****************************************************************************/

View File

@ -717,9 +717,7 @@ static Tst_AnswerType_t TsI_ConvertFromStrAnsTypXMLToAnsTyp (const char *StrAnsT
static bool TsI_CheckIfQuestionExistsInDB (void)
{
extern const char *Tst_StrAnswerTypesDB[Tst_NUM_ANS_TYPES];
char *QueryQst;
MYSQL_RES *mysql_res_qst;
char *QueryAns;
MYSQL_RES *mysql_res_ans;
MYSQL_ROW row;
bool IdenticalQuestionFound = false;
@ -732,21 +730,12 @@ static bool TsI_CheckIfQuestionExistsInDB (void)
unsigned i;
/***** Check if stem exists *****/
/* Allocate space for query */
if ((QueryQst = (char *) malloc (256 + Gbl.Test.Stem.Length)) == NULL)
Lay_NotEnoughMemoryExit ();
/* Make database query */
if (asprintf (&QueryQst,"SELECT QstCod FROM tst_questions"
" WHERE CrsCod=%ld AND AnsType='%s' AND Stem='%s'",
Gbl.CurrentCrs.Crs.CrsCod,
Tst_StrAnswerTypesDB[Gbl.Test.AnswerType],
Gbl.Test.Stem.Text) < 0)
Lay_NotEnoughMemoryExit ();
NumQstsWithThisStem = (unsigned) DB_QuerySELECT_free (QueryQst,&mysql_res_qst,"can not check if a question exists");
/* Free space user for query */
free ((void *) QueryQst);
DB_BuildQuery ("SELECT QstCod FROM tst_questions"
" WHERE CrsCod=%ld AND AnsType='%s' AND Stem='%s'",
Gbl.CurrentCrs.Crs.CrsCod,
Tst_StrAnswerTypesDB[Gbl.Test.AnswerType],
Gbl.Test.Stem.Text);
NumQstsWithThisStem = (unsigned) DB_QuerySELECT_new (&mysql_res_qst,"can not check if a question exists");
if (NumQstsWithThisStem) // There are questions in database with the same stem that the one of this question
{
@ -761,11 +750,10 @@ static bool TsI_CheckIfQuestionExistsInDB (void)
Lay_ShowErrorAndExit ("Wrong code of question.");
/* Get answers from this question */
if (asprintf (&QueryAns,"SELECT Answer FROM tst_answers"
" WHERE QstCod=%ld ORDER BY AnsInd",
QstCod) < 0)
Lay_NotEnoughMemoryExit ();
NumOptsExistingQstInDB = (unsigned) DB_QuerySELECT_free (QueryAns,&mysql_res_ans,"can not get the answer of a question");
DB_BuildQuery ("SELECT Answer FROM tst_answers"
" WHERE QstCod=%ld ORDER BY AnsInd",
QstCod);
NumOptsExistingQstInDB = (unsigned) DB_QuerySELECT_new (&mysql_res_ans,"can not get the answer of a question");
switch (Gbl.Test.AnswerType)
{