mirror of https://github.com/acanas/swad-core.git
Version 18.11
This commit is contained in:
parent
6ca705598e
commit
f7b1f69fc3
|
@ -233,7 +233,7 @@ unsigned ID_GetListUsrCodsFromUsrID (struct UsrData *UsrDat,
|
||||||
Str_Concat (Query," AND Confirmed='Y'",
|
Str_Concat (Query," AND Confirmed='Y'",
|
||||||
MaxLength);
|
MaxLength);
|
||||||
|
|
||||||
ListUsrCods->NumUsrs = (unsigned) DB_QuerySELECT (&Query,&mysql_res,"can not get user's codes");
|
ListUsrCods->NumUsrs = (unsigned) DB_QuerySELECT_old (&Query,&mysql_res,"can not get user's codes");
|
||||||
if (ListUsrCods->NumUsrs)
|
if (ListUsrCods->NumUsrs)
|
||||||
{
|
{
|
||||||
/***** Allocate space for the list of users' codes *****/
|
/***** Allocate space for the list of users' codes *****/
|
||||||
|
|
|
@ -200,14 +200,13 @@ void Acc_CheckIfEmptyAccountExists (void)
|
||||||
/***** Check if there are users with this user's ID *****/
|
/***** Check if there are users with this user's ID *****/
|
||||||
if (ID_CheckIfUsrIDIsValid (ID))
|
if (ID_CheckIfUsrIDIsValid (ID))
|
||||||
{
|
{
|
||||||
DB_BuildQuery ("SELECT usr_IDs.UsrCod"
|
NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get user's codes"
|
||||||
" FROM usr_IDs,usr_data"
|
"SELECT usr_IDs.UsrCod"
|
||||||
" WHERE usr_IDs.UsrID='%s'"
|
" FROM usr_IDs,usr_data"
|
||||||
" AND usr_IDs.UsrCod=usr_data.UsrCod"
|
" WHERE usr_IDs.UsrID='%s'"
|
||||||
" AND usr_data.Password=''",
|
" AND usr_IDs.UsrCod=usr_data.UsrCod"
|
||||||
ID);
|
" AND usr_data.Password=''",
|
||||||
NumUsrs = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get user's codes");
|
ID);
|
||||||
|
|
||||||
if (NumUsrs)
|
if (NumUsrs)
|
||||||
{
|
{
|
||||||
/***** Start box and table *****/
|
/***** Start box and table *****/
|
||||||
|
|
|
@ -5123,10 +5123,10 @@ char *Act_GetActionTextFromDB (long ActCod,
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
|
|
||||||
/***** Get test for an action from database *****/
|
/***** Get test for an action from database *****/
|
||||||
DB_BuildQuery ("SELECT Txt FROM actions"
|
if (DB_QuerySELECT (&mysql_res,"can not get text for an action",
|
||||||
" WHERE ActCod=%ld AND Language='%s'",
|
"SELECT Txt FROM actions"
|
||||||
ActCod,Txt_STR_LANG_ID[Txt_LANGUAGE_ES]); // !!! TODO: Replace Txt_LANGUAGE_ES by Gbl.Prefs.Language !!!
|
" WHERE ActCod=%ld AND Language='%s'",
|
||||||
if (DB_QuerySELECT_new (&mysql_res,"can not get text for an action"))
|
ActCod,Txt_STR_LANG_ID[Txt_LANGUAGE_ES])) // !!! TODO: Replace Txt_LANGUAGE_ES by Gbl.Prefs.Language !!!
|
||||||
{
|
{
|
||||||
/***** Get text *****/
|
/***** Get text *****/
|
||||||
row = mysql_fetch_row (mysql_res);
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
|
222
swad_agenda.c
222
swad_agenda.c
|
@ -1105,15 +1105,15 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Build full query */
|
/* Build full query */
|
||||||
DB_BuildQuery ("SELECT AgdCod FROM agendas"
|
NumRows = DB_QuerySELECT (&mysql_res,"can not get agenda events",
|
||||||
" WHERE %s%s%s%s"
|
"SELECT AgdCod FROM agendas"
|
||||||
" ORDER BY %s",
|
" WHERE %s%s%s%s"
|
||||||
UsrSubQuery,
|
" ORDER BY %s",
|
||||||
Past__FutureEventsSubQuery,
|
UsrSubQuery,
|
||||||
PrivatPublicEventsSubQuery,
|
Past__FutureEventsSubQuery,
|
||||||
HiddenVisiblEventsSubQuery,
|
PrivatPublicEventsSubQuery,
|
||||||
OrderBySubQuery);
|
HiddenVisiblEventsSubQuery,
|
||||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get agenda events");
|
OrderBySubQuery);
|
||||||
|
|
||||||
/* Free allocated memory for subqueries */
|
/* Free allocated memory for subqueries */
|
||||||
free ((void *) OrderBySubQuery);
|
free ((void *) OrderBySubQuery);
|
||||||
|
@ -1157,19 +1157,17 @@ static void Agd_GetDataOfEventByCod (struct AgendaEvent *AgdEvent)
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
|
|
||||||
/***** Build query *****/
|
|
||||||
DB_BuildQuery ("SELECT AgdCod,Public,Hidden,"
|
|
||||||
"UNIX_TIMESTAMP(StartTime),"
|
|
||||||
"UNIX_TIMESTAMP(EndTime),"
|
|
||||||
"NOW()>EndTime," // Past event?
|
|
||||||
"NOW()<StartTime," // Future event?
|
|
||||||
"Event,Location"
|
|
||||||
" FROM agendas"
|
|
||||||
" WHERE AgdCod=%ld AND UsrCod=%ld",
|
|
||||||
AgdEvent->AgdCod,AgdEvent->UsrCod);
|
|
||||||
|
|
||||||
/***** Get data of event from database *****/
|
/***** Get data of event from database *****/
|
||||||
if (DB_QuerySELECT_new (&mysql_res,"can not get agenda event data")) // Event found...
|
if (DB_QuerySELECT (&mysql_res,"can not get agenda event data",
|
||||||
|
"SELECT AgdCod,Public,Hidden,"
|
||||||
|
"UNIX_TIMESTAMP(StartTime),"
|
||||||
|
"UNIX_TIMESTAMP(EndTime),"
|
||||||
|
"NOW()>EndTime," // Past event?
|
||||||
|
"NOW()<StartTime," // Future event?
|
||||||
|
"Event,Location"
|
||||||
|
" FROM agendas"
|
||||||
|
" WHERE AgdCod=%ld AND UsrCod=%ld",
|
||||||
|
AgdEvent->AgdCod,AgdEvent->UsrCod)) // Event found...
|
||||||
{
|
{
|
||||||
/* Get row:
|
/* Get row:
|
||||||
row[0] AgdCod
|
row[0] AgdCod
|
||||||
|
@ -1257,10 +1255,10 @@ static void Agd_GetEventTxtFromDB (struct AgendaEvent *AgdEvent,
|
||||||
unsigned long NumRows;
|
unsigned long NumRows;
|
||||||
|
|
||||||
/***** Get text of event from database *****/
|
/***** Get text of event from database *****/
|
||||||
DB_BuildQuery ("SELECT Txt FROM agendas"
|
NumRows = DB_QuerySELECT (&mysql_res,"can not get event text",
|
||||||
" WHERE AgdCod=%ld AND UsrCod=%ld",
|
"SELECT Txt FROM agendas"
|
||||||
AgdEvent->AgdCod,AgdEvent->UsrCod);
|
" WHERE AgdCod=%ld AND UsrCod=%ld",
|
||||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get event text");
|
AgdEvent->AgdCod,AgdEvent->UsrCod);
|
||||||
|
|
||||||
/***** The result of the query must have one row or none *****/
|
/***** The result of the query must have one row or none *****/
|
||||||
if (NumRows == 1)
|
if (NumRows == 1)
|
||||||
|
@ -1782,64 +1780,69 @@ unsigned Agd_GetNumUsrsWithEvents (Sco_Scope_t Scope)
|
||||||
switch (Scope)
|
switch (Scope)
|
||||||
{
|
{
|
||||||
case Sco_SCOPE_SYS:
|
case Sco_SCOPE_SYS:
|
||||||
DB_BuildQuery ("SELECT COUNT(DISTINCT UsrCod)"
|
DB_QuerySELECT (&mysql_res,"can not get number of users with events",
|
||||||
" FROM agendas"
|
"SELECT COUNT(DISTINCT UsrCod)"
|
||||||
" WHERE UsrCod>0");
|
" FROM agendas"
|
||||||
|
" WHERE UsrCod>0");
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_CTY:
|
case Sco_SCOPE_CTY:
|
||||||
DB_BuildQuery ("SELECT COUNT(DISTINCT agendas.UsrCod)"
|
DB_QuerySELECT (&mysql_res,"can not get number of users with events",
|
||||||
" FROM institutions,centres,degrees,courses,crs_usr,agendas"
|
"SELECT COUNT(DISTINCT agendas.UsrCod)"
|
||||||
" WHERE institutions.CtyCod=%ld"
|
" FROM institutions,centres,degrees,courses,crs_usr,agendas"
|
||||||
" AND institutions.InsCod=centres.InsCod"
|
" WHERE institutions.CtyCod=%ld"
|
||||||
" AND centres.CtrCod=degrees.CtrCod"
|
" AND institutions.InsCod=centres.InsCod"
|
||||||
" AND degrees.DegCod=courses.DegCod"
|
" AND centres.CtrCod=degrees.CtrCod"
|
||||||
" AND courses.Status=0"
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
" AND courses.Status=0"
|
||||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||||
Gbl.CurrentCty.Cty.CtyCod);
|
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||||
|
Gbl.CurrentCty.Cty.CtyCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_INS:
|
case Sco_SCOPE_INS:
|
||||||
DB_BuildQuery ("SELECT COUNT(DISTINCT agendas.UsrCod)"
|
DB_QuerySELECT (&mysql_res,"can not get number of users with events",
|
||||||
" FROM centres,degrees,courses,crs_usr,agendas"
|
"SELECT COUNT(DISTINCT agendas.UsrCod)"
|
||||||
" WHERE centres.InsCod=%ld"
|
" FROM centres,degrees,courses,crs_usr,agendas"
|
||||||
" AND centres.CtrCod=degrees.CtrCod"
|
" WHERE centres.InsCod=%ld"
|
||||||
" AND degrees.DegCod=courses.DegCod"
|
" AND centres.CtrCod=degrees.CtrCod"
|
||||||
" AND courses.Status=0"
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
" AND courses.Status=0"
|
||||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||||
Gbl.CurrentIns.Ins.InsCod);
|
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||||
|
Gbl.CurrentIns.Ins.InsCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_CTR:
|
case Sco_SCOPE_CTR:
|
||||||
DB_BuildQuery ("SELECT COUNT(DISTINCT agendas.UsrCod)"
|
DB_QuerySELECT (&mysql_res,"can not get number of users with events",
|
||||||
" FROM degrees,courses,crs_usr,agendas"
|
"SELECT COUNT(DISTINCT agendas.UsrCod)"
|
||||||
" WHERE degrees.CtrCod=%ld"
|
" FROM degrees,courses,crs_usr,agendas"
|
||||||
" AND degrees.DegCod=courses.DegCod"
|
" WHERE degrees.CtrCod=%ld"
|
||||||
" AND courses.Status=0"
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
" AND courses.Status=0"
|
||||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||||
Gbl.CurrentCtr.Ctr.CtrCod);
|
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||||
|
Gbl.CurrentCtr.Ctr.CtrCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_DEG:
|
case Sco_SCOPE_DEG:
|
||||||
DB_BuildQuery ("SELECT COUNT(DISTINCT agendas.UsrCod)"
|
DB_QuerySELECT (&mysql_res,"can not get number of users with events",
|
||||||
" FROM courses,crs_usr,agendas"
|
"SELECT COUNT(DISTINCT agendas.UsrCod)"
|
||||||
" WHERE courses.DegCod=%ld"
|
" FROM courses,crs_usr,agendas"
|
||||||
" AND courses.Status=0"
|
" WHERE courses.DegCod=%ld"
|
||||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
" AND courses.Status=0"
|
||||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||||
Gbl.CurrentDeg.Deg.DegCod);
|
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||||
|
Gbl.CurrentDeg.Deg.DegCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_CRS:
|
case Sco_SCOPE_CRS:
|
||||||
DB_BuildQuery ("SELECT COUNT(DISTINCT agendas.UsrCod)"
|
DB_QuerySELECT (&mysql_res,"can not get number of users with events",
|
||||||
" FROM crs_usr,agendas"
|
"SELECT COUNT(DISTINCT agendas.UsrCod)"
|
||||||
" WHERE crs_usr.CrsCod=%ld"
|
" FROM crs_usr,agendas"
|
||||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
" WHERE crs_usr.CrsCod=%ld"
|
||||||
Gbl.CurrentCrs.Crs.CrsCod);
|
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||||
|
Gbl.CurrentCrs.Crs.CrsCod);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Lay_WrongScopeExit ();
|
Lay_WrongScopeExit ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
DB_QuerySELECT_new (&mysql_res,"can not get number of users with events");
|
|
||||||
|
|
||||||
/***** Get number of users *****/
|
/***** Get number of users *****/
|
||||||
row = mysql_fetch_row (mysql_res);
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
@ -1867,60 +1870,65 @@ unsigned Agd_GetNumEvents (Sco_Scope_t Scope)
|
||||||
switch (Scope)
|
switch (Scope)
|
||||||
{
|
{
|
||||||
case Sco_SCOPE_SYS:
|
case Sco_SCOPE_SYS:
|
||||||
DB_BuildQuery ("SELECT COUNT(*)"
|
DB_QuerySELECT (&mysql_res,"can not get number of events",
|
||||||
" FROM agendas"
|
"SELECT COUNT(*)"
|
||||||
" WHERE UsrCod>0");
|
" FROM agendas"
|
||||||
|
" WHERE UsrCod>0");
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_CTY:
|
case Sco_SCOPE_CTY:
|
||||||
DB_BuildQuery ("SELECT COUNT(*)"
|
DB_QuerySELECT (&mysql_res,"can not get number of events",
|
||||||
" FROM institutions,centres,degrees,courses,crs_usr,agendas"
|
"SELECT COUNT(*)"
|
||||||
" WHERE institutions.CtyCod=%ld"
|
" FROM institutions,centres,degrees,courses,crs_usr,agendas"
|
||||||
" AND institutions.InsCod=centres.InsCod"
|
" WHERE institutions.CtyCod=%ld"
|
||||||
" AND centres.CtrCod=degrees.CtrCod"
|
" AND institutions.InsCod=centres.InsCod"
|
||||||
" AND degrees.DegCod=courses.DegCod"
|
" AND centres.CtrCod=degrees.CtrCod"
|
||||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||||
Gbl.CurrentCty.Cty.CtyCod);
|
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||||
|
Gbl.CurrentCty.Cty.CtyCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_INS:
|
case Sco_SCOPE_INS:
|
||||||
DB_BuildQuery ("SELECT COUNT(*)"
|
DB_QuerySELECT (&mysql_res,"can not get number of events",
|
||||||
" FROM centres,degrees,courses,crs_usr,agendas"
|
"SELECT COUNT(*)"
|
||||||
" WHERE centres.InsCod=%ld"
|
" FROM centres,degrees,courses,crs_usr,agendas"
|
||||||
" AND centres.CtrCod=degrees.CtrCod"
|
" WHERE centres.InsCod=%ld"
|
||||||
" AND degrees.DegCod=courses.DegCod"
|
" AND centres.CtrCod=degrees.CtrCod"
|
||||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||||
Gbl.CurrentIns.Ins.InsCod);
|
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||||
|
Gbl.CurrentIns.Ins.InsCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_CTR:
|
case Sco_SCOPE_CTR:
|
||||||
DB_BuildQuery ("SELECT COUNT(*)"
|
DB_QuerySELECT (&mysql_res,"can not get number of events",
|
||||||
" FROM degrees,courses,crs_usr,agendas"
|
"SELECT COUNT(*)"
|
||||||
" WHERE degrees.CtrCod=%ld"
|
" FROM degrees,courses,crs_usr,agendas"
|
||||||
" AND degrees.DegCod=courses.DegCod"
|
" WHERE degrees.CtrCod=%ld"
|
||||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||||
Gbl.CurrentCtr.Ctr.CtrCod);
|
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||||
|
Gbl.CurrentCtr.Ctr.CtrCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_DEG:
|
case Sco_SCOPE_DEG:
|
||||||
DB_BuildQuery ("SELECT COUNT(*)"
|
DB_QuerySELECT (&mysql_res,"can not get number of events",
|
||||||
" FROM courses,crs_usr,agendas"
|
"SELECT COUNT(*)"
|
||||||
" WHERE courses.DegCod=%ld"
|
" FROM courses,crs_usr,agendas"
|
||||||
" AND courses.CrsCod=crs_usr.CrsCod"
|
" WHERE courses.DegCod=%ld"
|
||||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
" AND courses.CrsCod=crs_usr.CrsCod"
|
||||||
Gbl.CurrentDeg.Deg.DegCod);
|
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||||
|
Gbl.CurrentDeg.Deg.DegCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_CRS:
|
case Sco_SCOPE_CRS:
|
||||||
DB_BuildQuery ("SELECT COUNT(*)"
|
DB_QuerySELECT (&mysql_res,"can not get number of events",
|
||||||
" FROM crs_usr,agendas"
|
"SELECT COUNT(*)"
|
||||||
" WHERE crs_usr.CrsCod=%ld"
|
" FROM crs_usr,agendas"
|
||||||
" AND crs_usr.UsrCod=agendas.UsrCod",
|
" WHERE crs_usr.CrsCod=%ld"
|
||||||
Gbl.CurrentCrs.Crs.CrsCod);
|
" AND crs_usr.UsrCod=agendas.UsrCod",
|
||||||
|
Gbl.CurrentCrs.Crs.CrsCod);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Lay_WrongScopeExit ();
|
Lay_WrongScopeExit ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
DB_QuerySELECT_new (&mysql_res,"can not get number of events");
|
|
||||||
|
|
||||||
/***** Get number of events *****/
|
/***** Get number of events *****/
|
||||||
row = mysql_fetch_row (mysql_res);
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
|
|
@ -96,31 +96,33 @@ void Ann_ShowAllAnnouncements (void)
|
||||||
if (ICanEdit)
|
if (ICanEdit)
|
||||||
{
|
{
|
||||||
/* Select all announcements */
|
/* Select all announcements */
|
||||||
DB_BuildQuery ("SELECT AnnCod,Status,Roles,Subject,Content"
|
NumAnnouncements = (unsigned) DB_QuerySELECT (&mysql_res,"can not get announcements",
|
||||||
" FROM announcements"
|
"SELECT AnnCod,Status,Roles,Subject,Content"
|
||||||
" ORDER BY AnnCod DESC");
|
" FROM announcements"
|
||||||
|
" ORDER BY AnnCod DESC");
|
||||||
}
|
}
|
||||||
else if (Gbl.Usrs.Me.Logged)
|
else if (Gbl.Usrs.Me.Logged)
|
||||||
{
|
{
|
||||||
/* Select only announcements I can see */
|
/* Select only announcements I can see */
|
||||||
Rol_GetRolesInAllCrssIfNotYetGot (&Gbl.Usrs.Me.UsrDat);
|
Rol_GetRolesInAllCrssIfNotYetGot (&Gbl.Usrs.Me.UsrDat);
|
||||||
DB_BuildQuery ("SELECT AnnCod,Status,Roles,Subject,Content"
|
NumAnnouncements = (unsigned) DB_QuerySELECT (&mysql_res,"can not get announcements",
|
||||||
" FROM announcements"
|
"SELECT AnnCod,Status,Roles,Subject,Content"
|
||||||
" WHERE (Roles&%u)<>0 "
|
" FROM announcements"
|
||||||
" ORDER BY AnnCod DESC",
|
" WHERE (Roles&%u)<>0 "
|
||||||
(unsigned) Gbl.Usrs.Me.UsrDat.Roles.InCrss); // All my roles in different courses
|
" ORDER BY AnnCod DESC",
|
||||||
|
(unsigned) Gbl.Usrs.Me.UsrDat.Roles.InCrss); // All my roles in different courses
|
||||||
}
|
}
|
||||||
else // No user logged
|
else // No user logged
|
||||||
{
|
{
|
||||||
/* Select only active announcements for unknown users */
|
/* Select only active announcements for unknown users */
|
||||||
DB_BuildQuery ("SELECT AnnCod,Status,Roles,Subject,Content"
|
NumAnnouncements = (unsigned) DB_QuerySELECT (&mysql_res,"can not get announcements",
|
||||||
" FROM announcements"
|
"SELECT AnnCod,Status,Roles,Subject,Content"
|
||||||
" WHERE Status=%u AND (Roles&%u)<>0 "
|
" FROM announcements"
|
||||||
" ORDER BY AnnCod DESC",
|
" WHERE Status=%u AND (Roles&%u)<>0 "
|
||||||
(unsigned) Ann_ACTIVE_ANNOUNCEMENT,
|
" ORDER BY AnnCod DESC",
|
||||||
(unsigned) (1 << Rol_UNK));
|
(unsigned) Ann_ACTIVE_ANNOUNCEMENT,
|
||||||
|
(unsigned) (1 << Rol_UNK));
|
||||||
}
|
}
|
||||||
NumAnnouncements = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get announcements");
|
|
||||||
|
|
||||||
/***** Start box *****/
|
/***** Start box *****/
|
||||||
Box_StartBox ("550px",Txt_Announcements,
|
Box_StartBox ("550px",Txt_Announcements,
|
||||||
|
@ -219,15 +221,15 @@ void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void)
|
||||||
|
|
||||||
/***** Select announcements not seen *****/
|
/***** Select announcements not seen *****/
|
||||||
Rol_GetRolesInAllCrssIfNotYetGot (&Gbl.Usrs.Me.UsrDat);
|
Rol_GetRolesInAllCrssIfNotYetGot (&Gbl.Usrs.Me.UsrDat);
|
||||||
DB_BuildQuery ("SELECT AnnCod,Subject,Content FROM announcements"
|
NumAnnouncements = (unsigned) DB_QuerySELECT (&mysql_res,"can not get announcements",
|
||||||
" WHERE Status=%u AND (Roles&%u)<>0 "
|
"SELECT AnnCod,Subject,Content FROM announcements"
|
||||||
" AND AnnCod NOT IN"
|
" WHERE Status=%u AND (Roles&%u)<>0 "
|
||||||
" (SELECT AnnCod FROM ann_seen WHERE UsrCod=%ld)"
|
" AND AnnCod NOT IN"
|
||||||
" ORDER BY AnnCod DESC", // Newest first
|
" (SELECT AnnCod FROM ann_seen WHERE UsrCod=%ld)"
|
||||||
(unsigned) Ann_ACTIVE_ANNOUNCEMENT,
|
" ORDER BY AnnCod DESC", // Newest first
|
||||||
(unsigned) Gbl.Usrs.Me.UsrDat.Roles.InCrss, // All my roles in different courses
|
(unsigned) Ann_ACTIVE_ANNOUNCEMENT,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
(unsigned) Gbl.Usrs.Me.UsrDat.Roles.InCrss, // All my roles in different courses
|
||||||
NumAnnouncements = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get announcements");
|
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||||
|
|
||||||
/***** Show the announcements *****/
|
/***** Show the announcements *****/
|
||||||
if (NumAnnouncements)
|
if (NumAnnouncements)
|
||||||
|
|
|
@ -81,7 +81,9 @@ static void Asg_GetParamAsgOrder (void);
|
||||||
|
|
||||||
static void Asg_PutFormsToRemEditOneAsg (long AsgCod,bool Hidden);
|
static void Asg_PutFormsToRemEditOneAsg (long AsgCod,bool Hidden);
|
||||||
static void Asg_PutParams (void);
|
static void Asg_PutParams (void);
|
||||||
static void Asg_GetDataOfAssignment (struct Assignment *Asg);
|
static void Asg_GetDataOfAssignment (struct Assignment *Asg,
|
||||||
|
MYSQL_RES **mysql_res,
|
||||||
|
unsigned long NumRows);
|
||||||
static void Asg_ResetAssignment (struct Assignment *Asg);
|
static void Asg_ResetAssignment (struct Assignment *Asg);
|
||||||
static void Asg_GetAssignmentTxtFromDB (long AsgCod,char Txt[Cns_MAX_BYTES_TEXT + 1]);
|
static void Asg_GetAssignmentTxtFromDB (long AsgCod,char Txt[Cns_MAX_BYTES_TEXT + 1]);
|
||||||
static void Asg_PutParamAsgCod (long AsgCod);
|
static void Asg_PutParamAsgCod (long AsgCod);
|
||||||
|
@ -657,24 +659,25 @@ void Asg_GetListAssignments (void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (Gbl.CurrentCrs.Grps.WhichGrps == Grp_ONLY_MY_GROUPS)
|
if (Gbl.CurrentCrs.Grps.WhichGrps == Grp_ONLY_MY_GROUPS)
|
||||||
DB_BuildQuery ("SELECT AsgCod"
|
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignments",
|
||||||
" FROM assignments"
|
"SELECT AsgCod"
|
||||||
" WHERE CrsCod=%ld%s"
|
" FROM assignments"
|
||||||
" AND (AsgCod NOT IN (SELECT AsgCod FROM asg_grp) OR"
|
" WHERE CrsCod=%ld%s"
|
||||||
" AsgCod IN (SELECT asg_grp.AsgCod FROM asg_grp,crs_grp_usr"
|
" AND (AsgCod NOT IN (SELECT AsgCod FROM asg_grp) OR"
|
||||||
" WHERE crs_grp_usr.UsrCod=%ld AND asg_grp.GrpCod=crs_grp_usr.GrpCod))"
|
" AsgCod IN (SELECT asg_grp.AsgCod FROM asg_grp,crs_grp_usr"
|
||||||
" ORDER BY %s",
|
" WHERE crs_grp_usr.UsrCod=%ld AND asg_grp.GrpCod=crs_grp_usr.GrpCod))"
|
||||||
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,
|
" ORDER BY %s",
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,
|
||||||
OrderBySubQuery);
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
|
OrderBySubQuery);
|
||||||
else // Gbl.CurrentCrs.Grps.WhichGrps == Grp_ALL_GROUPS
|
else // Gbl.CurrentCrs.Grps.WhichGrps == Grp_ALL_GROUPS
|
||||||
DB_BuildQuery ("SELECT AsgCod"
|
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignments",
|
||||||
" FROM assignments"
|
"SELECT AsgCod"
|
||||||
" WHERE CrsCod=%ld%s"
|
" FROM assignments"
|
||||||
" ORDER BY %s",
|
" WHERE CrsCod=%ld%s"
|
||||||
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,
|
" ORDER BY %s",
|
||||||
OrderBySubQuery);
|
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,
|
||||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get assignments");
|
OrderBySubQuery);
|
||||||
|
|
||||||
/* Free allocated memory for subqueries */
|
/* Free allocated memory for subqueries */
|
||||||
free ((void *) OrderBySubQuery);
|
free ((void *) OrderBySubQuery);
|
||||||
|
@ -714,20 +717,24 @@ void Asg_GetListAssignments (void)
|
||||||
|
|
||||||
void Asg_GetDataOfAssignmentByCod (struct Assignment *Asg)
|
void Asg_GetDataOfAssignmentByCod (struct Assignment *Asg)
|
||||||
{
|
{
|
||||||
|
MYSQL_RES *mysql_res;
|
||||||
|
unsigned long NumRows;
|
||||||
|
|
||||||
if (Asg->AsgCod > 0)
|
if (Asg->AsgCod > 0)
|
||||||
{
|
{
|
||||||
/***** Build query *****/
|
/***** Build query *****/
|
||||||
DB_BuildQuery ("SELECT AsgCod,Hidden,UsrCod,"
|
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignment data",
|
||||||
"UNIX_TIMESTAMP(StartTime),"
|
"SELECT AsgCod,Hidden,UsrCod,"
|
||||||
"UNIX_TIMESTAMP(EndTime),"
|
"UNIX_TIMESTAMP(StartTime),"
|
||||||
"NOW() BETWEEN StartTime AND EndTime,"
|
"UNIX_TIMESTAMP(EndTime),"
|
||||||
"Title,Folder"
|
"NOW() BETWEEN StartTime AND EndTime,"
|
||||||
" FROM assignments"
|
"Title,Folder"
|
||||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
" FROM assignments"
|
||||||
Asg->AsgCod,Gbl.CurrentCrs.Crs.CrsCod);
|
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
||||||
|
Asg->AsgCod,Gbl.CurrentCrs.Crs.CrsCod);
|
||||||
|
|
||||||
/***** Get data of assignment *****/
|
/***** Get data of assignment *****/
|
||||||
Asg_GetDataOfAssignment (Asg);
|
Asg_GetDataOfAssignment (Asg,&mysql_res,NumRows);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -743,20 +750,24 @@ void Asg_GetDataOfAssignmentByCod (struct Assignment *Asg)
|
||||||
|
|
||||||
void Asg_GetDataOfAssignmentByFolder (struct Assignment *Asg)
|
void Asg_GetDataOfAssignmentByFolder (struct Assignment *Asg)
|
||||||
{
|
{
|
||||||
|
MYSQL_RES *mysql_res;
|
||||||
|
unsigned long NumRows;
|
||||||
|
|
||||||
if (Asg->Folder[0])
|
if (Asg->Folder[0])
|
||||||
{
|
{
|
||||||
/***** Query database *****/
|
/***** Query database *****/
|
||||||
DB_BuildQuery ("SELECT AsgCod,Hidden,UsrCod,"
|
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignment data",
|
||||||
"UNIX_TIMESTAMP(StartTime),"
|
"SELECT AsgCod,Hidden,UsrCod,"
|
||||||
"UNIX_TIMESTAMP(EndTime),"
|
"UNIX_TIMESTAMP(StartTime),"
|
||||||
"NOW() BETWEEN StartTime AND EndTime,"
|
"UNIX_TIMESTAMP(EndTime),"
|
||||||
"Title,Folder"
|
"NOW() BETWEEN StartTime AND EndTime,"
|
||||||
" FROM assignments"
|
"Title,Folder"
|
||||||
" WHERE CrsCod=%ld AND Folder='%s'",
|
" FROM assignments"
|
||||||
Gbl.CurrentCrs.Crs.CrsCod,Asg->Folder);
|
" WHERE CrsCod=%ld AND Folder='%s'",
|
||||||
|
Gbl.CurrentCrs.Crs.CrsCod,Asg->Folder);
|
||||||
|
|
||||||
/***** Get data of assignment *****/
|
/***** Get data of assignment *****/
|
||||||
Asg_GetDataOfAssignment (Asg);
|
Asg_GetDataOfAssignment (Asg,&mysql_res,NumRows);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -770,19 +781,20 @@ void Asg_GetDataOfAssignmentByFolder (struct Assignment *Asg)
|
||||||
/************************* Get assignment data *******************************/
|
/************************* Get assignment data *******************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Asg_GetDataOfAssignment (struct Assignment *Asg)
|
static void Asg_GetDataOfAssignment (struct Assignment *Asg,
|
||||||
|
MYSQL_RES **mysql_res,
|
||||||
|
unsigned long NumRows)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
|
|
||||||
/***** Clear all assignment data *****/
|
/***** Clear all assignment data *****/
|
||||||
Asg_ResetAssignment (Asg);
|
Asg_ResetAssignment (Asg);
|
||||||
|
|
||||||
/***** Get data of assignment from database *****/
|
/***** Get data of assignment from database *****/
|
||||||
if (DB_QuerySELECT_new (&mysql_res,"can not get assignment data")) // Assignment found...
|
if (NumRows) // Assignment found...
|
||||||
{
|
{
|
||||||
/* Get row */
|
/* Get row */
|
||||||
row = mysql_fetch_row (mysql_res);
|
row = mysql_fetch_row (*mysql_res);
|
||||||
|
|
||||||
/* Get code of the assignment (row[0]) */
|
/* Get code of the assignment (row[0]) */
|
||||||
Asg->AsgCod = Str_ConvertStrCodToLongCod (row[0]);
|
Asg->AsgCod = Str_ConvertStrCodToLongCod (row[0]);
|
||||||
|
@ -816,7 +828,7 @@ static void Asg_GetDataOfAssignment (struct Assignment *Asg)
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Free structure that stores the query result *****/
|
/***** Free structure that stores the query result *****/
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
DB_FreeMySQLResult (mysql_res);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -866,10 +878,10 @@ static void Asg_GetAssignmentTxtFromDB (long AsgCod,char Txt[Cns_MAX_BYTES_TEXT
|
||||||
unsigned long NumRows;
|
unsigned long NumRows;
|
||||||
|
|
||||||
/***** Get text of assignment from database *****/
|
/***** Get text of assignment from database *****/
|
||||||
DB_BuildQuery ("SELECT Txt FROM assignments"
|
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignment text",
|
||||||
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
"SELECT Txt FROM assignments"
|
||||||
AsgCod,Gbl.CurrentCrs.Crs.CrsCod);
|
" WHERE AsgCod=%ld AND CrsCod=%ld",
|
||||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get assignment text");
|
AsgCod,Gbl.CurrentCrs.Crs.CrsCod);
|
||||||
|
|
||||||
/***** The result of the query must have one row or none *****/
|
/***** The result of the query must have one row or none *****/
|
||||||
if (NumRows == 1)
|
if (NumRows == 1)
|
||||||
|
@ -906,8 +918,10 @@ void Asg_GetNotifAssignment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
||||||
SummaryStr[0] = '\0'; // Return nothing on error
|
SummaryStr[0] = '\0'; // Return nothing on error
|
||||||
|
|
||||||
/***** Build query *****/
|
/***** Build query *****/
|
||||||
DB_BuildQuery ("SELECT Title,Txt FROM assignments WHERE AsgCod=%ld",AsgCod);
|
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignment title and text",
|
||||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get assignment title and text");
|
"SELECT Title,Txt FROM assignments"
|
||||||
|
" WHERE AsgCod=%ld",
|
||||||
|
AsgCod);
|
||||||
|
|
||||||
/***** Result should have a unique row *****/
|
/***** Result should have a unique row *****/
|
||||||
if (NumRows == 1)
|
if (NumRows == 1)
|
||||||
|
@ -1630,14 +1644,14 @@ static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Assignment *Asg)
|
||||||
unsigned long NumRows;
|
unsigned long NumRows;
|
||||||
|
|
||||||
/***** Get groups associated to an assignment from database *****/
|
/***** Get groups associated to an assignment from database *****/
|
||||||
DB_BuildQuery ("SELECT crs_grp_types.GrpTypName,crs_grp.GrpName"
|
NumRows = DB_QuerySELECT (&mysql_res,"can not get groups of an assignment",
|
||||||
" FROM asg_grp,crs_grp,crs_grp_types"
|
"SELECT crs_grp_types.GrpTypName,crs_grp.GrpName"
|
||||||
" WHERE asg_grp.AsgCod=%ld"
|
" FROM asg_grp,crs_grp,crs_grp_types"
|
||||||
" AND asg_grp.GrpCod=crs_grp.GrpCod"
|
" WHERE asg_grp.AsgCod=%ld"
|
||||||
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
|
" AND asg_grp.GrpCod=crs_grp.GrpCod"
|
||||||
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
|
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
|
||||||
Asg->AsgCod);
|
" ORDER BY crs_grp_types.GrpTypName,crs_grp.GrpName",
|
||||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get groups of an assignment");
|
Asg->AsgCod);
|
||||||
|
|
||||||
/***** Write heading *****/
|
/***** Write heading *****/
|
||||||
fprintf (Gbl.F.Out,"<div class=\"%s\">%s: ",
|
fprintf (Gbl.F.Out,"<div class=\"%s\">%s: ",
|
||||||
|
@ -1762,59 +1776,64 @@ unsigned Asg_GetNumCoursesWithAssignments (Sco_Scope_t Scope)
|
||||||
switch (Scope)
|
switch (Scope)
|
||||||
{
|
{
|
||||||
case Sco_SCOPE_SYS:
|
case Sco_SCOPE_SYS:
|
||||||
DB_BuildQuery ("SELECT COUNT(DISTINCT CrsCod)"
|
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
||||||
" FROM assignments"
|
"SELECT COUNT(DISTINCT CrsCod)"
|
||||||
" WHERE CrsCod>0");
|
" FROM assignments"
|
||||||
|
" WHERE CrsCod>0");
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_CTY:
|
case Sco_SCOPE_CTY:
|
||||||
DB_BuildQuery ("SELECT COUNT(DISTINCT assignments.CrsCod)"
|
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
||||||
" FROM institutions,centres,degrees,courses,assignments"
|
"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||||
" WHERE institutions.CtyCod=%ld"
|
" FROM institutions,centres,degrees,courses,assignments"
|
||||||
" AND institutions.InsCod=centres.InsCod"
|
" WHERE institutions.CtyCod=%ld"
|
||||||
" AND centres.CtrCod=degrees.CtrCod"
|
" AND institutions.InsCod=centres.InsCod"
|
||||||
" AND degrees.DegCod=courses.DegCod"
|
" AND centres.CtrCod=degrees.CtrCod"
|
||||||
" AND courses.Status=0"
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
" AND courses.CrsCod=assignments.CrsCod",
|
" AND courses.Status=0"
|
||||||
Gbl.CurrentCty.Cty.CtyCod);
|
" AND courses.CrsCod=assignments.CrsCod",
|
||||||
|
Gbl.CurrentCty.Cty.CtyCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_INS:
|
case Sco_SCOPE_INS:
|
||||||
DB_BuildQuery ("SELECT COUNT(DISTINCT assignments.CrsCod)"
|
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
||||||
" FROM centres,degrees,courses,assignments"
|
"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||||
" WHERE centres.InsCod=%ld"
|
" FROM centres,degrees,courses,assignments"
|
||||||
" AND centres.CtrCod=degrees.CtrCod"
|
" WHERE centres.InsCod=%ld"
|
||||||
" AND degrees.DegCod=courses.DegCod"
|
" AND centres.CtrCod=degrees.CtrCod"
|
||||||
" AND courses.Status=0"
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
" AND courses.CrsCod=assignments.CrsCod",
|
" AND courses.Status=0"
|
||||||
Gbl.CurrentIns.Ins.InsCod);
|
" AND courses.CrsCod=assignments.CrsCod",
|
||||||
|
Gbl.CurrentIns.Ins.InsCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_CTR:
|
case Sco_SCOPE_CTR:
|
||||||
DB_BuildQuery ("SELECT COUNT(DISTINCT assignments.CrsCod)"
|
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
||||||
" FROM degrees,courses,assignments"
|
"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||||
" WHERE degrees.CtrCod=%ld"
|
" FROM degrees,courses,assignments"
|
||||||
" AND degrees.DegCod=courses.DegCod"
|
" WHERE degrees.CtrCod=%ld"
|
||||||
" AND courses.Status=0"
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
" AND courses.CrsCod=assignments.CrsCod",
|
" AND courses.Status=0"
|
||||||
Gbl.CurrentCtr.Ctr.CtrCod);
|
" AND courses.CrsCod=assignments.CrsCod",
|
||||||
|
Gbl.CurrentCtr.Ctr.CtrCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_DEG:
|
case Sco_SCOPE_DEG:
|
||||||
DB_BuildQuery ("SELECT COUNT(DISTINCT assignments.CrsCod)"
|
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
||||||
" FROM courses,assignments"
|
"SELECT COUNT(DISTINCT assignments.CrsCod)"
|
||||||
" WHERE courses.DegCod=%ld"
|
" FROM courses,assignments"
|
||||||
" AND courses.Status=0"
|
" WHERE courses.DegCod=%ld"
|
||||||
" AND courses.CrsCod=assignments.CrsCod",
|
" AND courses.Status=0"
|
||||||
Gbl.CurrentDeg.Deg.DegCod);
|
" AND courses.CrsCod=assignments.CrsCod",
|
||||||
|
Gbl.CurrentDeg.Deg.DegCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_CRS:
|
case Sco_SCOPE_CRS:
|
||||||
DB_BuildQuery ("SELECT COUNT(DISTINCT CrsCod)"
|
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
|
||||||
" FROM assignments"
|
"SELECT COUNT(DISTINCT CrsCod)"
|
||||||
" WHERE CrsCod=%ld",
|
" FROM assignments"
|
||||||
Gbl.CurrentCrs.Crs.CrsCod);
|
" WHERE CrsCod=%ld",
|
||||||
|
Gbl.CurrentCrs.Crs.CrsCod);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Lay_WrongScopeExit ();
|
Lay_WrongScopeExit ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
DB_QuerySELECT_new (&mysql_res,"can not get number of courses with assignments");
|
|
||||||
|
|
||||||
/***** Get number of courses *****/
|
/***** Get number of courses *****/
|
||||||
row = mysql_fetch_row (mysql_res);
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
@ -1843,55 +1862,60 @@ unsigned Asg_GetNumAssignments (Sco_Scope_t Scope,unsigned *NumNotif)
|
||||||
switch (Scope)
|
switch (Scope)
|
||||||
{
|
{
|
||||||
case Sco_SCOPE_SYS:
|
case Sco_SCOPE_SYS:
|
||||||
DB_BuildQuery ("SELECT COUNT(*),SUM(NumNotif)"
|
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||||
" FROM assignments"
|
"SELECT COUNT(*),SUM(NumNotif)"
|
||||||
" WHERE CrsCod>0");
|
" FROM assignments"
|
||||||
|
" WHERE CrsCod>0");
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_CTY:
|
case Sco_SCOPE_CTY:
|
||||||
DB_BuildQuery ("SELECT COUNT(*),SUM(assignments.NumNotif)"
|
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||||
" FROM institutions,centres,degrees,courses,assignments"
|
"SELECT COUNT(*),SUM(assignments.NumNotif)"
|
||||||
" WHERE institutions.CtyCod=%ld"
|
" FROM institutions,centres,degrees,courses,assignments"
|
||||||
" AND institutions.InsCod=centres.InsCod"
|
" WHERE institutions.CtyCod=%ld"
|
||||||
" AND centres.CtrCod=degrees.CtrCod"
|
" AND institutions.InsCod=centres.InsCod"
|
||||||
" AND degrees.DegCod=courses.DegCod"
|
" AND centres.CtrCod=degrees.CtrCod"
|
||||||
" AND courses.CrsCod=assignments.CrsCod",
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
Gbl.CurrentCty.Cty.CtyCod);
|
" AND courses.CrsCod=assignments.CrsCod",
|
||||||
|
Gbl.CurrentCty.Cty.CtyCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_INS:
|
case Sco_SCOPE_INS:
|
||||||
DB_BuildQuery ("SELECT COUNT(*),SUM(assignments.NumNotif)"
|
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||||
" FROM centres,degrees,courses,assignments"
|
"SELECT COUNT(*),SUM(assignments.NumNotif)"
|
||||||
" WHERE centres.InsCod=%ld"
|
" FROM centres,degrees,courses,assignments"
|
||||||
" AND centres.CtrCod=degrees.CtrCod"
|
" WHERE centres.InsCod=%ld"
|
||||||
" AND degrees.DegCod=courses.DegCod"
|
" AND centres.CtrCod=degrees.CtrCod"
|
||||||
" AND courses.CrsCod=assignments.CrsCod",
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
Gbl.CurrentIns.Ins.InsCod);
|
" AND courses.CrsCod=assignments.CrsCod",
|
||||||
|
Gbl.CurrentIns.Ins.InsCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_CTR:
|
case Sco_SCOPE_CTR:
|
||||||
DB_BuildQuery ("SELECT COUNT(*),SUM(assignments.NumNotif)"
|
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||||
" FROM degrees,courses,assignments"
|
"SELECT COUNT(*),SUM(assignments.NumNotif)"
|
||||||
" WHERE degrees.CtrCod=%ld"
|
" FROM degrees,courses,assignments"
|
||||||
" AND degrees.DegCod=courses.DegCod"
|
" WHERE degrees.CtrCod=%ld"
|
||||||
" AND courses.CrsCod=assignments.CrsCod",
|
" AND degrees.DegCod=courses.DegCod"
|
||||||
Gbl.CurrentCtr.Ctr.CtrCod);
|
" AND courses.CrsCod=assignments.CrsCod",
|
||||||
|
Gbl.CurrentCtr.Ctr.CtrCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_DEG:
|
case Sco_SCOPE_DEG:
|
||||||
DB_BuildQuery ("SELECT COUNT(*),SUM(assignments.NumNotif)"
|
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||||
" FROM courses,assignments"
|
"SELECT COUNT(*),SUM(assignments.NumNotif)"
|
||||||
" WHERE courses.DegCod=%ld"
|
" FROM courses,assignments"
|
||||||
" AND courses.CrsCod=assignments.CrsCod",
|
" WHERE courses.DegCod=%ld"
|
||||||
Gbl.CurrentDeg.Deg.DegCod);
|
" AND courses.CrsCod=assignments.CrsCod",
|
||||||
|
Gbl.CurrentDeg.Deg.DegCod);
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_CRS:
|
case Sco_SCOPE_CRS:
|
||||||
DB_BuildQuery ("SELECT COUNT(*),SUM(NumNotif)"
|
DB_QuerySELECT (&mysql_res,"can not get number of assignments",
|
||||||
" FROM assignments"
|
"SELECT COUNT(*),SUM(NumNotif)"
|
||||||
" WHERE CrsCod=%ld",
|
" FROM assignments"
|
||||||
Gbl.CurrentCrs.Crs.CrsCod);
|
" WHERE CrsCod=%ld",
|
||||||
|
Gbl.CurrentCrs.Crs.CrsCod);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Lay_WrongScopeExit ();
|
Lay_WrongScopeExit ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
DB_QuerySELECT_new (&mysql_res,"can not get number of assignments");
|
|
||||||
|
|
||||||
/***** Get number of assignments *****/
|
/***** Get number of assignments *****/
|
||||||
row = mysql_fetch_row (mysql_res);
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
|
|
@ -2452,7 +2452,7 @@ static unsigned Att_GetNumStdsFromAListWhoAreInAttEvent (long AttCod,long LstSel
|
||||||
MaxLength);
|
MaxLength);
|
||||||
|
|
||||||
|
|
||||||
NumStdsInAttEvent = (unsigned) DB_QueryCOUNT (&Query,"can not get number of students from a list who are registered in an event");
|
NumStdsInAttEvent = (unsigned) DB_QueryCOUNT_old (&Query,"can not get number of students from a list who are registered in an event");
|
||||||
}
|
}
|
||||||
return NumStdsInAttEvent;
|
return NumStdsInAttEvent;
|
||||||
}
|
}
|
||||||
|
|
|
@ -355,10 +355,11 @@ En OpenSWAD:
|
||||||
ps2pdf source.ps destination.pdf
|
ps2pdf source.ps destination.pdf
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 18.10.2 (2018-10-30)"
|
#define Log_PLATFORM_VERSION "SWAD 18.11 (2018-10-30)"
|
||||||
#define CSS_FILE "swad18.4.css"
|
#define CSS_FILE "swad18.4.css"
|
||||||
#define JS_FILE "swad17.17.1.js"
|
#define JS_FILE "swad17.17.1.js"
|
||||||
/*
|
/*
|
||||||
|
Version 18.11: Oct 30, 2018 Joining building and performing query into one function. (235465 lines)
|
||||||
Version 18.10.2: Oct 30, 2018 Fixed bugs in access to database. (235414 lines)
|
Version 18.10.2: Oct 30, 2018 Fixed bugs in access to database. (235414 lines)
|
||||||
Version 18.10.1: Oct 30, 2018 Fixed bugs in access to database. (235399 lines)
|
Version 18.10.1: Oct 30, 2018 Fixed bugs in access to database. (235399 lines)
|
||||||
Version 18.10: Oct 30, 2018 Fixing bugs in access to database. Not finished. (235399 lines)
|
Version 18.10: Oct 30, 2018 Fixing bugs in access to database. Not finished. (235399 lines)
|
||||||
|
|
|
@ -3123,12 +3123,31 @@ static void DB_QueryPrintf (char **strp,const char *fmt,...)
|
||||||
/******************** Make a SELECT query from database **********************/
|
/******************** Make a SELECT query from database **********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
unsigned long DB_QuerySELECT_new (MYSQL_RES **mysql_res,const char *MsgError)
|
unsigned long DB_QuerySELECT (MYSQL_RES **mysql_res,const char *MsgError,
|
||||||
|
const char *fmt,...)
|
||||||
{
|
{
|
||||||
return DB_QuerySELECT (&Gbl.DB.QueryPtr,mysql_res,MsgError);
|
int NumBytesPrinted;
|
||||||
|
va_list ap;
|
||||||
|
char *Query = NULL;
|
||||||
|
|
||||||
|
va_start (ap,fmt);
|
||||||
|
NumBytesPrinted = vasprintf (&Query,fmt,ap);
|
||||||
|
va_end (ap);
|
||||||
|
|
||||||
|
if (NumBytesPrinted < 0) // If memory allocation wasn't possible,
|
||||||
|
// or some other error occurs,
|
||||||
|
// vasprintf will return -1
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
|
|
||||||
|
return DB_QuerySELECT_old (&Query,mysql_res,MsgError);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long DB_QuerySELECT (char **Query,MYSQL_RES **mysql_res,const char *MsgError)
|
unsigned long DB_QuerySELECT_new (MYSQL_RES **mysql_res,const char *MsgError)
|
||||||
|
{
|
||||||
|
return DB_QuerySELECT_old (&Gbl.DB.QueryPtr,mysql_res,MsgError);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long DB_QuerySELECT_old (char **Query,MYSQL_RES **mysql_res,const char *MsgError)
|
||||||
{
|
{
|
||||||
int Result;
|
int Result;
|
||||||
|
|
||||||
|
@ -3158,17 +3177,17 @@ unsigned long DB_QuerySELECT (char **Query,MYSQL_RES **mysql_res,const char *Msg
|
||||||
|
|
||||||
unsigned long DB_QueryCOUNT_new (const char *MsgError)
|
unsigned long DB_QueryCOUNT_new (const char *MsgError)
|
||||||
{
|
{
|
||||||
return DB_QueryCOUNT (&Gbl.DB.QueryPtr,MsgError);
|
return DB_QueryCOUNT_old (&Gbl.DB.QueryPtr,MsgError);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long DB_QueryCOUNT (char **Query,const char *MsgError)
|
unsigned long DB_QueryCOUNT_old (char **Query,const char *MsgError)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
unsigned long NumRows;
|
unsigned long NumRows;
|
||||||
|
|
||||||
/***** Make query "SELECT COUNT(*) FROM..." *****/
|
/***** Make query "SELECT COUNT(*) FROM..." *****/
|
||||||
DB_QuerySELECT (Query,&mysql_res,MsgError);
|
DB_QuerySELECT_old (Query,&mysql_res,MsgError);
|
||||||
|
|
||||||
/***** Get number of rows *****/
|
/***** Get number of rows *****/
|
||||||
row = mysql_fetch_row (mysql_res);
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
@ -3206,7 +3225,7 @@ void DB_QueryINSERT_new (const char *MsgError)
|
||||||
/******************** Make an INSERT query in database ***********************/
|
/******************** Make an INSERT query in database ***********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
void DB_QueryINSERT (char **Query,const char *MsgError)
|
void DB_QueryINSERT_old (char **Query,const char *MsgError)
|
||||||
{
|
{
|
||||||
int Result;
|
int Result;
|
||||||
|
|
||||||
|
@ -3274,10 +3293,10 @@ void DB_QueryREPLACE_new (const char *MsgError)
|
||||||
|
|
||||||
void DB_QueryUPDATE_new (const char *MsgError)
|
void DB_QueryUPDATE_new (const char *MsgError)
|
||||||
{
|
{
|
||||||
DB_QueryUPDATE (&Gbl.DB.QueryPtr,MsgError);
|
DB_QueryUPDATE_old (&Gbl.DB.QueryPtr,MsgError);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DB_QueryUPDATE (char **Query,const char *MsgError)
|
void DB_QueryUPDATE_old (char **Query,const char *MsgError)
|
||||||
{
|
{
|
||||||
int Result;
|
int Result;
|
||||||
|
|
||||||
|
|
|
@ -40,21 +40,23 @@ void DB_CloseDBConnection (void);
|
||||||
void DB_BuildQuery (const char *fmt,...);
|
void DB_BuildQuery (const char *fmt,...);
|
||||||
void DB_BuildQuery_old (char **Query,const char *fmt,...);
|
void DB_BuildQuery_old (char **Query,const char *fmt,...);
|
||||||
|
|
||||||
|
unsigned long DB_QuerySELECT (MYSQL_RES **mysql_res,const char *MsgError,
|
||||||
|
const char *fmt,...);
|
||||||
unsigned long DB_QuerySELECT_new (MYSQL_RES **mysql_res,const char *MsgError);
|
unsigned long DB_QuerySELECT_new (MYSQL_RES **mysql_res,const char *MsgError);
|
||||||
unsigned long DB_QuerySELECT (char **Query,MYSQL_RES **mysql_res,const char *MsgError);
|
unsigned long DB_QuerySELECT_old (char **Query,MYSQL_RES **mysql_res,const char *MsgError);
|
||||||
|
|
||||||
unsigned long DB_QueryCOUNT_new (const char *MsgError);
|
unsigned long DB_QueryCOUNT_new (const char *MsgError);
|
||||||
unsigned long DB_QueryCOUNT (char **Query,const char *MsgError);
|
unsigned long DB_QueryCOUNT_old (char **Query,const char *MsgError);
|
||||||
|
|
||||||
void DB_QueryINSERT_new (const char *MsgError);
|
void DB_QueryINSERT_new (const char *MsgError);
|
||||||
void DB_QueryINSERT (char **Query,const char *MsgError);
|
void DB_QueryINSERT_old (char **Query,const char *MsgError);
|
||||||
|
|
||||||
long DB_QueryINSERTandReturnCode_new (const char *MsgError);
|
long DB_QueryINSERTandReturnCode_new (const char *MsgError);
|
||||||
|
|
||||||
void DB_QueryREPLACE_new (const char *MsgError);
|
void DB_QueryREPLACE_new (const char *MsgError);
|
||||||
|
|
||||||
void DB_QueryUPDATE_new (const char *MsgError);
|
void DB_QueryUPDATE_new (const char *MsgError);
|
||||||
void DB_QueryUPDATE (char **Query,const char *MsgError);
|
void DB_QueryUPDATE_old (char **Query,const char *MsgError);
|
||||||
|
|
||||||
void DB_QueryDELETE_new (const char *MsgError);
|
void DB_QueryDELETE_new (const char *MsgError);
|
||||||
|
|
||||||
|
|
|
@ -912,7 +912,7 @@ static void Soc_ShowTimeline (char **Query,
|
||||||
bool ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
|
bool ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
|
||||||
|
|
||||||
/***** Get publishings from database *****/
|
/***** Get publishings from database *****/
|
||||||
NumPubsGot = DB_QuerySELECT (Query,&mysql_res,"can not get timeline");
|
NumPubsGot = DB_QuerySELECT_old (Query,&mysql_res,"can not get timeline");
|
||||||
|
|
||||||
/***** Start box *****/
|
/***** Start box *****/
|
||||||
Box_StartBox (Soc_WIDTH_TIMELINE,Title,Soc_PutIconsTimeline,
|
Box_StartBox (Soc_WIDTH_TIMELINE,Title,Soc_PutIconsTimeline,
|
||||||
|
@ -1111,7 +1111,7 @@ static void Soc_InsertNewPubsInTimeline (char **Query)
|
||||||
struct SocialNote SocNot;
|
struct SocialNote SocNot;
|
||||||
|
|
||||||
/***** Get new publishings timeline from database *****/
|
/***** Get new publishings timeline from database *****/
|
||||||
NumPubsGot = DB_QuerySELECT (Query,&mysql_res,"can not get timeline");
|
NumPubsGot = DB_QuerySELECT_old (Query,&mysql_res,"can not get timeline");
|
||||||
|
|
||||||
/***** List new publishings timeline *****/
|
/***** List new publishings timeline *****/
|
||||||
for (NumPub = 0;
|
for (NumPub = 0;
|
||||||
|
@ -1151,7 +1151,7 @@ static void Soc_ShowOldPubsInTimeline (char **Query)
|
||||||
struct SocialNote SocNot;
|
struct SocialNote SocNot;
|
||||||
|
|
||||||
/***** Get old publishings timeline from database *****/
|
/***** Get old publishings timeline from database *****/
|
||||||
NumPubsGot = DB_QuerySELECT (Query,&mysql_res,"can not get timeline");
|
NumPubsGot = DB_QuerySELECT_old (Query,&mysql_res,"can not get timeline");
|
||||||
|
|
||||||
/***** List old publishings in timeline *****/
|
/***** List old publishings in timeline *****/
|
||||||
for (NumPub = 0;
|
for (NumPub = 0;
|
||||||
|
|
|
@ -349,7 +349,7 @@ void Sta_LogAccess (const char *Comments)
|
||||||
Str_Concat (Query,"')",
|
Str_Concat (Query,"')",
|
||||||
MaxLength);
|
MaxLength);
|
||||||
|
|
||||||
DB_QueryINSERT (&Query,"can not log access (comments)");
|
DB_QueryINSERT_old (&Query,"can not log access (comments)");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Gbl.Search.LogSearch && Gbl.Search.Str[0])
|
if (Gbl.Search.LogSearch && Gbl.Search.Str[0])
|
||||||
|
@ -370,7 +370,7 @@ void Sta_LogAccess (const char *Comments)
|
||||||
Str_Concat (Query,"')",
|
Str_Concat (Query,"')",
|
||||||
MaxLength);
|
MaxLength);
|
||||||
|
|
||||||
DB_QueryINSERT (&Query,"can not log access (search)");
|
DB_QueryINSERT_old (&Query,"can not log access (search)");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Gbl.WebService.IsWebService)
|
if (Gbl.WebService.IsWebService)
|
||||||
|
@ -1484,7 +1484,7 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
|
||||||
Ale_ShowAlert (Ale_INFO,Query);
|
Ale_ShowAlert (Ale_INFO,Query);
|
||||||
*/
|
*/
|
||||||
/***** Make the query *****/
|
/***** Make the query *****/
|
||||||
NumRows = DB_QuerySELECT (&Query,&mysql_res,"can not get clicks");
|
NumRows = DB_QuerySELECT_old (&Query,&mysql_res,"can not get clicks");
|
||||||
|
|
||||||
/***** Count the number of rows in result *****/
|
/***** Count the number of rows in result *****/
|
||||||
if (NumRows == 0)
|
if (NumRows == 0)
|
||||||
|
|
|
@ -2635,7 +2635,7 @@ static unsigned long Tst_GetQuestions (MYSQL_RES **mysql_res)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make the query */
|
/* Make the query */
|
||||||
NumRows = DB_QuerySELECT (&Query,mysql_res,"can not get questions");
|
NumRows = DB_QuerySELECT_old (&Query,mysql_res,"can not get questions");
|
||||||
|
|
||||||
if (NumRows == 0)
|
if (NumRows == 0)
|
||||||
Ale_ShowAlert (Ale_INFO,Txt_No_questions_found_matching_your_search_criteria);
|
Ale_ShowAlert (Ale_INFO,Txt_No_questions_found_matching_your_search_criteria);
|
||||||
|
@ -2771,7 +2771,7 @@ static unsigned long Tst_GetQuestionsForTest (MYSQL_RES **mysql_res)
|
||||||
Lay_ShowAlert (Lay_INFO,Query);
|
Lay_ShowAlert (Lay_INFO,Query);
|
||||||
*/
|
*/
|
||||||
/* Make the query */
|
/* Make the query */
|
||||||
return DB_QuerySELECT (&Query,mysql_res,"can not get questions");
|
return DB_QuerySELECT_old (&Query,mysql_res,"can not get questions");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -5104,7 +5104,7 @@ static void Usr_GetListUsrsFromQuery (char **Query,Rol_Role_t Role,Sco_Scope_t S
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Query database *****/
|
/***** Query database *****/
|
||||||
if ((Gbl.Usrs.LstUsrs[Role].NumUsrs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get list of users")))
|
if ((Gbl.Usrs.LstUsrs[Role].NumUsrs = (unsigned) DB_QuerySELECT_old (Query,&mysql_res,"can not get list of users")))
|
||||||
{
|
{
|
||||||
if (Gbl.Usrs.LstUsrs[Role].NumUsrs > Cfg_MAX_USRS_IN_LIST)
|
if (Gbl.Usrs.LstUsrs[Role].NumUsrs > Cfg_MAX_USRS_IN_LIST)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2779,7 +2779,7 @@ int swad__sendAttendanceUsers (struct soap *soap,
|
||||||
Str_Concat (Query,")",
|
Str_Concat (Query,")",
|
||||||
Length);
|
Length);
|
||||||
|
|
||||||
DB_QueryUPDATE (&Query,"can not set other users as absent");
|
DB_QueryUPDATE_old (&Query,"can not set other users as absent");
|
||||||
|
|
||||||
/* Clean table att_usr */
|
/* Clean table att_usr */
|
||||||
Att_RemoveUsrsAbsentWithoutCommentsFromAttEvent (Att.AttCod);
|
Att_RemoveUsrsAbsentWithoutCommentsFromAttEvent (Att.AttCod);
|
||||||
|
@ -3296,7 +3296,7 @@ int swad__sendMessage (struct soap *soap,
|
||||||
if (ReplyUsrCod > 0 || ThereAreNicknames) // There are a recipient to reply or nicknames in "to"
|
if (ReplyUsrCod > 0 || ThereAreNicknames) // There are a recipient to reply or nicknames in "to"
|
||||||
{
|
{
|
||||||
/***** Get users *****/
|
/***** Get users *****/
|
||||||
NumRows = DB_QuerySELECT (&Query,&mysql_res,"can not get users");
|
NumRows = DB_QuerySELECT_old (&Query,&mysql_res,"can not get users");
|
||||||
|
|
||||||
sendMessageOut->numUsers = (int) NumRows;
|
sendMessageOut->numUsers = (int) NumRows;
|
||||||
sendMessageOut->usersArray.__size = (int) NumRows;
|
sendMessageOut->usersArray.__size = (int) NumRows;
|
||||||
|
|
Loading…
Reference in New Issue