Version 18.7.41

This commit is contained in:
Antonio Cañas Vargas 2018-10-24 23:03:11 +02:00
parent f0694fc824
commit 944aaa1856
23 changed files with 586 additions and 519 deletions

View File

@ -1866,7 +1866,7 @@ unsigned Agd_GetNumUsrsWithEvents (Sco_Scope_t Scope)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of users with events");
@ -1954,7 +1954,7 @@ unsigned Agd_GetNumEvents (Sco_Scope_t Scope)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of events");

View File

@ -1875,7 +1875,7 @@ unsigned Asg_GetNumCoursesWithAssignments (Sco_Scope_t Scope)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of courses with assignments");
@ -1959,7 +1959,7 @@ unsigned Asg_GetNumAssignments (Sco_Scope_t Scope,unsigned *NumNotif)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of assignments");

View File

@ -1760,7 +1760,7 @@ unsigned Att_GetNumCoursesWithAttEvents (Sco_Scope_t Scope)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of courses with attendance events");
@ -1833,7 +1833,7 @@ unsigned Att_GetNumAttEvents (Sco_Scope_t Scope,unsigned *NumNotif)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of attendance events");

View File

@ -355,10 +355,11 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 18.7.40 (2018-10-24)"
#define Log_PLATFORM_VERSION "SWAD 18.7.41 (2018-10-24)"
#define CSS_FILE "swad18.4.css"
#define JS_FILE "swad17.17.1.js"
/*
Version 18.7.41: Oct 24, 2018 Some sprintf for database queries changed by asprintf. (238125 lines)
Version 18.7.40: Oct 24, 2018 Some sprintf for database queries changed by asprintf. (238060 lines)
Version 18.7.39: Oct 24, 2018 Some sprintf for database queries changed by asprintf. (238037 lines)
Version 18.7.38: Oct 24, 2018 Some sprintf for database queries changed by asprintf. (237986 lines)

View File

@ -778,7 +778,7 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
break;
@ -876,7 +876,7 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
break;
@ -1191,7 +1191,7 @@ static void Con_ShowConnectedUsrsCurrentLocationOneByOneOnMainZone (Rol_Role_t R
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
break;

View File

@ -2588,7 +2588,7 @@ void Hie_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan)
}
break;
default: // There are no administrators in other scopes
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
fprintf (Gbl.F.Out,"</td>"

View File

@ -654,7 +654,7 @@ void DT_GetListDegreeTypes (Sco_Scope_t Scope,DT_Order_t Order)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
Gbl.Degs.DegTypes.Num = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get types of degree");

View File

@ -2839,7 +2839,7 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
}
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}

View File

@ -1204,7 +1204,7 @@ void Fol_GetAndShowRankingFollowers (void)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
Prf_ShowRankingFigure (Query);

View File

@ -2132,7 +2132,7 @@ void Gam_RecFormGame (void)
NewGame.Cod = Gbl.CurrentCrs.Crs.CrsCod;
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
@ -3987,7 +3987,7 @@ unsigned Gam_GetNumCoursesWithGames (Sco_Scope_t Scope)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of courses with games");
@ -4082,7 +4082,7 @@ unsigned Gam_GetNumGames (Sco_Scope_t Scope)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of games");
@ -4192,7 +4192,7 @@ float Gam_GetNumQstsPerCrsGame (Sco_Scope_t Scope)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of questions per game");

View File

@ -536,7 +536,7 @@ static unsigned Ind_GetTableOfCourses (MYSQL_RES **mysql_res)
}
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}

View File

@ -1200,7 +1200,16 @@ void Lay_EndSection (void)
void Lay_NotEnoughMemoryExit (void)
{
Lay_NotEnoughMemoryExit ();
Lay_ShowErrorAndExit ("Not enough memory.");
}
/*****************************************************************************/
/************* Write error message and exit when wrong scope *****************/
/*****************************************************************************/
void Lay_WrongScopeExit (void)
{
Lay_ShowErrorAndExit ("Wrong scope.");
}
/*****************************************************************************/

View File

@ -67,6 +67,7 @@ void Lay_StartSection (const char *SectionId);
void Lay_EndSection (void);
void Lay_NotEnoughMemoryExit (void);
void Lay_WrongScopeExit (void);
void Lay_ShowErrorAndExit (const char *Txt);
void Lay_RefreshNotifsAndConnected (void);

View File

@ -2190,7 +2190,7 @@ unsigned Msg_GetNumMsgsSent (Sco_Scope_t Scope,Msg_Status_t MsgStatus)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
return (unsigned) DB_QueryCOUNT_free (Query,"can not get number of sent messages");
@ -2282,7 +2282,7 @@ unsigned Msg_GetNumMsgsReceived (Sco_Scope_t Scope,Msg_Status_t MsgStatus)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
break;
@ -2406,7 +2406,7 @@ unsigned Msg_GetNumMsgsReceived (Sco_Scope_t Scope,Msg_Status_t MsgStatus)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
break;

View File

@ -535,7 +535,7 @@ void Net_ShowWebAndSocialNetworksStats (void)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumRows = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,

View File

