Version 18.11.4

This commit is contained in:
Antonio Cañas Vargas 2018-10-30 17:47:57 +01:00
parent e0602b0ad0
commit 6c93499a82
8 changed files with 467 additions and 431 deletions

View File

@ -355,10 +355,11 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf ps2pdf source.ps destination.pdf
*/ */
#define Log_PLATFORM_VERSION "SWAD 18.11.2 (2018-10-30)" #define Log_PLATFORM_VERSION "SWAD 18.11.4 (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.4: Oct 30, 2018 Joining building and performing query into one function. (235593 lines)
Version 18.11.3: Oct 30, 2018 Joining building and performing query into one function. (235553 lines) Version 18.11.3: Oct 30, 2018 Joining building and performing query into one function. (235553 lines)
Version 18.11.2: Oct 30, 2018 Joining building and performing query into one function. (235531 lines) Version 18.11.2: Oct 30, 2018 Joining building and performing query into one function. (235531 lines)
Version 18.11.1: Oct 30, 2018 Joining building and performing query into one function. (235497 lines) Version 18.11.1: Oct 30, 2018 Joining building and performing query into one function. (235497 lines)

View File

@ -3124,9 +3124,8 @@ void Crs_GetAndWriteCrssOfAUsr (const struct UsrData *UsrDat,Rol_Role_t Role)
} }
/*****************************************************************************/ /*****************************************************************************/
/****************************** List courses found ***************************/ /**************************** List courses found *****************************/
/*****************************************************************************/ /*****************************************************************************/
// Returns number of courses found
void Crs_ListCrssFound (MYSQL_RES **mysql_res,unsigned NumCrss) void Crs_ListCrssFound (MYSQL_RES **mysql_res,unsigned NumCrss)
{ {

View File

@ -2552,22 +2552,19 @@ void Hie_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan)
} }
/*****************************************************************************/ /*****************************************************************************/
/****************************** List degrees found ***************************/ /**************************** List degrees found *****************************/
/*****************************************************************************/ /*****************************************************************************/
// Returns number of degrees found
unsigned Deg_ListDegsFound (void) void Deg_ListDegsFound (MYSQL_RES **mysql_res,unsigned NumDegs)
{ {
extern const char *Txt_degree; extern const char *Txt_degree;
extern const char *Txt_degrees; extern const char *Txt_degrees;
MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumDegs;
unsigned NumDeg; unsigned NumDeg;
struct Degree Deg; struct Degree Deg;
/***** Query database *****/ /***** Query database *****/
if ((NumDegs = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get degrees"))) if (NumDegs)
{ {
/***** Start box and table *****/ /***** Start box and table *****/
/* Number of degrees found */ /* Number of degrees found */
@ -2587,7 +2584,7 @@ unsigned Deg_ListDegsFound (void)
NumDeg++) NumDeg++)
{ {
/* Get next degree */ /* Get next degree */
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (*mysql_res);
/* Get degree code (row[0]) */ /* Get degree code (row[0]) */
Deg.DegCod = Str_ConvertStrCodToLongCod (row[0]); Deg.DegCod = Str_ConvertStrCodToLongCod (row[0]);
@ -2604,7 +2601,5 @@ unsigned Deg_ListDegsFound (void)
} }
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res); DB_FreeMySQLResult (mysql_res);
return NumDegs;
} }

View File

@ -143,6 +143,6 @@ unsigned Deg_GetNumDegsInCtr (long CtrCod);
unsigned Deg_GetNumDegsWithCrss (const char *SubQuery); unsigned Deg_GetNumDegsWithCrss (const char *SubQuery);
unsigned Deg_GetNumDegsWithUsrs (Rol_Role_t Role,const char *SubQuery); unsigned Deg_GetNumDegsWithUsrs (Rol_Role_t Role,const char *SubQuery);
unsigned Deg_ListDegsFound (void); void Deg_ListDegsFound (MYSQL_RES **mysql_res,unsigned NumCrss);
#endif #endif

View File

@ -281,27 +281,26 @@ void Dpt_GetListDepartments (long InsCod)
sprintf (OrderBySubQuery,"NumTchs DESC,FullName"); sprintf (OrderBySubQuery,"NumTchs DESC,FullName");
break; break;
} }
DB_BuildQuery ("(SELECT departments.DptCod,departments.InsCod," Gbl.Dpts.Num = (unsigned) DB_QuerySELECT (&mysql_res,"can not get departments",
"departments.ShortName,departments.FullName,departments.WWW," "(SELECT departments.DptCod,departments.InsCod,"
"COUNT(DISTINCT usr_data.UsrCod) AS NumTchs" "departments.ShortName,departments.FullName,departments.WWW,"
" FROM departments,usr_data,crs_usr" "COUNT(DISTINCT usr_data.UsrCod) AS NumTchs"
" WHERE departments.InsCod=%ld" " FROM departments,usr_data,crs_usr"
" AND departments.DptCod=usr_data.DptCod" " WHERE departments.InsCod=%ld"
" AND usr_data.UsrCod=crs_usr.UsrCod" " AND departments.DptCod=usr_data.DptCod"
" AND crs_usr.Role IN (%u,%u)" " AND usr_data.UsrCod=crs_usr.UsrCod"
" GROUP BY departments.DptCod)" " AND crs_usr.Role IN (%u,%u)"
" UNION " " GROUP BY departments.DptCod)"
"(SELECT DptCod,InsCod,ShortName,FullName,WWW,0 AS NumTchs" " UNION "
" FROM departments" "(SELECT DptCod,InsCod,ShortName,FullName,WWW,0 AS NumTchs"
" WHERE InsCod=%ld AND DptCod NOT IN" " FROM departments"
" (SELECT DISTINCT usr_data.DptCod FROM usr_data,crs_usr" " WHERE InsCod=%ld AND DptCod NOT IN"
" WHERE crs_usr.Role IN (%u,%u) AND crs_usr.UsrCod=usr_data.UsrCod))" " (SELECT DISTINCT usr_data.DptCod FROM usr_data,crs_usr"
" ORDER BY %s", " WHERE crs_usr.Role IN (%u,%u) AND crs_usr.UsrCod=usr_data.UsrCod))"
InsCod,(unsigned) Rol_NET,(unsigned) Rol_TCH, " ORDER BY %s",
InsCod,(unsigned) Rol_NET,(unsigned) Rol_TCH, InsCod,(unsigned) Rol_NET,(unsigned) Rol_TCH,
OrderBySubQuery); InsCod,(unsigned) Rol_NET,(unsigned) Rol_TCH,
Gbl.Dpts.Num = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get departments"); OrderBySubQuery);
if (Gbl.Dpts.Num) // Departments found... if (Gbl.Dpts.Num) // Departments found...
{ {
/***** Create list with courses in degree *****/ /***** Create list with courses in degree *****/
@ -377,24 +376,23 @@ void Dpt_GetDataOfDepartmentByCod (struct Department *Dpt)
else if (Dpt->DptCod > 0) else if (Dpt->DptCod > 0)
{ {
/***** Get data of a department from database *****/ /***** Get data of a department from database *****/
DB_BuildQuery ("(SELECT departments.InsCod,departments.ShortName,departments.FullName,departments.WWW," NumRows = DB_QuerySELECT (&mysql_res,"can not get data of a department",
"COUNT(DISTINCT usr_data.UsrCod) AS NumTchs" "(SELECT departments.InsCod,departments.ShortName,departments.FullName,departments.WWW,"
" FROM departments,usr_data,crs_usr" "COUNT(DISTINCT usr_data.UsrCod) AS NumTchs"
" WHERE departments.DptCod=%ld" " FROM departments,usr_data,crs_usr"
" AND departments.DptCod=usr_data.DptCod" " WHERE departments.DptCod=%ld"
" AND usr_data.UsrCod=crs_usr.UsrCod" " AND departments.DptCod=usr_data.DptCod"
" AND crs_usr.Role=%u" " AND usr_data.UsrCod=crs_usr.UsrCod"
" GROUP BY departments.DptCod)" " AND crs_usr.Role=%u"
" UNION " " GROUP BY departments.DptCod)"
"(SELECT InsCod,ShortName,FullName,WWW,0" " UNION "
" FROM departments" "(SELECT InsCod,ShortName,FullName,WWW,0"
" WHERE DptCod=%ld AND DptCod NOT IN" " FROM departments"
" (SELECT DISTINCT usr_data.DptCod FROM usr_data,crs_usr" " WHERE DptCod=%ld AND DptCod NOT IN"
" WHERE crs_usr.Role=%u AND crs_usr.UsrCod=usr_data.UsrCod))", " (SELECT DISTINCT usr_data.DptCod FROM usr_data,crs_usr"
Dpt->DptCod,(unsigned) Rol_TCH, " WHERE crs_usr.Role=%u AND crs_usr.UsrCod=usr_data.UsrCod))",
Dpt->DptCod,(unsigned) Rol_TCH); Dpt->DptCod,(unsigned) Rol_TCH,
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get data of a department"); Dpt->DptCod,(unsigned) Rol_TCH);
if (NumRows) // Department found... if (NumRows) // Department found...
{ {
/* Get row */ /* Get row */

View File

@ -145,12 +145,13 @@ void Dup_ListDuplicateUsrs (void)
Box_StartBox (NULL,Txt_Possibly_duplicate_users,NULL, Box_StartBox (NULL,Txt_Possibly_duplicate_users,NULL,
Hlp_USERS_Duplicates_possibly_duplicate_users,Box_NOT_CLOSABLE); Hlp_USERS_Duplicates_possibly_duplicate_users,Box_NOT_CLOSABLE);
/***** Build query *****/ /***** Make query *****/
DB_BuildQuery ("SELECT UsrCod,COUNT(*) AS N,MIN(UNIX_TIMESTAMP(InformTime)) AS T" NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get possibly"
" FROM usr_duplicated" " duplicate users",
" GROUP BY UsrCod" "SELECT UsrCod,COUNT(*) AS N,MIN(UNIX_TIMESTAMP(InformTime)) AS T"
" ORDER BY N DESC,T DESC"); " FROM usr_duplicated"
NumUsrs = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get possibly duplicate users"); " GROUP BY UsrCod"
" ORDER BY N DESC,T DESC");
/***** List possible duplicated users *****/ /***** List possible duplicated users *****/
if (NumUsrs) if (NumUsrs)
@ -266,27 +267,26 @@ static void Dup_ListSimilarUsrs (void)
Box_StartBox (NULL,Txt_Similar_users,NULL, Box_StartBox (NULL,Txt_Similar_users,NULL,
Hlp_USERS_Duplicates_similar_users,Box_NOT_CLOSABLE); Hlp_USERS_Duplicates_similar_users,Box_NOT_CLOSABLE);
/***** Build query *****/ /***** Make query *****/
if (Gbl.Usrs.Other.UsrDat.Surname1[0] && if (Gbl.Usrs.Other.UsrDat.Surname1[0] &&
Gbl.Usrs.Other.UsrDat.FirstName[0]) // Name and surname 1 not empty Gbl.Usrs.Other.UsrDat.FirstName[0]) // Name and surname 1 not empty
{ NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get similar users",
DB_BuildQuery ("SELECT DISTINCT UsrCod FROM" "SELECT DISTINCT UsrCod FROM"
"(SELECT DISTINCT UsrCod FROM usr_IDs" "(SELECT DISTINCT UsrCod FROM usr_IDs"
" WHERE UsrID IN (SELECT UsrID FROM usr_IDs WHERE UsrCod=%ld)" " WHERE UsrID IN (SELECT UsrID FROM usr_IDs WHERE UsrCod=%ld)"
" UNION" " UNION"
" SELECT UsrCod FROM usr_data" " SELECT UsrCod FROM usr_data"
" WHERE Surname1='%s' AND Surname2='%s' AND FirstName='%s')" " WHERE Surname1='%s' AND Surname2='%s' AND FirstName='%s')"
" AS U", " AS U",
Gbl.Usrs.Other.UsrDat.UsrCod, Gbl.Usrs.Other.UsrDat.UsrCod,
Gbl.Usrs.Other.UsrDat.Surname1, Gbl.Usrs.Other.UsrDat.Surname1,
Gbl.Usrs.Other.UsrDat.Surname2, Gbl.Usrs.Other.UsrDat.Surname2,
Gbl.Usrs.Other.UsrDat.FirstName); Gbl.Usrs.Other.UsrDat.FirstName);
}
else else
DB_BuildQuery ("SELECT DISTINCT UsrCod FROM usr_IDs" NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get similar users",
" WHERE UsrID IN (SELECT UsrID FROM usr_IDs WHERE UsrCod=%ld)", "SELECT DISTINCT UsrCod FROM usr_IDs"
Gbl.Usrs.Other.UsrDat.UsrCod); " WHERE UsrID IN (SELECT UsrID FROM usr_IDs WHERE UsrCod=%ld)",
NumUsrs = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get similar users"); Gbl.Usrs.Other.UsrDat.UsrCod);
/***** List possible similar users *****/ /***** List possible similar users *****/
if (NumUsrs) if (NumUsrs)

View File

@ -477,12 +477,12 @@ void Enr_GetNotifEnrolment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
// This function may be called inside a web service, so don't report error // This function may be called inside a web service, so don't report error
/***** Get user's role in course from database *****/ /***** Get user's role in course from database *****/
DB_BuildQuery ("SELECT Role" if (DB_QuerySELECT (&mysql_res,"can not get user's role"
" FROM crs_usr" " in course",
" WHERE CrsCod=%ld AND UsrCod=%ld", "SELECT Role"
CrsCod,UsrCod); " FROM crs_usr"
if (DB_QuerySELECT_new (&mysql_res,"can not get user's role" " WHERE CrsCod=%ld AND UsrCod=%ld",
" in course") == 1) // Result should have a unique row CrsCod,UsrCod) == 1) // Result should have a unique row
{ {
/***** Get user's role in course *****/ /***** Get user's role in course *****/
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -859,17 +859,18 @@ void Enr_RemoveOldUsrs (void)
SecondsWithoutAccess = (time_t) MonthsWithoutAccess * Dat_SECONDS_IN_ONE_MONTH; SecondsWithoutAccess = (time_t) MonthsWithoutAccess * Dat_SECONDS_IN_ONE_MONTH;
/***** Get old users from database *****/ /***** Get old users from database *****/
DB_BuildQuery ("SELECT UsrCod FROM" NumUsrs = DB_QuerySELECT (&mysql_res,"can not get old users",
"(" "SELECT UsrCod FROM"
"SELECT UsrCod FROM usr_last WHERE" "("
" LastTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-'%lu')" "SELECT UsrCod FROM usr_last WHERE"
" UNION " " LastTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-'%lu')"
"SELECT UsrCod FROM usr_data WHERE" " UNION "
" UsrCod NOT IN (SELECT UsrCod FROM usr_last)" "SELECT UsrCod FROM usr_data WHERE"
") AS candidate_usrs" " UsrCod NOT IN (SELECT UsrCod FROM usr_last)"
" WHERE UsrCod NOT IN (SELECT DISTINCT UsrCod FROM crs_usr)", ") AS candidate_usrs"
(unsigned long) SecondsWithoutAccess); " WHERE UsrCod NOT IN (SELECT DISTINCT UsrCod FROM crs_usr)",
if ((NumUsrs = DB_QuerySELECT_new (&mysql_res,"can not get old users"))) (unsigned long) SecondsWithoutAccess);
if (NumUsrs)
{ {
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt), snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
Txt_Eliminating_X_users_who_were_not_enroled_in_any_course_and_with_more_than_Y_months_without_access_to_Z, Txt_Eliminating_X_users_who_were_not_enroled_in_any_course_and_with_more_than_Y_months_without_access_to_Z,
@ -2028,11 +2029,11 @@ void Enr_SignUpInCrs (void)
Lay_ShowErrorAndExit ("Wrong role."); Lay_ShowErrorAndExit ("Wrong role.");
/***** Try to get and old request of the same user in the same course from database *****/ /***** Try to get and old request of the same user in the same course from database *****/
DB_BuildQuery ("SELECT ReqCod FROM crs_usr_requests" if (DB_QuerySELECT (&mysql_res,"can not get enrolment request",
" WHERE CrsCod=%ld AND UsrCod=%ld", "SELECT ReqCod FROM crs_usr_requests"
Gbl.CurrentCrs.Crs.CrsCod, " WHERE CrsCod=%ld AND UsrCod=%ld",
Gbl.Usrs.Me.UsrDat.UsrCod); Gbl.CurrentCrs.Crs.CrsCod,
if (DB_QuerySELECT_new (&mysql_res,"can not get enrolment request")) Gbl.Usrs.Me.UsrDat.UsrCod))
{ {
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
/* Get request code (row[0]) */ /* Get request code (row[0]) */
@ -2098,11 +2099,11 @@ void Enr_GetNotifEnrolmentRequest (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
// This function may be called inside a web service, so don't report error // This function may be called inside a web service, so don't report error
/***** Get user and requested role from database *****/ /***** Get user and requested role from database *****/
DB_BuildQuery ("SELECT UsrCod,Role" if (DB_QuerySELECT (&mysql_res,"can not get enrolment request",
" FROM crs_usr_requests" "SELECT UsrCod,Role"
" WHERE ReqCod=%ld", " FROM crs_usr_requests"
ReqCod); " WHERE ReqCod=%ld",
if (DB_QuerySELECT_new (&mysql_res,"can not get enrolment request") == 1) // Result should have a unique row ReqCod) == 1) // Result should have a unique row
{ {
/***** Get user and requested role *****/ /***** Get user and requested role *****/
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -2304,8 +2305,8 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
extern const char *Txt_No_enrolment_requests; extern const char *Txt_No_enrolment_requests;
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumReq; unsigned long NumReqs = 0; // Initialized to avoid warning
unsigned NumRequests; unsigned long NumReq;
long ReqCod; long ReqCod;
struct Degree Deg; struct Degree Deg;
struct Course Crs; struct Course Crs;
@ -2377,83 +2378,93 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
{ {
case Rol_TCH: case Rol_TCH:
// Requests in all courses in which I am teacher // Requests in all courses in which I am teacher
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM crs_usr,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE crs_usr.UsrCod=%ld" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND crs_usr.Role=%u" " FROM crs_usr,crs_usr_requests"
" AND crs_usr.CrsCod=crs_usr_requests.CrsCod" " WHERE crs_usr.UsrCod=%ld"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND crs_usr.Role=%u"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND crs_usr.CrsCod=crs_usr_requests.CrsCod"
Gbl.Usrs.Me.UsrDat.UsrCod, " AND ((1<<crs_usr_requests.Role)&%u)<>0"
(unsigned) Rol_TCH, " ORDER BY crs_usr_requests.RequestTime DESC",
RolesSelected); Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Rol_TCH,
RolesSelected);
break; break;
case Rol_DEG_ADM: case Rol_DEG_ADM:
// Requests in all degrees administrated by me // Requests in all degrees administrated by me
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM admin,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE admin.UsrCod=%ld AND admin.Scope='%s'" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND admin.Cod=courses.DegCod" " FROM admin,courses,crs_usr_requests"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " WHERE admin.UsrCod=%ld AND admin.Scope='%s'"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND admin.Cod=courses.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG], " AND ((1<<crs_usr_requests.Role)&%u)<>0"
RolesSelected); " ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG],
RolesSelected);
break; break;
case Rol_CTR_ADM: case Rol_CTR_ADM:
// Requests in all centres administrated by me // Requests in all centres administrated by me
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM admin,degrees,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE admin.UsrCod=%ld AND admin.Scope='%s'" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND admin.Cod=degrees.CtrCod" " FROM admin,degrees,courses,crs_usr_requests"
" AND degrees.DegCod=courses.DegCod" " WHERE admin.UsrCod=%ld AND admin.Scope='%s'"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND admin.Cod=degrees.CtrCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND degrees.DegCod=courses.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_CTR], " AND ((1<<crs_usr_requests.Role)&%u)<>0"
RolesSelected); " ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_CTR],
RolesSelected);
break; break;
case Rol_INS_ADM: case Rol_INS_ADM:
// Requests in all institutions administrated by me // Requests in all institutions administrated by me
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM admin,centres,degrees,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE admin.UsrCod=%ld AND admin.Scope='%s'" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND admin.Cod=centres.InsCod" " FROM admin,centres,degrees,courses,crs_usr_requests"
" AND centres.CtrCod=degrees.CtrCod" " WHERE admin.UsrCod=%ld AND admin.Scope='%s'"
" AND degrees.DegCod=courses.DegCod" " AND admin.Cod=centres.InsCod"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND centres.CtrCod=degrees.CtrCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND degrees.DegCod=courses.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_INS], " AND ((1<<crs_usr_requests.Role)&%u)<>0"
RolesSelected); " ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_INS],
RolesSelected);
break; break;
case Rol_SYS_ADM: case Rol_SYS_ADM:
// All requests // All requests
DB_BuildQuery ("SELECT ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"CrsCod," " for enrolment",
"UsrCod," "SELECT ReqCod,"
"Role," "CrsCod,"
"UNIX_TIMESTAMP(RequestTime)" "UsrCod,"
" FROM crs_usr_requests" "Role,"
" WHERE ((1<<Role)&%u)<>0" "UNIX_TIMESTAMP(RequestTime)"
" ORDER BY RequestTime DESC", " FROM crs_usr_requests"
RolesSelected); " WHERE ((1<<Role)&%u)<>0"
" ORDER BY RequestTime DESC",
RolesSelected);
break; break;
default: default:
Lay_ShowErrorAndExit ("You don't have permission to list requesters."); Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
@ -2465,107 +2476,117 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
{ {
case Rol_TCH: case Rol_TCH:
// Requests in courses of this country in which I am teacher // Requests in courses of this country in which I am teacher
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM crs_usr,institutions,centres,degrees,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE crs_usr.UsrCod=%ld" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND crs_usr.Role=%u" " FROM crs_usr,institutions,centres,degrees,courses,crs_usr_requests"
" AND crs_usr.CrsCod=courses.CrsCod" " WHERE crs_usr.UsrCod=%ld"
" AND courses.DegCod=degrees.DegCod" " AND crs_usr.Role=%u"
" AND degrees.CtrCod=centres.CtrCod" " AND crs_usr.CrsCod=courses.CrsCod"
" AND centres.InsCod=institutions.InsCod" " AND courses.DegCod=degrees.DegCod"
" AND institutions.CtyCod=%ld" " AND degrees.CtrCod=centres.CtrCod"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND centres.InsCod=institutions.InsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND institutions.CtyCod=%ld"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Usrs.Me.UsrDat.UsrCod, " AND ((1<<crs_usr_requests.Role)&%u)<>0"
(unsigned) Rol_TCH, " ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.CurrentCty.Cty.CtyCod, Gbl.Usrs.Me.UsrDat.UsrCod,
RolesSelected); (unsigned) Rol_TCH,
Gbl.CurrentCty.Cty.CtyCod,
RolesSelected);
break; break;
case Rol_DEG_ADM: case Rol_DEG_ADM:
// Requests in degrees of this country administrated by me // Requests in degrees of this country administrated by me
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM admin,institutions,centres,degrees,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE admin.UsrCod=%ld AND admin.Scope='%s'" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND admin.Cod=degrees.DegCod" " FROM admin,institutions,centres,degrees,courses,crs_usr_requests"
" AND degrees.CtrCod=centres.CtrCod" " WHERE admin.UsrCod=%ld AND admin.Scope='%s'"
" AND centres.InsCod=institutions.InsCod" " AND admin.Cod=degrees.DegCod"
" AND institutions.CtyCod=%ld" " AND degrees.CtrCod=centres.CtrCod"
" AND degrees.DegCod=courses.DegCod" " AND centres.InsCod=institutions.InsCod"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND institutions.CtyCod=%ld"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND degrees.DegCod=courses.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG], " AND ((1<<crs_usr_requests.Role)&%u)<>0"
Gbl.CurrentCty.Cty.CtyCod, " ORDER BY crs_usr_requests.RequestTime DESC",
RolesSelected); Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG],
Gbl.CurrentCty.Cty.CtyCod,
RolesSelected);
break; break;
case Rol_CTR_ADM: case Rol_CTR_ADM:
// Requests in centres of this country administrated by me // Requests in centres of this country administrated by me
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM admin,institutions,centres,degrees,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE admin.UsrCod=%ld AND admin.Scope='%s'" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND admin.Cod=centres.CtrCod" " FROM admin,institutions,centres,degrees,courses,crs_usr_requests"
" AND centres.InsCod=institutions.InsCod" " WHERE admin.UsrCod=%ld AND admin.Scope='%s'"
" AND institutions.CtyCod=%ld" " AND admin.Cod=centres.CtrCod"
" AND centres.CtrCod=degrees.CtrCod" " AND centres.InsCod=institutions.InsCod"
" AND degrees.DegCod=courses.DegCod" " AND institutions.CtyCod=%ld"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND centres.CtrCod=degrees.CtrCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND degrees.DegCod=courses.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_CTR], " AND ((1<<crs_usr_requests.Role)&%u)<>0"
Gbl.CurrentCty.Cty.CtyCod, " ORDER BY crs_usr_requests.RequestTime DESC",
RolesSelected); Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_CTR],
Gbl.CurrentCty.Cty.CtyCod,
RolesSelected);
break; break;
case Rol_INS_ADM: case Rol_INS_ADM:
// Requests in institutions of this country administrated by me // Requests in institutions of this country administrated by me
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM admin,institutions,centres,degrees,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE admin.UsrCod=%ld AND admin.Scope='%s'" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND admin.Cod=institutions.InsCod" " FROM admin,institutions,centres,degrees,courses,crs_usr_requests"
" AND institutions.CtyCod=%ld" " WHERE admin.UsrCod=%ld AND admin.Scope='%s'"
" AND institutions.InsCod=centres.InsCod" " AND admin.Cod=institutions.InsCod"
" AND centres.CtrCod=degrees.CtrCod" " AND institutions.CtyCod=%ld"
" AND degrees.DegCod=courses.DegCod" " AND institutions.InsCod=centres.InsCod"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND centres.CtrCod=degrees.CtrCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND degrees.DegCod=courses.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_INS], " AND ((1<<crs_usr_requests.Role)&%u)<>0"
Gbl.CurrentCty.Cty.CtyCod, " ORDER BY crs_usr_requests.RequestTime DESC",
RolesSelected); Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_INS],
Gbl.CurrentCty.Cty.CtyCod,
RolesSelected);
break; break;
case Rol_SYS_ADM: case Rol_SYS_ADM:
// Requests in any course of this country // Requests in any course of this country
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM institutions,centres,degrees,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE institutions.CtyCod=%ld" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND institutions.InsCod=centres.InsCod" " FROM institutions,centres,degrees,courses,crs_usr_requests"
" AND centres.CtrCod=degrees.CtrCod" " WHERE institutions.CtyCod=%ld"
" AND degrees.DegCod=courses.DegCod" " AND institutions.InsCod=centres.InsCod"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND centres.CtrCod=degrees.CtrCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND degrees.DegCod=courses.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.CurrentCty.Cty.CtyCod, " AND ((1<<crs_usr_requests.Role)&%u)<>0"
RolesSelected); " ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.CurrentCty.Cty.CtyCod,
RolesSelected);
break; break;
default: default:
Lay_ShowErrorAndExit ("You don't have permission to list requesters."); Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
@ -2577,83 +2598,91 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
{ {
case Rol_TCH: case Rol_TCH:
// Requests in courses of this institution in which I am teacher // Requests in courses of this institution in which I am teacher
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM crs_usr,centres,degrees,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE crs_usr.UsrCod=%ld" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND crs_usr.Role=%u" " FROM crs_usr,centres,degrees,courses,crs_usr_requests"
" AND crs_usr.CrsCod=courses.CrsCod" " WHERE crs_usr.UsrCod=%ld"
" AND courses.DegCod=degrees.DegCod" " AND crs_usr.Role=%u"
" AND degrees.CtrCod=centres.CtrCod" " AND crs_usr.CrsCod=courses.CrsCod"
" AND centres.InsCod=%ld" " AND courses.DegCod=degrees.DegCod"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND degrees.CtrCod=centres.CtrCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND centres.InsCod=%ld"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Usrs.Me.UsrDat.UsrCod, " AND ((1<<crs_usr_requests.Role)&%u)<>0"
(unsigned) Rol_TCH, " ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.CurrentIns.Ins.InsCod, Gbl.Usrs.Me.UsrDat.UsrCod,
RolesSelected); (unsigned) Rol_TCH,
Gbl.CurrentIns.Ins.InsCod,
RolesSelected);
break; break;
case Rol_DEG_ADM: case Rol_DEG_ADM:
// Requests in degrees of this institution administrated by me // Requests in degrees of this institution administrated by me
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM admin,centres,degrees,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE admin.UsrCod=%ld AND admin.Scope='%s'" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND admin.Cod=degrees.DegCod" " FROM admin,centres,degrees,courses,crs_usr_requests"
" AND degrees.CtrCod=centres.CtrCod" " WHERE admin.UsrCod=%ld AND admin.Scope='%s'"
" AND centres.InsCod=%ld" " AND admin.Cod=degrees.DegCod"
" AND degrees.DegCod=courses.DegCod" " AND degrees.CtrCod=centres.CtrCod"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND centres.InsCod=%ld"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND degrees.DegCod=courses.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG], " AND ((1<<crs_usr_requests.Role)&%u)<>0"
Gbl.CurrentIns.Ins.InsCod, " ORDER BY crs_usr_requests.RequestTime DESC",
RolesSelected); Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG],
Gbl.CurrentIns.Ins.InsCod,
RolesSelected);
break; break;
case Rol_CTR_ADM: case Rol_CTR_ADM:
// Requests in centres of this institution administrated by me // Requests in centres of this institution administrated by me
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM admin,centres,degrees,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE admin.UsrCod=%ld AND admin.Scope='%s'" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND admin.Cod=centres.CtrCod" " FROM admin,centres,degrees,courses,crs_usr_requests"
" AND centres.InsCod=%ld" " WHERE admin.UsrCod=%ld AND admin.Scope='%s'"
" AND centres.CtrCod=degrees.CtrCod" " AND admin.Cod=centres.CtrCod"
" AND degrees.DegCod=courses.DegCod" " AND centres.InsCod=%ld"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND centres.CtrCod=degrees.CtrCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND degrees.DegCod=courses.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_CTR], " AND ((1<<crs_usr_requests.Role)&%u)<>0"
Gbl.CurrentIns.Ins.InsCod, " ORDER BY crs_usr_requests.RequestTime DESC",
RolesSelected); Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_CTR],
Gbl.CurrentIns.Ins.InsCod,
RolesSelected);
break; break;
case Rol_INS_ADM: // If I am logged as admin of this institution, I can view all the requesters from this institution case Rol_INS_ADM: // If I am logged as admin of this institution, I can view all the requesters from this institution
case Rol_SYS_ADM: case Rol_SYS_ADM:
// Requests in any course of this institution // Requests in any course of this institution
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM centres,degrees,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE centres.InsCod=%ld" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND centres.CtrCod=degrees.CtrCod" " FROM centres,degrees,courses,crs_usr_requests"
" AND degrees.DegCod=courses.DegCod" " WHERE centres.InsCod=%ld"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND centres.CtrCod=degrees.CtrCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND degrees.DegCod=courses.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.CurrentIns.Ins.InsCod, " AND ((1<<crs_usr_requests.Role)&%u)<>0"
RolesSelected); " ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.CurrentIns.Ins.InsCod,
RolesSelected);
break; break;
default: default:
Lay_ShowErrorAndExit ("You don't have permission to list requesters."); Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
@ -2665,61 +2694,67 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
{ {
case Rol_TCH: case Rol_TCH:
// Requests in courses of this centre in which I am teacher // Requests in courses of this centre in which I am teacher
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM crs_usr,degrees,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE crs_usr.UsrCod=%ld" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND crs_usr.Role=%u" " FROM crs_usr,degrees,courses,crs_usr_requests"
" AND crs_usr.CrsCod=courses.CrsCod" " WHERE crs_usr.UsrCod=%ld"
" AND courses.DegCod=degrees.DegCod" " AND crs_usr.Role=%u"
" AND degrees.CtrCod=%ld" " AND crs_usr.CrsCod=courses.CrsCod"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND courses.DegCod=degrees.DegCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND degrees.CtrCod=%ld"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Usrs.Me.UsrDat.UsrCod, " AND ((1<<crs_usr_requests.Role)&%u)<>0"
(unsigned) Rol_TCH, " ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.CurrentCtr.Ctr.CtrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
RolesSelected); (unsigned) Rol_TCH,
Gbl.CurrentCtr.Ctr.CtrCod,
RolesSelected);
break; break;
case Rol_DEG_ADM: case Rol_DEG_ADM:
// Requests in degrees of this centre administrated by me // Requests in degrees of this centre administrated by me
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM admin,degrees,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE admin.UsrCod=%ld AND admin.Scope='%s'" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND admin.Cod=degrees.DegCod" " FROM admin,degrees,courses,crs_usr_requests"
" AND degrees.CtrCod=%ld" " WHERE admin.UsrCod=%ld AND admin.Scope='%s'"
" AND degrees.DegCod=courses.DegCod" " AND admin.Cod=degrees.DegCod"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND degrees.CtrCod=%ld"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND degrees.DegCod=courses.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG], " AND ((1<<crs_usr_requests.Role)&%u)<>0"
Gbl.CurrentCtr.Ctr.CtrCod, " ORDER BY crs_usr_requests.RequestTime DESC",
RolesSelected); Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG],
Gbl.CurrentCtr.Ctr.CtrCod,
RolesSelected);
break; break;
case Rol_CTR_ADM: // If I am logged as admin of this centre , I can view all the requesters from this centre case Rol_CTR_ADM: // If I am logged as admin of this centre , I can view all the requesters from this centre
case Rol_INS_ADM: // If I am logged as admin of this institution, I can view all the requesters from this centre case Rol_INS_ADM: // If I am logged as admin of this institution, I can view all the requesters from this centre
case Rol_SYS_ADM: case Rol_SYS_ADM:
// Request in any course of this centre // Request in any course of this centre
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM degrees,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE degrees.CtrCod=%ld" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND degrees.DegCod=courses.DegCod" " FROM degrees,courses,crs_usr_requests"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " WHERE degrees.CtrCod=%ld"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND degrees.DegCod=courses.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.CurrentCtr.Ctr.CtrCod, " AND ((1<<crs_usr_requests.Role)&%u)<>0"
RolesSelected); " ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.CurrentCtr.Ctr.CtrCod,
RolesSelected);
break; break;
default: default:
Lay_ShowErrorAndExit ("You don't have permission to list requesters."); Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
@ -2731,41 +2766,45 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
{ {
case Rol_TCH: case Rol_TCH:
// Requests in courses of this degree in which I am teacher // Requests in courses of this degree in which I am teacher
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM crs_usr,courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE crs_usr.UsrCod=%ld" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND crs_usr.Role=%u" " FROM crs_usr,courses,crs_usr_requests"
" AND crs_usr.CrsCod=courses.CrsCod" " WHERE crs_usr.UsrCod=%ld"
" AND courses.DegCod=%ld" " AND crs_usr.Role=%u"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND crs_usr.CrsCod=courses.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND courses.DegCod=%ld"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Usrs.Me.UsrDat.UsrCod, " AND ((1<<crs_usr_requests.Role)&%u)<>0"
(unsigned) Rol_TCH, " ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.CurrentDeg.Deg.DegCod, Gbl.Usrs.Me.UsrDat.UsrCod,
RolesSelected); (unsigned) Rol_TCH,
Gbl.CurrentDeg.Deg.DegCod,
RolesSelected);
break; break;
case Rol_DEG_ADM: // If I am logged as admin of this degree , I can view all the requesters from this degree case Rol_DEG_ADM: // If I am logged as admin of this degree , I can view all the requesters from this degree
case Rol_CTR_ADM: // If I am logged as admin of this centre , I can view all the requesters from this degree case Rol_CTR_ADM: // If I am logged as admin of this centre , I can view all the requesters from this degree
case Rol_INS_ADM: // If I am logged as admin of this institution, I can view all the requesters from this degree case Rol_INS_ADM: // If I am logged as admin of this institution, I can view all the requesters from this degree
case Rol_SYS_ADM: case Rol_SYS_ADM:
// Requests in any course of this degree // Requests in any course of this degree
DB_BuildQuery ("SELECT crs_usr_requests.ReqCod," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"crs_usr_requests.CrsCod," " for enrolment",
"crs_usr_requests.UsrCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.Role," "crs_usr_requests.CrsCod,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "crs_usr_requests.UsrCod,"
" FROM courses,crs_usr_requests" "crs_usr_requests.Role,"
" WHERE courses.DegCod=%ld" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " FROM courses,crs_usr_requests"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " WHERE courses.DegCod=%ld"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.CurrentDeg.Deg.DegCod, " AND ((1<<crs_usr_requests.Role)&%u)<>0"
RolesSelected); " ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.CurrentDeg.Deg.DegCod,
RolesSelected);
break; break;
default: default:
Lay_ShowErrorAndExit ("You don't have permission to list requesters."); Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
@ -2781,14 +2820,16 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
case Rol_INS_ADM: // If I am logged as admin of this institution, I can view all the requesters from this course case Rol_INS_ADM: // If I am logged as admin of this institution, I can view all the requesters from this course
case Rol_SYS_ADM: case Rol_SYS_ADM:
// Requests in this course // Requests in this course
DB_BuildQuery ("SELECT ReqCod,CrsCod,UsrCod,Role," NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests"
"UNIX_TIMESTAMP(RequestTime)" " for enrolment",
" FROM crs_usr_requests" "SELECT ReqCod,CrsCod,UsrCod,Role,"
" WHERE CrsCod=%ld" "UNIX_TIMESTAMP(RequestTime)"
" AND ((1<<Role)&%u)<>0" " FROM crs_usr_requests"
" ORDER BY RequestTime DESC", " WHERE CrsCod=%ld"
Gbl.CurrentCrs.Crs.CrsCod, " AND ((1<<Role)&%u)<>0"
RolesSelected); " ORDER BY RequestTime DESC",
Gbl.CurrentCrs.Crs.CrsCod,
RolesSelected);
break; break;
default: default:
Lay_ShowErrorAndExit ("You don't have permission to list requesters."); Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
@ -2800,10 +2841,8 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
break; break;
} }
NumRequests = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get requests for enrolment");
/***** List requests *****/ /***** List requests *****/
if (NumRequests) if (NumReqs)
{ {
/* Initialize structure with user's data */ /* Initialize structure with user's data */
Usr_UsrDataConstructor (&UsrDat); Usr_UsrDataConstructor (&UsrDat);
@ -2837,7 +2876,7 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
/* List requests */ /* List requests */
for (NumReq = 0; for (NumReq = 0;
NumReq < NumRequests; NumReq < NumReqs;
NumReq++) NumReq++)
{ {
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -2871,9 +2910,9 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
/***** Number *****/ /***** Number *****/
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
"<td class=\"DAT RIGHT_TOP\">" "<td class=\"DAT RIGHT_TOP\">"
"%u" "%lu"
"</td>", "</td>",
NumRequests - NumReq); NumReqs - NumReq);
/***** Link to course *****/ /***** Link to course *****/
Crs_GetDataOfCourseByCod (&Crs); Crs_GetDataOfCourseByCod (&Crs);
@ -2993,10 +3032,10 @@ static void Enr_RemoveEnrolmentRequest (long CrsCod,long UsrCod)
/***** Mark possible notifications as removed /***** Mark possible notifications as removed
Important: do this before removing the request *****/ Important: do this before removing the request *****/
/* Request request code (returns 0 or 1 rows) */ /* Request request code (returns 0 or 1 rows) */
DB_BuildQuery ("SELECT ReqCod FROM crs_usr_requests" if (DB_QuerySELECT (&mysql_res,"can not get request code",
" WHERE CrsCod=%ld AND UsrCod=%ld", "SELECT ReqCod FROM crs_usr_requests"
CrsCod,UsrCod); " WHERE CrsCod=%ld AND UsrCod=%ld",
if (DB_QuerySELECT_new (&mysql_res,"can not get request code")) // Request exists CrsCod,UsrCod)) // Request exists
{ {
/* Get request code */ /* Get request code */
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);

View File

@ -728,6 +728,8 @@ static unsigned Sch_SearchCentresInDB (const char *RangeQuery)
static unsigned Sch_SearchDegreesInDB (const char *RangeQuery) static unsigned Sch_SearchDegreesInDB (const char *RangeQuery)
{ {
char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1]; char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1];
MYSQL_RES *mysql_res;
unsigned NumDegs;
/***** Check scope *****/ /***** Check scope *****/
if (Gbl.Scope.Current != Sco_SCOPE_CRS) if (Gbl.Scope.Current != Sco_SCOPE_CRS)
@ -737,16 +739,18 @@ static unsigned Sch_SearchDegreesInDB (const char *RangeQuery)
if (Sch_BuildSearchQuery (SearchQuery,"degrees.FullName",NULL,NULL)) if (Sch_BuildSearchQuery (SearchQuery,"degrees.FullName",NULL,NULL))
{ {
/***** Query database and list degrees found *****/ /***** Query database and list degrees found *****/
DB_BuildQuery ("SELECT degrees.DegCod" NumDegs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get degrees",
" FROM degrees,centres,institutions,countries" "SELECT degrees.DegCod"
" WHERE %s" " FROM degrees,centres,institutions,countries"
" AND degrees.CtrCod=centres.CtrCod" " WHERE %s"
" AND centres.InsCod=institutions.InsCod" " AND degrees.CtrCod=centres.CtrCod"
" AND institutions.CtyCod=countries.CtyCod" " AND centres.InsCod=institutions.InsCod"
"%s" " AND institutions.CtyCod=countries.CtyCod"
" ORDER BY degrees.FullName,institutions.FullName", "%s"
SearchQuery,RangeQuery); " ORDER BY degrees.FullName,institutions.FullName",
return Deg_ListDegsFound (); SearchQuery,RangeQuery);
Deg_ListDegsFound (&mysql_res,NumDegs);
return NumDegs;
} }
return 0; return 0;