@ -889,7 +889,7 @@ unsigned Not_GetNumNotices (Sco_Scope_t Scope,Not_Status_t Status,unsigned *NumN
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of notices");
@ -981,7 +981,7 @@ unsigned Not_GetNumNoticesDeleted (Sco_Scope_t Scope,unsigned *NumNotif)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of deleted notices");

View File

@ -332,17 +332,18 @@ bool Prf_ShowUserProfile (struct UsrData *UsrDat)
void Prf_ChangeProfileVisibility (void)
{
extern const char *Pri_VisibilityDB[Pri_NUM_OPTIONS_PRIVACY];
char Query[128];
char *Query;
/***** Get param with public/private photo *****/
Gbl.Usrs.Me.UsrDat.ProfileVisibility = Pri_GetParamVisibility ("VisPrf");
/***** Store public/private photo in database *****/
sprintf (Query,"UPDATE usr_data SET ProfileVisibility='%s'"
" WHERE UsrCod=%ld",
Pri_VisibilityDB[Gbl.Usrs.Me.UsrDat.ProfileVisibility],
Gbl.Usrs.Me.UsrDat.UsrCod);
DB_QueryUPDATE (Query,"can not update your preference about public profile visibility");
if (asprintf (&Query,"UPDATE usr_data SET ProfileVisibility='%s'"
" WHERE UsrCod=%ld",
Pri_VisibilityDB[Gbl.Usrs.Me.UsrDat.ProfileVisibility],
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryUPDATE_free (Query,"can not update your preference about public profile visibility");
/***** Show form again *****/
Pre_EditPrefs ();
@ -621,18 +622,19 @@ static void Prf_PutLinkToUpdateAction (Act_Action_t Action,const char *Encrypted
void Prf_GetUsrFigures (long UsrCod,struct UsrFigures *UsrFigures)
{
char Query[512];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRows;
/***** Get user's figures from database *****/
sprintf (Query,"SELECT UNIX_TIMESTAMP(FirstClickTime),"
"DATEDIFF(NOW(),FirstClickTime)+1,"
"NumClicks,NumFileViews,NumForPst,NumMsgSnt"
" FROM usr_figures WHERE UsrCod=%ld",
UsrCod);
if ((NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get user's figures")))
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")))
{
/***** Get user's figures *****/
row = mysql_fetch_row (mysql_res);
@ -679,16 +681,17 @@ void Prf_GetUsrFigures (long UsrCod,struct UsrFigures *UsrFigures)
static unsigned long Prf_GetRankingFigure (long UsrCod,const char *FieldName)
{
char Query[256];
char *Query;
/***** Select number of rows with figure
greater than the figure of this user *****/
sprintf (Query,"SELECT COUNT(*)+1 FROM usr_figures"
" WHERE UsrCod<>%ld" // Really not necessary here
" AND %s>"
"(SELECT %s FROM usr_figures WHERE UsrCod=%ld)",
UsrCod,FieldName,FieldName,UsrCod);
return DB_QueryCOUNT (Query,"can not get ranking using a figure");
if (asprintf (&Query,"SELECT COUNT(*)+1 FROM usr_figures"
" WHERE UsrCod<>%ld" // Really not necessary here
" AND %s>"
"(SELECT %s FROM usr_figures WHERE UsrCod=%ld)",
UsrCod,FieldName,FieldName,UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
return DB_QueryCOUNT_free (Query,"can not get ranking using a figure");
}
/*****************************************************************************/
@ -697,12 +700,13 @@ static unsigned long Prf_GetRankingFigure (long UsrCod,const char *FieldName)
static unsigned long Prf_GetNumUsrsWithFigure (const char *FieldName)
{
char Query[128];
char *Query;
/***** Select number of rows with values already calculated *****/
sprintf (Query,"SELECT COUNT(*) FROM usr_figures WHERE %s>=0",
FieldName);
return DB_QueryCOUNT (Query,"can not get number of users with a figure");
if (asprintf (&Query,"SELECT COUNT(*) FROM usr_figures WHERE %s>=0",
FieldName) < 0)
Lay_NotEnoughMemoryExit ();
return DB_QueryCOUNT_free (Query,"can not get number of users with a figure");
}
/*****************************************************************************/
@ -711,26 +715,27 @@ static unsigned long Prf_GetNumUsrsWithFigure (const char *FieldName)
static unsigned long Prf_GetRankingNumClicksPerDay (long UsrCod)
{
char Query[1024];
char *Query;
/***** Select number of rows with number of clicks per day
greater than the clicks per day of this user *****/
sprintf (Query,"SELECT COUNT(*)+1 FROM"
" (SELECT NumClicks/(DATEDIFF(NOW(),FirstClickTime)+1)"
" AS NumClicksPerDay"
" FROM usr_figures"
" WHERE UsrCod<>%ld" // Necessary because the following comparison is not exact in floating point
" AND NumClicks>0"
" AND UNIX_TIMESTAMP(FirstClickTime)>0)"
" AS TableNumClicksPerDay"
" WHERE NumClicksPerDay>"
"(SELECT NumClicks/(DATEDIFF(NOW(),FirstClickTime)+1)"
" FROM usr_figures"
" WHERE UsrCod=%ld"
" AND NumClicks>0"
" AND UNIX_TIMESTAMP(FirstClickTime)>0)",
UsrCod,UsrCod);
return DB_QueryCOUNT (Query,"can not get ranking using number of clicks per day");
if (asprintf (&Query,"SELECT COUNT(*)+1 FROM"
" (SELECT NumClicks/(DATEDIFF(NOW(),FirstClickTime)+1)"
" AS NumClicksPerDay"
" FROM usr_figures"
" WHERE UsrCod<>%ld" // Necessary because the following comparison is not exact in floating point
" AND NumClicks>0"
" AND UNIX_TIMESTAMP(FirstClickTime)>0)"
" AS TableNumClicksPerDay"
" WHERE NumClicksPerDay>"
"(SELECT NumClicks/(DATEDIFF(NOW(),FirstClickTime)+1)"
" FROM usr_figures"
" WHERE UsrCod=%ld"
" AND NumClicks>0"
" AND UNIX_TIMESTAMP(FirstClickTime)>0)",
UsrCod,UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
return DB_QueryCOUNT_free (Query,"can not get ranking using number of clicks per day");
}
/*****************************************************************************/
@ -739,13 +744,14 @@ static unsigned long Prf_GetRankingNumClicksPerDay (long UsrCod)
static unsigned long Prf_GetNumUsrsWithNumClicksPerDay (void)
{
char Query[128];
char *Query;
/***** Select number of rows with values already calculated *****/
sprintf (Query,"SELECT COUNT(*) FROM usr_figures"
" WHERE NumClicks>0"
" AND UNIX_TIMESTAMP(FirstClickTime)>0");
return DB_QueryCOUNT (Query,"can not get number of users with number of clicks per day");
if (asprintf (&Query,"SELECT COUNT(*) FROM usr_figures"
" WHERE NumClicks>0"
" AND UNIX_TIMESTAMP(FirstClickTime)>0") < 0)
Lay_NotEnoughMemoryExit ();
return DB_QueryCOUNT_free (Query,"can not get number of users with number of clicks per day");
}
/*****************************************************************************/
@ -839,7 +845,7 @@ bool Prf_GetAndStoreAllUsrFigures (long UsrCod,struct UsrFigures *UsrFigures)
static void Prf_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod)
{
char Query[256];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
struct UsrFigures UsrFigures;
@ -850,11 +856,12 @@ static void Prf_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod)
Prf_ResetUsrFigures (&UsrFigures);
/***** Get first click from log table *****/
sprintf (Query,"SELECT UNIX_TIMESTAMP("
"(SELECT MIN(ClickTime) FROM log_full WHERE UsrCod=%ld)"
")",
UsrCod);
if (DB_QuerySELECT (Query,&mysql_res,"can not get user's first click"))
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"))
{
/* Get first click */
row = mysql_fetch_row (mysql_res);
@ -869,11 +876,12 @@ static void Prf_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod)
/***** Update first click time in user's figures *****/
if (Prf_CheckIfUsrFiguresExists (UsrCod))
{
sprintf (Query,"UPDATE usr_figures"
" SET FirstClickTime=FROM_UNIXTIME(%ld)"
" WHERE UsrCod=%ld",
(long) UsrFigures.FirstClickTimeUTC,UsrCod);
DB_QueryUPDATE (Query,"can not update user's figures");
if (asprintf (&Query,"UPDATE usr_figures"
" SET FirstClickTime=FROM_UNIXTIME(%ld)"
" WHERE UsrCod=%ld",
(long) UsrFigures.FirstClickTimeUTC,UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryUPDATE_free (Query,"can not update user's figures");
}
else // User entry does not exist
Prf_CreateUsrFigures (UsrCod,&UsrFigures,false);
@ -886,7 +894,7 @@ static void Prf_GetFirstClickFromLogAndStoreAsUsrFigure (long UsrCod)
static void Prf_GetNumClicksAndStoreAsUsrFigure (long UsrCod)
{
char Query[256];
char *Query;
struct UsrFigures UsrFigures;
if (Usr_ChkIfUsrCodExists (UsrCod))
@ -895,17 +903,19 @@ static void Prf_GetNumClicksAndStoreAsUsrFigure (long UsrCod)
Prf_ResetUsrFigures (&UsrFigures);
/***** Get number of clicks from database *****/
sprintf (Query,"SELECT COUNT(*) FROM log_full WHERE UsrCod=%ld",
UsrCod);
UsrFigures.NumClicks = (long) DB_QueryCOUNT (Query,"can not get number of clicks");
if (asprintf (&Query,"SELECT COUNT(*) FROM log_full WHERE UsrCod=%ld",
UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
UsrFigures.NumClicks = (long) DB_QueryCOUNT_free (Query,"can not get number of clicks");
/***** Update number of clicks in user's figures *****/
if (Prf_CheckIfUsrFiguresExists (UsrCod))
{
sprintf (Query,"UPDATE usr_figures SET NumClicks=%ld"
" WHERE UsrCod=%ld",
UsrFigures.NumClicks,UsrCod);
DB_QueryUPDATE (Query,"can not update user's figures");
if (asprintf (&Query,"UPDATE usr_figures SET NumClicks=%ld"
" WHERE UsrCod=%ld",
UsrFigures.NumClicks,UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryUPDATE_free (Query,"can not update user's figures");
}
else // User entry does not exist
Prf_CreateUsrFigures (UsrCod,&UsrFigures,false);
@ -918,7 +928,7 @@ static void Prf_GetNumClicksAndStoreAsUsrFigure (long UsrCod)
static void Prf_GetNumFileViewsAndStoreAsUsrFigure (long UsrCod)
{
char Query[256];
char *Query;
struct UsrFigures UsrFigures;
if (Usr_ChkIfUsrCodExists (UsrCod))
@ -932,10 +942,11 @@ static void Prf_GetNumFileViewsAndStoreAsUsrFigure (long UsrCod)
/***** Update number of file views in user's figures *****/
if (Prf_CheckIfUsrFiguresExists (UsrCod))
{
sprintf (Query,"UPDATE usr_figures SET NumFileViews=%ld"
" WHERE UsrCod=%ld",
UsrFigures.NumFileViews,UsrCod);
DB_QueryUPDATE (Query,"can not update user's figures");
if (asprintf (&Query,"UPDATE usr_figures SET NumFileViews=%ld"
" WHERE UsrCod=%ld",
UsrFigures.NumFileViews,UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryUPDATE_free (Query,"can not update user's figures");
}
else // User entry does not exist
Prf_CreateUsrFigures (UsrCod,&UsrFigures,false);
@ -948,7 +959,7 @@ static void Prf_GetNumFileViewsAndStoreAsUsrFigure (long UsrCod)
static void Prf_GetNumForPstAndStoreAsUsrFigure (long UsrCod)
{
char Query[256];
char *Query;
struct UsrFigures UsrFigures;
if (Usr_ChkIfUsrCodExists (UsrCod))
@ -962,10 +973,11 @@ static void Prf_GetNumForPstAndStoreAsUsrFigure (long UsrCod)
/***** Update number of forum posts in user's figures *****/
if (Prf_CheckIfUsrFiguresExists (UsrCod))
{
sprintf (Query,"UPDATE usr_figures SET NumForPst=%ld"
" WHERE UsrCod=%ld",
UsrFigures.NumForPst,UsrCod);
DB_QueryUPDATE (Query,"can not update user's figures");
if (asprintf (&Query,"UPDATE usr_figures SET NumForPst=%ld"
" WHERE UsrCod=%ld",
UsrFigures.NumForPst,UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryUPDATE_free (Query,"can not update user's figures");
}
else // User entry does not exist
Prf_CreateUsrFigures (UsrCod,&UsrFigures,false);
@ -978,7 +990,7 @@ static void Prf_GetNumForPstAndStoreAsUsrFigure (long UsrCod)
static void Prf_GetNumMsgSntAndStoreAsUsrFigure (long UsrCod)
{
char Query[256];
char *Query;
struct UsrFigures UsrFigures;
if (Usr_ChkIfUsrCodExists (UsrCod))
@ -992,10 +1004,11 @@ static void Prf_GetNumMsgSntAndStoreAsUsrFigure (long UsrCod)
/***** Update number of messages sent in user's figures *****/
if (Prf_CheckIfUsrFiguresExists (UsrCod))
{
sprintf (Query,"UPDATE usr_figures SET NumMsgSnt=%ld"
" WHERE UsrCod=%ld",
UsrFigures.NumMsgSnt,UsrCod);
DB_QueryUPDATE (Query,"can not update user's figures");
if (asprintf (&Query,"UPDATE usr_figures SET NumMsgSnt=%ld"
" WHERE UsrCod=%ld",
UsrFigures.NumMsgSnt,UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryUPDATE_free (Query,"can not update user's figures");
}
else // User entry does not exist
Prf_CreateUsrFigures (UsrCod,&UsrFigures,false);
@ -1044,7 +1057,7 @@ static void Prf_ResetUsrFigures (struct UsrFigures *UsrFigures)
static void Prf_CreateUsrFigures (long UsrCod,const struct UsrFigures *UsrFigures,
bool CreatingMyOwnAccount)
{
char Query[512 + Prf_MAX_BYTES_SUBQUERY_FIRST_CLICK_TIME];
char *Query;
char SubQueryFirstClickTime[Prf_MAX_BYTES_SUBQUERY_FIRST_CLICK_TIME + 1];
if (CreatingMyOwnAccount)
@ -1056,17 +1069,18 @@ static void Prf_CreateUsrFigures (long UsrCod,const struct UsrFigures *UsrFigure
(long) UsrFigures->FirstClickTimeUTC); // 0 ==> unknown first click time or user never logged
/***** Create user's figures *****/
sprintf (Query,"INSERT INTO usr_figures"
" (UsrCod,FirstClickTime,NumClicks,NumFileViews,NumForPst,NumMsgSnt)"
" VALUES"
" (%ld,%s,%ld,%ld,%ld,%ld)",
UsrCod,
SubQueryFirstClickTime,
UsrFigures->NumClicks, // -1L ==> unknown number of clicks
UsrFigures->NumFileViews, // -1L ==> unknown number of file views
UsrFigures->NumForPst, // -1L ==> unknown number of forum posts
UsrFigures->NumMsgSnt); // -1L ==> unknown number of messages sent
DB_QueryINSERT (Query,"can not create user's figures");
if (asprintf (&Query,"INSERT INTO usr_figures"
" (UsrCod,FirstClickTime,NumClicks,NumFileViews,NumForPst,NumMsgSnt)"
" VALUES"
" (%ld,%s,%ld,%ld,%ld,%ld)",
UsrCod,
SubQueryFirstClickTime,
UsrFigures->NumClicks, // -1L ==> unknown number of clicks
UsrFigures->NumFileViews, // -1L ==> unknown number of file views
UsrFigures->NumForPst, // -1L ==> unknown number of forum posts
UsrFigures->NumMsgSnt) < 0) // -1L ==> unknown number of messages sent
Lay_NotEnoughMemoryExit ();
DB_QueryINSERT_free (Query,"can not create user's figures");
}
/*****************************************************************************/
@ -1075,12 +1089,13 @@ static void Prf_CreateUsrFigures (long UsrCod,const struct UsrFigures *UsrFigure
void Prf_RemoveUsrFigures (long UsrCod)
{
char Query[128];
char *Query;
/***** Remove user's figures *****/
sprintf (Query,"DELETE FROM usr_figures WHERE UsrCod=%ld",
UsrCod);
DB_QueryDELETE (Query,"can not delete user's figures");
if (asprintf (&Query,"DELETE FROM usr_figures WHERE UsrCod=%ld",
UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE_free (Query,"can not delete user's figures");
}
/*****************************************************************************/
@ -1089,11 +1104,12 @@ void Prf_RemoveUsrFigures (long UsrCod)
static bool Prf_CheckIfUsrFiguresExists (long UsrCod)
{
char Query[128];
char *Query;
sprintf (Query,"SELECT COUNT(*) FROM usr_figures WHERE UsrCod=%ld",
UsrCod);
return (DB_QueryCOUNT (Query,"can not get user's first click") != 0);
if (asprintf (&Query,"SELECT COUNT(*) FROM usr_figures WHERE UsrCod=%ld",
UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
return (DB_QueryCOUNT_free (Query,"can not get user's first click") != 0);
}
/*****************************************************************************/
@ -1102,14 +1118,15 @@ static bool Prf_CheckIfUsrFiguresExists (long UsrCod)
void Prf_IncrementNumClicksUsr (long UsrCod)
{
char Query[256];
char *Query;
/***** Increment number of clicks *****/
// If NumClicks < 0 ==> not yet calculated, so do nothing
sprintf (Query,"UPDATE IGNORE usr_figures SET NumClicks=NumClicks+1"
" WHERE UsrCod=%ld AND NumClicks>=0",
UsrCod);
DB_QueryINSERT (Query,"can not increment user's clicks");
if (asprintf (&Query,"UPDATE IGNORE usr_figures SET NumClicks=NumClicks+1"
" WHERE UsrCod=%ld AND NumClicks>=0",
UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryINSERT_free (Query,"can not increment user's clicks");
}
/*****************************************************************************/
@ -1118,14 +1135,15 @@ void Prf_IncrementNumClicksUsr (long UsrCod)
void Prf_IncrementNumFileViewsUsr (long UsrCod)
{
char Query[256];
char *Query;
/***** Increment number of file views *****/
// If NumFileViews < 0 ==> not yet calculated, so do nothing
sprintf (Query,"UPDATE IGNORE usr_figures SET NumFileViews=NumFileViews+1"
" WHERE UsrCod=%ld AND NumFileViews>=0",
UsrCod);
DB_QueryINSERT (Query,"can not increment user's file views");
if (asprintf (&Query,"UPDATE IGNORE usr_figures SET NumFileViews=NumFileViews+1"
" WHERE UsrCod=%ld AND NumFileViews>=0",
UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryINSERT_free (Query,"can not increment user's file views");
}
/*****************************************************************************/
@ -1134,14 +1152,15 @@ void Prf_IncrementNumFileViewsUsr (long UsrCod)
void Prf_IncrementNumForPstUsr (long UsrCod)
{
char Query[256];
char *Query;
/***** Increment number of forum posts *****/
// If NumForPst < 0 ==> not yet calculated, so do nothing
sprintf (Query,"UPDATE IGNORE usr_figures SET NumForPst=NumForPst+1"
" WHERE UsrCod=%ld AND NumForPst>=0",
UsrCod);
DB_QueryINSERT (Query,"can not increment user's forum posts");
if (asprintf (&Query,"UPDATE IGNORE usr_figures SET NumForPst=NumForPst+1"
" WHERE UsrCod=%ld AND NumForPst>=0",
UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryINSERT_free (Query,"can not increment user's forum posts");
}
/*****************************************************************************/
@ -1150,14 +1169,15 @@ void Prf_IncrementNumForPstUsr (long UsrCod)
void Prf_IncrementNumMsgSntUsr (long UsrCod)
{
char Query[256];
char *Query;
/***** Increment number of messages sent *****/
// If NumMsgSnt < 0 ==> not yet calculated, so do nothing
sprintf (Query,"UPDATE IGNORE usr_figures SET NumMsgSnt=NumMsgSnt+1"
" WHERE UsrCod=%ld AND NumMsgSnt>=0",
UsrCod);
DB_QueryINSERT (Query,"can not increment user's messages sent");
if (asprintf (&Query,"UPDATE IGNORE usr_figures SET NumMsgSnt=NumMsgSnt+1"
" WHERE UsrCod=%ld AND NumMsgSnt>=0",
UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryINSERT_free (Query,"can not increment user's messages sent");
}
/*****************************************************************************/
@ -1277,7 +1297,7 @@ static void Prf_GetAndShowRankingFigure (const char *FieldName)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
Prf_ShowRankingFigure (Query);
@ -1351,7 +1371,7 @@ void Prf_ShowRankingFigure (const char *Query)
void Prf_GetAndShowRankingClicksPerDay (void)
{
char Query[1024];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumUsrs;
@ -1365,94 +1385,100 @@ void Prf_GetAndShowRankingClicksPerDay (void)
switch (Gbl.Scope.Current)
{
case Sco_SCOPE_SYS:
sprintf (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");
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 ();
break;
case Sco_SCOPE_CTY:
sprintf (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);
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 ();
break;
case Sco_SCOPE_INS:
sprintf (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);
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 ();
break;
case Sco_SCOPE_CTR:
sprintf (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);
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 ();
break;
case Sco_SCOPE_DEG:
sprintf (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);
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 ();
break;
case Sco_SCOPE_CRS:
sprintf (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);
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 ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumUsrs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get ranking");
NumUsrs = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get ranking");
if (NumUsrs)
{
/***** Initialize structure with user's data *****/

View File

@ -25,8 +25,10 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
#define _GNU_SOURCE // For asprintf
#include <linux/limits.h> // For PATH_MAX
#include <linux/stddef.h> // For NULL
#include <stdio.h> // For asprintf
#include <stdlib.h> // For calloc
#include <string.h> // For string functions
@ -1797,20 +1799,21 @@ static void Prj_ShowTableAllProjectsMembersWithARole (const struct Project *Prj,
static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject,
MYSQL_RES **mysql_res)
{
char Query[1024];
char *Query;
/***** Get users in project from database *****/
sprintf (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);
return (unsigned) DB_QuerySELECT (Query,mysql_res,
"can not get users in project");
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");
}
/*****************************************************************************/
@ -1825,7 +1828,7 @@ void Prj_FlushCacheMyRoleInProject (void)
Prj_RoleInProject_t Prj_GetMyRoleInProject (long PrjCod)
{
char Query[256];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -1842,10 +1845,11 @@ 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;
sprintf (Query,"SELECT RoleInProject FROM prj_usr"
" WHERE PrjCod=%ld AND UsrCod=%ld",
PrjCod,Gbl.Usrs.Me.UsrDat.UsrCod);
if (DB_QuerySELECT (Query,&mysql_res,"can not get my role in project"))
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"))
{
row = mysql_fetch_row (mysql_res);
Gbl.Cache.MyRoleInProject.RoleInProject = Prj_ConvertUnsignedStrToRoleInProject (row[0]);
@ -1950,7 +1954,7 @@ static void Prj_AddUsrToProject (Prj_RoleInProject_t RoleInProject)
long PrjCod;
struct ListUsrCods ListUsrCods;
unsigned NumUsr;
char Query[512];
char *Query;
bool ItsMe;
/***** Get project code *****/
@ -1972,12 +1976,14 @@ static void Prj_AddUsrToProject (Prj_RoleInProject_t RoleInProject)
Usr_GetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat);
/* Add user to project */
sprintf (Query,"REPLACE INTO prj_usr"
" (PrjCod,RoleInProject,UsrCod)"
" VALUES"
" (%ld,%u,%ld)",
PrjCod,(unsigned) RoleInProject,Gbl.Usrs.Other.UsrDat.UsrCod);
DB_QueryREPLACE (Query,"can not add user to project");
if (asprintf (&Query,"REPLACE INTO prj_usr"
" (PrjCod,RoleInProject,UsrCod)"
" VALUES"
" (%ld,%u,%ld)",
PrjCod,(unsigned) RoleInProject,
Gbl.Usrs.Other.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryREPLACE_free (Query,"can not add user to project");
/***** Flush cache *****/
ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
@ -2117,7 +2123,7 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
extern const char *Txt_THE_USER_X_has_been_removed_as_a_Y_from_the_project_Z;
extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT];
extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
char Query[256];
char *Query;
struct Project Prj;
bool ItsMe;
@ -2138,12 +2144,13 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
if (Prj_CheckIfICanEditProject (Prj.PrjCod))
{
/***** Remove user from the table of project-users *****/
sprintf (Query,"DELETE FROM prj_usr"
" WHERE PrjCod=%ld AND RoleInProject=%u AND UsrCod=%ld",
Prj.PrjCod,
(unsigned) RoleInProject,
Gbl.Usrs.Other.UsrDat.UsrCod);
DB_QueryDELETE (Query,"can not remove a user from a project");
if (asprintf (&Query,"DELETE FROM prj_usr"
" WHERE PrjCod=%ld AND RoleInProject=%u AND UsrCod=%ld",
Prj.PrjCod,
(unsigned) RoleInProject,
Gbl.Usrs.Other.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE_free (Query,"can not remove a user from a project");
/***** Flush cache *****/
ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
@ -2288,7 +2295,7 @@ void Prj_GetListProjects (void)
char HidVisSubQuery[Prj_MAX_BYTES_SUBQUERY];
char DptCodSubQuery[Prj_MAX_BYTES_SUBQUERY];
char OrderBySubQuery[Prj_MAX_BYTES_SUBQUERY];
char Query[512 * Prj_MAX_BYTES_SUBQUERY * 4];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -2389,31 +2396,33 @@ void Prj_GetListProjects (void)
case Prj_ORDER_START_TIME:
case Prj_ORDER_END_TIME:
case Prj_ORDER_TITLE:
sprintf (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);
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 ();
break;
case Prj_ORDER_DEPARTMENT:
sprintf (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);
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 ();
break;
}
else // Gbl.Prjs.My_All == Prj_ALL_PROJECTS
@ -2422,29 +2431,31 @@ void Prj_GetListProjects (void)
case Prj_ORDER_START_TIME:
case Prj_ORDER_END_TIME:
case Prj_ORDER_TITLE:
sprintf (Query,"SELECT projects.PrjCod"
" FROM projects"
" WHERE projects.CrsCod=%ld"
"%s%s%s"
" ORDER BY %s",
Gbl.CurrentCrs.Crs.CrsCod,
PreNonSubQuery,HidVisSubQuery,DptCodSubQuery,
OrderBySubQuery);
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 ();
break;
case Prj_ORDER_DEPARTMENT:
sprintf (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);
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 ();
break;
}
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get projects");
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get projects");
if (NumRows) // Projects found...
{
@ -2481,7 +2492,7 @@ void Prj_GetListProjects (void)
long Prj_GetCourseOfProject (long PrjCod)
{
char Query[128];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long CrsCod = -1L;
@ -2489,8 +2500,10 @@ long Prj_GetCourseOfProject (long PrjCod)
if (PrjCod > 0)
{
/***** Get course code from database *****/
sprintf (Query,"SELECT CrsCod FROM projects WHERE PrjCod=%ld",PrjCod);
if (DB_QuerySELECT (Query,&mysql_res,"can not get project course")) // Project found...
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...
{
/* Get row */
row = mysql_fetch_row (mysql_res);
@ -2512,18 +2525,19 @@ long Prj_GetCourseOfProject (long PrjCod)
void Prj_GetDataOfProjectByCod (struct Project *Prj)
{
char Query[1024];
char *Query;
if (Prj->PrjCod > 0)
{
/***** Build query *****/
sprintf (Query,"SELECT PrjCod,CrsCod,DptCod,Hidden,Preassigned,NumStds,Proposal,"
"UNIX_TIMESTAMP(CreatTime),"
"UNIX_TIMESTAMP(ModifTime),"
"Title,Description,Knowledge,Materials,URL"
" FROM projects"
" WHERE PrjCod=%ld AND CrsCod=%ld",
Prj->PrjCod,Gbl.CurrentCrs.Crs.CrsCod);
if (asprintf (&Query,"SELECT PrjCod,CrsCod,DptCod,Hidden,Preassigned,NumStds,Proposal,"
"UNIX_TIMESTAMP(CreatTime),"
"UNIX_TIMESTAMP(ModifTime),"
"Title,Description,Knowledge,Materials,URL"
" FROM projects"
" WHERE PrjCod=%ld AND CrsCod=%ld",
Prj->PrjCod,Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
/*
row[ 0]: PrjCod
row[ 1]: CrsCod
@ -2761,7 +2775,7 @@ void Prj_ReqRemProject (void)
void Prj_RemoveProject (void)
{
extern const char *Txt_Project_X_removed;
char Query[256];
char *Query;
struct Project Prj;
char PathRelPrj[PATH_MAX + 1];
@ -2779,20 +2793,22 @@ void Prj_RemoveProject (void)
if (Prj_CheckIfICanEditProject (Prj.PrjCod))
{
/***** Remove users in project *****/
sprintf (Query,"DELETE FROM prj_usr USING projects,prj_usr"
" WHERE projects.PrjCod=%ld AND projects.CrsCod=%ld"
" AND projects.PrjCod=prj_usr.PrjCod",
Prj.PrjCod,Gbl.CurrentCrs.Crs.CrsCod);
DB_QueryDELETE (Query,"can not remove project");
if (asprintf (&Query,"DELETE FROM prj_usr USING projects,prj_usr"
" WHERE projects.PrjCod=%ld AND projects.CrsCod=%ld"
" AND projects.PrjCod=prj_usr.PrjCod",
Prj.PrjCod,Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE_free (Query,"can not remove project");
/***** Flush cache *****/
Prj_FlushCacheMyRoleInProject ();
/***** Remove project *****/
sprintf (Query,"DELETE FROM projects"
" WHERE PrjCod=%ld AND CrsCod=%ld",
Prj.PrjCod,Gbl.CurrentCrs.Crs.CrsCod);
DB_QueryDELETE (Query,"can not remove project");
if (asprintf (&Query,"DELETE FROM projects"
" WHERE PrjCod=%ld AND CrsCod=%ld",
Prj.PrjCod,Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE_free (Query,"can not remove project");
/***** Remove information related to files in project *****/
Brw_RemovePrjFilesFromDB (Prj.PrjCod);
@ -2827,7 +2843,7 @@ void Prj_RemoveProject (void)
void Prj_HideProject (void)
{
extern const char *Txt_Project_X_is_now_hidden;
char Query[512];
char *Query;
struct Project Prj;
/***** Allocate memory for the project *****/
@ -2844,10 +2860,11 @@ void Prj_HideProject (void)
if (Prj_CheckIfICanEditProject (Prj.PrjCod))
{
/***** Hide project *****/
sprintf (Query,"UPDATE projects SET Hidden='Y'"
" WHERE PrjCod=%ld AND CrsCod=%ld",
Prj.PrjCod,Gbl.CurrentCrs.Crs.CrsCod);
DB_QueryUPDATE (Query,"can not hide project");
if (asprintf (&Query,"UPDATE projects SET Hidden='Y'"
" WHERE PrjCod=%ld AND CrsCod=%ld",
Prj.PrjCod,Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryUPDATE_free (Query,"can not hide project");
/***** Write message to show the change made *****/
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
@ -2872,7 +2889,7 @@ void Prj_HideProject (void)
void Prj_ShowProject (void)
{
extern const char *Txt_Project_X_is_now_visible;
char Query[512];
char *Query;
struct Project Prj;
/***** Allocate memory for the project *****/
@ -2889,10 +2906,11 @@ void Prj_ShowProject (void)
if (Prj_CheckIfICanEditProject (Prj.PrjCod))
{
/***** Show project *****/
sprintf (Query,"UPDATE projects SET Hidden='N'"
" WHERE PrjCod=%ld AND CrsCod=%ld",
Prj.PrjCod,Gbl.CurrentCrs.Crs.CrsCod);
DB_QueryUPDATE (Query,"can not show project");
if (asprintf (&Query,"UPDATE projects SET Hidden='N'"
" WHERE PrjCod=%ld AND CrsCod=%ld",
Prj.PrjCod,Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryUPDATE_free (Query,"can not show project");
/***** Write message to show the change made *****/
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
@ -3349,50 +3367,49 @@ void Prj_RecFormProject (void)
static void Prj_CreateProject (struct Project *Prj)
{
char Query[2048 +
Prj_MAX_BYTES_PROJECT_TITLE +
Cns_MAX_BYTES_TEXT * 3 +
Cns_MAX_BYTES_WWW];
char *Query;
/***** Set dates to now *****/
Prj->CreatTime =
Prj->ModifTime = Gbl.StartExecutionTimeUTC;
/***** Create a new project *****/
sprintf (Query,"INSERT INTO projects"
" (CrsCod,DptCod,Hidden,Preassigned,NumStds,Proposal,"
"CreatTime,ModifTime,"
"Title,Description,Knowledge,Materials,URL)"
" VALUES"
" (%ld,%ld,'%c','%c',%u,'%s',"
"FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld),"
"'%s','%s','%s','%s','%s')",
Gbl.CurrentCrs.Crs.CrsCod,
Prj->DptCod,
Prj->Hidden == Prj_HIDDEN ? 'Y' :
'N',
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' :
'N',
Prj->NumStds,
Prj_Proposal_DB[Prj->Proposal],
Prj->CreatTime,
Prj->ModifTime,
Prj->Title,
Prj->Description,
Prj->Knowledge,
Prj->Materials,
Prj->URL);
Prj->PrjCod = DB_QueryINSERTandReturnCode (Query,"can not create new project");
if (asprintf (&Query,"INSERT INTO projects"
" (CrsCod,DptCod,Hidden,Preassigned,NumStds,Proposal,"
"CreatTime,ModifTime,"
"Title,Description,Knowledge,Materials,URL)"
" VALUES"
" (%ld,%ld,'%c','%c',%u,'%s',"
"FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld),"
"'%s','%s','%s','%s','%s')",
Gbl.CurrentCrs.Crs.CrsCod,
Prj->DptCod,
Prj->Hidden == Prj_HIDDEN ? 'Y' :
'N',
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' :
'N',
Prj->NumStds,
Prj_Proposal_DB[Prj->Proposal],
Prj->CreatTime,
Prj->ModifTime,
Prj->Title,
Prj->Description,
Prj->Knowledge,
Prj->Materials,
Prj->URL) < 0)
Lay_NotEnoughMemoryExit ();
Prj->PrjCod = DB_QueryINSERTandReturnCode_free (Query,"can not create new project");
/***** Insert creator as first tutor *****/
sprintf (Query,"INSERT INTO prj_usr"
" (PrjCod,RoleInProject,UsrCod)"
" VALUES"
" (%ld,%u,%ld)",
Prj->PrjCod,
(unsigned) Prj_ROLE_TUT,
Gbl.Usrs.Me.UsrDat.UsrCod);
DB_QueryINSERT (Query,"can not add tutor");
if (asprintf (&Query,"INSERT INTO prj_usr"
" (PrjCod,RoleInProject,UsrCod)"
" VALUES"
" (%ld,%u,%ld)",
Prj->PrjCod,
(unsigned) Prj_ROLE_TUT,
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryINSERT_free (Query,"can not add tutor");
/***** Flush cache *****/
Prj_FlushCacheMyRoleInProject ();
@ -3404,36 +3421,34 @@ static void Prj_CreateProject (struct Project *Prj)
static void Prj_UpdateProject (struct Project *Prj)
{
char Query[1024 +
Prj_MAX_BYTES_PROJECT_TITLE +
Cns_MAX_BYTES_TEXT*3 +
Cns_MAX_BYTES_WWW];
char *Query;
/***** Adjust date of last edition to now *****/
Prj->ModifTime = Gbl.StartExecutionTimeUTC;
/***** Update the data of the project *****/
sprintf (Query,"UPDATE projects SET "
"DptCod=%ld,Hidden='%c',Preassigned='%c',NumStds=%u,Proposal='%s',"
"ModifTime=FROM_UNIXTIME(%ld),"
"Title='%s',"
"Description='%s',Knowledge='%s',Materials='%s',URL='%s'"
" WHERE PrjCod=%ld AND CrsCod=%ld",
Prj->DptCod,
Prj->Hidden == Prj_HIDDEN ? 'Y' :
'N',
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' :
'N',
Prj->NumStds,
Prj_Proposal_DB[Prj->Proposal],
Prj->ModifTime,
Prj->Title,
Prj->Description,
Prj->Knowledge,
Prj->Materials,
Prj->URL,
Prj->PrjCod,Gbl.CurrentCrs.Crs.CrsCod);
DB_QueryUPDATE (Query,"can not update project");
if (asprintf (&Query,"UPDATE projects SET "
"DptCod=%ld,Hidden='%c',Preassigned='%c',NumStds=%u,Proposal='%s',"
"ModifTime=FROM_UNIXTIME(%ld),"
"Title='%s',"
"Description='%s',Knowledge='%s',Materials='%s',URL='%s'"
" WHERE PrjCod=%ld AND CrsCod=%ld",
Prj->DptCod,
Prj->Hidden == Prj_HIDDEN ? 'Y' :
'N',
Prj->Preassigned == Prj_PREASSIGNED ? 'Y' :
'N',
Prj->NumStds,
Prj_Proposal_DB[Prj->Proposal],
Prj->ModifTime,
Prj->Title,
Prj->Description,
Prj->Knowledge,
Prj->Materials,
Prj->URL,
Prj->PrjCod,Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryUPDATE_free (Query,"can not update project");
}
/*****************************************************************************/
@ -3442,21 +3457,23 @@ static void Prj_UpdateProject (struct Project *Prj)
void Prj_RemoveCrsProjects (long CrsCod)
{
char Query[256];
char *Query;
/***** Remove users in projects of the course *****/
sprintf (Query,"DELETE FROM prj_usr USING projects,prj_usr"
" WHERE projects.CrsCod=%ld"
" AND projects.PrjCod=prj_usr.PrjCod",
CrsCod);
DB_QueryDELETE (Query,"can not remove all the projects of a course");
if (asprintf (&Query,"DELETE FROM prj_usr USING projects,prj_usr"
" WHERE projects.CrsCod=%ld"
" AND projects.PrjCod=prj_usr.PrjCod",
CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE_free (Query,"can not remove all the projects of a course");
/***** Flush cache *****/
Prj_FlushCacheMyRoleInProject ();
/***** Remove projects *****/
sprintf (Query,"DELETE FROM projects WHERE CrsCod=%ld",CrsCod);
DB_QueryDELETE (Query,"can not remove all the projects of a course");
if (asprintf (&Query,"DELETE FROM projects WHERE CrsCod=%ld",CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE_free (Query,"can not remove all the projects of a course");
}
/*****************************************************************************/
@ -3465,12 +3482,13 @@ void Prj_RemoveCrsProjects (long CrsCod)
void Prj_RemoveUsrFromProjects (long UsrCod)
{
char Query[128];
char *Query;
bool ItsMe;
/***** Remove user from projects *****/
sprintf (Query,"DELETE FROM prj_usr WHERE UsrCod=%ld",UsrCod);
DB_QueryDELETE (Query,"can not remove user from projects");
if (asprintf (&Query,"DELETE FROM prj_usr WHERE UsrCod=%ld",UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE_free (Query,"can not remove user from projects");
/***** Flush cache *****/
ItsMe = Usr_ItsMe (UsrCod);
@ -3486,7 +3504,7 @@ void Prj_RemoveUsrFromProjects (long UsrCod)
unsigned Prj_GetNumCoursesWithProjects (Sco_Scope_t Scope)
{
char Query[1024];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumCourses;
@ -3495,59 +3513,65 @@ unsigned Prj_GetNumCoursesWithProjects (Sco_Scope_t Scope)
switch (Scope)
{
case Sco_SCOPE_SYS:
sprintf (Query,"SELECT COUNT(DISTINCT CrsCod)"
" FROM projects"
" WHERE CrsCod>0");
if (asprintf (&Query,"SELECT COUNT(DISTINCT CrsCod)"
" FROM projects"
" WHERE CrsCod>0") < 0)
Lay_NotEnoughMemoryExit ();
break;
case Sco_SCOPE_CTY:
sprintf (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);
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 ();
break;
case Sco_SCOPE_INS:
sprintf (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);
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 ();
break;
case Sco_SCOPE_CTR:
sprintf (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);
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 ();
break;
case Sco_SCOPE_DEG:
sprintf (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);
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 ();
break;
case Sco_SCOPE_CRS:
sprintf (Query,"SELECT COUNT(DISTINCT CrsCod)"
" FROM projects"
" WHERE CrsCod=%ld",
Gbl.CurrentCrs.Crs.CrsCod);
if (asprintf (&Query,"SELECT COUNT(DISTINCT CrsCod)"
" FROM projects"
" WHERE CrsCod=%ld",
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT (Query,&mysql_res,"can not get number of courses with projects");
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of courses with projects");
/***** Get number of courses *****/
row = mysql_fetch_row (mysql_res);
@ -3567,7 +3591,7 @@ unsigned Prj_GetNumCoursesWithProjects (Sco_Scope_t Scope)
unsigned Prj_GetNumProjects (Sco_Scope_t Scope)
{
char Query[1024];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumProjects;
@ -3576,55 +3600,61 @@ unsigned Prj_GetNumProjects (Sco_Scope_t Scope)
switch (Scope)
{
case Sco_SCOPE_SYS:
sprintf (Query,"SELECT COUNT(*)"
if (asprintf (&Query,"SELECT COUNT(*)"
" FROM projects"
" WHERE CrsCod>0");
" WHERE CrsCod>0") < 0)
Lay_NotEnoughMemoryExit ();
break;
case Sco_SCOPE_CTY:
sprintf (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);
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 ();
break;
case Sco_SCOPE_INS:
sprintf (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);
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 ();
break;
case Sco_SCOPE_CTR:
sprintf (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);
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 ();
break;
case Sco_SCOPE_DEG:
sprintf (Query,"SELECT COUNT(*)"
" FROM courses,projects"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentDeg.Deg.DegCod);
if (asprintf (&Query,"SELECT COUNT(*)"
" FROM courses,projects"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=projects.CrsCod",
Gbl.CurrentDeg.Deg.DegCod) < 0)
Lay_NotEnoughMemoryExit ();
break;
case Sco_SCOPE_CRS:
sprintf (Query,"SELECT COUNT(*)"
" FROM projects"
" WHERE CrsCod=%ld",
Gbl.CurrentCrs.Crs.CrsCod);
if (asprintf (&Query,"SELECT COUNT(*)"
" FROM projects"
" WHERE CrsCod=%ld",
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT (Query,&mysql_res,"can not get number of projects");
DB_QuerySELECT_free (Query,&mysql_res,"can not get number of projects");
/***** Get number of projects *****/
row = mysql_fetch_row (mysql_res);

View File

@ -123,7 +123,7 @@ void Sco_PutSelectorScope (const char *ParamName,bool SendOnChange)
WriteScope = true;
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
@ -166,7 +166,7 @@ void Sco_PutSelectorScope (const char *ParamName,bool SendOnChange)
Gbl.CurrentCrs.Crs.ShrtName);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
fprintf (Gbl.F.Out,"</option>");

View File

@ -4585,7 +4585,7 @@ static void Sta_GetAndShowNumCtysInSWAD (void)
NumCtysWithStds = Cty_GetNumCtysWithUsrs (Rol_STD,SubQuery);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
@ -4721,7 +4721,7 @@ static void Sta_GetAndShowNumInssInSWAD (void)
NumInssWithStds = Ins_GetNumInssWithUsrs (Rol_STD,SubQuery);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
@ -4847,7 +4847,7 @@ static void Sta_GetAndShowNumCtrsInSWAD (void)
NumCtrsWithStds = Ctr_GetNumCtrsWithUsrs (Rol_STD,SubQuery);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
@ -4963,7 +4963,7 @@ static void Sta_GetAndShowNumDegsInSWAD (void)
NumDegsWithStds = Deg_GetNumDegsWithUsrs (Rol_STD,SubQuery);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
@ -5069,7 +5069,7 @@ static void Sta_GetAndShowNumCrssInSWAD (void)
NumCrssWithStds = Crs_GetNumCrssWithUsrs (Rol_STD,SubQuery);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
@ -5188,7 +5188,7 @@ static void Sta_GetAndShowInssOrderedByNumCtrs (void)
Gbl.CurrentIns.Ins.InsCod);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
Sta_GetAndShowInss (Query,Txt_Centres);
@ -5244,7 +5244,7 @@ static void Sta_GetAndShowInssOrderedByNumDegs (void)
Gbl.CurrentIns.Ins.InsCod);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
Sta_GetAndShowInss (Query,Txt_Degrees);
@ -5303,7 +5303,7 @@ static void Sta_GetAndShowInssOrderedByNumCrss (void)
Gbl.CurrentIns.Ins.InsCod);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
Sta_GetAndShowInss (Query,Txt_Courses);
@ -5365,7 +5365,7 @@ static void Sta_GetAndShowInssOrderedByNumUsrsInCrss (void)
Gbl.CurrentIns.Ins.InsCod);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
Sta_GetAndShowInss (Query,Txt_Users);
@ -5421,7 +5421,7 @@ static void Sta_GetAndShowInssOrderedByNumUsrsWhoClaimToBelongToThem (void)
Gbl.CurrentIns.Ins.InsCod);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
Sta_GetAndShowInss (Query,Txt_Users);
@ -6634,7 +6634,7 @@ static void Sta_GetSizeOfFileZoneFromDB (Sco_Scope_t Scope,
}
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT (Query,&mysql_res,"can not get size of a file browser");
@ -6841,7 +6841,7 @@ static void Sta_GetNumberOfOERsFromDB (Sco_Scope_t Scope,Brw_License_t License,u
(unsigned) License);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get number of OERs");
@ -7352,7 +7352,7 @@ static void Sta_GetAndShowSocialActivityStats (void)
(unsigned) NoteType);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumSocialNotes = 0;
@ -7456,7 +7456,7 @@ static void Sta_GetAndShowSocialActivityStats (void)
Gbl.CurrentCrs.Crs.CrsCod);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumSocialNotes = 0;
@ -7631,7 +7631,7 @@ static void Sta_GetAndShowFollowStats (void)
FieldDB[Fol]);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumUsrs = (unsigned) DB_QueryCOUNT (Query,"can not get the total number of following/followers");
@ -7742,7 +7742,7 @@ static void Sta_GetAndShowFollowStats (void)
FieldDB[1 - Fol]);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT (Query,&mysql_res,"can not get number of questions per survey");
@ -7902,7 +7902,7 @@ static void Sta_GetAndShowForumStats (void)
Sta_ShowStatOfAForumType (For_FORUM_COURSE_TCHS,-1L,-1L,-1L,-1L,Gbl.CurrentCrs.Crs.CrsCod,&StatsForum);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
@ -8249,7 +8249,7 @@ static void Sta_GetAndShowNumUsrsPerNotifyEvent (void)
Gbl.CurrentCrs.Crs.CrsCod);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumUsrsTotalWhoWantToBeNotifiedByEMailAboutSomeEvent = (unsigned) DB_QueryCOUNT (Query,"can not get the total number of users who want to be notified by email on some event");
@ -8318,7 +8318,7 @@ static void Sta_GetAndShowNumUsrsPerNotifyEvent (void)
Gbl.CurrentCrs.Crs.CrsCod,(1 << NotifyEvent));
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumUsrs[NotifyEvent] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who want to be notified by email on an event");
@ -8374,7 +8374,7 @@ static void Sta_GetAndShowNumUsrsPerNotifyEvent (void)
Gbl.CurrentCrs.Crs.CrsCod,(unsigned) NotifyEvent);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT (Query,&mysql_res,"can not get the number of notifications by email");
@ -8873,7 +8873,7 @@ static void Sta_GetAndShowNumUsrsPerPrivacyForAnObject (const char *TxtObject,co
Pri_VisibilityDB[Visibility]);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumUsrs[Visibility] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen a privacy");
@ -9010,7 +9010,7 @@ static void Sta_GetAndShowNumUsrsPerLanguage (void)
Txt_STR_LANG_ID[Lan]);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumUsrs[Lan] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen a language");
@ -9147,7 +9147,7 @@ static void Sta_GetAndShowNumUsrsPerFirstDayOfWeek (void)
Gbl.CurrentCrs.Crs.CrsCod,(unsigned) FirstDayOfWeek);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumUsrs[FirstDayOfWeek] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen a first day of week");
@ -9286,7 +9286,7 @@ static void Sta_GetAndShowNumUsrsPerDateFormat (void)
Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Format);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumUsrs[Format] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen a date format");
@ -9424,7 +9424,7 @@ static void Sta_GetAndShowNumUsrsPerIconSet (void)
Gbl.CurrentCrs.Crs.CrsCod,Ico_IconSetId[IconSet]);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumUsrs[IconSet] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen an icon set");
@ -9567,7 +9567,7 @@ static void Sta_GetAndShowNumUsrsPerMenu (void)
Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Menu);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumUsrs[Menu] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen a menu");
@ -9707,7 +9707,7 @@ static void Sta_GetAndShowNumUsrsPerTheme (void)
Gbl.CurrentCrs.Crs.CrsCod,The_ThemeId[Theme]);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumUsrs[Theme] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen a theme");
@ -9846,7 +9846,7 @@ static void Sta_GetAndShowNumUsrsPerSideColumns (void)
Gbl.CurrentCrs.Crs.CrsCod,SideCols);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
NumUsrs[SideCols] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen a layout of columns");

View File

@ -2171,7 +2171,7 @@ void Svy_RecFormSurvey (void)
NewSvy.Cod = Gbl.CurrentCrs.Crs.CrsCod;
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
@ -3897,7 +3897,7 @@ unsigned Svy_GetNumCoursesWithCrsSurveys (Sco_Scope_t Scope)
Gbl.CurrentCrs.Crs.CrsCod);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT (Query,&mysql_res,"can not get number of courses with surveys");
@ -3987,7 +3987,7 @@ unsigned Svy_GetNumCrsSurveys (Sco_Scope_t Scope,unsigned *NumNotif)
Gbl.CurrentCrs.Crs.CrsCod);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT (Query,&mysql_res,"can not get number of surveys");
@ -4100,7 +4100,7 @@ float Svy_GetNumQstsPerCrsSurvey (Sco_Scope_t Scope)
Sco_ScopeDB[Sco_SCOPE_CRS],Gbl.CurrentCrs.Crs.CrsCod);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT (Query,&mysql_res,"can not get number of questions per survey");

View File

@ -7108,7 +7108,7 @@ static unsigned Tst_GetNumTstQuestions (Sco_Scope_t Scope,Tst_AnswerType_t AnsTy
Tst_StrAnswerTypesDB[AnsType]);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT (Query,&mysql_res,"can not get number of test questions");
@ -7257,7 +7257,7 @@ static unsigned Tst_GetNumCoursesWithTstQuestions (Sco_Scope_t Scope,Tst_AnswerT
Tst_StrAnswerTypesDB[AnsType]);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT (Query,&mysql_res,"can not get number of courses with test questions");
@ -7426,7 +7426,7 @@ static unsigned Tst_GetNumCoursesWithPluggableTstQuestions (Sco_Scope_t Scope,Ts
Tst_PluggableDB[Tst_PLUGGABLE_YES]);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT (Query,&mysql_res,"can not get number of courses with pluggable test questions");

View File

@ -4522,7 +4522,7 @@ void Usr_GetListUsrs (Sco_Scope_t Scope,Rol_Role_t Role)
Usr_BuildQueryToGetUsrsLstCrs (Role,Query);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
/*
@ -4657,7 +4657,7 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
OrderQuery);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
break;
@ -4782,7 +4782,7 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
OrderQuery);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
break;
@ -4989,7 +4989,7 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentDeg.Deg.DegCod);
break;
default: // not aplicable
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
@ -5229,7 +5229,7 @@ static void Usr_GetListUsrsFromQuery (const char *Query,Rol_Role_t Role,Sco_Scop
switch (Scope)
{
case Sco_SCOPE_UNK: // Unknown
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
case Sco_SCOPE_SYS: // System
// Query result has not a column with the acceptation
@ -5267,7 +5267,7 @@ static void Usr_GetListUsrsFromQuery (const char *Query,Rol_Role_t Role,Sco_Scop
switch (Scope)
{
case Sco_SCOPE_UNK: // Unknown
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
case Sco_SCOPE_SYS: // System
case Sco_SCOPE_CTY: // Country
@ -8632,7 +8632,7 @@ unsigned Usr_GetTotalNumberOfUsersInCourses (Sco_Scope_t Scope,unsigned Roles)
Gbl.CurrentCrs.Crs.CrsCod,SubQueryRoles);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
@ -8775,7 +8775,7 @@ float Usr_GetNumCrssPerUsr (Rol_Role_t Role)
case Sco_SCOPE_CRS:
return 1.0;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT (Query,&mysql_res,"can not get number of courses per user");
@ -8926,7 +8926,7 @@ float Usr_GetNumUsrsPerCrs (Rol_Role_t Role)
}
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
Lay_WrongScopeExit ();
break;
}
DB_QuerySELECT (Query,&mysql_res,"can not get number of users per course");