Version 20.44.4: Mar 06, 2021 Degrees database table renamed.

This commit is contained in:
acanas 2021-03-07 17:45:36 +01:00
parent 61b751c97d
commit c86e71dc3b
33 changed files with 4876 additions and 3862 deletions

View File

@ -260,9 +260,9 @@ CREATE TABLE IF NOT EXISTS countries (
INDEX(Name_pl), INDEX(Name_pl),
INDEX(Name_pt)); INDEX(Name_pt));
-- --
-- Table courses: stores the courses/subjects -- Table crs_courses: stores the courses/subjects
-- --
CREATE TABLE IF NOT EXISTS courses ( CREATE TABLE IF NOT EXISTS crs_courses (
CrsCod INT NOT NULL AUTO_INCREMENT, CrsCod INT NOT NULL AUTO_INCREMENT,
DegCod INT NOT NULL DEFAULT -1, DegCod INT NOT NULL DEFAULT -1,
Year TINYINT NOT NULL DEFAULT 0, Year TINYINT NOT NULL DEFAULT 0,

View File

@ -491,7 +491,7 @@ static int API_CheckCourseAndGroupCodes (struct soap *soap,
/***** Query if course code already exists in database *****/ /***** Query if course code already exists in database *****/
if (DB_QueryCOUNT ("can not get course", if (DB_QueryCOUNT ("can not get course",
"SELECT COUNT(*) FROM courses" "SELECT COUNT(*) FROM crs_courses"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
CrsCod) != 1) CrsCod) != 1)
return soap_sender_fault (soap, return soap_sender_fault (soap,
@ -589,7 +589,7 @@ static int API_GetCurrentDegCodFromCurrentCrsCod (void)
/***** Check that key does not exist in database *****/ /***** Check that key does not exist in database *****/
if (DB_QuerySELECT (&mysql_res,"can not get the degree of a course", if (DB_QuerySELECT (&mysql_res,"can not get the degree of a course",
"SELECT DegCod FROM courses WHERE CrsCod=%ld", "SELECT DegCod FROM crs_courses WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod)) // Course found in table of courses Gbl.Hierarchy.Crs.CrsCod)) // Course found in table of courses
{ {
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -1361,14 +1361,15 @@ int swad__getCourses (struct soap *soap,
/***** Query my courses from database *****/ /***** Query my courses from database *****/
NumRows = NumRows =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get user's courses", (unsigned) DB_QuerySELECT (&mysql_res,"can not get user's courses",
"SELECT courses.CrsCod," "SELECT crs_courses.CrsCod,"
"courses.ShortName," "crs_courses.ShortName,"
"courses.FullName," "crs_courses.FullName,"
"crs_usr.Role" "crs_usr.Role"
" FROM crs_usr,courses" " FROM crs_usr,"
"crs_courses"
" WHERE crs_usr.UsrCod=%ld" " WHERE crs_usr.UsrCod=%ld"
" AND crs_usr.CrsCod=courses.CrsCod" " AND crs_usr.CrsCod=crs_courses.CrsCod"
" ORDER BY courses.FullName", " ORDER BY crs_courses.FullName",
Gbl.Usrs.Me.UsrDat.UsrCod); Gbl.Usrs.Me.UsrDat.UsrCod);
getCoursesOut->numCourses = (int) NumRows; getCoursesOut->numCourses = (int) NumRows;
@ -4634,20 +4635,26 @@ int swad__getTrivialQuestion (struct soap *soap,
Str_SetDecimalPointToUS (); // To print the floating point as a dot Str_SetDecimalPointToUS (); // To print the floating point as a dot
NumRows = NumRows =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get test questions", (unsigned) DB_QuerySELECT (&mysql_res,"can not get test questions",
"SELECT DISTINCTROW tst_questions.QstCod," "SELECT DISTINCTROW "
"tst_questions.AnsType,tst_questions.Shuffle," "tst_questions.QstCod,"
"tst_questions.Stem,tst_questions.Feedback," "tst_questions.AnsType,"
"tst_questions.Score/tst_questions.NumHits AS S" "tst_questions.Shuffle,"
" FROM courses,tst_questions" "tst_questions.Stem,"
" WHERE courses.DegCod IN (%s)" "tst_questions.Feedback,"
" AND courses.CrsCod=tst_questions.CrsCod" "tst_questions.Score/tst_questions.NumHits AS S"
" FROM crs_courses,"
"tst_questions"
" WHERE crs_courses.DegCod IN (%s)"
" AND crs_courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='unique_choice'" " AND tst_questions.AnsType='unique_choice'"
" AND tst_questions.NumHits>0" " AND tst_questions.NumHits>0"
" AND tst_questions.QstCod NOT IN" " AND tst_questions.QstCod NOT IN"
" (SELECT tst_question_tags.QstCod" " (SELECT tst_question_tags.QstCod"
" FROM courses,tst_tags,tst_question_tags" " FROM crs_courses,"
" WHERE courses.DegCod IN (%s)" "tst_tags,"
" AND courses.CrsCod=tst_tags.CrsCod" "tst_question_tags"
" WHERE crs_courses.DegCod IN (%s)"
" AND crs_courses.CrsCod=tst_tags.CrsCod"
" AND tst_tags.TagHidden='Y'" " AND tst_tags.TagHidden='Y'"
" AND tst_tags.TagCod=tst_question_tags.TagCod)" " AND tst_tags.TagCod=tst_question_tags.TagCod)"
" HAVING S>='%f' AND S<='%f'" " HAVING S>='%f' AND S<='%f'"
@ -6099,15 +6106,19 @@ int swad__getLastLocation (struct soap *soap,
if (DB_QueryCOUNT ("can not get session data", if (DB_QueryCOUNT ("can not get session data",
"SELECT COUNT(*) FROM " "SELECT COUNT(*) FROM "
"(SELECT DISTINCT deg_degrees.CtrCod" "(SELECT DISTINCT deg_degrees.CtrCod"
" FROM crs_usr,courses,deg_degrees" " FROM crs_usr,"
"crs_courses,"
"deg_degrees"
" WHERE crs_usr.UsrCod=%ld" " WHERE crs_usr.UsrCod=%ld"
" AND crs_usr.CrsCod=courses.CrsCod" " AND crs_usr.CrsCod=crs_courses.CrsCod"
" AND courses.DegCod=deg_degrees.DegCod) AS C1," // centres of my courses " AND crs_courses.DegCod=deg_degrees.DegCod) AS C1," // centres of my courses
"(SELECT DISTINCT deg_degrees.CtrCod" "(SELECT DISTINCT deg_degrees.CtrCod"
" FROM crs_usr,courses,deg_degrees" " FROM crs_usr,"
"crs_courses,"
"deg_degrees"
" WHERE crs_usr.UsrCod=%d" " WHERE crs_usr.UsrCod=%d"
" AND crs_usr.CrsCod=courses.CrsCod" " AND crs_usr.CrsCod=crs_courses.CrsCod"
" AND courses.DegCod=deg_degrees.DegCod) AS C2" // centres of user's courses " AND crs_courses.DegCod=deg_degrees.DegCod) AS C2" // centres of user's courses
" WHERE C1.CtrCod=C2.CtrCod", " WHERE C1.CtrCod=C2.CtrCod",
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
userCode)) userCode))

View File

@ -1865,46 +1865,60 @@ unsigned Agd_GetNumUsrsWithEvents (Hie_Lvl_Level_t Scope)
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of users with events", DB_QuerySELECT (&mysql_res,"can not get number of users with events",
"SELECT COUNT(DISTINCT agendas.UsrCod)" "SELECT COUNT(DISTINCT agendas.UsrCod)"
" FROM institutions,centres,deg_degrees,courses,crs_usr,agendas" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"crs_usr,"
"agendas"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.Status=0" " AND crs_courses.Status=0"
" AND courses.CrsCod=crs_usr.CrsCod" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=agendas.UsrCod", " AND crs_usr.UsrCod=agendas.UsrCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of users with events", DB_QuerySELECT (&mysql_res,"can not get number of users with events",
"SELECT COUNT(DISTINCT agendas.UsrCod)" "SELECT COUNT(DISTINCT agendas.UsrCod)"
" FROM centres,deg_degrees,courses,crs_usr,agendas" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"crs_usr,"
"agendas"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.Status=0" " AND crs_courses.Status=0"
" AND courses.CrsCod=crs_usr.CrsCod" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=agendas.UsrCod", " AND crs_usr.UsrCod=agendas.UsrCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of users with events", DB_QuerySELECT (&mysql_res,"can not get number of users with events",
"SELECT COUNT(DISTINCT agendas.UsrCod)" "SELECT COUNT(DISTINCT agendas.UsrCod)"
" FROM deg_degrees,courses,crs_usr,agendas" " FROM deg_degrees,"
"crs_courses,"
"crs_usr,"
"agendas"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.Status=0" " AND crs_courses.Status=0"
" AND courses.CrsCod=crs_usr.CrsCod" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=agendas.UsrCod", " AND crs_usr.UsrCod=agendas.UsrCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of users with events", DB_QuerySELECT (&mysql_res,"can not get number of users with events",
"SELECT COUNT(DISTINCT agendas.UsrCod)" "SELECT COUNT(DISTINCT agendas.UsrCod)"
" FROM courses,crs_usr,agendas" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "crs_usr,"
" AND courses.Status=0" "agendas"
" AND courses.CrsCod=crs_usr.CrsCod" " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=agendas.UsrCod", " AND crs_usr.UsrCod=agendas.UsrCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break; break;
@ -1955,42 +1969,56 @@ unsigned Agd_GetNumEvents (Hie_Lvl_Level_t Scope)
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of events", DB_QuerySELECT (&mysql_res,"can not get number of events",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM institutions,centres,deg_degrees,courses,crs_usr,agendas" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"crs_usr,"
"agendas"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=agendas.UsrCod", " AND crs_usr.UsrCod=agendas.UsrCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of events", DB_QuerySELECT (&mysql_res,"can not get number of events",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM centres,deg_degrees,courses,crs_usr,agendas" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"crs_usr,"
"agendas"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=agendas.UsrCod", " AND crs_usr.UsrCod=agendas.UsrCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of events", DB_QuerySELECT (&mysql_res,"can not get number of events",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM deg_degrees,courses,crs_usr,agendas" " FROM deg_degrees,"
"crs_courses,"
"crs_usr,"
"agendas"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=agendas.UsrCod", " AND crs_usr.UsrCod=agendas.UsrCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of events", DB_QuerySELECT (&mysql_res,"can not get number of events",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM courses,crs_usr,agendas" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "crs_usr,"
" AND courses.CrsCod=crs_usr.CrsCod" "agendas"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=agendas.UsrCod", " AND crs_usr.UsrCod=agendas.UsrCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break; break;

View File

@ -110,9 +110,9 @@ void Ann_ShowAllAnnouncements (void)
NumAnnouncements = (unsigned) DB_QuerySELECT (&mysql_res,"can not get announcements", NumAnnouncements = (unsigned) DB_QuerySELECT (&mysql_res,"can not get announcements",
"SELECT AnnCod,Status,Roles,Subject,Content" "SELECT AnnCod,Status,Roles,Subject,Content"
" FROM announcements" " FROM announcements"
" WHERE (Roles&%u)<>0 " " WHERE (Roles&%u)<>0 " // All my roles in different courses
" ORDER BY AnnCod DESC", " ORDER BY AnnCod DESC",
(unsigned) Gbl.Usrs.Me.UsrDat.Roles.InCrss); // All my roles in different courses (unsigned) Gbl.Usrs.Me.UsrDat.Roles.InCrss);
} }
else // No user logged else // No user logged
{ {
@ -220,12 +220,12 @@ void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void)
Rol_GetRolesInAllCrssIfNotYetGot (&Gbl.Usrs.Me.UsrDat); Rol_GetRolesInAllCrssIfNotYetGot (&Gbl.Usrs.Me.UsrDat);
NumAnnouncements = (unsigned) DB_QuerySELECT (&mysql_res,"can not get announcements", NumAnnouncements = (unsigned) DB_QuerySELECT (&mysql_res,"can not get announcements",
"SELECT AnnCod,Subject,Content FROM announcements" "SELECT AnnCod,Subject,Content FROM announcements"
" WHERE Status=%u AND (Roles&%u)<>0 " " WHERE Status=%u AND (Roles&%u)<>0 " // All my roles in different courses
" AND AnnCod NOT IN" " AND AnnCod NOT IN"
" (SELECT AnnCod FROM ann_seen WHERE UsrCod=%ld)" " (SELECT AnnCod FROM ann_seen WHERE UsrCod=%ld)"
" ORDER BY AnnCod DESC", // Newest first " ORDER BY AnnCod DESC", // Newest first
(unsigned) Ann_ACTIVE_ANNOUNCEMENT, (unsigned) Ann_ACTIVE_ANNOUNCEMENT,
(unsigned) Gbl.Usrs.Me.UsrDat.Roles.InCrss, // All my roles in different courses (unsigned) Gbl.Usrs.Me.UsrDat.Roles.InCrss,
Gbl.Usrs.Me.UsrDat.UsrCod); Gbl.Usrs.Me.UsrDat.UsrCod);
/***** Show the announcements *****/ /***** Show the announcements *****/

View File

@ -1840,43 +1840,53 @@ unsigned Asg_GetNumCoursesWithAssignments (Hie_Lvl_Level_t Scope)
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments", DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
"SELECT COUNT(DISTINCT assignments.CrsCod)" "SELECT COUNT(DISTINCT assignments.CrsCod)"
" FROM institutions,centres,deg_degrees,courses,assignments" " FROM institutions,"
"centres,"
"deg_degrees,"
"courses,"
"assignments"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.Status=0" " AND crs_courses.Status=0"
" AND courses.CrsCod=assignments.CrsCod", " AND crs_courses.CrsCod=assignments.CrsCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments", DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
"SELECT COUNT(DISTINCT assignments.CrsCod)" "SELECT COUNT(DISTINCT assignments.CrsCod)"
" FROM centres,deg_degrees,courses,assignments" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"assignments"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.Status=0" " AND crs_courses.Status=0"
" AND courses.CrsCod=assignments.CrsCod", " AND crs_courses.CrsCod=assignments.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments", DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
"SELECT COUNT(DISTINCT assignments.CrsCod)" "SELECT COUNT(DISTINCT assignments.CrsCod)"
" FROM deg_degrees,courses,assignments" " FROM deg_degrees,"
"crs_courses,"
"assignments"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.Status=0" " AND crs_courses.Status=0"
" AND courses.CrsCod=assignments.CrsCod", " AND crs_courses.CrsCod=assignments.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments", DB_QuerySELECT (&mysql_res,"can not get number of courses with assignments",
"SELECT COUNT(DISTINCT assignments.CrsCod)" "SELECT COUNT(DISTINCT assignments.CrsCod)"
" FROM courses,assignments" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "assignments"
" AND courses.Status=0" " WHERE crs_courses.DegCod=%ld"
" AND courses.CrsCod=assignments.CrsCod", " AND crs_courses.Status=0"
" AND crs_courses.CrsCod=assignments.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
@ -1919,51 +1929,67 @@ unsigned Asg_GetNumAssignments (Hie_Lvl_Level_t Scope,unsigned *NumNotif)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
DB_QuerySELECT (&mysql_res,"can not get number of assignments", DB_QuerySELECT (&mysql_res,"can not get number of assignments",
"SELECT COUNT(*),SUM(NumNotif)" "SELECT COUNT(*)," // row[0]
"SUM(NumNotif)" // row[1]
" FROM assignments" " FROM assignments"
" WHERE CrsCod>0"); " WHERE CrsCod>0");
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of assignments", DB_QuerySELECT (&mysql_res,"can not get number of assignments",
"SELECT COUNT(*),SUM(assignments.NumNotif)" "SELECT COUNT(*)," // row[0]
" FROM institutions,centres,deg_degrees,courses,assignments" "SUM(assignments.NumNotif)" // row[1]
" FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"assignments"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=assignments.CrsCod", " AND crs_courses.CrsCod=assignments.CrsCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of assignments", DB_QuerySELECT (&mysql_res,"can not get number of assignments",
"SELECT COUNT(*),SUM(assignments.NumNotif)" "SELECT COUNT(*)," // row[0]
" FROM centres,deg_degrees,courses,assignments" "SUM(assignments.NumNotif)" // row[1]
" FROM centres,"
"deg_degrees,"
"crs_courses,"
"assignments"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=assignments.CrsCod", " AND crs_courses.CrsCod=assignments.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of assignments", DB_QuerySELECT (&mysql_res,"can not get number of assignments",
"SELECT COUNT(*),SUM(assignments.NumNotif)" "SELECT COUNT(*),"
" FROM deg_degrees,courses,assignments" "SUM(assignments.NumNotif)"
" FROM deg_degrees,"
"crs_courses,"
"assignments"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=assignments.CrsCod", " AND crs_courses.CrsCod=assignments.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of assignments", DB_QuerySELECT (&mysql_res,"can not get number of assignments",
"SELECT COUNT(*),SUM(assignments.NumNotif)" "SELECT COUNT(*),"
" FROM courses,assignments" "SUM(assignments.NumNotif)"
" WHERE courses.DegCod=%ld" " FROM crs_courses,"
" AND courses.CrsCod=assignments.CrsCod", "assignments"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=assignments.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
DB_QuerySELECT (&mysql_res,"can not get number of assignments", DB_QuerySELECT (&mysql_res,"can not get number of assignments",
"SELECT COUNT(*),SUM(NumNotif)" "SELECT COUNT(*),"
"SUM(NumNotif)"
" FROM assignments" " FROM assignments"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);

View File

@ -1706,31 +1706,37 @@ unsigned Att_GetNumCoursesWithAttEvents (Hie_Lvl_Level_t Scope)
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of courses with attendance events", DB_QuerySELECT (&mysql_res,"can not get number of courses with attendance events",
"SELECT COUNT(DISTINCT att_events.CrsCod)" "SELECT COUNT(DISTINCT att_events.CrsCod)"
" FROM centres,deg_degrees,courses,att_events" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"att_events"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.Status=0" " AND crs_courses.Status=0"
" AND courses.CrsCod=att_events.CrsCod", " AND crs_courses.CrsCod=att_events.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of courses with attendance events", DB_QuerySELECT (&mysql_res,"can not get number of courses with attendance events",
"SELECT COUNT(DISTINCT att_events.CrsCod)" "SELECT COUNT(DISTINCT att_events.CrsCod)"
" FROM deg_degrees,courses,att_events" " FROM deg_degrees,"
"crs_courses,"
"att_events"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.Status=0" " AND crs_courses.Status=0"
" AND courses.CrsCod=att_events.CrsCod", " AND crs_courses.CrsCod=att_events.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of courses with attendance events", DB_QuerySELECT (&mysql_res,"can not get number of courses with attendance events",
"SELECT COUNT(DISTINCT att_events.CrsCod)" "SELECT COUNT(DISTINCT att_events.CrsCod)"
" FROM courses,att_events" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "att_events"
" AND courses.Status=0" " WHERE crs_courses.DegCod=%ld"
" AND courses.CrsCod=att_events.CrsCod", " AND crs_courses.Status=0"
" AND crs_courses.CrsCod=att_events.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
@ -1779,34 +1785,44 @@ unsigned Att_GetNumAttEvents (Hie_Lvl_Level_t Scope,unsigned *NumNotif)
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of attendance events", DB_QuerySELECT (&mysql_res,"can not get number of attendance events",
"SELECT COUNT(*),SUM(att_events.NumNotif)" "SELECT COUNT(*),"
" FROM centres,deg_degrees,courses,att_events" "SUM(att_events.NumNotif)"
" FROM centres,"
"deg_degrees,"
"crs_courses,"
"att_events"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=att_events.CrsCod", " AND crs_courses.CrsCod=att_events.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of attendance events", DB_QuerySELECT (&mysql_res,"can not get number of attendance events",
"SELECT COUNT(*),SUM(att_events.NumNotif)" "SELECT COUNT(*),"
" FROM deg_degrees,courses,att_events" "SUM(att_events.NumNotif)"
" FROM deg_degrees,"
"crs_courses,"
"att_events"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=att_events.CrsCod", " AND crs_courses.CrsCod=att_events.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of attendance events", DB_QuerySELECT (&mysql_res,"can not get number of attendance events",
"SELECT COUNT(*),SUM(att_events.NumNotif)" "SELECT COUNT(*),"
" FROM courses,att_events" "SUM(att_events.NumNotif)"
" WHERE courses.DegCod=%ld" " FROM crs_courses,"
" AND courses.CrsCod=att_events.CrsCod", "att_events"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=att_events.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
DB_QuerySELECT (&mysql_res,"can not get number of attendance events", DB_QuerySELECT (&mysql_res,"can not get number of attendance events",
"SELECT COUNT(*),SUM(NumNotif)" "SELECT COUNT(*),"
"SUM(NumNotif)"
" FROM att_events" " FROM att_events"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);

View File

@ -1944,12 +1944,12 @@ static unsigned Ctr_GetNumCtrsInCty (long CtyCod)
/***** 3. Slow: number of centres in a country from database *****/ /***** 3. Slow: number of centres in a country from database *****/
Gbl.Cache.NumCtrsInCty.CtyCod = CtyCod; Gbl.Cache.NumCtrsInCty.CtyCod = CtyCod;
Gbl.Cache.NumCtrsInCty.NumCtrs = Gbl.Cache.NumCtrsInCty.NumCtrs = (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number of centres in a country", DB_QueryCOUNT ("can not get number of centres in a country",
"SELECT COUNT(*) FROM institutions,centres" "SELECT COUNT(*) FROM institutions,centres"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod", " AND institutions.InsCod=centres.InsCod",
CtyCod); CtyCod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS,Hie_Lvl_CTY,Gbl.Cache.NumCtrsInCty.CtyCod, FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS,Hie_Lvl_CTY,Gbl.Cache.NumCtrsInCty.CtyCod,
FigCch_UNSIGNED,&Gbl.Cache.NumCtrsInCty.NumCtrs); FigCch_UNSIGNED,&Gbl.Cache.NumCtrsInCty.NumCtrs);
return Gbl.Cache.NumCtrsInCty.NumCtrs; return Gbl.Cache.NumCtrsInCty.NumCtrs;
@ -1990,11 +1990,11 @@ unsigned Ctr_GetNumCtrsInIns (long InsCod)
/***** 3. Slow: number of centres in an institution from database *****/ /***** 3. Slow: number of centres in an institution from database *****/
Gbl.Cache.NumCtrsInIns.InsCod = InsCod; Gbl.Cache.NumCtrsInIns.InsCod = InsCod;
Gbl.Cache.NumCtrsInIns.NumCtrs = Gbl.Cache.NumCtrsInIns.NumCtrs = (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number of centres in an institution", DB_QueryCOUNT ("can not get number of centres in an institution",
"SELECT COUNT(*) FROM centres" "SELECT COUNT(*) FROM centres"
" WHERE InsCod=%ld", " WHERE InsCod=%ld",
InsCod); InsCod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS,Hie_Lvl_INS,Gbl.Cache.NumCtrsInIns.InsCod, FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS,Hie_Lvl_INS,Gbl.Cache.NumCtrsInIns.InsCod,
FigCch_UNSIGNED,&Gbl.Cache.NumCtrsInIns.NumCtrs); FigCch_UNSIGNED,&Gbl.Cache.NumCtrsInIns.NumCtrs);
return Gbl.Cache.NumCtrsInIns.NumCtrs; return Gbl.Cache.NumCtrsInIns.NumCtrs;
@ -2028,9 +2028,9 @@ unsigned Ctr_GetCachedNumCtrsWithMapInSys (void)
/***** Get current number of centres with map from database and update cache *****/ /***** Get current number of centres with map from database and update cache *****/
/* Ccoordinates 0, 0 means not set ==> don't show map */ /* Ccoordinates 0, 0 means not set ==> don't show map */
NumCtrsWithMap = (unsigned) NumCtrsWithMap = (unsigned)
DB_QueryCOUNT ("can not get number of centres with map", DB_QueryCOUNT ("can not get number of centres with map",
"SELECT COUNT(*) FROM centres" "SELECT COUNT(*) FROM centres"
" WHERE Latitude<>0 OR Longitude<>0"); " WHERE Latitude<>0 OR Longitude<>0");
FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS_WITH_MAP,Hie_Lvl_SYS,-1L, FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS_WITH_MAP,Hie_Lvl_SYS,-1L,
FigCch_UNSIGNED,&NumCtrsWithMap); FigCch_UNSIGNED,&NumCtrsWithMap);
} }
@ -2053,12 +2053,12 @@ unsigned Ctr_GetCachedNumCtrsWithMapInCty (long CtyCod)
/***** Get current number of centres with map from database and update cache *****/ /***** Get current number of centres with map from database and update cache *****/
/* Ccoordinates 0, 0 means not set ==> don't show map */ /* Ccoordinates 0, 0 means not set ==> don't show map */
NumCtrsWithMap = (unsigned) NumCtrsWithMap = (unsigned)
DB_QueryCOUNT ("ccan not get number of centres with map", DB_QueryCOUNT ("can not get number of centres with map",
"SELECT COUNT(*) FROM institutions,centres" "SELECT COUNT(*) FROM institutions,centres"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND (centres.Latitude<>0 OR centres.Longitude<>0)", " AND (centres.Latitude<>0 OR centres.Longitude<>0)",
CtyCod); CtyCod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS_WITH_MAP,Hie_Lvl_CTY,CtyCod, FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS_WITH_MAP,Hie_Lvl_CTY,CtyCod,
FigCch_UNSIGNED,&NumCtrsWithMap); FigCch_UNSIGNED,&NumCtrsWithMap);
} }
@ -2081,11 +2081,11 @@ unsigned Ctr_GetCachedNumCtrsWithMapInIns (long InsCod)
/***** Get current number of centres with map from database and update cache *****/ /***** Get current number of centres with map from database and update cache *****/
/* Ccoordinates 0, 0 means not set ==> don't show map */ /* Ccoordinates 0, 0 means not set ==> don't show map */
NumCtrsWithMap = (unsigned) NumCtrsWithMap = (unsigned)
DB_QueryCOUNT ("can not get number of centres with map", DB_QueryCOUNT ("can not get number of centres with map",
"SELECT COUNT(*) FROM centres" "SELECT COUNT(*) FROM centres"
" WHERE InsCod=%ld" " WHERE InsCod=%ld"
" AND (Latitude<>0 OR Longitude<>0)", " AND (Latitude<>0 OR Longitude<>0)",
InsCod); InsCod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS_WITH_MAP,Hie_Lvl_INS,InsCod, FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS_WITH_MAP,Hie_Lvl_INS,InsCod,
FigCch_UNSIGNED,&NumCtrsWithMap); FigCch_UNSIGNED,&NumCtrsWithMap);
} }
@ -2100,11 +2100,11 @@ unsigned Ctr_GetCachedNumCtrsWithMapInIns (long InsCod)
unsigned Ctr_GetNumCtrsInPlc (long PlcCod) unsigned Ctr_GetNumCtrsInPlc (long PlcCod)
{ {
/***** Get number of centres (of the current institution) in a place *****/ /***** Get number of centres (of the current institution) in a place *****/
return return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get the number of centres in a place", DB_QueryCOUNT ("can not get the number of centres in a place",
"SELECT COUNT(*) FROM centres" "SELECT COUNT(*) FROM centres"
" WHERE InsCod=%ld AND PlcCod=%ld", " WHERE InsCod=%ld AND PlcCod=%ld",
Gbl.Hierarchy.Ins.InsCod,PlcCod); Gbl.Hierarchy.Ins.InsCod,PlcCod);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2122,12 +2122,12 @@ unsigned Ctr_GetCachedNumCtrsWithDegs (const char *SubQuery,
{ {
/***** Get current number of centres with degrees from database and update cache *****/ /***** Get current number of centres with degrees from database and update cache *****/
NumCtrsWithDegs = (unsigned) NumCtrsWithDegs = (unsigned)
DB_QueryCOUNT ("can not get number of centres with degrees", DB_QueryCOUNT ("can not get number of centres with degrees",
"SELECT COUNT(DISTINCT centres.CtrCod)" "SELECT COUNT(DISTINCT centres.CtrCod)"
" FROM institutions,centres,deg_degrees" " FROM institutions,centres,deg_degrees"
" WHERE %sinstitutions.InsCod=centres.InsCod" " WHERE %sinstitutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod", " AND centres.CtrCod=deg_degrees.CtrCod",
SubQuery); SubQuery);
FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS_WITH_DEGS,Scope,Cod, FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS_WITH_DEGS,Scope,Cod,
FigCch_UNSIGNED,&NumCtrsWithDegs); FigCch_UNSIGNED,&NumCtrsWithDegs);
} }
@ -2150,13 +2150,16 @@ unsigned Ctr_GetCachedNumCtrsWithCrss (const char *SubQuery,
{ {
/***** Get number of centres with courses *****/ /***** Get number of centres with courses *****/
NumCtrsWithCrss = (unsigned) NumCtrsWithCrss = (unsigned)
DB_QueryCOUNT ("can not get number of centres with courses", DB_QueryCOUNT ("can not get number of centres with courses",
"SELECT COUNT(DISTINCT centres.CtrCod)" "SELECT COUNT(DISTINCT centres.CtrCod)"
" FROM institutions,centres,deg_degrees,courses" " FROM institutions,"
" WHERE %sinstitutions.InsCod=centres.InsCod" "centres,"
" AND centres.CtrCod=deg_degrees.CtrCod" "deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod", "crs_courses"
SubQuery); " WHERE %sinstitutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod",
SubQuery);
FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS_WITH_CRSS,Scope,Cod, FigCch_UpdateFigureIntoCache (FigCch_NUM_CTRS_WITH_CRSS,Scope,Cod,
FigCch_UNSIGNED,&NumCtrsWithCrss); FigCch_UNSIGNED,&NumCtrsWithCrss);
} }
@ -2185,15 +2188,19 @@ unsigned Ctr_GetCachedNumCtrsWithUsrs (Rol_Role_t Role,const char *SubQuery,
{ {
/***** Get current number of centres with users from database and update cache *****/ /***** Get current number of centres with users from database and update cache *****/
NumCtrsWithUsrs = (unsigned) NumCtrsWithUsrs = (unsigned)
DB_QueryCOUNT ("can not get number of centres with users", DB_QueryCOUNT ("can not get number of centres with users",
"SELECT COUNT(DISTINCT centres.CtrCod)" "SELECT COUNT(DISTINCT centres.CtrCod)"
" FROM institutions,centres,deg_degrees,courses,crs_usr" " FROM institutions,"
" WHERE %sinstitutions.InsCod=centres.InsCod" "centres,"
" AND centres.CtrCod=deg_degrees.CtrCod" "deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_courses,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_usr"
" AND crs_usr.Role=%u", " WHERE %sinstitutions.InsCod=centres.InsCod"
SubQuery,(unsigned) Role); " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u",
SubQuery,(unsigned) Role);
FigCch_UpdateFigureIntoCache (FigureCtrs[Role],Scope,Cod, FigCch_UpdateFigureIntoCache (FigureCtrs[Role],Scope,Cod,
FigCch_UNSIGNED,&NumCtrsWithUsrs); FigCch_UNSIGNED,&NumCtrsWithUsrs);
} }

View File

@ -600,10 +600,14 @@ TODO: Salvador Romero Cort
TODO: FIX BUG, URGENT! En las fechas como parámetro Dat_WriteParamsIniEndDates(), por ejemplo al cambiar el color de la gráfica de accesos por día y hora, no se respeta la zona horaria. TODO: FIX BUG, URGENT! En las fechas como parámetro Dat_WriteParamsIniEndDates(), por ejemplo al cambiar el color de la gráfica de accesos por día y hora, no se respeta la zona horaria.
*/ */
#define Log_PLATFORM_VERSION "SWAD 20.44.3 (2021-03-06)" #define Log_PLATFORM_VERSION "SWAD 20.44.4 (2021-03-06)"
#define CSS_FILE "swad20.33.9.css" #define CSS_FILE "swad20.33.9.css"
#define JS_FILE "swad20.6.2.js" #define JS_FILE "swad20.6.2.js"
/* /*
Version 20.44.4: Mar 06, 2021 Degrees database table renamed. (307021 lines)
1 change necessary in database:
RENAME TABLE courses TO crs_courses;
Version 20.44.3: Mar 06, 2021 Degrees database table renamed. (306004 lines) Version 20.44.3: Mar 06, 2021 Degrees database table renamed. (306004 lines)
1 change necessary in database: 1 change necessary in database:
RENAME TABLE degrees TO deg_degrees; RENAME TABLE degrees TO deg_degrees;

View File

@ -500,14 +500,21 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
DB_QuerySELECT (&mysql_res,"can not get number" DB_QuerySELECT (&mysql_res,"can not get number"
" of connected users" " of connected users"
" who belong to this location", " who belong to this location",
"SELECT COUNT(DISTINCT connected.UsrCod)," "SELECT COUNT(DISTINCT connected.UsrCod)," // row[0]
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" "COUNT(DISTINCT usr_data.Sex)," // row[1]
" FROM institutions,centres,deg_degrees,courses,crs_usr,connected,usr_data" "MIN(usr_data.Sex)" // row[2]
" FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"crs_usr,"
"connected,"
"usr_data"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=connected.UsrCod" " AND crs_usr.UsrCod=connected.UsrCod"
" AND connected.UsrCod=usr_data.UsrCod", " AND connected.UsrCod=usr_data.UsrCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
@ -516,13 +523,19 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
DB_QuerySELECT (&mysql_res,"can not get number" DB_QuerySELECT (&mysql_res,"can not get number"
" of connected users" " of connected users"
" who belong to this location", " who belong to this location",
"SELECT COUNT(DISTINCT connected.UsrCod)," "SELECT COUNT(DISTINCT connected.UsrCod)," // row[0]
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" "COUNT(DISTINCT usr_data.Sex)," // row[1]
" FROM centres,deg_degrees,courses,crs_usr,connected,usr_data" "MIN(usr_data.Sex)" // row[2]
" FROM centres,"
"deg_degrees,"
"crs_courses,"
"crs_usr,"
"connected,"
"usr_data"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=connected.UsrCod" " AND crs_usr.UsrCod=connected.UsrCod"
" AND connected.UsrCod=usr_data.UsrCod", " AND connected.UsrCod=usr_data.UsrCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
@ -531,12 +544,17 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
DB_QuerySELECT (&mysql_res,"can not get number" DB_QuerySELECT (&mysql_res,"can not get number"
" of connected users" " of connected users"
" who belong to this location", " who belong to this location",
"SELECT COUNT(DISTINCT connected.UsrCod)," "SELECT COUNT(DISTINCT connected.UsrCod)," // row[0]
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" "COUNT(DISTINCT usr_data.Sex)," // row[1]
" FROM deg_degrees,courses,crs_usr,connected,usr_data" "MIN(usr_data.Sex)" // row[2]
" FROM deg_degrees,"
"crs_courses,"
"crs_usr,"
"connected,"
"usr_data"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=connected.UsrCod" " AND crs_usr.UsrCod=connected.UsrCod"
" AND connected.UsrCod=usr_data.UsrCod", " AND connected.UsrCod=usr_data.UsrCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
@ -545,11 +563,15 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
DB_QuerySELECT (&mysql_res,"can not get number" DB_QuerySELECT (&mysql_res,"can not get number"
" of connected users" " of connected users"
" who belong to this location", " who belong to this location",
"SELECT COUNT(DISTINCT connected.UsrCod)," "SELECT COUNT(DISTINCT connected.UsrCod)," // row[0]
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" "COUNT(DISTINCT usr_data.Sex)," // row[1]
" FROM courses,crs_usr,connected,usr_data" "MIN(usr_data.Sex)" // row[2]
" WHERE courses.DegCod=%ld" " FROM crs_courses,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_usr,"
"connected,"
"usr_data"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=connected.UsrCod" " AND crs_usr.UsrCod=connected.UsrCod"
" AND connected.UsrCod=usr_data.UsrCod", " AND connected.UsrCod=usr_data.UsrCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
@ -558,9 +580,12 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
DB_QuerySELECT (&mysql_res,"can not get number" DB_QuerySELECT (&mysql_res,"can not get number"
" of connected users" " of connected users"
" who belong to this location", " who belong to this location",
"SELECT COUNT(DISTINCT connected.UsrCod)," "SELECT COUNT(DISTINCT connected.UsrCod)," // row[0]
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" "COUNT(DISTINCT usr_data.Sex)," // row[1]
" FROM crs_usr,connected,usr_data" "MIN(usr_data.Sex)" // row[2]
" FROM crs_usr,"
"connected,"
"usr_data"
" WHERE crs_usr.CrsCod=%ld" " WHERE crs_usr.CrsCod=%ld"
" AND crs_usr.UsrCod=connected.UsrCod" " AND crs_usr.UsrCod=connected.UsrCod"
" AND connected.UsrCod=usr_data.UsrCod", " AND connected.UsrCod=usr_data.UsrCod",
@ -575,9 +600,11 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
DB_QuerySELECT (&mysql_res,"can not get number" DB_QuerySELECT (&mysql_res,"can not get number"
" of connected users" " of connected users"
" who belong to this location", " who belong to this location",
"SELECT COUNT(DISTINCT connected.UsrCod)," "SELECT COUNT(DISTINCT connected.UsrCod)," // row[0]
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" "COUNT(DISTINCT usr_data.Sex)," // row[1]
" FROM connected,usr_data" "MIN(usr_data.Sex)" // row[2]
" FROM connected,"
"usr_data"
" WHERE connected.UsrCod NOT IN (SELECT UsrCod FROM crs_usr)" " WHERE connected.UsrCod NOT IN (SELECT UsrCod FROM crs_usr)"
" AND connected.UsrCod=usr_data.UsrCod"); " AND connected.UsrCod=usr_data.UsrCod");
break; break;
@ -590,9 +617,12 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
DB_QuerySELECT (&mysql_res,"can not get number" DB_QuerySELECT (&mysql_res,"can not get number"
" of connected users" " of connected users"
" who belong to this location", " who belong to this location",
"SELECT COUNT(DISTINCT connected.UsrCod)," "SELECT COUNT(DISTINCT connected.UsrCod)," // row[0]
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" "COUNT(DISTINCT usr_data.Sex)," // row[1]
" FROM connected,crs_usr,usr_data" "MIN(usr_data.Sex)" // row[2]
" FROM connected,"
"crs_usr,"
"usr_data"
" WHERE connected.UsrCod=crs_usr.UsrCod" " WHERE connected.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u" " AND crs_usr.Role=%u"
" AND connected.UsrCod=usr_data.UsrCod", " AND connected.UsrCod=usr_data.UsrCod",
@ -602,14 +632,21 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
DB_QuerySELECT (&mysql_res,"can not get number" DB_QuerySELECT (&mysql_res,"can not get number"
" of connected users" " of connected users"
" who belong to this location", " who belong to this location",
"SELECT COUNT(DISTINCT connected.UsrCod)," "SELECT COUNT(DISTINCT connected.UsrCod)," // row[0]
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" "COUNT(DISTINCT usr_data.Sex)," // row[1]
" FROM institutions,centres,deg_degrees,courses,crs_usr,connected,usr_data" "MIN(usr_data.Sex)" // row[2]
" FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"crs_usr,"
"connected,"
"usr_data"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u" " AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=connected.UsrCod" " AND crs_usr.UsrCod=connected.UsrCod"
" AND connected.UsrCod=usr_data.UsrCod", " AND connected.UsrCod=usr_data.UsrCod",
@ -620,13 +657,19 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
DB_QuerySELECT (&mysql_res,"can not get number" DB_QuerySELECT (&mysql_res,"can not get number"
" of connected users" " of connected users"
" who belong to this location", " who belong to this location",
"SELECT COUNT(DISTINCT connected.UsrCod)," "SELECT COUNT(DISTINCT connected.UsrCod)," // row[0]
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" "COUNT(DISTINCT usr_data.Sex)," // row[1]
" FROM centres,deg_degrees,courses,crs_usr,connected,usr_data" "MIN(usr_data.Sex)" // row[2]
" FROM centres,"
"deg_degrees,"
"crs_courses,"
"crs_usr,"
"connected,"
"usr_data"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u" " AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=connected.UsrCod" " AND crs_usr.UsrCod=connected.UsrCod"
" AND connected.UsrCod=usr_data.UsrCod", " AND connected.UsrCod=usr_data.UsrCod",
@ -637,12 +680,17 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
DB_QuerySELECT (&mysql_res,"can not get number" DB_QuerySELECT (&mysql_res,"can not get number"
" of connected users" " of connected users"
" who belong to this location", " who belong to this location",
"SELECT COUNT(DISTINCT connected.UsrCod)," "SELECT COUNT(DISTINCT connected.UsrCod)," // row[0]
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" "COUNT(DISTINCT usr_data.Sex)," // row[1]
" FROM deg_degrees,courses,crs_usr,connected,usr_data" "MIN(usr_data.Sex)" // row[2]
" FROM deg_degrees,"
"crs_courses,"
"crs_usr,"
"connected,"
"usr_data"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u" " AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=connected.UsrCod" " AND crs_usr.UsrCod=connected.UsrCod"
" AND connected.UsrCod=usr_data.UsrCod", " AND connected.UsrCod=usr_data.UsrCod",
@ -653,11 +701,15 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
DB_QuerySELECT (&mysql_res,"can not get number" DB_QuerySELECT (&mysql_res,"can not get number"
" of connected users" " of connected users"
" who belong to this location", " who belong to this location",
"SELECT COUNT(DISTINCT connected.UsrCod)," "SELECT COUNT(DISTINCT connected.UsrCod)," // row[0]
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" "COUNT(DISTINCT usr_data.Sex)," // row[1]
" FROM courses,crs_usr,connected,usr_data" "MIN(usr_data.Sex)" // row[2]
" WHERE courses.DegCod=%ld" " FROM crs_courses,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_usr,"
"connected,"
"usr_data"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u" " AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=connected.UsrCod" " AND crs_usr.UsrCod=connected.UsrCod"
" AND connected.UsrCod=usr_data.UsrCod", " AND connected.UsrCod=usr_data.UsrCod",
@ -668,9 +720,12 @@ static void Con_GetNumConnectedUsrsWithARoleBelongingCurrentLocation (Rol_Role_t
DB_QuerySELECT (&mysql_res,"can not get number" DB_QuerySELECT (&mysql_res,"can not get number"
" of connected users" " of connected users"
" who belong to this location", " who belong to this location",
"SELECT COUNT(DISTINCT connected.UsrCod)," "SELECT COUNT(DISTINCT connected.UsrCod)," // row[0]
"COUNT(DISTINCT usr_data.Sex),MIN(usr_data.Sex)" "COUNT(DISTINCT usr_data.Sex)," // row[1]
" FROM crs_usr,connected,usr_data" "MIN(usr_data.Sex)" // row[2]
" FROM crs_usr,"
"connected,"
"usr_data"
" WHERE crs_usr.CrsCod=%ld" " WHERE crs_usr.CrsCod=%ld"
" AND crs_usr.Role=%u" " AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=connected.UsrCod" " AND crs_usr.UsrCod=connected.UsrCod"
@ -891,21 +946,24 @@ static void Con_ShowConnectedUsrsCurrentLocationOneByOneOnMainZone (Rol_Role_t R
struct UsrData UsrDat; struct UsrData UsrDat;
bool PutLinkToRecord = (Gbl.Hierarchy.Level == Hie_Lvl_CRS && // Course selected bool PutLinkToRecord = (Gbl.Hierarchy.Level == Hie_Lvl_CRS && // Course selected
Gbl.Scope.Current == Hie_Lvl_CRS && // Scope is current course Gbl.Scope.Current == Hie_Lvl_CRS && // Scope is current course
(Role == Rol_STD || // Role is student,... (Role == Rol_STD || // Role is student,...
Role == Rol_NET || // ...non-editing teacher... Role == Rol_NET || // ...non-editing teacher...
Role == Rol_TCH)); // ...or teacher Role == Rol_TCH)); // ...or teacher
/***** Get connected users who belong to current location from database *****/ /***** Get connected users who belong to current location from database *****/
switch (Role) switch (Role)
{ {
case Rol_GST: case Rol_GST:
NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get list of connected users" NumUsrs = (unsigned)
" who belong to this location", DB_QuerySELECT (&mysql_res,"can not get list of connected users"
"SELECT UsrCod,LastCrsCod," " who belong to this location",
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(LastTime) AS Dif" "SELECT UsrCod," // row[0]
" FROM connected" "LastCrsCod," // row[1]
" WHERE UsrCod NOT IN (SELECT UsrCod FROM crs_usr)" "UNIX_TIMESTAMP()-"
" ORDER BY Dif"); "UNIX_TIMESTAMP(LastTime) AS Dif" // row[2]
" FROM connected"
" WHERE UsrCod NOT IN (SELECT UsrCod FROM crs_usr)"
" ORDER BY Dif");
break; break;
case Rol_STD: case Rol_STD:
case Rol_NET: case Rol_NET:
@ -913,90 +971,129 @@ static void Con_ShowConnectedUsrsCurrentLocationOneByOneOnMainZone (Rol_Role_t R
switch (Gbl.Scope.Current) switch (Gbl.Scope.Current)
{ {
case Hie_Lvl_SYS: // Show connected users in the whole platform case Hie_Lvl_SYS: // Show connected users in the whole platform
NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get list of connected users" NumUsrs = (unsigned)
" who belong to this location", DB_QuerySELECT (&mysql_res,"can not get list of connected users"
"SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod," " who belong to this location",
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif" "SELECT DISTINCTROW "
" FROM connected,crs_usr" "connected.UsrCod," // row[0]
" WHERE connected.UsrCod=crs_usr.UsrCod" "connected.LastCrsCod," // row[1]
" AND crs_usr.Role=%u" "UNIX_TIMESTAMP()-"
" ORDER BY Dif", "UNIX_TIMESTAMP(connected.LastTime) AS Dif" // row[2]
(unsigned) Role); " FROM connected,"
"crs_usr"
" WHERE connected.UsrCod=crs_usr.UsrCod"
" AND crs_usr.Role=%u"
" ORDER BY Dif",
(unsigned) Role);
break; break;
case Hie_Lvl_CTY: // Show connected users in the current country case Hie_Lvl_CTY: // Show connected users in the current country
NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get list of connected users" NumUsrs = (unsigned)
" who belong to this location", DB_QuerySELECT (&mysql_res,"can not get list of connected users"
"SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod," " who belong to this location",
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif" "SELECT DISTINCTROW "
" FROM institutions,centres,deg_degrees,courses,crs_usr,connected" "connected.UsrCod," // row[0]
" WHERE institutions.CtyCod=%ld" "connected.LastCrsCod," // row[1]
" AND institutions.InsCod=centres.InsCod" "UNIX_TIMESTAMP()-"
" AND centres.CtrCod=deg_degrees.CtrCod" "UNIX_TIMESTAMP(connected.LastTime) AS Dif" // row[2]
" AND deg_degrees.DegCod=courses.DegCod" " FROM institutions,"
" AND courses.CrsCod=crs_usr.CrsCod" "centres,"
" AND crs_usr.Role=%u" "deg_degrees,"
" AND crs_usr.UsrCod=connected.UsrCod" "crs_courses,"
" ORDER BY Dif", "crs_usr,"
Gbl.Hierarchy.Cty.CtyCod, "connected"
(unsigned) Role); " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=connected.UsrCod"
" ORDER BY Dif",
Gbl.Hierarchy.Cty.CtyCod,
(unsigned) Role);
break; break;
case Hie_Lvl_INS: // Show connected users in the current institution case Hie_Lvl_INS: // Show connected users in the current institution
NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get list of connected users" NumUsrs = (unsigned)
" who belong to this location", DB_QuerySELECT (&mysql_res,"can not get list of connected users"
"SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod," " who belong to this location",
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif" "SELECT DISTINCTROW "
" FROM centres,deg_degrees,courses,crs_usr,connected" "connected.UsrCod," // row[0]
" WHERE centres.InsCod=%ld" "connected.LastCrsCod," // row[1]
" AND centres.CtrCod=deg_degrees.CtrCod" "UNIX_TIMESTAMP()-"
" AND deg_degrees.DegCod=courses.DegCod" "UNIX_TIMESTAMP(connected.LastTime) AS Dif" // row[2]
" AND courses.CrsCod=crs_usr.CrsCod" " FROM centres,"
" AND crs_usr.Role=%u" "deg_degrees,"
" AND crs_usr.UsrCod=connected.UsrCod" "crs_courses,"
" ORDER BY Dif", "crs_usr,"
Gbl.Hierarchy.Ins.InsCod, "connected"
(unsigned) Role); " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=connected.UsrCod"
" ORDER BY Dif",
Gbl.Hierarchy.Ins.InsCod,
(unsigned) Role);
break; break;
case Hie_Lvl_CTR: // Show connected users in the current centre case Hie_Lvl_CTR: // Show connected users in the current centre
NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get list of connected users" NumUsrs = (unsigned)
" who belong to this location", DB_QuerySELECT (&mysql_res,"can not get list of connected users"
"SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod," " who belong to this location",
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif" "SELECT DISTINCTROW "
" FROM deg_degrees,courses,crs_usr,connected" "connected.UsrCod," // row[0]
" WHERE deg_degrees.CtrCod=%ld" "connected.LastCrsCod," // row[1]
" AND deg_degrees.DegCod=courses.DegCod" "UNIX_TIMESTAMP()-"
" AND courses.CrsCod=crs_usr.CrsCod" "UNIX_TIMESTAMP(connected.LastTime) AS Dif" // row[2]
" AND crs_usr.Role=%u" " FROM deg_degrees,"
" AND crs_usr.UsrCod=connected.UsrCod" "crs_courses,"
" ORDER BY Dif", "crs_usr,"
Gbl.Hierarchy.Ctr.CtrCod, "connected"
(unsigned) Role); " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=connected.UsrCod"
" ORDER BY Dif",
Gbl.Hierarchy.Ctr.CtrCod,
(unsigned) Role);
break; break;
case Hie_Lvl_DEG: // Show connected users in the current degree case Hie_Lvl_DEG: // Show connected users in the current degree
NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get list of connected users" NumUsrs = (unsigned)
" who belong to this location", DB_QuerySELECT (&mysql_res,"can not get list of connected users"
"SELECT DISTINCTROW connected.UsrCod,connected.LastCrsCod," " who belong to this location",
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif" "SELECT DISTINCTROW "
" FROM courses,crs_usr,connected" "connected.UsrCod," // row[0]
" WHERE courses.DegCod=%ld" "connected.LastCrsCod," // row[1]
" AND courses.CrsCod=crs_usr.CrsCod" "UNIX_TIMESTAMP()-"
" AND crs_usr.Role=%u" "UNIX_TIMESTAMP(connected.LastTime) AS Dif" // row[2]
" AND crs_usr.UsrCod=connected.UsrCod" " FROM crs_courses,"
" ORDER BY Dif", "crs_usr,"
Gbl.Hierarchy.Deg.DegCod, "connected"
(unsigned) Role); " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=connected.UsrCod"
" ORDER BY Dif",
Gbl.Hierarchy.Deg.DegCod,
(unsigned) Role);
break; break;
case Hie_Lvl_CRS: // Show connected users in the current course case Hie_Lvl_CRS: // Show connected users in the current course
NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get list of connected users" NumUsrs = (unsigned)
" who belong to this location", DB_QuerySELECT (&mysql_res,"can not get list of connected users"
"SELECT connected.UsrCod,connected.LastCrsCod," " who belong to this location",
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(connected.LastTime) AS Dif" "SELECT connected.UsrCod," // row[0]
" FROM crs_usr,connected" "connected.LastCrsCod," // row[1]
" WHERE crs_usr.CrsCod=%ld" "UNIX_TIMESTAMP()-"
" AND crs_usr.Role=%u" "UNIX_TIMESTAMP(connected.LastTime) AS Dif" // row[2]
" AND crs_usr.UsrCod=connected.UsrCod" " FROM crs_usr,"
" ORDER BY Dif", "connected"
Gbl.Hierarchy.Crs.CrsCod, " WHERE crs_usr.CrsCod=%ld"
(unsigned) Role); " AND crs_usr.Role=%u"
" AND crs_usr.UsrCod=connected.UsrCod"
" ORDER BY Dif",
Gbl.Hierarchy.Crs.CrsCod,
(unsigned) Role);
break; break;
default: default:
Lay_WrongScopeExit (); Lay_WrongScopeExit ();

View File

@ -1984,13 +1984,17 @@ unsigned Cty_GetCachedNumCtysWithCrss (void)
{ {
/***** Get current number of countries with courses from database and update cache *****/ /***** Get current number of countries with courses from database and update cache *****/
NumCtysWithCrss = (unsigned) NumCtysWithCrss = (unsigned)
DB_QueryCOUNT ("can not get number of countries with courses", DB_QueryCOUNT ("can not get number of countries with courses",
"SELECT COUNT(DISTINCT countries.CtyCod)" "SELECT COUNT(DISTINCT countries.CtyCod)"
" FROM countries,institutions,centres,deg_degrees,courses" " FROM countries,"
" WHERE countries.CtyCod=institutions.CtyCod" "institutions,"
" AND institutions.InsCod=centres.InsCod" "centres,"
" AND centres.CtrCod=deg_degrees.CtrCod" "deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod"); "crs_courses"
" WHERE countries.CtyCod=institutions.CtyCod"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod");
FigCch_UpdateFigureIntoCache (FigCch_NUM_CTYS_WITH_CRSS,Hie_Lvl_SYS,-1L, FigCch_UpdateFigureIntoCache (FigCch_NUM_CTYS_WITH_CRSS,Hie_Lvl_SYS,-1L,
FigCch_UNSIGNED,&NumCtysWithCrss); FigCch_UNSIGNED,&NumCtysWithCrss);
} }
@ -2019,16 +2023,21 @@ unsigned Cty_GetCachedNumCtysWithUsrs (Rol_Role_t Role,const char *SubQuery,
{ {
/***** Get current number of countries with users from database and update cache *****/ /***** Get current number of countries with users from database and update cache *****/
NumCtysWithUsrs = (unsigned) NumCtysWithUsrs = (unsigned)
DB_QueryCOUNT ("can not get number of countries with users", DB_QueryCOUNT ("can not get number of countries with users",
"SELECT COUNT(DISTINCT countries.CtyCod)" "SELECT COUNT(DISTINCT countries.CtyCod)"
" FROM countries,institutions,centres,deg_degrees,courses,crs_usr" " FROM countries,"
" WHERE %scountries.CtyCod=institutions.CtyCod" "institutions,"
" AND institutions.InsCod=centres.InsCod" "centres,"
" AND centres.CtrCod=deg_degrees.CtrCod" "deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_courses,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_usr"
" AND crs_usr.Role=%u", " WHERE %scountries.CtyCod=institutions.CtyCod"
SubQuery,(unsigned) Role); " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u",
SubQuery,(unsigned) Role);
FigCch_UpdateFigureIntoCache (FigureCtys[Role],Scope,Cod, FigCch_UpdateFigureIntoCache (FigureCtys[Role],Scope,Cod,
FigCch_UNSIGNED,&NumCtysWithUsrs); FigCch_UNSIGNED,&NumCtysWithUsrs);
} }

View File

@ -415,7 +415,7 @@ unsigned Crs_GetCachedNumCrssInSys (void)
FigCch_UNSIGNED,&NumCrss)) FigCch_UNSIGNED,&NumCrss))
{ {
/***** Get current number of courses from database and update cache *****/ /***** Get current number of courses from database and update cache *****/
NumCrss = (unsigned) DB_GetNumRowsTable ("courses"); NumCrss = (unsigned) DB_GetNumRowsTable ("crs_courses");
FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,Hie_Lvl_SYS,-1L, FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,Hie_Lvl_SYS,-1L,
FigCch_UNSIGNED,&NumCrss); FigCch_UNSIGNED,&NumCrss);
} }
@ -445,15 +445,18 @@ unsigned Crs_GetNumCrssInCty (long CtyCod)
/***** 3. Slow: number of courses in a country from database *****/ /***** 3. Slow: number of courses in a country from database *****/
Gbl.Cache.NumCrssInCty.CtyCod = CtyCod; Gbl.Cache.NumCrssInCty.CtyCod = CtyCod;
Gbl.Cache.NumCrssInCty.NumCrss = Gbl.Cache.NumCrssInCty.NumCrss = (unsigned)
(unsigned) DB_QueryCOUNT ("can not get the number of courses in a country", DB_QueryCOUNT ("can not get the number of courses in a country",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM institutions,centres,deg_degrees,courses" " FROM institutions,"
" WHERE institutions.CtyCod=%ld" "centres,"
" AND institutions.InsCod=centres.InsCod" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses"
" AND deg_degrees.DegCod=courses.DegCod", " WHERE institutions.CtyCod=%ld"
CtyCod); " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod",
CtyCod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,Hie_Lvl_CTY,Gbl.Cache.NumCrssInCty.CtyCod, FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,Hie_Lvl_CTY,Gbl.Cache.NumCrssInCty.CtyCod,
FigCch_UNSIGNED,&Gbl.Cache.NumCrssInCty.NumCrss); FigCch_UNSIGNED,&Gbl.Cache.NumCrssInCty.NumCrss);
return Gbl.Cache.NumCrssInCty.NumCrss; return Gbl.Cache.NumCrssInCty.NumCrss;
@ -494,14 +497,16 @@ unsigned Crs_GetNumCrssInIns (long InsCod)
/***** 3. Slow: number of courses in an institution from database *****/ /***** 3. Slow: number of courses in an institution from database *****/
Gbl.Cache.NumCrssInIns.InsCod = InsCod; Gbl.Cache.NumCrssInIns.InsCod = InsCod;
Gbl.Cache.NumCrssInIns.NumCrss = Gbl.Cache.NumCrssInIns.NumCrss = (unsigned)
(unsigned) DB_QueryCOUNT ("can not get the number of courses" DB_QueryCOUNT ("can not get the number of courses in an institution",
" in an institution", "SELECT COUNT(*)"
"SELECT COUNT(*) FROM centres,deg_degrees,courses" " FROM centres,"
" WHERE centres.InsCod=%ld" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses"
" AND deg_degrees.DegCod=courses.DegCod", " WHERE centres.InsCod=%ld"
InsCod); " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod",
InsCod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,Hie_Lvl_INS,Gbl.Cache.NumCrssInIns.InsCod, FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,Hie_Lvl_INS,Gbl.Cache.NumCrssInIns.InsCod,
FigCch_UNSIGNED,&Gbl.Cache.NumCrssInIns.NumCrss); FigCch_UNSIGNED,&Gbl.Cache.NumCrssInIns.NumCrss);
return Gbl.Cache.NumCrssInIns.NumCrss; return Gbl.Cache.NumCrssInIns.NumCrss;
@ -542,12 +547,14 @@ unsigned Crs_GetNumCrssInCtr (long CtrCod)
/***** 3. Slow: number of courses in a centre from database *****/ /***** 3. Slow: number of courses in a centre from database *****/
Gbl.Cache.NumCrssInCtr.CtrCod = CtrCod; Gbl.Cache.NumCrssInCtr.CtrCod = CtrCod;
Gbl.Cache.NumCrssInCtr.NumCrss = Gbl.Cache.NumCrssInCtr.NumCrss = (unsigned)
(unsigned) DB_QueryCOUNT ("can not get the number of courses in a centre", DB_QueryCOUNT ("can not get the number of courses in a centre",
"SELECT COUNT(*) FROM deg_degrees,courses" "SELECT COUNT(*)"
" WHERE deg_degrees.CtrCod=%ld" " FROM deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod", "crs_courses"
CtrCod); " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod",
CtrCod);
return Gbl.Cache.NumCrssInCtr.NumCrss; return Gbl.Cache.NumCrssInCtr.NumCrss;
} }
@ -590,11 +597,10 @@ unsigned Crs_GetNumCrssInDeg (long DegCod)
/***** 3. Slow: number of courses in a degree from database *****/ /***** 3. Slow: number of courses in a degree from database *****/
Gbl.Cache.NumCrssInDeg.DegCod = DegCod; Gbl.Cache.NumCrssInDeg.DegCod = DegCod;
Gbl.Cache.NumCrssInDeg.NumCrss = Gbl.Cache.NumCrssInDeg.NumCrss = (unsigned)
(unsigned) DB_QueryCOUNT ("can not get the number of courses in a degree", DB_QueryCOUNT ("can not get the number of courses in a degree",
"SELECT COUNT(*) FROM courses" "SELECT COUNT(*) FROM crs_courses WHERE DegCod=%ld",
" WHERE DegCod=%ld", DegCod);
DegCod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,Hie_Lvl_DEG,Gbl.Cache.NumCrssInDeg.DegCod, FigCch_UpdateFigureIntoCache (FigCch_NUM_CRSS,Hie_Lvl_DEG,Gbl.Cache.NumCrssInDeg.DegCod,
FigCch_UNSIGNED,&Gbl.Cache.NumCrssInDeg.NumCrss); FigCch_UNSIGNED,&Gbl.Cache.NumCrssInDeg.NumCrss);
return Gbl.Cache.NumCrssInDeg.NumCrss; return Gbl.Cache.NumCrssInDeg.NumCrss;
@ -634,15 +640,19 @@ unsigned Crs_GetCachedNumCrssWithUsrs (Rol_Role_t Role,const char *SubQuery,
{ {
/***** Get current number of courses with users from database and update cache *****/ /***** Get current number of courses with users from database and update cache *****/
NumCrssWithUsrs = (unsigned) NumCrssWithUsrs = (unsigned)
DB_QueryCOUNT ("can not get number of courses with users", DB_QueryCOUNT ("can not get number of courses with users",
"SELECT COUNT(DISTINCT courses.CrsCod)" "SELECT COUNT(DISTINCT crs_courses.CrsCod)"
" FROM institutions,centres,deg_degrees,courses,crs_usr" " FROM institutions,"
" WHERE %sinstitutions.InsCod=centres.InsCod" "centres,"
" AND centres.CtrCod=deg_degrees.CtrCod" "deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_courses,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_usr"
" AND crs_usr.Role=%u", " WHERE %sinstitutions.InsCod=centres.InsCod"
SubQuery,(unsigned) Role); " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u",
SubQuery,(unsigned) Role);
FigCch_UpdateFigureIntoCache (FigureCrss[Role],Scope,Cod, FigCch_UpdateFigureIntoCache (FigureCrss[Role],Scope,Cod,
FigCch_UNSIGNED,&NumCrssWithUsrs); FigCch_UNSIGNED,&NumCrssWithUsrs);
} }
@ -678,12 +688,14 @@ void Crs_WriteSelectorOfCourse (void)
if (Gbl.Hierarchy.Deg.DegCod > 0) if (Gbl.Hierarchy.Deg.DegCod > 0)
{ {
/***** Get courses belonging to the current degree from database *****/ /***** Get courses belonging to the current degree from database *****/
NumCrss = (unsigned) DB_QuerySELECT (&mysql_res,"can not get courses" NumCrss = (unsigned)
" of a degree", DB_QuerySELECT (&mysql_res,"can not get courses of a degree",
"SELECT CrsCod,ShortName FROM courses" "SELECT CrsCod,"
" WHERE DegCod=%ld" "ShortName"
" ORDER BY ShortName", " FROM crs_courses"
Gbl.Hierarchy.Deg.DegCod); " WHERE DegCod=%ld"
" ORDER BY ShortName",
Gbl.Hierarchy.Deg.DegCod);
/***** Get courses of this degree *****/ /***** Get courses of this degree *****/
for (NumCrs = 0; for (NumCrs = 0;
@ -752,21 +764,37 @@ static void Crs_GetListCrssInCurrentDeg (Crs_WhatCourses_t WhatCourses)
switch (WhatCourses) switch (WhatCourses)
{ {
case Crs_ACTIVE_COURSES: case Crs_ACTIVE_COURSES:
NumCrss = (unsigned) DB_QuerySELECT (&mysql_res,"can not get courses" NumCrss = (unsigned)
" of a degree", DB_QuerySELECT (&mysql_res,"can not get courses of a degree",
"SELECT CrsCod,DegCod,Year,InsCrsCod,Status,RequesterUsrCod,ShortName,FullName" "SELECT CrsCod,"
" FROM courses WHERE DegCod=%ld AND Status=0" "DegCod,"
" ORDER BY Year,ShortName", "Year,"
Gbl.Hierarchy.Deg.DegCod); "InsCrsCod,"
"Status,"
"RequesterUsrCod,"
"ShortName,"
"FullName"
" FROM crs_courses"
" WHERE DegCod=%ld AND Status=0"
" ORDER BY Year,ShortName",
Gbl.Hierarchy.Deg.DegCod);
break; break;
case Crs_ALL_COURSES_EXCEPT_REMOVED: case Crs_ALL_COURSES_EXCEPT_REMOVED:
NumCrss = (unsigned) DB_QuerySELECT (&mysql_res,"can not get courses" NumCrss = (unsigned)
" of a degree", DB_QuerySELECT (&mysql_res,"can not get courses of a degree",
"SELECT CrsCod,DegCod,Year,InsCrsCod,Status,RequesterUsrCod,ShortName,FullName" "SELECT CrsCod,"
" FROM courses WHERE DegCod=%ld AND (Status & %u)=0" "DegCod,"
" ORDER BY Year,ShortName", "Year,"
Gbl.Hierarchy.Deg.DegCod, "InsCrsCod,"
(unsigned) Crs_STATUS_BIT_REMOVED); "Status,"
"RequesterUsrCod,"
"ShortName,"
"FullName"
" FROM crs_courses"
" WHERE DegCod=%ld AND (Status & %u)=0"
" ORDER BY Year,ShortName",
Gbl.Hierarchy.Deg.DegCod,
(unsigned) Crs_STATUS_BIT_REMOVED);
break; break;
default: default:
break; break;
@ -1679,7 +1707,7 @@ static void Crs_CreateCourse (unsigned Status)
/***** Insert new course into pending requests *****/ /***** Insert new course into pending requests *****/
Crs_EditingCrs->CrsCod = Crs_EditingCrs->CrsCod =
DB_QueryINSERTandReturnCode ("can not create a new course", DB_QueryINSERTandReturnCode ("can not create a new course",
"INSERT INTO courses" "INSERT INTO crs_courses"
" (DegCod,Year,InsCrsCod,Status,RequesterUsrCod," " (DegCod,Year,InsCrsCod,Status,RequesterUsrCod,"
"ShortName,FullName)" "ShortName,FullName)"
" VALUES" " VALUES"
@ -1767,7 +1795,8 @@ bool Crs_GetDataOfCourseByCod (struct Crs_Course *Crs)
"RequesterUsrCod," // row[5] "RequesterUsrCod," // row[5]
"ShortName," // row[6] "ShortName," // row[6]
"FullName" // row[7] "FullName" // row[7]
" FROM courses WHERE CrsCod=%ld", " FROM crs_courses"
" WHERE CrsCod=%ld",
Crs->CrsCod)) // Course found... Crs->CrsCod)) // Course found...
{ {
/***** Get data of the course *****/ /***** Get data of the course *****/
@ -1833,10 +1862,12 @@ static void Crs_GetShortNamesByCod (long CrsCod,
{ {
/***** Get the short name of a degree from database *****/ /***** Get the short name of a degree from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get the short name of a course", if (DB_QuerySELECT (&mysql_res,"can not get the short name of a course",
"SELECT courses.ShortName,deg_degrees.ShortName" "SELECT crs_courses.ShortName,"
" FROM courses,deg_degrees" "deg_degrees.ShortName"
" WHERE courses.CrsCod=%ld" " FROM crs_courses,"
" AND courses.DegCod=deg_degrees.DegCod", "deg_degrees"
" WHERE crs_courses.CrsCod=%ld"
" AND crs_courses.DegCod=deg_degrees.DegCod",
CrsCod) == 1) CrsCod) == 1)
{ {
/***** Get the course short name and degree short name *****/ /***** Get the course short name and degree short name *****/
@ -1868,7 +1899,7 @@ void Crs_RemoveCourseCompletely (long CrsCod)
/***** Remove course from table of courses in database *****/ /***** Remove course from table of courses in database *****/
DB_QueryDELETE ("can not remove a course", DB_QueryDELETE ("can not remove a course",
"DELETE FROM courses WHERE CrsCod=%ld", "DELETE FROM crs_courses WHERE CrsCod=%ld",
CrsCod); CrsCod);
} }
} }
@ -2138,7 +2169,7 @@ void Crs_UpdateCrsYear (struct Crs_Course *Crs,unsigned NewYear)
{ {
/***** Update year/semester in table of courses *****/ /***** Update year/semester in table of courses *****/
DB_QueryUPDATE ("can not update the year of a course", DB_QueryUPDATE ("can not update the year of a course",
"UPDATE courses SET Year=%u WHERE CrsCod=%ld", "UPDATE crs_courses SET Year=%u WHERE CrsCod=%ld",
NewYear,Crs->CrsCod); NewYear,Crs->CrsCod);
/***** Copy course year/semester *****/ /***** Copy course year/semester *****/
@ -2154,7 +2185,7 @@ void Crs_UpdateInstitutionalCrsCod (struct Crs_Course *Crs,const char *NewInstit
/***** Update institutional course code in table of courses *****/ /***** Update institutional course code in table of courses *****/
DB_QueryUPDATE ("can not update the institutional code" DB_QueryUPDATE ("can not update the institutional code"
" of the current course", " of the current course",
"UPDATE courses SET InsCrsCod='%s' WHERE CrsCod=%ld", "UPDATE crs_courses SET InsCrsCod='%s' WHERE CrsCod=%ld",
NewInstitutionalCrsCod,Crs->CrsCod); NewInstitutionalCrsCod,Crs->CrsCod);
/***** Copy institutional course code *****/ /***** Copy institutional course code *****/
@ -2275,7 +2306,7 @@ bool Crs_CheckIfCrsNameExistsInYearOfDeg (const char *FieldName,const char *Name
/***** Get number of courses in a year of a degree and with a name from database *****/ /***** Get number of courses in a year of a degree and with a name from database *****/
return (DB_QueryCOUNT ("can not check if the name" return (DB_QueryCOUNT ("can not check if the name"
" of a course already existed", " of a course already existed",
"SELECT COUNT(*) FROM courses" "SELECT COUNT(*) FROM crs_courses"
" WHERE DegCod=%ld AND Year=%u" " WHERE DegCod=%ld AND Year=%u"
" AND %s='%s' AND CrsCod<>%ld", " AND %s='%s' AND CrsCod<>%ld",
DegCod,Year,FieldName,Name,CrsCod) != 0); DegCod,Year,FieldName,Name,CrsCod) != 0);
@ -2289,7 +2320,7 @@ static void Crs_UpdateCrsNameDB (long CrsCod,const char *FieldName,const char *N
{ {
/***** Update course changing old name by new name *****/ /***** Update course changing old name by new name *****/
DB_QueryUPDATE ("can not update the name of a course", DB_QueryUPDATE ("can not update the name of a course",
"UPDATE courses SET %s='%s' WHERE CrsCod=%ld", "UPDATE crs_courses SET %s='%s' WHERE CrsCod=%ld",
FieldName,NewCrsName,CrsCod); FieldName,NewCrsName,CrsCod);
} }
@ -2326,7 +2357,7 @@ void Crs_ChangeCrsStatus (void)
/***** Update status in table of courses *****/ /***** Update status in table of courses *****/
DB_QueryUPDATE ("can not update the status of a course", DB_QueryUPDATE ("can not update the status of a course",
"UPDATE courses SET Status=%u WHERE CrsCod=%ld", "UPDATE crs_courses SET Status=%u WHERE CrsCod=%ld",
(unsigned) Status,Crs_EditingCrs->CrsCod); (unsigned) Status,Crs_EditingCrs->CrsCod);
Crs_EditingCrs->Status = Status; Crs_EditingCrs->Status = Status;
@ -2571,22 +2602,28 @@ void Crs_GetAndWriteCrssOfAUsr (const struct UsrData *UsrDat,Rol_Role_t Role)
if (asprintf (&SubQuery," AND crs_usr.Role=%u",(unsigned) Role) < 0) if (asprintf (&SubQuery," AND crs_usr.Role=%u",(unsigned) Role) < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
} }
NumCrss = (unsigned) DB_QuerySELECT (&mysql_res,"can not get courses of a user", NumCrss = (unsigned)
"SELECT deg_degrees.DegCod," // row[0] DB_QuerySELECT (&mysql_res,"can not get courses of a user",
"courses.CrsCod," // row[1] "SELECT deg_degrees.DegCod," // row[0]
"deg_degrees.ShortName," // row[2] "crs_courses.CrsCod," // row[1]
"deg_degrees.FullName," // row[3] "deg_degrees.ShortName," // row[2]
"courses.Year," // row[4] "deg_degrees.FullName," // row[3]
"courses.FullName," // row[5] "crs_courses.Year," // row[4]
"centres.ShortName," // row[6] "crs_courses.FullName," // row[5]
"crs_usr.Accepted" // row[7] "centres.ShortName," // row[6]
" FROM crs_usr,courses,deg_degrees,centres" "crs_usr.Accepted" // row[7]
" WHERE crs_usr.UsrCod=%ld%s" " FROM crs_usr,"
" AND crs_usr.CrsCod=courses.CrsCod" "crs_courses,"
" AND courses.DegCod=deg_degrees.DegCod" "deg_degrees,"
" AND deg_degrees.CtrCod=centres.CtrCod" "centres"
" ORDER BY deg_degrees.FullName,courses.Year,courses.FullName", " WHERE crs_usr.UsrCod=%ld%s"
UsrDat->UsrCod,SubQuery); " AND crs_usr.CrsCod=crs_courses.CrsCod"
" AND crs_courses.DegCod=deg_degrees.DegCod"
" AND deg_degrees.CtrCod=centres.CtrCod"
" ORDER BY deg_degrees.FullName,"
"crs_courses.Year,"
"crs_courses.FullName",
UsrDat->UsrCod,SubQuery);
/***** Free allocated memory for subquery *****/ /***** Free allocated memory for subquery *****/
free (SubQuery); free (SubQuery);
@ -2725,14 +2762,14 @@ static void Crs_WriteRowCrsData (unsigned NumCrs,MYSQL_ROW row,bool WriteColumnA
bool Accepted; bool Accepted;
static unsigned RowEvenOdd = 1; static unsigned RowEvenOdd = 1;
/* /*
SELECT deg_degrees.DegCod row[0] SELECT deg_degrees.DegCod row[0]
courses.CrsCod row[1] crs_courses.CrsCod row[1]
deg_degrees.ShortName row[2] deg_degrees.ShortName row[2]
deg_degrees.FullName row[3] deg_degrees.FullName row[3]
courses.Year row[4] crs_courses.Year row[4]
courses.FullName row[5] crs_courses.FullName row[5]
centres.ShortName row[6] centres.ShortName row[6]
crs_usr.Accepted row[7] (only if WriteColumnAccepted == true) crs_usr.Accepted row[7] (only if WriteColumnAccepted == true)
*/ */
/***** Get degree code (row[0]) *****/ /***** Get degree code (row[0]) *****/
@ -2939,8 +2976,9 @@ void Crs_RemoveOldCrss (void)
/***** Get old courses from database *****/ /***** Get old courses from database *****/
NumCrss = DB_QuerySELECT (&mysql_res,"can not get old courses", NumCrss = DB_QuerySELECT (&mysql_res,"can not get old courses",
"SELECT CrsCod FROM crs_last WHERE" "SELECT CrsCod"
" LastTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)" " FROM crs_last"
" WHERE LastTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)"
" AND CrsCod NOT IN (SELECT DISTINCT CrsCod FROM crs_usr)", " AND CrsCod NOT IN (SELECT DISTINCT CrsCod FROM crs_usr)",
SecondsWithoutAccess); SecondsWithoutAccess);
if (NumCrss) if (NumCrss)

View File

@ -521,7 +521,7 @@ static void CrsCfg_UpdateCrsDegDB (long CrsCod,long DegCod)
{ {
/***** Update degree in table of courses *****/ /***** Update degree in table of courses *****/
DB_QueryUPDATE ("can not move course to another degree", DB_QueryUPDATE ("can not move course to another degree",
"UPDATE courses SET DegCod=%ld WHERE CrsCod=%ld", "UPDATE crs_courses SET DegCod=%ld WHERE CrsCod=%ld",
DegCod,CrsCod); DegCod,CrsCod);
} }

View File

@ -604,9 +604,9 @@ mysql> DESCRIBE countries;
"INDEX(Name_pl)," "INDEX(Name_pl),"
"INDEX(Name_pt))"); // ISO 3166-1 country codes "INDEX(Name_pt))"); // ISO 3166-1 country codes
/***** Table courses *****/ /***** Table crs_courses *****/
/* /*
mysql> DESCRIBE courses; mysql> DESCRIBE crs_courses;
+-----------------+---------------+------+-----+---------+----------------+ +-----------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra | | Field | Type | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+----------------+ +-----------------+---------------+------+-----+---------+----------------+
@ -622,7 +622,7 @@ mysql> DESCRIBE courses;
+-----------------+---------------+------+-----+---------+----------------+ +-----------------+---------------+------+-----+---------+----------------+
9 rows in set (0,00 sec) 9 rows in set (0,00 sec)
*/ */
DB_CreateTable ("CREATE TABLE IF NOT EXISTS courses (" DB_CreateTable ("CREATE TABLE IF NOT EXISTS crs_courses ("
"CrsCod INT NOT NULL AUTO_INCREMENT," "CrsCod INT NOT NULL AUTO_INCREMENT,"
"DegCod INT NOT NULL DEFAULT -1," "DegCod INT NOT NULL DEFAULT -1,"
"Year TINYINT NOT NULL DEFAULT 0," "Year TINYINT NOT NULL DEFAULT 0,"

View File

@ -127,31 +127,36 @@ void Deg_SeeDegWithPendingCrss (void)
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
case Rol_DEG_ADM: case Rol_DEG_ADM:
NumDegs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get degrees" NumDegs = (unsigned)
" with pending courses", DB_QuerySELECT (&mysql_res,"can not get degrees with pending courses",
"SELECT courses.DegCod,COUNT(*)" "SELECT crs_courses.DegCod,"
" FROM usr_admins,courses,deg_degrees" "COUNT(*)"
" WHERE usr_admins.UsrCod=%ld" " FROM usr_admins,"
" AND usr_admins.Scope='%s'" "crs_courses,"
" AND usr_admins.Cod=courses.DegCod" "deg_degrees"
" AND (courses.Status & %u)<>0" " WHERE usr_admins.UsrCod=%ld"
" AND courses.DegCod=deg_degrees.DegCod" " AND usr_admins.Scope='%s'"
" GROUP BY courses.DegCod" " AND usr_admins.Cod=crs_courses.DegCod"
" ORDER BY deg_degrees.ShortName", " AND (crs_courses.Status & %u)<>0"
Gbl.Usrs.Me.UsrDat.UsrCod, " AND crs_courses.DegCod=deg_degrees.DegCod"
Sco_GetDBStrFromScope (Hie_Lvl_DEG), " GROUP BY crs_courses.DegCod"
(unsigned) Crs_STATUS_BIT_PENDING); " ORDER BY deg_degrees.ShortName",
Gbl.Usrs.Me.UsrDat.UsrCod,
Sco_GetDBStrFromScope (Hie_Lvl_DEG),
(unsigned) Crs_STATUS_BIT_PENDING);
break; break;
case Rol_SYS_ADM: case Rol_SYS_ADM:
NumDegs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get degrees" NumDegs = (unsigned)
" with pending courses", DB_QuerySELECT (&mysql_res,"can not get degrees with pending courses",
"SELECT courses.DegCod,COUNT(*)" "SELECT crs_courses.DegCod,"
" FROM courses,deg_degrees" "COUNT(*)"
" WHERE (courses.Status & %u)<>0" " FROM crs_courses,"
" AND courses.DegCod=deg_degrees.DegCod" "deg_degrees"
" GROUP BY courses.DegCod" " WHERE (crs_courses.Status & %u)<>0"
" ORDER BY deg_degrees.ShortName", " AND crs_courses.DegCod=deg_degrees.DegCod"
(unsigned) Crs_STATUS_BIT_PENDING); " GROUP BY crs_courses.DegCod"
" ORDER BY deg_degrees.ShortName",
(unsigned) Crs_STATUS_BIT_PENDING);
break; break;
default: // Forbidden for other users default: // Forbidden for other users
return; return;
@ -1068,23 +1073,25 @@ void Deg_GetListAllDegsWithStds (struct ListDegrees *Degs)
unsigned NumDeg; unsigned NumDeg;
/***** Get degrees admin by me from database *****/ /***** Get degrees admin by me from database *****/
Degs->Num = (unsigned) DB_QuerySELECT (&mysql_res,"can not get degrees" Degs->Num = (unsigned)
" admin by you", DB_QuerySELECT (&mysql_res,"can not get degrees admin by you",
"SELECT DISTINCTROW " "SELECT DISTINCTROW "
"deg_degrees.DegCod," // row[0] "deg_degrees.DegCod," // row[0]
"deg_degrees.CtrCod," // row[1] "deg_degrees.CtrCod," // row[1]
"deg_degrees.DegTypCod," // row[2] "deg_degrees.DegTypCod," // row[2]
"deg_degrees.Status," // row[3] "deg_degrees.Status," // row[3]
"deg_degrees.RequesterUsrCod," // row[4] "deg_degrees.RequesterUsrCod," // row[4]
"deg_degrees.ShortName," // row[5] "deg_degrees.ShortName," // row[5]
"deg_degrees.FullName," // row[6] "deg_degrees.FullName," // row[6]
"deg_degrees.WWW" // row[7] "deg_degrees.WWW" // row[7]
" FROM deg_degrees,courses,crs_usr" " FROM deg_degrees,"
" WHERE deg_degrees.DegCod=courses.DegCod" "crs_courses,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_usr"
" AND crs_usr.Role=%u" " WHERE deg_degrees.DegCod=crs_courses.DegCod"
" ORDER BY deg_degrees.ShortName", " AND crs_courses.CrsCod=crs_usr.CrsCod"
(unsigned) Rol_STD); " AND crs_usr.Role=%u"
" ORDER BY deg_degrees.ShortName",
(unsigned) Rol_STD);
if (Degs->Num) // Degrees found... if (Degs->Num) // Degrees found...
{ {
@ -1518,7 +1525,8 @@ void Deg_RemoveDegreeCompletely (long DegCod)
/***** Get courses of a degree from database *****/ /***** Get courses of a degree from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get courses of a degree", NumRows = DB_QuerySELECT (&mysql_res,"can not get courses of a degree",
"SELECT CrsCod FROM courses" "SELECT CrsCod"
" FROM crs_courses"
" WHERE DegCod=%ld", " WHERE DegCod=%ld",
DegCod); DegCod);
@ -2076,13 +2084,16 @@ unsigned Deg_GetCachedNumDegsWithCrss (const char *SubQuery,
{ {
/***** Get current number of degrees with courses from database and update cache *****/ /***** Get current number of degrees with courses from database and update cache *****/
NumDegsWithCrss = (unsigned) NumDegsWithCrss = (unsigned)
DB_QueryCOUNT ("can not get number of degrees with courses", DB_QueryCOUNT ("can not get number of degrees with courses",
"SELECT COUNT(DISTINCT deg_degrees.DegCod)" "SELECT COUNT(DISTINCT deg_degrees.DegCod)"
" FROM institutions,centres,deg_degrees,courses" " FROM institutions,"
" WHERE %sinstitutions.InsCod=centres.InsCod" "centres,"
" AND centres.CtrCod=deg_degrees.CtrCod" "deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod", "crs_courses"
SubQuery); " WHERE %sinstitutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod",
SubQuery);
FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS_WITH_CRSS,Scope,Cod, FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS_WITH_CRSS,Scope,Cod,
FigCch_UNSIGNED,&NumDegsWithCrss); FigCch_UNSIGNED,&NumDegsWithCrss);
} }
@ -2111,15 +2122,19 @@ unsigned Deg_GetCachedNumDegsWithUsrs (Rol_Role_t Role,const char *SubQuery,
{ {
/***** Get current number of degrees with users from database and update cache *****/ /***** Get current number of degrees with users from database and update cache *****/
NumDegsWithUsrs = (unsigned) NumDegsWithUsrs = (unsigned)
DB_QueryCOUNT ("can not get number of degrees with users", DB_QueryCOUNT ("can not get number of degrees with users",
"SELECT COUNT(DISTINCT deg_degrees.DegCod)" "SELECT COUNT(DISTINCT deg_degrees.DegCod)"
" FROM institutions,centres,deg_degrees,courses,crs_usr" " FROM institutions,"
" WHERE %sinstitutions.InsCod=centres.InsCod" "centres,"
" AND centres.CtrCod=deg_degrees.CtrCod" "deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_courses,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_usr"
" AND crs_usr.Role=%u", " WHERE %sinstitutions.InsCod=centres.InsCod"
SubQuery,(unsigned) Role); " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u",
SubQuery,(unsigned) Role);
FigCch_UpdateFigureIntoCache (FigureDegs[Role],Scope,Cod, FigCch_UpdateFigureIntoCache (FigureDegs[Role],Scope,Cod,
FigCch_UNSIGNED,&NumDegsWithUsrs); FigCch_UNSIGNED,&NumDegsWithUsrs);
} }

View File

@ -2329,96 +2329,106 @@ 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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM crs_usr,crs_usr_requests" " FROM crs_usr,"
" WHERE crs_usr.UsrCod=%ld" "crs_usr_requests"
" AND crs_usr.Role=%u" " WHERE crs_usr.UsrCod=%ld"
" AND crs_usr.CrsCod=crs_usr_requests.CrsCod" " AND crs_usr.Role=%u"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND crs_usr.CrsCod=crs_usr_requests.CrsCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND ((1<<crs_usr_requests.Role)&%u)<>0"
Gbl.Usrs.Me.UsrDat.UsrCod, " ORDER BY crs_usr_requests.RequestTime DESC",
(unsigned) Rol_TCH, Gbl.Usrs.Me.UsrDat.UsrCod,
RolesSelected); (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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM usr_admins,courses,crs_usr_requests" " FROM usr_admins,"
" WHERE usr_admins.UsrCod=%ld" "crs_courses,"
" AND usr_admins.Scope='%s'" "crs_usr_requests"
" AND usr_admins.Cod=courses.DegCod" " WHERE usr_admins.UsrCod=%ld"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND usr_admins.Scope='%s'"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND usr_admins.Cod=crs_courses.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_DEG), " AND ((1<<crs_usr_requests.Role)&%u)<>0"
RolesSelected); " ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM usr_admins,deg_degrees,courses,crs_usr_requests" " FROM usr_admins,"
" WHERE usr_admins.UsrCod=%ld" "deg_degrees,"
" AND usr_admins.Scope='%s'" "crs_courses,"
" AND usr_admins.Cod=deg_degrees.CtrCod" "crs_usr_requests"
" AND deg_degrees.DegCod=courses.DegCod" " WHERE usr_admins.UsrCod=%ld"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND usr_admins.Scope='%s'"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND usr_admins.Cod=deg_degrees.CtrCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND deg_degrees.DegCod=crs_courses.DegCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_CTR), " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
RolesSelected); " AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM usr_admins,centres,deg_degrees,courses,crs_usr_requests" " FROM usr_admins,"
" WHERE usr_admins.UsrCod=%ld" "centres,"
" AND usr_admins.Scope='%s'" "deg_degrees,"
" AND usr_admins.Cod=centres.InsCod" "crs_courses,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_usr_requests"
" AND deg_degrees.DegCod=courses.DegCod" " WHERE usr_admins.UsrCod=%ld"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND usr_admins.Scope='%s'"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND usr_admins.Cod=centres.InsCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND centres.CtrCod=deg_degrees.CtrCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_INS), " AND deg_degrees.DegCod=crs_courses.DegCod"
RolesSelected); " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_INS),
RolesSelected);
break; break;
case Rol_SYS_ADM: case Rol_SYS_ADM:
// All requests // All requests
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT ReqCod," "SELECT ReqCod,"
"CrsCod," "CrsCod,"
"UsrCod," "UsrCod,"
"Role," "Role,"
"UNIX_TIMESTAMP(RequestTime)" "UNIX_TIMESTAMP(RequestTime)"
" FROM crs_usr_requests" " FROM crs_usr_requests"
" WHERE ((1<<Role)&%u)<>0" " WHERE ((1<<Role)&%u)<>0"
" ORDER BY RequestTime DESC", " ORDER BY RequestTime DESC",
RolesSelected); RolesSelected);
break; break;
default: default:
Lay_NoPermissionExit (); Lay_NoPermissionExit ();
@ -2430,120 +2440,148 @@ 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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM crs_usr,institutions,centres,deg_degrees,courses,crs_usr_requests" " FROM crs_usr,"
" WHERE crs_usr.UsrCod=%ld" "institutions,"
" AND crs_usr.Role=%u" "centres,"
" AND crs_usr.CrsCod=courses.CrsCod" "deg_degrees,"
" AND courses.DegCod=deg_degrees.DegCod" "crs_courses,"
" AND deg_degrees.CtrCod=centres.CtrCod" "crs_usr_requests"
" AND centres.InsCod=institutions.InsCod" " WHERE crs_usr.UsrCod=%ld"
" AND institutions.CtyCod=%ld" " AND crs_usr.Role=%u"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND crs_usr.CrsCod=crs_courses.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND crs_courses.DegCod=deg_degrees.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND deg_degrees.CtrCod=centres.CtrCod"
Gbl.Usrs.Me.UsrDat.UsrCod, " AND centres.InsCod=institutions.InsCod"
(unsigned) Rol_TCH, " AND institutions.CtyCod=%ld"
Gbl.Hierarchy.Cty.CtyCod, " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
RolesSelected); " AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Rol_TCH,
Gbl.Hierarchy.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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM usr_admins,institutions,centres,deg_degrees,courses,crs_usr_requests" " FROM usr_admins,"
" WHERE usr_admins.UsrCod=%ld" "institutions,"
" AND usr_admins.Scope='%s'" "centres,"
" AND usr_admins.Cod=deg_degrees.DegCod" "deg_degrees,"
" AND deg_degrees.CtrCod=centres.CtrCod" "crs_courses,"
" AND centres.InsCod=institutions.InsCod" "crs_usr_requests"
" AND institutions.CtyCod=%ld" " WHERE usr_admins.UsrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND usr_admins.Scope='%s'"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND usr_admins.Cod=deg_degrees.DegCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND deg_degrees.CtrCod=centres.CtrCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND centres.InsCod=institutions.InsCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_DEG), " AND institutions.CtyCod=%ld"
Gbl.Hierarchy.Cty.CtyCod, " AND deg_degrees.DegCod=crs_courses.DegCod"
RolesSelected); " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Sco_GetDBStrFromScope (Hie_Lvl_DEG),
Gbl.Hierarchy.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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM usr_admins,institutions,centres,deg_degrees,courses,crs_usr_requests" " FROM usr_admins,"
" WHERE usr_admins.UsrCod=%ld" "institutions,"
" AND usr_admins.Scope='%s'" "centres,"
" AND usr_admins.Cod=centres.CtrCod" "deg_degrees,"
" AND centres.InsCod=institutions.InsCod" "crs_courses,"
" AND institutions.CtyCod=%ld" "crs_usr_requests"
" AND centres.CtrCod=deg_degrees.CtrCod" " WHERE usr_admins.UsrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND usr_admins.Scope='%s'"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND usr_admins.Cod=centres.CtrCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND centres.InsCod=institutions.InsCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND institutions.CtyCod=%ld"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_CTR), " AND centres.CtrCod=deg_degrees.CtrCod"
Gbl.Hierarchy.Cty.CtyCod, " AND deg_degrees.DegCod=crs_courses.DegCod"
RolesSelected); " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Sco_GetDBStrFromScope (Hie_Lvl_CTR),
Gbl.Hierarchy.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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
DB_QuerySELECT (&mysql_res,"can not get requests"
" for enrolment", " for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM usr_admins,institutions,centres,deg_degrees,courses,crs_usr_requests" " FROM usr_admins,"
" WHERE usr_admins.UsrCod=%ld" "institutions,"
" AND usr_admins.Scope='%s'" "centres,"
" AND usr_admins.Cod=institutions.InsCod" "deg_degrees,"
" AND institutions.CtyCod=%ld" "crs_courses,"
" AND institutions.InsCod=centres.InsCod" "crs_usr_requests"
" AND centres.CtrCod=deg_degrees.CtrCod" " WHERE usr_admins.UsrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND usr_admins.Scope='%s'"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND usr_admins.Cod=institutions.InsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND institutions.CtyCod=%ld"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND institutions.InsCod=centres.InsCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_INS), " AND centres.CtrCod=deg_degrees.CtrCod"
Gbl.Hierarchy.Cty.CtyCod, " AND deg_degrees.DegCod=crs_courses.DegCod"
RolesSelected); " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Sco_GetDBStrFromScope (Hie_Lvl_INS),
Gbl.Hierarchy.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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM institutions,centres,deg_degrees,courses,crs_usr_requests" " FROM institutions,"
" WHERE institutions.CtyCod=%ld" "centres,"
" AND institutions.InsCod=centres.InsCod" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_usr_requests"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " WHERE institutions.CtyCod=%ld"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND institutions.InsCod=centres.InsCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND centres.CtrCod=deg_degrees.CtrCod"
Gbl.Hierarchy.Cty.CtyCod, " AND deg_degrees.DegCod=crs_courses.DegCod"
RolesSelected); " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Hierarchy.Cty.CtyCod,
RolesSelected);
break; break;
default: default:
Lay_NoPermissionExit (); Lay_NoPermissionExit ();
@ -2555,93 +2593,109 @@ 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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM crs_usr,centres,deg_degrees,courses,crs_usr_requests" " FROM crs_usr,"
" WHERE crs_usr.UsrCod=%ld" "centres,"
" AND crs_usr.Role=%u" "deg_degrees,"
" AND crs_usr.CrsCod=courses.CrsCod" "crs_courses,"
" AND courses.DegCod=deg_degrees.DegCod" "crs_usr_requests"
" AND deg_degrees.CtrCod=centres.CtrCod" " WHERE crs_usr.UsrCod=%ld"
" AND centres.InsCod=%ld" " AND crs_usr.Role=%u"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND crs_usr.CrsCod=crs_courses.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND crs_courses.DegCod=deg_degrees.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND deg_degrees.CtrCod=centres.CtrCod"
Gbl.Usrs.Me.UsrDat.UsrCod, " AND centres.InsCod=%ld"
(unsigned) Rol_TCH, " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Hierarchy.Ins.InsCod, " AND ((1<<crs_usr_requests.Role)&%u)<>0"
RolesSelected); " ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Rol_TCH,
Gbl.Hierarchy.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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM usr_admins,centres,deg_degrees,courses,crs_usr_requests" " FROM usr_admins,"
" WHERE usr_admins.UsrCod=%ld" "centres,"
" AND usr_admins.Scope='%s'" "deg_degrees,"
" AND usr_admins.Cod=deg_degrees.DegCod" "crs_courses,"
" AND deg_degrees.CtrCod=centres.CtrCod" "crs_usr_requests"
" AND centres.InsCod=%ld" " WHERE usr_admins.UsrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND usr_admins.Scope='%s'"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND usr_admins.Cod=deg_degrees.DegCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND deg_degrees.CtrCod=centres.CtrCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND centres.InsCod=%ld"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_DEG), " AND deg_degrees.DegCod=crs_courses.DegCod"
Gbl.Hierarchy.Ins.InsCod, " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
RolesSelected); " AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Sco_GetDBStrFromScope (Hie_Lvl_DEG),
Gbl.Hierarchy.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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM usr_admins,centres,deg_degrees,courses,crs_usr_requests" " FROM usr_admins,"
" WHERE usr_admins.UsrCod=%ld" "centres,"
" AND usr_admins.Scope='%s'" "deg_degrees,"
" AND usr_admins.Cod=centres.CtrCod" "crs_courses,"
" AND centres.InsCod=%ld" "crs_usr_requests"
" AND centres.CtrCod=deg_degrees.CtrCod" " WHERE usr_admins.UsrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND usr_admins.Scope='%s'"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND usr_admins.Cod=centres.CtrCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND centres.InsCod=%ld"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND centres.CtrCod=deg_degrees.CtrCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_CTR), " AND deg_degrees.DegCod=crs_courses.DegCod"
Gbl.Hierarchy.Ins.InsCod, " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
RolesSelected); " AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_CTR),
Gbl.Hierarchy.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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM centres,deg_degrees,courses,crs_usr_requests" " FROM centres,"
" WHERE centres.InsCod=%ld" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_usr_requests"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " WHERE centres.InsCod=%ld"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND centres.CtrCod=deg_degrees.CtrCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND deg_degrees.DegCod=crs_courses.DegCod"
Gbl.Hierarchy.Ins.InsCod, " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
RolesSelected); " AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Hierarchy.Ins.InsCod,
RolesSelected);
break; break;
default: default:
Lay_NoPermissionExit (); Lay_NoPermissionExit ();
@ -2653,68 +2707,77 @@ 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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM crs_usr,deg_degrees,courses,crs_usr_requests" " FROM crs_usr,"
" WHERE crs_usr.UsrCod=%ld" "deg_degrees,"
" AND crs_usr.Role=%u" "crs_courses,"
" AND crs_usr.CrsCod=courses.CrsCod" "crs_usr_requests"
" AND courses.DegCod=deg_degrees.DegCod" " WHERE crs_usr.UsrCod=%ld"
" AND deg_degrees.CtrCod=%ld" " AND crs_usr.Role=%u"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND crs_usr.CrsCod=crs_courses.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND crs_courses.DegCod=deg_degrees.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND deg_degrees.CtrCod=%ld"
Gbl.Usrs.Me.UsrDat.UsrCod, " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
(unsigned) Rol_TCH, " AND ((1<<crs_usr_requests.Role)&%u)<>0"
Gbl.Hierarchy.Ctr.CtrCod, " ORDER BY crs_usr_requests.RequestTime DESC",
RolesSelected); Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Rol_TCH,
Gbl.Hierarchy.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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM usr_admins,deg_degrees,courses,crs_usr_requests" " FROM usr_admins,"
" WHERE usr_admins.UsrCod=%ld" "deg_degrees,"
" AND usr_admins.Scope='%s'" "crs_courses,"
" AND usr_admins.Cod=deg_degrees.DegCod" "crs_usr_requests"
" AND deg_degrees.CtrCod=%ld" " WHERE usr_admins.UsrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND usr_admins.Scope='%s'"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " AND usr_admins.Cod=deg_degrees.DegCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND deg_degrees.CtrCod=%ld"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND deg_degrees.DegCod=crs_courses.DegCod"
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_DEG), " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Hierarchy.Ctr.CtrCod, " AND ((1<<crs_usr_requests.Role)&%u)<>0"
RolesSelected); " ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Sco_GetDBStrFromScope (Hie_Lvl_DEG),
Gbl.Hierarchy.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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM deg_degrees,courses,crs_usr_requests" " FROM deg_degrees,"
" WHERE deg_degrees.CtrCod=%ld" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_usr_requests"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " WHERE deg_degrees.CtrCod=%ld"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND deg_degrees.DegCod=crs_courses.DegCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
Gbl.Hierarchy.Ctr.CtrCod, " AND ((1<<crs_usr_requests.Role)&%u)<>0"
RolesSelected); " ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Hierarchy.Ctr.CtrCod,
RolesSelected);
break; break;
default: default:
Lay_NoPermissionExit (); Lay_NoPermissionExit ();
@ -2726,45 +2789,48 @@ 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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM crs_usr,courses,crs_usr_requests" " FROM crs_usr,"
" WHERE crs_usr.UsrCod=%ld" "crs_courses,"
" AND crs_usr.Role=%u" "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=crs_courses.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND crs_courses.DegCod=%ld"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND crs_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.Hierarchy.Deg.DegCod, Gbl.Usrs.Me.UsrDat.UsrCod,
RolesSelected); (unsigned) Rol_TCH,
Gbl.Hierarchy.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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT crs_usr_requests.ReqCod," "SELECT crs_usr_requests.ReqCod,"
"crs_usr_requests.CrsCod," "crs_usr_requests.CrsCod,"
"crs_usr_requests.UsrCod," "crs_usr_requests.UsrCod,"
"crs_usr_requests.Role," "crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)" "UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM courses,crs_usr_requests" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "crs_usr_requests"
" AND courses.CrsCod=crs_usr_requests.CrsCod" " WHERE crs_courses.DegCod=%ld"
" AND ((1<<crs_usr_requests.Role)&%u)<>0" " AND crs_courses.CrsCod=crs_usr_requests.CrsCod"
" ORDER BY crs_usr_requests.RequestTime DESC", " AND ((1<<crs_usr_requests.Role)&%u)<>0"
Gbl.Hierarchy.Deg.DegCod, " ORDER BY crs_usr_requests.RequestTime DESC",
RolesSelected); Gbl.Hierarchy.Deg.DegCod,
RolesSelected);
break; break;
default: default:
Lay_NoPermissionExit (); Lay_NoPermissionExit ();
@ -2780,16 +2846,19 @@ 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
NumReqs = DB_QuerySELECT (&mysql_res,"can not get requests" NumReqs =
" for enrolment", DB_QuerySELECT (&mysql_res,"can not get requests for enrolment",
"SELECT ReqCod,CrsCod,UsrCod,Role," "SELECT ReqCod,"
"UNIX_TIMESTAMP(RequestTime)" "CrsCod,"
" FROM crs_usr_requests" "UsrCod,"
" WHERE CrsCod=%ld" "Role,"
" AND ((1<<Role)&%u)<>0" "UNIX_TIMESTAMP(RequestTime)"
" ORDER BY RequestTime DESC", " FROM crs_usr_requests"
Gbl.Hierarchy.Crs.CrsCod, " WHERE CrsCod=%ld"
RolesSelected); " AND ((1<<Role)&%u)<>0"
" ORDER BY RequestTime DESC",
Gbl.Hierarchy.Crs.CrsCod,
RolesSelected);
break; break;
default: default:
Lay_NoPermissionExit (); Lay_NoPermissionExit ();

View File

@ -1897,39 +1897,49 @@ unsigned Exa_GetNumCoursesWithExams (Hie_Lvl_Level_t Scope)
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of courses with exams", DB_QuerySELECT (&mysql_res,"can not get number of courses with exams",
"SELECT COUNT(DISTINCT exa_exams.CrsCod)" "SELECT COUNT(DISTINCT exa_exams.CrsCod)"
" FROM institutions,centres,deg_degrees,courses,exa_exams" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"exa_exams"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=exa_exams.CrsCod", " AND crs_courses.CrsCod=exa_exams.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of courses with exams", DB_QuerySELECT (&mysql_res,"can not get number of courses with exams",
"SELECT COUNT(DISTINCT exa_exams.CrsCod)" "SELECT COUNT(DISTINCT exa_exams.CrsCod)"
" FROM centres,deg_degrees,courses,exa_exams" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"exa_exams"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=exa_exams.CrsCod", " AND crs_courses.CrsCod=exa_exams.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of courses with exams", DB_QuerySELECT (&mysql_res,"can not get number of courses with exams",
"SELECT COUNT(DISTINCT exa_exams.CrsCod)" "SELECT COUNT(DISTINCT exa_exams.CrsCod)"
" FROM deg_degrees,courses,exa_exams" " FROM deg_degrees,"
"crs_courses,"
"exa_exams"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=exa_exams.CrsCod", " AND crs_courses.CrsCod=exa_exams.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of courses with exams", DB_QuerySELECT (&mysql_res,"can not get number of courses with exams",
"SELECT COUNT(DISTINCT exa_exams.CrsCod)" "SELECT COUNT(DISTINCT exa_exams.CrsCod)"
" FROM courses,exa_exams" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "exa_exams"
" AND courses.CrsCod=exa_exams.CrsCod", " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=exa_exams.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
@ -1977,39 +1987,49 @@ unsigned Exa_GetNumExams (Hie_Lvl_Level_t Scope)
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of exams", DB_QuerySELECT (&mysql_res,"can not get number of exams",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM institutions,centres,deg_degrees,courses,exa_exams" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"exa_exams"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=exa_exams.CrsCod", " AND crs_courses.CrsCod=exa_exams.CrsCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of exams", DB_QuerySELECT (&mysql_res,"can not get number of exams",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM centres,deg_degrees,courses,exa_exams" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"exa_exams"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=exa_exams.CrsCod", " AND crs_courses.CrsCod=exa_exams.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of exams", DB_QuerySELECT (&mysql_res,"can not get number of exams",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM deg_degrees,courses,exa_exams" " FROM deg_degrees,"
"crs_courses,"
"exa_exams"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=exa_exams.CrsCod", " AND crs_courses.CrsCod=exa_exams.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of exams", DB_QuerySELECT (&mysql_res,"can not get number of exams",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM courses,exa_exams" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "exa_exams"
" AND courses.CrsCod=exa_exams.CrsCod", " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=exa_exams.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
@ -2060,12 +2080,17 @@ double Exa_GetNumQstsPerCrsExam (Hie_Lvl_Level_t Scope)
DB_QuerySELECT (&mysql_res,"can not get number of questions per exam", DB_QuerySELECT (&mysql_res,"can not get number of questions per exam",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts" " (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
" FROM institutions,centres,deg_degrees,courses,exa_exams,exa_set_questions" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"exa_exams,"
"exa_set_questions"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=exa_exams.CrsCod" " AND crs_courses.CrsCod=exa_exams.CrsCod"
" AND exa_exams.ExaCod=exa_set_questions.ExaCod" " AND exa_exams.ExaCod=exa_set_questions.ExaCod"
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable", " GROUP BY exa_set_questions.ExaCod) AS NumQstsTable",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
@ -2074,11 +2099,15 @@ double Exa_GetNumQstsPerCrsExam (Hie_Lvl_Level_t Scope)
DB_QuerySELECT (&mysql_res,"can not get number of questions per exam", DB_QuerySELECT (&mysql_res,"can not get number of questions per exam",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts" " (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
" FROM centres,deg_degrees,courses,exa_exams,exa_set_questions" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"exa_exams,"
"exa_set_questions"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=exa_exams.CrsCod" " AND crs_courses.CrsCod=exa_exams.CrsCod"
" AND exa_exams.ExaCod=exa_set_questions.ExaCod" " AND exa_exams.ExaCod=exa_set_questions.ExaCod"
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable", " GROUP BY exa_set_questions.ExaCod) AS NumQstsTable",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
@ -2087,10 +2116,13 @@ double Exa_GetNumQstsPerCrsExam (Hie_Lvl_Level_t Scope)
DB_QuerySELECT (&mysql_res,"can not get number of questions per exam", DB_QuerySELECT (&mysql_res,"can not get number of questions per exam",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts" " (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
" FROM deg_degrees,courses,exa_exams,exa_set_questions" " FROM deg_degrees,"
"crs_courses,"
"exa_exams,"
"exa_set_questions"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=exa_exams.CrsCod" " AND crs_courses.CrsCod=exa_exams.CrsCod"
" AND exa_exams.ExaCod=exa_set_questions.ExaCod" " AND exa_exams.ExaCod=exa_set_questions.ExaCod"
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable", " GROUP BY exa_set_questions.ExaCod) AS NumQstsTable",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
@ -2099,9 +2131,11 @@ double Exa_GetNumQstsPerCrsExam (Hie_Lvl_Level_t Scope)
DB_QuerySELECT (&mysql_res,"can not get number of questions per exam", DB_QuerySELECT (&mysql_res,"can not get number of questions per exam",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts" " (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
" FROM courses,exa_exams,exa_set_questions" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "exa_exams,"
" AND courses.CrsCod=exa_exams.CrsCod" "exa_set_questions"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=exa_exams.CrsCod"
" AND exa_exams.ExaCod=exa_set_questions.ExaCod" " AND exa_exams.ExaCod=exa_set_questions.ExaCod"
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable", " GROUP BY exa_set_questions.ExaCod) AS NumQstsTable",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
@ -2110,7 +2144,8 @@ double Exa_GetNumQstsPerCrsExam (Hie_Lvl_Level_t Scope)
DB_QuerySELECT (&mysql_res,"can not get number of questions per exam", DB_QuerySELECT (&mysql_res,"can not get number of questions per exam",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts" " (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
" FROM exa_exams,exa_set_questions" " FROM exa_exams,"
"exa_set_questions"
" WHERE exa_exams.Cod=%ld" " WHERE exa_exams.Cod=%ld"
" AND exa_exams.ExaCod=exa_set_questions.ExaCod" " AND exa_exams.ExaCod=exa_set_questions.ExaCod"
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable", " GROUP BY exa_set_questions.ExaCod) AS NumQstsTable",

File diff suppressed because it is too large Load Diff

View File

@ -1365,77 +1365,110 @@ void Fol_GetAndShowRankingFollowers (void)
switch (Gbl.Scope.Current) switch (Gbl.Scope.Current)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT FollowedCod,COUNT(FollowerCod) AS N" "SELECT FollowedCod,"
" FROM usr_follow" "COUNT(FollowerCod) AS N"
" GROUP BY FollowedCod" " FROM usr_follow"
" ORDER BY N DESC,FollowedCod LIMIT 100"); " GROUP BY FollowedCod"
" ORDER BY N DESC,"
"FollowedCod"
" LIMIT 100");
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT usr_follow.FollowedCod,COUNT(DISTINCT usr_follow.FollowerCod) AS N" "SELECT usr_follow.FollowedCod,"
" FROM institutions,centres,deg_degrees,courses,crs_usr,usr_follow" "COUNT(DISTINCT usr_follow.FollowerCod) AS N"
" WHERE institutions.CtyCod=%ld" " FROM institutions,"
" AND institutions.InsCod=centres.InsCod" "centres,"
" AND centres.CtrCod=deg_degrees.CtrCod" "deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_courses,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_usr,"
" AND crs_usr.UsrCod=usr_follow.FollowedCod" "usr_follow"
" GROUP BY usr_follow.FollowedCod" " WHERE institutions.CtyCod=%ld"
" ORDER BY N DESC,usr_follow.FollowedCod LIMIT 100", " AND institutions.InsCod=centres.InsCod"
Gbl.Hierarchy.Cty.CtyCod); " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_follow.FollowedCod"
" GROUP BY usr_follow.FollowedCod"
" ORDER BY N DESC,"
"usr_follow.FollowedCod"
" LIMIT 100",
Gbl.Hierarchy.Cty.CtyCod);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT usr_follow.FollowedCod,COUNT(DISTINCT usr_follow.FollowerCod) AS N" "SELECT usr_follow.FollowedCod,"
" FROM centres,deg_degrees,courses,crs_usr,usr_follow" "COUNT(DISTINCT usr_follow.FollowerCod) AS N"
" WHERE centres.InsCod=%ld" " FROM centres,"
" AND centres.CtrCod=deg_degrees.CtrCod" "deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_courses,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_usr,"
" AND crs_usr.UsrCod=usr_follow.FollowedCod" "usr_follow"
" GROUP BY usr_follow.FollowedCod" " WHERE centres.InsCod=%ld"
" ORDER BY N DESC,usr_follow.FollowedCod LIMIT 100", " AND centres.CtrCod=deg_degrees.CtrCod"
Gbl.Hierarchy.Ins.InsCod); " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_follow.FollowedCod"
" GROUP BY usr_follow.FollowedCod"
" ORDER BY N DESC,"
"usr_follow.FollowedCod"
" LIMIT 100",
Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT usr_follow.FollowedCod,COUNT(DISTINCT usr_follow.FollowerCod) AS N" "SELECT usr_follow.FollowedCod,"
" FROM deg_degrees,courses,crs_usr,usr_follow" "COUNT(DISTINCT usr_follow.FollowerCod) AS N"
" WHERE deg_degrees.CtrCod=%ld" " FROM deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_courses,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_usr,"
" AND crs_usr.UsrCod=usr_follow.FollowedCod" "usr_follow"
" GROUP BY usr_follow.FollowedCod" " WHERE deg_degrees.CtrCod=%ld"
" ORDER BY N DESC,usr_follow.FollowedCod LIMIT 100", " AND deg_degrees.DegCod=crs_courses.DegCod"
Gbl.Hierarchy.Ctr.CtrCod); " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_follow.FollowedCod"
" GROUP BY usr_follow.FollowedCod"
" ORDER BY N DESC,"
"usr_follow.FollowedCod"
" LIMIT 100",
Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT usr_follow.FollowedCod,COUNT(DISTINCT usr_follow.FollowerCod) AS N" "SELECT usr_follow.FollowedCod,"
" FROM courses,crs_usr,usr_follow" "COUNT(DISTINCT usr_follow.FollowerCod) AS N"
" WHERE courses.DegCod=%ld" " FROM crs_courses,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_usr,"
" AND crs_usr.UsrCod=usr_follow.FollowedCod" "usr_follow"
" GROUP BY usr_follow.FollowedCod" " WHERE crs_courses.DegCod=%ld"
" ORDER BY N DESC,usr_follow.FollowedCod LIMIT 100", " AND crs_courses.CrsCod=crs_usr.CrsCod"
Gbl.Hierarchy.Deg.DegCod); " AND crs_usr.UsrCod=usr_follow.FollowedCod"
" GROUP BY usr_follow.FollowedCod"
" ORDER BY N DESC,"
"usr_follow.FollowedCod"
" LIMIT 100",
Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT usr_follow.FollowedCod,COUNT(DISTINCT usr_follow.FollowerCod) AS N" "SELECT usr_follow.FollowedCod,"
" FROM crs_usr,usr_follow" "COUNT(DISTINCT usr_follow.FollowerCod) AS N"
" WHERE crs_usr.CrsCod=%ld" " FROM crs_usr,"
" AND crs_usr.UsrCod=usr_follow.FollowedCod" "usr_follow"
" GROUP BY usr_follow.FollowedCod" " WHERE crs_usr.CrsCod=%ld"
" ORDER BY N DESC,usr_follow.FollowedCod LIMIT 100", " AND crs_usr.UsrCod=usr_follow.FollowedCod"
Gbl.Hierarchy.Crs.CrsCod); " GROUP BY usr_follow.FollowedCod"
" ORDER BY N DESC,"
"usr_follow.FollowedCod"
" LIMIT 100",
Gbl.Hierarchy.Crs.CrsCod);
break; break;
default: default:
Lay_WrongScopeExit (); Lay_WrongScopeExit ();

File diff suppressed because it is too large Load Diff

View File

@ -2659,77 +2659,72 @@ void Gam_RequestNewMatch (void)
unsigned Gam_GetNumCoursesWithGames (Hie_Lvl_Level_t Scope) unsigned Gam_GetNumCoursesWithGames (Hie_Lvl_Level_t Scope)
{ {
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumCourses;
/***** Get number of courses with games from database *****/ /***** Get number of courses with games from database *****/
switch (Scope) switch (Scope)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
DB_QuerySELECT (&mysql_res,"can not get number of courses with games", return (unsigned)
DB_QueryCOUNT ("can not get number of courses with games",
"SELECT COUNT(DISTINCT CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM gam_games"); " FROM gam_games");
break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of courses with games", return (unsigned)
DB_QueryCOUNT ("can not get number of courses with games",
"SELECT COUNT(DISTINCT gam_games.CrsCod)" "SELECT COUNT(DISTINCT gam_games.CrsCod)"
" FROM institutions,centres,deg_degrees,courses,gam_games" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"gam_games"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=gam_games.CrsCod", " AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of courses with games", return (unsigned)
DB_QueryCOUNT ("can not get number of courses with games",
"SELECT COUNT(DISTINCT gam_games.CrsCod)" "SELECT COUNT(DISTINCT gam_games.CrsCod)"
" FROM centres,deg_degrees,courses,gam_games" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"gam_games"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=gam_games.CrsCod", " AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of courses with games", return (unsigned)
DB_QueryCOUNT ("can not get number of courses with games",
"SELECT COUNT(DISTINCT gam_games.CrsCod)" "SELECT COUNT(DISTINCT gam_games.CrsCod)"
" FROM deg_degrees,courses,gam_games" " FROM deg_degrees,"
"crs_courses,"
"gam_games"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=gam_games.CrsCod", " AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of courses with games", return (unsigned)
DB_QueryCOUNT ("can not get number of courses with games",
"SELECT COUNT(DISTINCT gam_games.CrsCod)" "SELECT COUNT(DISTINCT gam_games.CrsCod)"
" FROM courses,gam_games" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "gam_games"
" AND courses.CrsCod=gam_games.CrsCod", " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
DB_QuerySELECT (&mysql_res,"can not get number of courses with games", return (unsigned)
DB_QueryCOUNT ("can not get number of courses with games",
"SELECT COUNT(DISTINCT CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM gam_games" " FROM gam_games"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break;
default: default:
Lay_WrongScopeExit (); return 0;
break;
} }
/***** Get number of games *****/
row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%u",&NumCourses) != 1)
Lay_ShowErrorAndExit ("Error when getting number of courses with games.");
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
return NumCourses;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2739,77 +2734,72 @@ unsigned Gam_GetNumCoursesWithGames (Hie_Lvl_Level_t Scope)
unsigned Gam_GetNumGames (Hie_Lvl_Level_t Scope) unsigned Gam_GetNumGames (Hie_Lvl_Level_t Scope)
{ {
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumGames;
/***** Get number of games from database *****/ /***** Get number of games from database *****/
switch (Scope) switch (Scope)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
DB_QuerySELECT (&mysql_res,"can not get number of games", return (unsigned)
DB_QueryCOUNT ("can not get number of games",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM gam_games"); " FROM gam_games");
break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of games", return (unsigned)
DB_QueryCOUNT ("can not get number of games",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM institutions,centres,deg_degrees,courses,gam_games" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"gam_games"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=gam_games.CrsCod", " AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of games", return (unsigned)
DB_QueryCOUNT ("can not get number of games",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM centres,deg_degrees,courses,gam_games" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"gam_games"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=gam_games.CrsCod", " AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of games", return (unsigned)
DB_QueryCOUNT ("can not get number of games",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM deg_degrees,courses,gam_games" " FROM deg_degrees,"
"crs_courses,"
"gam_games"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=gam_games.CrsCod", " AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of games", return (unsigned)
DB_QueryCOUNT ("can not get number of games",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM courses,gam_games" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "gam_games"
" AND courses.CrsCod=gam_games.CrsCod", " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
DB_QuerySELECT (&mysql_res,"can not get number of games", return (unsigned)
DB_QueryCOUNT ("can not get number of games",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM gam_games" " FROM gam_games"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break;
default: default:
Lay_WrongScopeExit (); return 0;
break;
} }
/***** Get number of games *****/
row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%u",&NumGames) != 1)
Lay_ShowErrorAndExit ("Error when getting number of games.");
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
return NumGames;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2829,7 +2819,8 @@ double Gam_GetNumQstsPerCrsGame (Hie_Lvl_Level_t Scope)
DB_QuerySELECT (&mysql_res,"can not get number of questions per game", DB_QuerySELECT (&mysql_res,"can not get number of questions per game",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(gam_questions.QstCod) AS NumQsts" " (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
" FROM gam_games,gam_questions" " FROM gam_games,"
"gam_questions"
" WHERE gam_games.GamCod=gam_questions.GamCod" " WHERE gam_games.GamCod=gam_questions.GamCod"
" GROUP BY gam_questions.GamCod) AS NumQstsTable"); " GROUP BY gam_questions.GamCod) AS NumQstsTable");
break; break;
@ -2837,12 +2828,17 @@ double Gam_GetNumQstsPerCrsGame (Hie_Lvl_Level_t Scope)
DB_QuerySELECT (&mysql_res,"can not get number of questions per game", DB_QuerySELECT (&mysql_res,"can not get number of questions per game",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(gam_questions.QstCod) AS NumQsts" " (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
" FROM institutions,centres,deg_degrees,courses,gam_games,gam_questions" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"gam_games,"
"gam_questions"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=gam_games.CrsCod" " AND crs_courses.CrsCod=gam_games.CrsCod"
" AND gam_games.GamCod=gam_questions.GamCod" " AND gam_games.GamCod=gam_questions.GamCod"
" GROUP BY gam_questions.GamCod) AS NumQstsTable", " GROUP BY gam_questions.GamCod) AS NumQstsTable",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
@ -2851,11 +2847,15 @@ double Gam_GetNumQstsPerCrsGame (Hie_Lvl_Level_t Scope)
DB_QuerySELECT (&mysql_res,"can not get number of questions per game", DB_QuerySELECT (&mysql_res,"can not get number of questions per game",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(gam_questions.QstCod) AS NumQsts" " (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
" FROM centres,deg_degrees,courses,gam_games,gam_questions" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"gam_games,"
"gam_questions"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=gam_games.CrsCod" " AND crs_courses.CrsCod=gam_games.CrsCod"
" AND gam_games.GamCod=gam_questions.GamCod" " AND gam_games.GamCod=gam_questions.GamCod"
" GROUP BY gam_questions.GamCod) AS NumQstsTable", " GROUP BY gam_questions.GamCod) AS NumQstsTable",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
@ -2864,10 +2864,13 @@ double Gam_GetNumQstsPerCrsGame (Hie_Lvl_Level_t Scope)
DB_QuerySELECT (&mysql_res,"can not get number of questions per game", DB_QuerySELECT (&mysql_res,"can not get number of questions per game",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(gam_questions.QstCod) AS NumQsts" " (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
" FROM deg_degrees,courses,gam_games,gam_questions" " FROM deg_degrees,"
"crs_courses,"
"gam_games,"
"gam_questions"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=gam_games.CrsCod" " AND crs_courses.CrsCod=gam_games.CrsCod"
" AND gam_games.GamCod=gam_questions.GamCod" " AND gam_games.GamCod=gam_questions.GamCod"
" GROUP BY gam_questions.GamCod) AS NumQstsTable", " GROUP BY gam_questions.GamCod) AS NumQstsTable",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
@ -2876,9 +2879,11 @@ double Gam_GetNumQstsPerCrsGame (Hie_Lvl_Level_t Scope)
DB_QuerySELECT (&mysql_res,"can not get number of questions per game", DB_QuerySELECT (&mysql_res,"can not get number of questions per game",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(gam_questions.QstCod) AS NumQsts" " (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
" FROM courses,gam_games,gam_questions" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "gam_games,"
" AND courses.CrsCod=gam_games.CrsCod" "gam_questions"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=gam_games.CrsCod"
" AND gam_games.GamCod=gam_questions.GamCod" " AND gam_games.GamCod=gam_questions.GamCod"
" GROUP BY gam_questions.GamCod) AS NumQstsTable", " GROUP BY gam_questions.GamCod) AS NumQstsTable",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
@ -2887,7 +2892,8 @@ double Gam_GetNumQstsPerCrsGame (Hie_Lvl_Level_t Scope)
DB_QuerySELECT (&mysql_res,"can not get number of questions per game", DB_QuerySELECT (&mysql_res,"can not get number of questions per game",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(gam_questions.QstCod) AS NumQsts" " (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
" FROM gam_games,gam_questions" " FROM gam_games,"
"gam_questions"
" WHERE gam_games.Cod=%ld" " WHERE gam_games.Cod=%ld"
" AND gam_games.GamCod=gam_questions.GamCod" " AND gam_games.GamCod=gam_questions.GamCod"
" GROUP BY gam_questions.GamCod) AS NumQstsTable", " GROUP BY gam_questions.GamCod) AS NumQstsTable",

View File

@ -352,254 +352,288 @@ static unsigned Ind_GetTableOfCourses (const struct Ind_Indicators *Indicators,
if (Indicators->DptCod >= 0) // 0 means another department if (Indicators->DptCod >= 0) // 0 means another department
{ {
if (Indicators->DegTypCod > 0) if (Indicators->DegTypCod > 0)
NumCrss = NumCrss = (unsigned)
(unsigned) DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT DISTINCTROW " "SELECT DISTINCTROW "
"deg_degrees.FullName," "deg_degrees.FullName,"
"courses.FullName," "crs_courses.FullName,"
"courses.CrsCod," "crs_courses.CrsCod,"
"courses.InsCrsCod" "crs_courses.InsCrsCod"
" FROM deg_degrees,courses,crs_usr,usr_data" " FROM deg_degrees,"
" WHERE deg_degrees.DegTypCod=%ld" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_usr,"
" AND courses.CrsCod=crs_usr.CrsCod" "usr_data"
" AND crs_usr.Role=%u" " WHERE deg_degrees.DegTypCod=%ld"
" AND crs_usr.UsrCod=usr_data.UsrCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND usr_data.DptCod=%ld" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" ORDER BY deg_degrees.FullName," " AND crs_usr.Role=%u"
"courses.FullName", " AND crs_usr.UsrCod=usr_data.UsrCod"
Indicators->DegTypCod, " AND usr_data.DptCod=%ld"
(unsigned) Rol_TCH, " ORDER BY deg_degrees.FullName,"
Indicators->DptCod); "crs_courses.FullName",
Indicators->DegTypCod,
(unsigned) Rol_TCH,
Indicators->DptCod);
else else
NumCrss = NumCrss = (unsigned)
(unsigned) DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT DISTINCTROW " "SELECT DISTINCTROW "
"deg_degrees.FullName," "deg_degrees.FullName,"
"courses.FullName," "crs_courses.FullName,"
"courses.CrsCod," "crs_courses.CrsCod,"
"courses.InsCrsCod" "crs_courses.InsCrsCod"
" FROM deg_degrees,courses,crs_usr,usr_data" " FROM deg_degrees,"
" WHERE deg_degrees.DegCod=courses.DegCod" "crs_courses,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_usr,"
" AND crs_usr.Role=%u" "usr_data"
" AND crs_usr.UsrCod=usr_data.UsrCod" " WHERE deg_degrees.DegCod=crs_courses.DegCod"
" AND usr_data.DptCod=%ld" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" ORDER BY deg_degrees.FullName," " AND crs_usr.Role=%u"
"courses.FullName", " AND crs_usr.UsrCod=usr_data.UsrCod"
(unsigned) Rol_TCH, " AND usr_data.DptCod=%ld"
Indicators->DptCod); " ORDER BY deg_degrees.FullName,"
"crs_courses.FullName",
(unsigned) Rol_TCH,
Indicators->DptCod);
} }
else else
{ {
if (Indicators->DegTypCod > 0) if (Indicators->DegTypCod > 0)
NumCrss = NumCrss = (unsigned)
(unsigned) DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT deg_degrees.FullName," "SELECT deg_degrees.FullName,"
"courses.FullName," "crs_courses.FullName,"
"courses.CrsCod," "crs_courses.CrsCod,"
"courses.InsCrsCod" "crs_courses.InsCrsCod"
" FROM deg_degrees,courses" " FROM deg_degrees,"
" WHERE deg_degrees.DegTypCod=%ld" "crs_courses"
" AND deg_degrees.DegCod=courses.DegCod" " WHERE deg_degrees.DegTypCod=%ld"
" ORDER BY deg_degrees.FullName," " AND deg_degrees.DegCod=crs_courses.DegCod"
"courses.FullName", " ORDER BY deg_degrees.FullName,"
Indicators->DegTypCod); "crs_courses.FullName",
Indicators->DegTypCod);
else else
NumCrss = NumCrss = (unsigned)
(unsigned) DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT deg_degrees.FullName," "SELECT deg_degrees.FullName,"
"courses.FullName," "crs_courses.FullName,"
"courses.CrsCod," "crs_courses.CrsCod,"
"courses.InsCrsCod" "crs_courses.InsCrsCod"
" FROM deg_degrees,courses" " FROM deg_degrees,"
" WHERE deg_degrees.DegCod=courses.DegCod" "crs_courses"
" ORDER BY deg_degrees.FullName," " WHERE deg_degrees.DegCod=crs_courses.DegCod"
"courses.FullName"); " ORDER BY deg_degrees.FullName,"
"crs_courses.FullName");
} }
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
if (Indicators->DptCod >= 0) // 0 means another department if (Indicators->DptCod >= 0) // 0 means another department
NumCrss = NumCrss = (unsigned)
(unsigned) DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT DISTINCTROW " "SELECT DISTINCTROW "
"deg_degrees.FullName," "deg_degrees.FullName,"
"courses.FullName," "crs_courses.FullName,"
"courses.CrsCod," "crs_courses.CrsCod,"
"courses.InsCrsCod" "crs_courses.InsCrsCod"
" FROM institutions,centres,deg_degrees,courses,crs_usr,usr_data" " FROM institutions,"
" WHERE institutions.CtyCod=%ld" "centres,"
" AND institutions.InsCod=centres.InsCod" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_usr,"
" AND courses.CrsCod=crs_usr.CrsCod" "usr_data"
" AND crs_usr.Role=%u" " WHERE institutions.CtyCod=%ld"
" AND crs_usr.UsrCod=usr_data.UsrCod" " AND institutions.InsCod=centres.InsCod"
" AND usr_data.DptCod=%ld" " AND centres.CtrCod=deg_degrees.CtrCod"
" ORDER BY deg_degrees.FullName," " AND deg_degrees.DegCod=crs_courses.DegCod"
"courses.FullName", " AND crs_courses.CrsCod=crs_usr.CrsCod"
Gbl.Hierarchy.Cty.CtyCod, " AND crs_usr.Role=%u"
(unsigned) Rol_TCH, " AND crs_usr.UsrCod=usr_data.UsrCod"
Indicators->DptCod); " AND usr_data.DptCod=%ld"
" ORDER BY deg_degrees.FullName,"
"crs_courses.FullName",
Gbl.Hierarchy.Cty.CtyCod,
(unsigned) Rol_TCH,
Indicators->DptCod);
else else
NumCrss = NumCrss = (unsigned)
(unsigned) DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT deg_degrees.FullName," "SELECT deg_degrees.FullName,"
"courses.FullName," "crs_courses.FullName,"
"courses.CrsCod," "crs_courses.CrsCod,"
"courses.InsCrsCod" "crs_courses.InsCrsCod"
" FROM institutions,centres,deg_degrees,courses" " FROM institutions,"
" WHERE institutions.CtyCod=%ld" "centres,"
" AND institutions.InsCod=centres.InsCod" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses"
" AND deg_degrees.DegCod=courses.DegCod" " WHERE institutions.CtyCod=%ld"
" ORDER BY deg_degrees.FullName," " AND institutions.InsCod=centres.InsCod"
"courses.FullName", " AND centres.CtrCod=deg_degrees.CtrCod"
Gbl.Hierarchy.Cty.CtyCod); " AND deg_degrees.DegCod=crs_courses.DegCod"
" ORDER BY deg_degrees.FullName,"
"crs_courses.FullName",
Gbl.Hierarchy.Cty.CtyCod);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
if (Indicators->DptCod >= 0) // 0 means another department if (Indicators->DptCod >= 0) // 0 means another department
NumCrss = NumCrss = (unsigned)
(unsigned) DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT DISTINCTROW " "SELECT DISTINCTROW "
"deg_degrees.FullName," "deg_degrees.FullName,"
"courses.FullName," "crs_courses.FullName,"
"courses.CrsCod," "crs_courses.CrsCod,"
"courses.InsCrsCod" "crs_courses.InsCrsCod"
" FROM centres,deg_degrees,courses,crs_usr,usr_data" " FROM centres,"
" WHERE centres.InsCod=%ld" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_usr,"
" AND courses.CrsCod=crs_usr.CrsCod" "usr_data"
" AND crs_usr.Role=%u" " WHERE centres.InsCod=%ld"
" AND crs_usr.UsrCod=usr_data.UsrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND usr_data.DptCod=%ld" " AND deg_degrees.DegCod=crs_courses.DegCod"
" ORDER BY deg_degrees.FullName," " AND crs_courses.CrsCod=crs_usr.CrsCod"
"courses.FullName", " AND crs_usr.Role=%u"
Gbl.Hierarchy.Ins.InsCod, " AND crs_usr.UsrCod=usr_data.UsrCod"
(unsigned) Rol_TCH, " AND usr_data.DptCod=%ld"
Indicators->DptCod); " ORDER BY deg_degrees.FullName,"
"crs_courses.FullName",
Gbl.Hierarchy.Ins.InsCod,
(unsigned) Rol_TCH,
Indicators->DptCod);
else else
NumCrss = NumCrss = (unsigned)
(unsigned) DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT deg_degrees.FullName," "SELECT deg_degrees.FullName,"
"courses.FullName," "crs_courses.FullName,"
"courses.CrsCod," "crs_courses.CrsCod,"
"courses.InsCrsCod" "crs_courses.InsCrsCod"
" FROM centres,deg_degrees,courses" " FROM centres,"
" WHERE centres.InsCod=%ld" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses"
" AND deg_degrees.DegCod=courses.DegCod" " WHERE centres.InsCod=%ld"
" ORDER BY deg_degrees.FullName," " AND centres.CtrCod=deg_degrees.CtrCod"
"courses.FullName", " AND deg_degrees.DegCod=crs_courses.DegCod"
Gbl.Hierarchy.Ins.InsCod); " ORDER BY deg_degrees.FullName,"
"crs_courses.FullName",
Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
if (Indicators->DptCod >= 0) // 0 means another department if (Indicators->DptCod >= 0) // 0 means another department
NumCrss = NumCrss = (unsigned)
(unsigned) DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT DISTINCTROW " "SELECT DISTINCTROW "
"deg_degrees.FullName," "deg_degrees.FullName,"
"courses.FullName," "crs_courses.FullName,"
"courses.CrsCod," "crs_courses.CrsCod,"
"courses.InsCrsCod" "crs_courses.InsCrsCod"
" FROM deg_degrees,courses,crs_usr,usr_data" " FROM deg_degrees,"
" WHERE deg_degrees.CtrCod=%ld" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_usr,"
" AND courses.CrsCod=crs_usr.CrsCod" "usr_data"
" AND crs_usr.Role=%u" " WHERE deg_degrees.CtrCod=%ld"
" AND crs_usr.UsrCod=usr_data.UsrCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND usr_data.DptCod=%ld" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" ORDER BY deg_degrees.FullName," " AND crs_usr.Role=%u"
"courses.FullName", " AND crs_usr.UsrCod=usr_data.UsrCod"
Gbl.Hierarchy.Ctr.CtrCod, " AND usr_data.DptCod=%ld"
(unsigned) Rol_TCH, " ORDER BY deg_degrees.FullName,"
Indicators->DptCod); "crs_courses.FullName",
Gbl.Hierarchy.Ctr.CtrCod,
(unsigned) Rol_TCH,
Indicators->DptCod);
else else
NumCrss = NumCrss = (unsigned)
(unsigned) DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT deg_degrees.FullName," "SELECT deg_degrees.FullName,"
"courses.FullName," "crs_courses.FullName,"
"courses.CrsCod," "crs_courses.CrsCod,"
"courses.InsCrsCod" "crs_courses.InsCrsCod"
" FROM deg_degrees,courses" " FROM deg_degrees,"
" WHERE deg_degrees.CtrCod=%ld" "crs_courses"
" AND deg_degrees.DegCod=courses.DegCod" " WHERE deg_degrees.CtrCod=%ld"
" ORDER BY deg_degrees.FullName," " AND deg_degrees.DegCod=crs_courses.DegCod"
"courses.FullName", " ORDER BY deg_degrees.FullName,"
Gbl.Hierarchy.Ctr.CtrCod); "crs_courses.FullName",
Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
if (Indicators->DptCod >= 0) // 0 means another department if (Indicators->DptCod >= 0) // 0 means another department
NumCrss = NumCrss = (unsigned)
(unsigned) DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT DISTINCTROW " "SELECT DISTINCTROW "
"deg_degrees.FullName," "deg_degrees.FullName,"
"courses.FullName," "crs_courses.FullName,"
"courses.CrsCod," "crs_courses.CrsCod,"
"courses.InsCrsCod" "crs_courses.InsCrsCod"
" FROM deg_degrees,courses,crs_usr,usr_data" " FROM deg_degrees,"
" WHERE deg_degrees.DegCod=%ld" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_usr,"
" AND courses.CrsCod=crs_usr.CrsCod" "usr_data"
" AND crs_usr.Role=%u" " WHERE deg_degrees.DegCod=%ld"
" AND crs_usr.UsrCod=usr_data.UsrCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND usr_data.DptCod=%ld" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" ORDER BY deg_degrees.FullName," " AND crs_usr.Role=%u"
"courses.FullName", " AND crs_usr.UsrCod=usr_data.UsrCod"
Gbl.Hierarchy.Deg.DegCod, " AND usr_data.DptCod=%ld"
(unsigned) Rol_TCH, " ORDER BY deg_degrees.FullName,"
Indicators->DptCod); "crs_courses.FullName",
Gbl.Hierarchy.Deg.DegCod,
(unsigned) Rol_TCH,
Indicators->DptCod);
else else
NumCrss = NumCrss = (unsigned)
(unsigned) DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT deg_degrees.FullName," "SELECT deg_degrees.FullName,"
"courses.FullName," "crs_courses.FullName,"
"courses.CrsCod," "crs_courses.CrsCod,"
"courses.InsCrsCod" "crs_courses.InsCrsCod"
" FROM deg_degrees,courses" " FROM deg_degrees,"
" WHERE deg_degrees.DegCod=%ld" "crs_courses"
" AND deg_degrees.DegCod=courses.DegCod" " WHERE deg_degrees.DegCod=%ld"
" ORDER BY deg_degrees.FullName," " AND deg_degrees.DegCod=crs_courses.DegCod"
"courses.FullName", " ORDER BY deg_degrees.FullName,"
Gbl.Hierarchy.Deg.DegCod); "crs_courses.FullName",
Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
if (Indicators->DptCod >= 0) // 0 means another department if (Indicators->DptCod >= 0) // 0 means another department
NumCrss = NumCrss = (unsigned)
(unsigned) DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT DISTINCTROW " "SELECT DISTINCTROW "
"deg_degrees.FullName," "deg_degrees.FullName,"
"courses.FullName," "crs_courses.FullName,"
"courses.CrsCod," "crs_courses.CrsCod,"
"courses.InsCrsCod" "crs_courses.InsCrsCod"
" FROM deg_degrees,courses,crs_usr,usr_data" " FROM deg_degrees,"
" WHERE courses.CrsCod=%ld" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_usr,"
" AND courses.CrsCod=crs_usr.CrsCod" "usr_data"
" AND crs_usr.CrsCod=%ld" " WHERE crs_courses.CrsCod=%ld"
" AND crs_usr.Role=%u" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_usr.UsrCod=usr_data.UsrCod" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND usr_data.DptCod=%ld" " AND crs_usr.CrsCod=%ld"
" ORDER BY deg_degrees.FullName," " AND crs_usr.Role=%u"
"courses.FullName", " AND crs_usr.UsrCod=usr_data.UsrCod"
Gbl.Hierarchy.Crs.CrsCod, " AND usr_data.DptCod=%ld"
Gbl.Hierarchy.Crs.CrsCod, " ORDER BY deg_degrees.FullName,"
(unsigned) Rol_TCH, "crs_courses.FullName",
Indicators->DptCod); Gbl.Hierarchy.Crs.CrsCod,
Gbl.Hierarchy.Crs.CrsCod,
(unsigned) Rol_TCH,
Indicators->DptCod);
else else
NumCrss = NumCrss = (unsigned)
(unsigned) DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT deg_degrees.FullName," "SELECT deg_degrees.FullName,"
"courses.FullName," "crs_courses.FullName,"
"courses.CrsCod," "crs_courses.CrsCod,"
"courses.InsCrsCod" "crs_courses.InsCrsCod"
" FROM deg_degrees,courses" " FROM deg_degrees,"
" WHERE courses.CrsCod=%ld" "crs_courses"
" AND deg_degrees.DegCod=courses.DegCod" " WHERE crs_courses.CrsCod=%ld"
" ORDER BY deg_degrees.FullName," " AND deg_degrees.DegCod=crs_courses.DegCod"
"courses.FullName", " ORDER BY deg_degrees.FullName,"
Gbl.Hierarchy.Crs.CrsCod); "crs_courses.FullName",
Gbl.Hierarchy.Crs.CrsCod);
break; break;
default: default:
Lay_WrongScopeExit (); Lay_WrongScopeExit ();
@ -1341,8 +1375,7 @@ int Ind_GetNumIndicatorsCrsFromDB (long CrsCod)
/***** Get number of indicators of a course from database *****/ /***** Get number of indicators of a course from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get number of indicators", if (DB_QuerySELECT (&mysql_res,"can not get number of indicators",
"SELECT NumIndicators FROM courses" "SELECT NumIndicators FROM crs_courses WHERE CrsCod=%ld",
" WHERE CrsCod=%ld",
CrsCod)) CrsCod))
{ {
/***** Get row *****/ /***** Get row *****/
@ -1367,7 +1400,7 @@ static void Ind_StoreIndicatorsCrsIntoDB (long CrsCod,unsigned NumIndicators)
{ {
/***** Store number of indicators of a course in database *****/ /***** Store number of indicators of a course in database *****/
DB_QueryUPDATE ("can not store number of indicators of a course", DB_QueryUPDATE ("can not store number of indicators of a course",
"UPDATE courses SET NumIndicators=%u WHERE CrsCod=%ld", "UPDATE crs_courses SET NumIndicators=%u WHERE CrsCod=%ld",
NumIndicators,CrsCod); NumIndicators,CrsCod);
} }

View File

@ -2053,13 +2053,16 @@ unsigned Ins_GetCachedNumInssWithCrss (const char *SubQuery,
{ {
/***** Get current number of institutions with courses from database and update cache *****/ /***** Get current number of institutions with courses from database and update cache *****/
NumInssWithCrss = (unsigned) NumInssWithCrss = (unsigned)
DB_QueryCOUNT ("can not get number of institutions with courses", DB_QueryCOUNT ("can not get number of institutions with courses",
"SELECT COUNT(DISTINCT institutions.InsCod)" "SELECT COUNT(DISTINCT institutions.InsCod)"
" FROM institutions,centres,deg_degrees,courses" " FROM institutions,"
" WHERE %sinstitutions.InsCod=centres.InsCod" "centres,"
" AND centres.CtrCod=deg_degrees.CtrCod" "deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod", "crs_courses"
SubQuery); " WHERE %sinstitutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod",
SubQuery);
FigCch_UpdateFigureIntoCache (FigCch_NUM_INSS_WITH_CRSS,Scope,Cod, FigCch_UpdateFigureIntoCache (FigCch_NUM_INSS_WITH_CRSS,Scope,Cod,
FigCch_UNSIGNED,&NumInssWithCrss); FigCch_UNSIGNED,&NumInssWithCrss);
} }
@ -2088,15 +2091,19 @@ unsigned Ins_GetCachedNumInssWithUsrs (Rol_Role_t Role,const char *SubQuery,
{ {
/***** Get current number of institutions with users from database and update cache *****/ /***** Get current number of institutions with users from database and update cache *****/
NumInssWithUsrs = (unsigned) NumInssWithUsrs = (unsigned)
DB_QueryCOUNT ("can not get number of institutions with users", DB_QueryCOUNT ("can not get number of institutions with users",
"SELECT COUNT(DISTINCT institutions.InsCod)" "SELECT COUNT(DISTINCT institutions.InsCod)"
" FROM institutions,centres,deg_degrees,courses,crs_usr" " FROM institutions,"
" WHERE %sinstitutions.InsCod=centres.InsCod" "centres,"
" AND centres.CtrCod=deg_degrees.CtrCod" "deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_courses,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_usr"
" AND crs_usr.Role=%u", " WHERE %sinstitutions.InsCod=centres.InsCod"
SubQuery,(unsigned) Role); " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u",
SubQuery,(unsigned) Role);
FigCch_UpdateFigureIntoCache (FigureInss[Role],Scope,Cod, FigCch_UpdateFigureIntoCache (FigureInss[Role],Scope,Cod,
FigCch_UNSIGNED,&NumInssWithUsrs); FigCch_UNSIGNED,&NumInssWithUsrs);
} }

View File

@ -2218,7 +2218,6 @@ unsigned long Msg_GetNumMsgsSentByUsr (long UsrCod)
unsigned Msg_GetNumMsgsSent (Hie_Lvl_Level_t Scope,Msg_Status_t MsgStatus) unsigned Msg_GetNumMsgsSent (Hie_Lvl_Level_t Scope,Msg_Status_t MsgStatus)
{ {
const char *Table = "msg_snt"; const char *Table = "msg_snt";
unsigned NumMsgs = 0; // Initialized to avoid warning
/***** Get the number of messages sent from this location /***** Get the number of messages sent from this location
(all the platform, current degree or current course) from database *****/ (all the platform, current degree or current course) from database *****/
@ -2235,73 +2234,74 @@ unsigned Msg_GetNumMsgsSent (Hie_Lvl_Level_t Scope,Msg_Status_t MsgStatus)
switch (Scope) switch (Scope)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
NumMsgs = (unsigned) DB_GetNumRowsTable (Table); return (unsigned) DB_GetNumRowsTable (Table);
break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number of sent messages", DB_QueryCOUNT ("can not get number of sent messages",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM institutions,centres,deg_degrees,courses,%s" " FROM institutions,"
" WHERE institutions.CtyCod=%ld" "centres,"
" AND institutions.InsCod=centres.InsCod" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "%s"
" AND courses.CrsCod=%s.CrsCod", " WHERE institutions.CtyCod=%ld"
Table, " AND institutions.InsCod=centres.InsCod"
Gbl.Hierarchy.Cty.CtyCod, " AND centres.CtrCod=deg_degrees.CtrCod"
Table); " AND deg_degrees.DegCod=crs_courses.DegCod"
break; " AND crs_courses.CrsCod=%s.CrsCod",
Table,
Gbl.Hierarchy.Cty.CtyCod,
Table);
case Hie_Lvl_INS: case Hie_Lvl_INS:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number of sent messages", DB_QueryCOUNT ("can not get number of sent messages",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM centres,deg_degrees,courses,%s" " FROM centres,"
" WHERE centres.InsCod=%ld" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "%s"
" AND courses.CrsCod=%s.CrsCod", " WHERE centres.InsCod=%ld"
Table, " AND centres.CtrCod=deg_degrees.CtrCod"
Gbl.Hierarchy.Ins.InsCod, " AND deg_degrees.DegCod=crs_courses.DegCod"
Table); " AND crs_courses.CrsCod=%s.CrsCod",
break; Table,
Gbl.Hierarchy.Ins.InsCod,
Table);
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number of sent messages", DB_QueryCOUNT ("can not get number of sent messages",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM deg_degrees,courses,%s" " FROM deg_degrees,"
" WHERE deg_degrees.CtrCod=%ld" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "%s"
" AND courses.CrsCod=%s.CrsCod", " WHERE deg_degrees.CtrCod=%ld"
Table, " AND deg_degrees.DegCod=crs_courses.DegCod"
Gbl.Hierarchy.Ctr.CtrCod, " AND crs_courses.CrsCod=%s.CrsCod",
Table); Table,
break; Gbl.Hierarchy.Ctr.CtrCod,
Table);
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number of sent messages", DB_QueryCOUNT ("can not get number of sent messages",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM courses,%s" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "%s"
" AND courses.CrsCod=%s.CrsCod", " WHERE crs_courses.DegCod=%ld"
Table, " AND crs_courses.CrsCod=%s.CrsCod",
Gbl.Hierarchy.Deg.DegCod, Table,
Table); Gbl.Hierarchy.Deg.DegCod,
break; Table);
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number of sent messages", DB_QueryCOUNT ("can not get number of sent messages",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM %s" " FROM %s"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Table, Table,
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break;
default: default:
Lay_WrongScopeExit (); return 0;
break;
} }
return NumMsgs;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2312,7 +2312,6 @@ unsigned Msg_GetNumMsgsSent (Hie_Lvl_Level_t Scope,Msg_Status_t MsgStatus)
unsigned Msg_GetNumMsgsReceived (Hie_Lvl_Level_t Scope,Msg_Status_t MsgStatus) unsigned Msg_GetNumMsgsReceived (Hie_Lvl_Level_t Scope,Msg_Status_t MsgStatus)
{ {
char *Table; char *Table;
unsigned NumMsgs = 0; // Initialized to avoid warning
/***** Get the number of unique messages sent from this location /***** Get the number of unique messages sent from this location
(all the platform, current degree or current course) from database *****/ (all the platform, current degree or current course) from database *****/
@ -2325,222 +2324,244 @@ unsigned Msg_GetNumMsgsReceived (Hie_Lvl_Level_t Scope,Msg_Status_t MsgStatus)
switch (Scope) switch (Scope)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
NumMsgs = (unsigned) DB_GetNumRowsTable (Table); return (unsigned) DB_GetNumRowsTable (Table);
break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number" DB_QueryCOUNT ("can not get number of received messages",
" of received messages", "SELECT COUNT(*)"
"SELECT COUNT(*)" " FROM institutions,"
" FROM institutions,centres,deg_degrees,courses,%s,msg_snt" "centres,"
" WHERE institutions.CtyCod=%ld" "deg_degrees,"
" AND institutions.InsCod=centres.InsCod" "crs_courses,"
" AND centres.CtrCod=deg_degrees.CtrCod" "%s,"
" AND deg_degrees.DegCod=courses.DegCod" "msg_snt"
" AND courses.CrsCod=msg_snt.CrsCod" " WHERE institutions.CtyCod=%ld"
" AND msg_snt.MsgCod=%s.MsgCod", " AND institutions.InsCod=centres.InsCod"
Table, " AND centres.CtrCod=deg_degrees.CtrCod"
Gbl.Hierarchy.Cty.CtyCod, " AND deg_degrees.DegCod=crs_courses.DegCod"
Table); " AND crs_courses.CrsCod=msg_snt.CrsCod"
break; " AND msg_snt.MsgCod=%s.MsgCod",
Table,
Gbl.Hierarchy.Cty.CtyCod,
Table);
case Hie_Lvl_INS: case Hie_Lvl_INS:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number" DB_QueryCOUNT ("can not get number of received messages",
" of received messages", "SELECT COUNT(*)"
"SELECT COUNT(*)" " FROM centres,"
" FROM centres,deg_degrees,courses,%s,msg_snt" "deg_degrees,"
" WHERE centres.InsCod=%ld" "crs_courses,"
" AND centres.CtrCod=deg_degrees.CtrCod" "%s,"
" AND deg_degrees.DegCod=courses.DegCod" "msg_snt"
" AND courses.CrsCod=msg_snt.CrsCod" " WHERE centres.InsCod=%ld"
" AND msg_snt.MsgCod=%s.MsgCod", " AND centres.CtrCod=deg_degrees.CtrCod"
Table, " AND deg_degrees.DegCod=crs_courses.DegCod"
Gbl.Hierarchy.Ins.InsCod, " AND crs_courses.CrsCod=msg_snt.CrsCod"
Table); " AND msg_snt.MsgCod=%s.MsgCod",
break; Table,
Gbl.Hierarchy.Ins.InsCod,
Table);
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number" DB_QueryCOUNT ("can not get number of received messages",
" of received messages", "SELECT COUNT(*)"
"SELECT COUNT(*)" " FROM deg_degrees,"
" FROM deg_degrees,courses,%s,msg_snt" "crs_courses,"
" WHERE deg_degrees.CtrCod=%ld" "%s,"
" AND deg_degrees.DegCod=courses.DegCod" "msg_snt"
" AND courses.CrsCod=msg_snt.CrsCod" " WHERE deg_degrees.CtrCod=%ld"
" AND msg_snt.MsgCod=%s.MsgCod", " AND deg_degrees.DegCod=crs_courses.DegCod"
Table, " AND crs_courses.CrsCod=msg_snt.CrsCod"
Gbl.Hierarchy.Ctr.CtrCod, " AND msg_snt.MsgCod=%s.MsgCod",
Table); Table,
break; Gbl.Hierarchy.Ctr.CtrCod,
Table);
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number" DB_QueryCOUNT ("can not get number of received messages",
" of received messages", "SELECT COUNT(*)"
"SELECT COUNT(*)" " FROM crs_courses,"
" FROM courses,%s,msg_snt" "%s,"
" WHERE courses.DegCod=%ld" "msg_snt"
" AND courses.CrsCod=msg_snt.CrsCod" " WHERE crs_courses.DegCod=%ld"
" AND msg_snt.MsgCod=%s.MsgCod", " AND crs_courses.CrsCod=msg_snt.CrsCod"
Table, " AND msg_snt.MsgCod=%s.MsgCod",
Gbl.Hierarchy.Deg.DegCod, Table,
Table); Gbl.Hierarchy.Deg.DegCod,
break; Table);
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number" DB_QueryCOUNT ("can not get number of received messages",
" of received messages", "SELECT COUNT(*)"
"SELECT COUNT(*)" " FROM msg_snt,"
" FROM msg_snt,%s" "%s"
" WHERE msg_snt.CrsCod=%ld" " WHERE msg_snt.CrsCod=%ld"
" AND msg_snt.MsgCod=%s.MsgCod", " AND msg_snt.MsgCod=%s.MsgCod",
Table, Table,
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
Table); Table);
break; case Hie_Lvl_UNK:
default: default:
Lay_WrongScopeExit (); return 0;
break;
} }
break; return 0;
case Msg_STATUS_NOTIFIED: case Msg_STATUS_NOTIFIED:
switch (Scope) switch (Scope)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number" DB_QueryCOUNT ("can not get number of received messages",
" of received messages", "SELECT "
"SELECT " "(SELECT COUNT(*)"
"(SELECT COUNT(*)" " FROM msg_rcv"
" FROM msg_rcv" " WHERE Notified='Y')"
" WHERE Notified='Y')" " + "
" + " "(SELECT COUNT(*)"
"(SELECT COUNT(*)" " FROM msg_rcv_deleted"
" FROM msg_rcv_deleted" " WHERE Notified='Y')");
" WHERE Notified='Y')");
break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number" DB_QueryCOUNT ("can not get number of received messages",
" of received messages", "SELECT "
"SELECT " "(SELECT COUNT(*)"
"(SELECT COUNT(*)" " FROM institutions,"
" FROM institutions,centres,deg_degrees,courses,msg_snt,msg_rcv" "centres,"
" WHERE institutions.CtyCod=%ld" "deg_degrees,"
" AND institutions.InsCod=centres.InsCod" "crs_courses,"
" AND centres.CtrCod=deg_degrees.CtrCod" "msg_snt,"
" AND deg_degrees.DegCod=courses.DegCod" "msg_rcv"
" AND courses.CrsCod=msg_snt.CrsCod" " WHERE institutions.CtyCod=%ld"
" AND msg_snt.MsgCod=msg_rcv.MsgCod" " AND institutions.InsCod=centres.InsCod"
" AND msg_rcv.Notified='Y')" " AND centres.CtrCod=deg_degrees.CtrCod"
" + " " AND deg_degrees.DegCod=crs_courses.DegCod"
"(SELECT COUNT(*)" " AND crs_courses.CrsCod=msg_snt.CrsCod"
" FROM institutions,centres,deg_degrees,courses,msg_snt,msg_rcv_deleted" " AND msg_snt.MsgCod=msg_rcv.MsgCod"
" WHERE institutions.CtyCod=%ld" " AND msg_rcv.Notified='Y')"
" AND institutions.InsCod=centres.InsCod" " + "
" AND centres.CtrCod=deg_degrees.CtrCod" "(SELECT COUNT(*)"
" AND deg_degrees.DegCod=courses.DegCod" " FROM institutions,"
" AND courses.CrsCod=msg_snt.CrsCod" "centres,"
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod" "deg_degrees,"
" AND msg_rcv_deleted.Notified='Y')", "crs_courses,"
Gbl.Hierarchy.Cty.CtyCod, "msg_snt,"
Gbl.Hierarchy.Cty.CtyCod); "msg_rcv_deleted"
break; " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=msg_snt.CrsCod"
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod"
" AND msg_rcv_deleted.Notified='Y')",
Gbl.Hierarchy.Cty.CtyCod,
Gbl.Hierarchy.Cty.CtyCod);
case Hie_Lvl_INS: case Hie_Lvl_INS:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number" DB_QueryCOUNT ("can not get number of received messages",
" of received messages", "SELECT "
"SELECT " "(SELECT COUNT(*)"
"(SELECT COUNT(*)" " FROM centres,"
" FROM centres,deg_degrees,courses,msg_snt,msg_rcv" "deg_degrees,"
" WHERE centres.InsCod=%ld" "crs_courses,"
" AND centres.CtrCod=deg_degrees.CtrCod" "msg_snt,"
" AND deg_degrees.DegCod=courses.DegCod" "msg_rcv"
" AND courses.CrsCod=msg_snt.CrsCod" " WHERE centres.InsCod=%ld"
" AND msg_snt.MsgCod=msg_rcv.MsgCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND msg_rcv.Notified='Y')" " AND deg_degrees.DegCod=crs_courses.DegCod"
" + " " AND crs_courses.CrsCod=msg_snt.CrsCod"
"(SELECT COUNT(*)" " AND msg_snt.MsgCod=msg_rcv.MsgCod"
" FROM centres,deg_degrees,courses,msg_snt,msg_rcv_deleted" " AND msg_rcv.Notified='Y')"
" WHERE centres.InsCod=%ld" " + "
" AND centres.CtrCod=deg_degrees.CtrCod" "(SELECT COUNT(*)"
" AND deg_degrees.DegCod=courses.DegCod" " FROM centres,"
" AND courses.CrsCod=msg_snt.CrsCod" "deg_degrees,"
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod" "crs_courses,"
" AND msg_rcv_deleted.Notified='Y')", "msg_snt,"
Gbl.Hierarchy.Ins.InsCod, "msg_rcv_deleted"
Gbl.Hierarchy.Ins.InsCod); " WHERE centres.InsCod=%ld"
break; " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=msg_snt.CrsCod"
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod"
" AND msg_rcv_deleted.Notified='Y')",
Gbl.Hierarchy.Ins.InsCod,
Gbl.Hierarchy.Ins.InsCod);
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number" DB_QueryCOUNT ("can not get number of received messages",
" of received messages", "SELECT "
"SELECT " "(SELECT COUNT(*)"
"(SELECT COUNT(*)" " FROM deg_degrees,"
" FROM deg_degrees,courses,msg_snt,msg_rcv" "crs_courses,"
" WHERE deg_degrees.CtrCod=%ld" "msg_snt,"
" AND deg_degrees.DegCod=courses.DegCod" "msg_rcv"
" AND courses.CrsCod=msg_snt.CrsCod" " WHERE deg_degrees.CtrCod=%ld"
" AND msg_snt.MsgCod=msg_rcv.MsgCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND msg_rcv.Notified='Y')" " AND crs_courses.CrsCod=msg_snt.CrsCod"
" + " " AND msg_snt.MsgCod=msg_rcv.MsgCod"
"(SELECT COUNT(*)" " AND msg_rcv.Notified='Y')"
" FROM deg_degrees,courses,msg_snt,msg_rcv_deleted" " + "
" WHERE deg_degrees.CtrCod=%ld" "(SELECT COUNT(*)"
" AND deg_degrees.DegCod=courses.DegCod" " FROM deg_degrees,"
" AND courses.CrsCod=msg_snt.CrsCod" "crs_courses,"
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod" "msg_snt,"
" AND msg_rcv_deleted.Notified='Y')", "msg_rcv_deleted"
Gbl.Hierarchy.Ctr.CtrCod, " WHERE deg_degrees.CtrCod=%ld"
Gbl.Hierarchy.Ctr.CtrCod); " AND deg_degrees.DegCod=crs_courses.DegCod"
break; " AND crs_courses.CrsCod=msg_snt.CrsCod"
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod"
" AND msg_rcv_deleted.Notified='Y')",
Gbl.Hierarchy.Ctr.CtrCod,
Gbl.Hierarchy.Ctr.CtrCod);
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number" DB_QueryCOUNT ("can not get number of received messages",
" of received messages", "SELECT "
"SELECT " "(SELECT COUNT(*)"
"(SELECT COUNT(*)" " FROM crs_courses,"
" FROM courses,msg_snt,msg_rcv" "msg_snt,"
" WHERE courses.DegCod=%ld" "msg_rcv"
" AND courses.CrsCod=msg_snt.CrsCod" " WHERE crs_courses.DegCod=%ld"
" AND msg_snt.MsgCod=msg_rcv.MsgCod" " AND crs_courses.CrsCod=msg_snt.CrsCod"
" AND msg_rcv.Notified='Y')" " AND msg_snt.MsgCod=msg_rcv.MsgCod"
" + " " AND msg_rcv.Notified='Y')"
"(SELECT COUNT(*)" " + "
" FROM courses,msg_snt,msg_rcv_deleted" "(SELECT COUNT(*)"
" WHERE courses.DegCod=%ld" " FROM crs_courses,"
" AND courses.CrsCod=msg_snt.CrsCod" "msg_snt,"
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod" "msg_rcv_deleted"
" AND msg_rcv_deleted.Notified='Y')", " WHERE crs_courses.DegCod=%ld"
Gbl.Hierarchy.Deg.DegCod, " AND crs_courses.CrsCod=msg_snt.CrsCod"
Gbl.Hierarchy.Deg.DegCod); " AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod"
break; " AND msg_rcv_deleted.Notified='Y')",
Gbl.Hierarchy.Deg.DegCod,
Gbl.Hierarchy.Deg.DegCod);
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
NumMsgs = return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number" DB_QueryCOUNT ("can not get number of received messages",
" of received messages", "SELECT "
"SELECT " "(SELECT COUNT(*)"
"(SELECT COUNT(*)" " FROM msg_snt,"
" FROM msg_snt,msg_rcv" "msg_rcv"
" WHERE msg_snt.CrsCod=%ld" " WHERE msg_snt.CrsCod=%ld"
" AND msg_snt.MsgCod=msg_rcv.MsgCod" " AND msg_snt.MsgCod=msg_rcv.MsgCod"
" AND msg_rcv.Notified='Y')" " AND msg_rcv.Notified='Y')"
" + " " + "
"(SELECT COUNT(*)" "(SELECT COUNT(*)"
" FROM msg_snt,msg_rcv_deleted" " FROM msg_snt,"
" WHERE msg_snt.CrsCod=%ld" "msg_rcv_deleted"
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod" " WHERE msg_snt.CrsCod=%ld"
" AND msg_rcv_deleted.Notified='Y')", " AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod"
Gbl.Hierarchy.Crs.CrsCod, " AND msg_rcv_deleted.Notified='Y')",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod,
break; Gbl.Hierarchy.Crs.CrsCod);
case Hie_Lvl_UNK:
default: default:
Lay_WrongScopeExit (); return 0;
break;
} }
break; return 0;
default:
return 0;
} }
return NumMsgs;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2744,25 +2765,30 @@ static void Msg_GetDistinctCoursesInMyMessages (struct Msg_Messages *Messages)
switch (Messages->TypeOfMessages) switch (Messages->TypeOfMessages)
{ {
case Msg_RECEIVED: case Msg_RECEIVED:
NumRows = DB_QuerySELECT (&mysql_res,"can not get distinct courses" NumRows =
" in your messages","" DB_QuerySELECT (&mysql_res,"can not get distinct courses in your messages",
"SELECT DISTINCT courses.CrsCod,courses.ShortName" "SELECT DISTINCT crs_courses.CrsCod,"
" FROM msg_rcv,msg_snt,courses" "crs_courses.ShortName"
" WHERE msg_rcv.UsrCod=%ld" " FROM msg_rcv,"
" AND msg_rcv.MsgCod=msg_snt.MsgCod" "msg_snt,"
" AND msg_snt.CrsCod=courses.CrsCod" "crs_courses"
" ORDER BY courses.ShortName", " WHERE msg_rcv.UsrCod=%ld"
Gbl.Usrs.Me.UsrDat.UsrCod); " AND msg_rcv.MsgCod=msg_snt.MsgCod"
" AND msg_snt.CrsCod=crs_courses.CrsCod"
" ORDER BY crs_courses.ShortName",
Gbl.Usrs.Me.UsrDat.UsrCod);
break; break;
case Msg_SENT: case Msg_SENT:
NumRows = DB_QuerySELECT (&mysql_res,"can not get distinct courses" NumRows =
" in your messages", DB_QuerySELECT (&mysql_res,"can not get distinct courses in your messages",
"SELECT DISTINCT courses.CrsCod,courses.ShortName" "SELECT DISTINCT crs_courses.CrsCod,"
" FROM msg_snt,courses" "crs_courses.ShortName"
" WHERE msg_snt.UsrCod=%ld" " FROM msg_snt,"
" AND msg_snt.CrsCod=courses.CrsCod" "crs_courses"
" ORDER BY courses.ShortName", " WHERE msg_snt.UsrCod=%ld"
Gbl.Usrs.Me.UsrDat.UsrCod); " AND msg_snt.CrsCod=crs_courses.CrsCod"
" ORDER BY crs_courses.ShortName",
Gbl.Usrs.Me.UsrDat.UsrCod);
break; break;
default: // Not aplicable here default: // Not aplicable here
break; break;

View File

@ -454,88 +454,104 @@ void Net_ShowWebAndSocialNetworksStats (void)
switch (Gbl.Scope.Current) switch (Gbl.Scope.Current)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
NumRows = NumRows = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get number of users" DB_QuerySELECT (&mysql_res,"can not get number of users"
" with webs / social networks", " with webs / social networks",
"SELECT Web,COUNT(*) AS N" "SELECT Web,"
" FROM usr_webs" "COUNT(*) AS N"
" GROUP BY Web" " FROM usr_webs"
" ORDER BY N DESC,Web"); " GROUP BY Web"
" ORDER BY N DESC,Web");
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
NumRows = NumRows = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get number of users" DB_QuerySELECT (&mysql_res,"can not get number of users"
" with webs / social networks", " with webs / social networks",
"SELECT usr_webs.Web," "SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N" "COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM institutions,centres,deg_degrees,courses,crs_usr,usr_webs" " FROM institutions,"
" WHERE institutions.CtyCod=%ld" "centres,"
" AND institutions.InsCod=centres.InsCod" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_usr,"
" AND courses.CrsCod=crs_usr.CrsCod" "usr_webs"
" AND crs_usr.UsrCod=usr_webs.UsrCod" " WHERE institutions.CtyCod=%ld"
" GROUP BY usr_webs.Web" " AND institutions.InsCod=centres.InsCod"
" ORDER BY N DESC,usr_webs.Web", " AND centres.CtrCod=deg_degrees.CtrCod"
Gbl.Hierarchy.Cty.CtyCod); " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.Hierarchy.Cty.CtyCod);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
NumRows = NumRows = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get number of users" DB_QuerySELECT (&mysql_res,"can not get number of users"
" with webs / social networks", " with webs / social networks",
"SELECT usr_webs.Web," "SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N" "COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM centres,deg_degrees,courses,crs_usr,usr_webs" " FROM centres,"
" WHERE centres.InsCod=%ld" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_usr,"
" AND courses.CrsCod=crs_usr.CrsCod" "usr_webs"
" AND crs_usr.UsrCod=usr_webs.UsrCod" " WHERE centres.InsCod=%ld"
" GROUP BY usr_webs.Web" " AND centres.CtrCod=deg_degrees.CtrCod"
" ORDER BY N DESC,usr_webs.Web", " AND deg_degrees.DegCod=crs_courses.DegCod"
Gbl.Hierarchy.Ins.InsCod); " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
NumRows = NumRows = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get number of users" DB_QuerySELECT (&mysql_res,"can not get number of users"
" with webs / social networks", " with webs / social networks",
"SELECT usr_webs.Web," "SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N" "COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM deg_degrees,courses,crs_usr,usr_webs" " FROM deg_degrees,"
" WHERE deg_degrees.CtrCod=%ld" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_usr,"
" AND courses.CrsCod=crs_usr.CrsCod" "usr_webs"
" AND crs_usr.UsrCod=usr_webs.UsrCod" " WHERE deg_degrees.CtrCod=%ld"
" GROUP BY usr_webs.Web" " AND deg_degrees.DegCod=crs_courses.DegCod"
" ORDER BY N DESC,usr_webs.Web", " AND crs_courses.CrsCod=crs_usr.CrsCod"
Gbl.Hierarchy.Ctr.CtrCod); " AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
NumRows = NumRows = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get number of users" DB_QuerySELECT (&mysql_res,"can not get number of users"
" with webs / social networks", " with webs / social networks",
"SELECT usr_webs.Web," "SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N" "COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM courses,crs_usr,usr_webs" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "crs_usr,"
" AND courses.CrsCod=crs_usr.CrsCod" "usr_webs"
" AND crs_usr.UsrCod=usr_webs.UsrCod" " WHERE crs_courses.DegCod=%ld"
" GROUP BY usr_webs.Web" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" ORDER BY N DESC,usr_webs.Web", " AND crs_usr.UsrCod=usr_webs.UsrCod"
Gbl.Hierarchy.Deg.DegCod); " GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
NumRows = NumRows = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get number of users" DB_QuerySELECT (&mysql_res,"can not get number of users"
" with webs / social networks", " with webs / social networks",
"SELECT usr_webs.Web," "SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N" "COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM crs_usr,usr_webs" " FROM crs_usr,"
" WHERE crs_usr.CrsCod=%ld" "usr_webs"
" AND crs_usr.UsrCod=usr_webs.UsrCod" " WHERE crs_usr.CrsCod=%ld"
" GROUP BY usr_webs.Web" " AND crs_usr.UsrCod=usr_webs.UsrCod"
" ORDER BY N DESC,usr_webs.Web", " GROUP BY usr_webs.Web"
Gbl.Hierarchy.Crs.CrsCod); " ORDER BY N DESC,usr_webs.Web",
Gbl.Hierarchy.Crs.CrsCod);
break; break;
default: default:
Lay_WrongScopeExit (); Lay_WrongScopeExit ();

View File

@ -822,60 +822,76 @@ unsigned Not_GetNumNotices (Hie_Lvl_Level_t Scope,Not_Status_t Status,unsigned *
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
DB_QuerySELECT (&mysql_res,"can not get number of notices", DB_QuerySELECT (&mysql_res,"can not get number of notices",
"SELECT COUNT(*),SUM(NumNotif)" "SELECT COUNT(*),"
"SUM(NumNotif)"
" FROM notices" " FROM notices"
" WHERE Status=%u", " WHERE Status=%u",
Status); Status);
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of notices", DB_QuerySELECT (&mysql_res,"can not get number of notices",
"SELECT COUNT(*),SUM(notices.NumNotif)" "SELECT COUNT(*),"
" FROM institutions,centres,deg_degrees,courses,notices" "SUM(notices.NumNotif)"
" FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"notices"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=notices.CrsCod" " AND crs_courses.CrsCod=notices.CrsCod"
" AND notices.Status=%u", " AND notices.Status=%u",
Gbl.Hierarchy.Cty.CtyCod, Gbl.Hierarchy.Cty.CtyCod,
Status); Status);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of notices", DB_QuerySELECT (&mysql_res,"can not get number of notices",
"SELECT COUNT(*),SUM(notices.NumNotif)" "SELECT COUNT(*),"
" FROM centres,deg_degrees,courses,notices" "SUM(notices.NumNotif)"
" FROM centres,"
"deg_degrees,"
"crs_courses,"
"notices"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=notices.CrsCod" " AND crs_courses.CrsCod=notices.CrsCod"
" AND notices.Status=%u", " AND notices.Status=%u",
Gbl.Hierarchy.Ins.InsCod, Gbl.Hierarchy.Ins.InsCod,
Status); Status);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of notices", DB_QuerySELECT (&mysql_res,"can not get number of notices",
"SELECT COUNT(*),SUM(notices.NumNotif)" "SELECT COUNT(*),"
" FROM deg_degrees,courses,notices" "SUM(notices.NumNotif)"
" FROM deg_degrees,"
"crs_courses,"
"notices"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=notices.CrsCod" " AND crs_courses.CrsCod=notices.CrsCod"
" AND notices.Status=%u", " AND notices.Status=%u",
Gbl.Hierarchy.Ctr.CtrCod, Gbl.Hierarchy.Ctr.CtrCod,
Status); Status);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of notices", DB_QuerySELECT (&mysql_res,"can not get number of notices",
"SELECT COUNT(*),SUM(notices.NumNotif)" "SELECT COUNT(*),"
" FROM courses,notices" "SUM(notices.NumNotif)"
" WHERE courses.DegCod=%ld" " FROM crs_courses,"
" AND courses.CrsCod=notices.CrsCod" "notices"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=notices.CrsCod"
" AND notices.Status=%u", " AND notices.Status=%u",
Gbl.Hierarchy.Deg.DegCod, Gbl.Hierarchy.Deg.DegCod,
Status); Status);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
DB_QuerySELECT (&mysql_res,"can not get number of notices", DB_QuerySELECT (&mysql_res,"can not get number of notices",
"SELECT COUNT(*),SUM(NumNotif)" "SELECT COUNT(*),"
"SUM(NumNotif)"
" FROM notices" " FROM notices"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" AND Status=%u", " AND Status=%u",
@ -924,50 +940,66 @@ unsigned Not_GetNumNoticesDeleted (Hie_Lvl_Level_t Scope,unsigned *NumNotif)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
DB_QuerySELECT (&mysql_res,"can not get number of deleted notices", DB_QuerySELECT (&mysql_res,"can not get number of deleted notices",
"SELECT COUNT(*),SUM(NumNotif)" "SELECT COUNT(*),"
"SUM(NumNotif)"
" FROM notices_deleted"); " FROM notices_deleted");
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of deleted notices", DB_QuerySELECT (&mysql_res,"can not get number of deleted notices",
"SELECT COUNT(*),SUM(notices_deleted.NumNotif)" "SELECT COUNT(*),"
" FROM institutions,centres,deg_degrees,courses,notices_deleted" "SUM(notices_deleted.NumNotif)"
" FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"notices_deleted"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=notices_deleted.CrsCod", " AND crs_courses.CrsCod=notices_deleted.CrsCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of deleted notices", DB_QuerySELECT (&mysql_res,"can not get number of deleted notices",
"SELECT COUNT(*),SUM(notices_deleted.NumNotif)" "SELECT COUNT(*),"
" FROM centres,deg_degrees,courses,notices_deleted" "SUM(notices_deleted.NumNotif)"
" FROM centres,"
"deg_degrees,"
"crs_courses,"
"notices_deleted"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=notices_deleted.CrsCod", " AND crs_courses.CrsCod=notices_deleted.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of deleted notices", DB_QuerySELECT (&mysql_res,"can not get number of deleted notices",
"SELECT COUNT(*),SUM(notices_deleted.NumNotif)" "SELECT COUNT(*),"
" FROM deg_degrees,courses,notices_deleted" "SUM(notices_deleted.NumNotif)"
" FROM deg_degrees,"
"crs_courses,"
"notices_deleted"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=notices_deleted.CrsCod", " AND crs_courses.CrsCod=notices_deleted.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of deleted notices", DB_QuerySELECT (&mysql_res,"can not get number of deleted notices",
"SELECT COUNT(*),SUM(notices_deleted.NumNotif)" "SELECT COUNT(*),"
" FROM courses,notices_deleted" "SUM(notices_deleted.NumNotif)"
" WHERE courses.DegCod=%ld" " FROM crs_courses,"
" AND courses.CrsCod=notices_deleted.CrsCod", "notices_deleted"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=notices_deleted.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
DB_QuerySELECT (&mysql_res,"can not get number of deleted notices", DB_QuerySELECT (&mysql_res,"can not get number of deleted notices",
"SELECT COUNT(*),SUM(NumNotif)" "SELECT COUNT(*),"
"SUM(NumNotif)"
" FROM notices_deleted" " FROM notices_deleted"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);

View File

@ -1425,16 +1425,19 @@ static long Pho_GetDegWithAvgPhotoLeastRecentlyUpdated (void)
/***** 1. If a degree is not in table of computed degrees, /***** 1. If a degree is not in table of computed degrees,
choose it as least recently updated *****/ choose it as least recently updated *****/
/* Get one degree with students not yet computed */ /* Get one degree with students not yet computed */
NumRows = DB_QuerySELECT (&mysql_res,"can not get degrees", NumRows =
"SELECT DISTINCT deg_degrees.DegCod" DB_QuerySELECT (&mysql_res,"can not get degrees",
" FROM deg_degrees,courses,crs_usr" "SELECT DISTINCT deg_degrees.DegCod"
" WHERE deg_degrees.DegCod=courses.DegCod" " FROM deg_degrees,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_courses,"
" AND crs_usr.Role=%u" "crs_usr"
" AND deg_degrees.DegCod NOT IN" " WHERE deg_degrees.DegCod=crs_courses.DegCod"
" (SELECT DISTINCT DegCod FROM sta_degrees)" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" LIMIT 1", " AND crs_usr.Role=%u"
(unsigned) Rol_STD); " AND deg_degrees.DegCod NOT IN"
" (SELECT DISTINCT DegCod FROM sta_degrees)"
" LIMIT 1",
(unsigned) Rol_STD);
/* If number of rows is 1, then get the degree code */ /* If number of rows is 1, then get the degree code */
if (NumRows == 1) if (NumRows == 1)
@ -1454,17 +1457,19 @@ static long Pho_GetDegWithAvgPhotoLeastRecentlyUpdated (void)
/***** 2. If all the degrees are in table, /***** 2. If all the degrees are in table,
choose the least recently updated that has students *****/ choose the least recently updated that has students *****/
/* Get degrees from database */ /* Get degrees from database */
NumRows = DB_QuerySELECT (&mysql_res,"can not get degrees", NumRows =
"SELECT sta_degrees.DegCod" DB_QuerySELECT (&mysql_res,"can not get degrees",
" FROM sta_degrees,courses,crs_usr" "SELECT sta_degrees.DegCod"
" WHERE sta_degrees.TimeAvgPhoto<" " FROM sta_degrees,"
"FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)" "crs_courses,"
" AND sta_degrees.DegCod=courses.DegCod" "crs_usr"
" AND courses.CrsCod=crs_usr.CrsCod" " WHERE sta_degrees.TimeAvgPhoto<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)"
" AND crs_usr.Role=%u" " AND sta_degrees.DegCod=crs_courses.DegCod"
" ORDER BY sta_degrees.TimeAvgPhoto LIMIT 1", " AND crs_courses.CrsCod=crs_usr.CrsCod"
Cfg_MIN_TIME_TO_RECOMPUTE_AVG_PHOTO, " AND crs_usr.Role=%u"
(unsigned) Rol_STD); " ORDER BY sta_degrees.TimeAvgPhoto LIMIT 1",
Cfg_MIN_TIME_TO_RECOMPUTE_AVG_PHOTO,
(unsigned) Rol_STD);
/* If number of rows is 1, then get the degree code */ /* If number of rows is 1, then get the degree code */
if (NumRows == 1) if (NumRows == 1)

View File

@ -1421,95 +1421,133 @@ static void Prf_GetAndShowRankingFigure (const char *FieldName)
switch (Gbl.Scope.Current) switch (Gbl.Scope.Current)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT UsrCod,%s" "SELECT UsrCod,"
" FROM usr_figures" "%s"
" WHERE %s>0" " FROM usr_figures"
" AND UsrCod NOT IN (SELECT UsrCod FROM usr_banned)" " WHERE %s>0"
" ORDER BY %s DESC,UsrCod LIMIT 100", " AND UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
FieldName, " ORDER BY %s DESC,"
FieldName,FieldName); "UsrCod"
" LIMIT 100",
FieldName,
FieldName,FieldName);
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.%s" "SELECT DISTINCTROW "
" FROM institutions,centres,deg_degrees,courses,crs_usr,usr_figures" "usr_figures.UsrCod,"
" WHERE institutions.CtyCod=%ld" "usr_figures.%s"
" AND institutions.InsCod=centres.InsCod" " FROM institutions,"
" AND centres.CtrCod=deg_degrees.CtrCod" "centres,"
" AND deg_degrees.DegCod=courses.DegCod" "deg_degrees,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_courses,"
" AND crs_usr.UsrCod=usr_figures.UsrCod" "crs_usr,"
" AND usr_figures.%s>0" "usr_figures"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)" " WHERE institutions.CtyCod=%ld"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100", " AND institutions.InsCod=centres.InsCod"
FieldName, " AND centres.CtrCod=deg_degrees.CtrCod"
Gbl.Hierarchy.Cty.CtyCod, " AND deg_degrees.DegCod=crs_courses.DegCod"
FieldName,FieldName); " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.%s>0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,"
"usr_figures.UsrCod"
" LIMIT 100",
FieldName,
Gbl.Hierarchy.Cty.CtyCod,
FieldName,FieldName);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.%s" "SELECT DISTINCTROW "
" FROM centres,deg_degrees,courses,crs_usr,usr_figures" "usr_figures.UsrCod,"
" WHERE centres.InsCod=%ld" "usr_figures.%s"
" AND centres.CtrCod=deg_degrees.CtrCod" " FROM centres,"
" AND deg_degrees.DegCod=courses.DegCod" "deg_degrees,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_courses,"
" AND crs_usr.UsrCod=usr_figures.UsrCod" "crs_usr,"
" AND usr_figures.%s>0" "usr_figures"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)" " WHERE centres.InsCod=%ld"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100", " AND centres.CtrCod=deg_degrees.CtrCod"
FieldName, " AND deg_degrees.DegCod=crs_courses.DegCod"
Gbl.Hierarchy.Ins.InsCod, " AND crs_courses.CrsCod=crs_usr.CrsCod"
FieldName,FieldName); " AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.%s>0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,"
"usr_figures.UsrCod"
" LIMIT 100",
FieldName,
Gbl.Hierarchy.Ins.InsCod,
FieldName,FieldName);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.%s" "SELECT DISTINCTROW "
" FROM deg_degrees,courses,crs_usr,usr_figures" "usr_figures.UsrCod,"
" WHERE deg_degrees.CtrCod=%ld" "usr_figures.%s"
" AND deg_degrees.DegCod=courses.DegCod" " FROM deg_degrees,"
" AND courses.CrsCod=crs_usr.CrsCod" "crs_courses,"
" AND crs_usr.UsrCod=usr_figures.UsrCod" "crs_usr,"
" AND usr_figures.%s>0" "usr_figures"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)" " WHERE deg_degrees.CtrCod=%ld"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100", " AND deg_degrees.DegCod=crs_courses.DegCod"
FieldName, " AND crs_courses.CrsCod=crs_usr.CrsCod"
Gbl.Hierarchy.Ctr.CtrCod, " AND crs_usr.UsrCod=usr_figures.UsrCod"
FieldName,FieldName); " AND usr_figures.%s>0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,"
"usr_figures.UsrCod"
" LIMIT 100",
FieldName,
Gbl.Hierarchy.Ctr.CtrCod,
FieldName,FieldName);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.%s" "SELECT DISTINCTROW "
" FROM courses,crs_usr,usr_figures" "usr_figures.UsrCod,"
" WHERE courses.DegCod=%ld" "usr_figures.%s"
" AND courses.CrsCod=crs_usr.CrsCod" " FROM crs_courses,"
" AND crs_usr.UsrCod=usr_figures.UsrCod" "crs_usr,"
" AND usr_figures.%s>0" "usr_figures"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)" " WHERE crs_courses.DegCod=%ld"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100", " AND crs_courses.CrsCod=crs_usr.CrsCod"
FieldName, " AND crs_usr.UsrCod=usr_figures.UsrCod"
Gbl.Hierarchy.Deg.DegCod, " AND usr_figures.%s>0"
FieldName,FieldName); " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY usr_figures.%s DESC,"
"usr_figures.UsrCod"
" LIMIT 100",
FieldName,
Gbl.Hierarchy.Deg.DegCod,
FieldName,FieldName);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT DISTINCTROW usr_figures.UsrCod,usr_figures.%s" "SELECT DISTINCTROW "
" FROM crs_usr,usr_figures" "usr_figures.UsrCod,"
" WHERE crs_usr.CrsCod=%ld" "usr_figures.%s"
" AND crs_usr.UsrCod=usr_figures.UsrCod" " FROM crs_usr,"
" AND usr_figures.%s>0" "usr_figures"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)" " WHERE crs_usr.CrsCod=%ld"
" ORDER BY usr_figures.%s DESC,usr_figures.UsrCod LIMIT 100", " AND crs_usr.UsrCod=usr_figures.UsrCod"
FieldName, " AND usr_figures.%s>0"
Gbl.Hierarchy.Crs.CrsCod, " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
FieldName,FieldName); " ORDER BY usr_figures.%s DESC,"
"usr_figures.UsrCod"
" LIMIT 100",
FieldName,
Gbl.Hierarchy.Crs.CrsCod,
FieldName,FieldName);
break; break;
default: default:
Lay_WrongScopeExit (); Lay_WrongScopeExit ();
@ -1600,117 +1638,132 @@ void Prf_GetAndShowRankingClicksPerDay (void)
switch (Gbl.Scope.Current) switch (Gbl.Scope.Current)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT UsrCod," "SELECT UsrCod,"
"NumClicks/(DATEDIFF(NOW()," "NumClicks/(DATEDIFF(NOW(),"
"FirstClickTime)+1) AS NumClicksPerDay" "FirstClickTime)+1) AS NumClicksPerDay"
" FROM usr_figures" " FROM usr_figures"
" WHERE NumClicks>0" " WHERE NumClicks>0"
" AND FirstClickTime>FROM_UNIXTIME(0)" " AND FirstClickTime>FROM_UNIXTIME(0)"
" AND UsrCod NOT IN (SELECT UsrCod FROM usr_banned)" " AND UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,UsrCod" " ORDER BY NumClicksPerDay DESC,UsrCod"
" LIMIT 100"); " LIMIT 100");
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT DISTINCTROW " "SELECT DISTINCTROW "
"usr_figures.UsrCod," "usr_figures.UsrCod,"
"usr_figures.NumClicks/(DATEDIFF(NOW()," "usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay" "usr_figures.FirstClickTime)+1) AS NumClicksPerDay"
" FROM institutions,centres,deg_degrees,courses,crs_usr,usr_figures" " FROM institutions,"
" WHERE institutions.CtyCod=%ld" "centres,"
" AND institutions.InsCod=centres.InsCod" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_usr,"
" AND courses.CrsCod=crs_usr.CrsCod" "usr_figures"
" AND crs_usr.UsrCod=usr_figures.UsrCod" " WHERE institutions.CtyCod=%ld"
" AND usr_figures.NumClicks>0" " AND institutions.InsCod=centres.InsCod"
" AND usr_figures.FirstClickTime>FROM_UNIXTIME(0)" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)" " AND deg_degrees.DegCod=crs_courses.DegCod"
" ORDER BY NumClicksPerDay DESC," " AND crs_courses.CrsCod=crs_usr.CrsCod"
"usr_figures.UsrCod" " AND crs_usr.UsrCod=usr_figures.UsrCod"
" LIMIT 100", " AND usr_figures.NumClicks>0"
Gbl.Hierarchy.Cty.CtyCod); " AND usr_figures.FirstClickTime>FROM_UNIXTIME(0)"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,"
"usr_figures.UsrCod"
" LIMIT 100",
Gbl.Hierarchy.Cty.CtyCod);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT DISTINCTROW " "SELECT DISTINCTROW "
"usr_figures.UsrCod," "usr_figures.UsrCod,"
"usr_figures.NumClicks/(DATEDIFF(NOW()," "usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay" "usr_figures.FirstClickTime)+1) AS NumClicksPerDay"
" FROM centres,deg_degrees,courses,crs_usr,usr_figures" " FROM centres,"
" WHERE centres.InsCod=%ld" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_usr,"
" AND courses.CrsCod=crs_usr.CrsCod" "usr_figures"
" AND crs_usr.UsrCod=usr_figures.UsrCod" " WHERE centres.InsCod=%ld"
" AND usr_figures.NumClicks>0" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND usr_figures.FirstClickTime>FROM_UNIXTIME(0)" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" ORDER BY NumClicksPerDay DESC," " AND crs_usr.UsrCod=usr_figures.UsrCod"
"usr_figures.UsrCod" " AND usr_figures.NumClicks>0"
" LIMIT 100", " AND usr_figures.FirstClickTime>FROM_UNIXTIME(0)"
Gbl.Hierarchy.Ins.InsCod); " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" ORDER BY NumClicksPerDay DESC,"
"usr_figures.UsrCod"
" LIMIT 100",
Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT DISTINCTROW " "SELECT DISTINCTROW "
"usr_figures.UsrCod," "usr_figures.UsrCod,"
"usr_figures.NumClicks/(DATEDIFF(NOW()," "usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay" "usr_figures.FirstClickTime)+1) AS NumClicksPerDay"
" FROM deg_degrees,courses,crs_usr,usr_figures" " FROM deg_degrees,"
" WHERE deg_degrees.CtrCod=%ld" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_usr,"
" AND courses.CrsCod=crs_usr.CrsCod" "usr_figures"
" AND crs_usr.UsrCod=usr_figures.UsrCod" " WHERE deg_degrees.CtrCod=%ld"
" AND usr_figures.NumClicks>0" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND usr_figures.FirstClickTime>FROM_UNIXTIME(0)" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)" " AND crs_usr.UsrCod=usr_figures.UsrCod"
" ORDER BY NumClicksPerDay DESC," " AND usr_figures.NumClicks>0"
"usr_figures.UsrCod" " AND usr_figures.FirstClickTime>FROM_UNIXTIME(0)"
" LIMIT 100", " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
Gbl.Hierarchy.Ctr.CtrCod); " ORDER BY NumClicksPerDay DESC,"
"usr_figures.UsrCod"
" LIMIT 100",
Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT DISTINCTROW " "SELECT DISTINCTROW "
"usr_figures.UsrCod," "usr_figures.UsrCod,"
"usr_figures.NumClicks/(DATEDIFF(NOW()," "usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay" "usr_figures.FirstClickTime)+1) AS NumClicksPerDay"
" FROM courses,crs_usr,usr_figures" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "crs_usr,"
" AND courses.CrsCod=crs_usr.CrsCod" "usr_figures"
" AND crs_usr.UsrCod=usr_figures.UsrCod" " WHERE crs_courses.DegCod=%ld"
" AND usr_figures.NumClicks>0" " AND crs_courses.CrsCod=crs_usr.CrsCod"
" AND usr_figures.FirstClickTime>FROM_UNIXTIME(0)" " AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)" " AND usr_figures.NumClicks>0"
" ORDER BY NumClicksPerDay DESC," " AND usr_figures.FirstClickTime>FROM_UNIXTIME(0)"
"usr_figures.UsrCod" " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
" LIMIT 100", " ORDER BY NumClicksPerDay DESC,"
Gbl.Hierarchy.Deg.DegCod); "usr_figures.UsrCod"
" LIMIT 100",
Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
NumUsrs = NumUsrs = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT DISTINCTROW " "SELECT DISTINCTROW "
"usr_figures.UsrCod," "usr_figures.UsrCod,"
"usr_figures.NumClicks/(DATEDIFF(NOW()," "usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay" "usr_figures.FirstClickTime)+1) AS NumClicksPerDay"
" FROM crs_usr,usr_figures" " FROM crs_usr,"
" WHERE crs_usr.CrsCod=%ld" "usr_figures"
" AND crs_usr.UsrCod=usr_figures.UsrCod" " WHERE crs_usr.CrsCod=%ld"
" AND usr_figures.NumClicks>0" " AND crs_usr.UsrCod=usr_figures.UsrCod"
" AND usr_figures.FirstClickTime>FROM_UNIXTIME(0)" " AND usr_figures.NumClicks>0"
" AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)" " AND usr_figures.FirstClickTime>FROM_UNIXTIME(0)"
" ORDER BY NumClicksPerDay DESC," " AND usr_figures.UsrCod NOT IN (SELECT UsrCod FROM usr_banned)"
"usr_figures.UsrCod" " ORDER BY NumClicksPerDay DESC,"
" LIMIT 100", "usr_figures.UsrCod"
Gbl.Hierarchy.Crs.CrsCod); " LIMIT 100",
Gbl.Hierarchy.Crs.CrsCod);
break; break;
default: default:
Lay_WrongScopeExit (); Lay_WrongScopeExit ();

View File

@ -2182,82 +2182,77 @@ void Prg_RemoveCrsItems (long CrsCod)
unsigned Prg_GetNumCoursesWithItems (Hie_Lvl_Level_t Scope) unsigned Prg_GetNumCoursesWithItems (Hie_Lvl_Level_t Scope)
{ {
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumCourses;
/***** Get number of courses with program items from database *****/ /***** Get number of courses with program items from database *****/
switch (Scope) switch (Scope)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
DB_QuerySELECT (&mysql_res,"can not get number of courses with program items", return (unsigned)
"SELECT COUNT(DISTINCT CrsCod)" DB_QueryCOUNT ("can not get number of courses with program items",
" FROM prg_items" "SELECT COUNT(DISTINCT CrsCod)"
" WHERE CrsCod>0"); " FROM prg_items"
break; " WHERE CrsCod>0");
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of courses with program items", return (unsigned)
DB_QueryCOUNT ("can not get number of courses with program items",
"SELECT COUNT(DISTINCT prg_items.CrsCod)" "SELECT COUNT(DISTINCT prg_items.CrsCod)"
" FROM institutions,centres,deg_degrees,courses,prg_items" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"prg_items"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.Status=0" " AND crs_courses.Status=0"
" AND courses.CrsCod=prg_items.CrsCod", " AND crs_courses.CrsCod=prg_items.CrsCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of courses with program items", return (unsigned)
DB_QueryCOUNT ("can not get number of courses with program items",
"SELECT COUNT(DISTINCT prg_items.CrsCod)" "SELECT COUNT(DISTINCT prg_items.CrsCod)"
" FROM centres,deg_degrees,courses,prg_items" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"prg_items"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.Status=0" " AND crs_courses.Status=0"
" AND courses.CrsCod=prg_items.CrsCod", " AND crs_courses.CrsCod=prg_items.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of courses with program items", return (unsigned)
DB_QueryCOUNT ("can not get number of courses with program items",
"SELECT COUNT(DISTINCT prg_items.CrsCod)" "SELECT COUNT(DISTINCT prg_items.CrsCod)"
" FROM deg_degrees,courses,prg_items" " FROM deg_degrees,"
"crs_courses,"
"prg_items"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.Status=0" " AND crs_courses.Status=0"
" AND courses.CrsCod=prg_items.CrsCod", " AND crs_courses.CrsCod=prg_items.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of courses with program items", return (unsigned)
DB_QueryCOUNT ("can not get number of courses with program items",
"SELECT COUNT(DISTINCT prg_items.CrsCod)" "SELECT COUNT(DISTINCT prg_items.CrsCod)"
" FROM courses,prg_items" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "prg_items"
" AND courses.Status=0" " WHERE crs_courses.DegCod=%ld"
" AND courses.CrsCod=prg_items.CrsCod", " AND crs_courses.Status=0"
" AND crs_courses.CrsCod=prg_items.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
DB_QuerySELECT (&mysql_res,"can not get number of courses with program items", return (unsigned)
DB_QueryCOUNT ("can not get number of courses with program items",
"SELECT COUNT(DISTINCT CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM prg_items" " FROM prg_items"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break;
default: default:
Lay_WrongScopeExit (); return 0;
break;
} }
/***** Get number of courses *****/
row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%u",&NumCourses) != 1)
Lay_ShowErrorAndExit ("Error when getting number of courses with program items.");
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
return NumCourses;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2267,76 +2262,77 @@ unsigned Prg_GetNumCoursesWithItems (Hie_Lvl_Level_t Scope)
unsigned Prg_GetNumItems (Hie_Lvl_Level_t Scope) unsigned Prg_GetNumItems (Hie_Lvl_Level_t Scope)
{ {
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumItems;
/***** Get number of program items from database *****/ /***** Get number of program items from database *****/
switch (Scope) switch (Scope)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
DB_QuerySELECT (&mysql_res,"can not get number of program items", return (unsigned)
DB_QueryCOUNT ("can not get number of program items",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM prg_items" " FROM prg_items"
" WHERE CrsCod>0"); " WHERE CrsCod>0");
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of program items", return (unsigned)
DB_QueryCOUNT ("can not get number of program items",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM institutions,centres,deg_degrees,courses,prg_items" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"prg_items"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=prg_items.CrsCod", " AND crs_courses.CrsCod=prg_items.CrsCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of program items", return (unsigned)
DB_QueryCOUNT ("can not get number of program items",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM centres,deg_degrees,courses,prg_items" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"prg_items"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=prg_items.CrsCod", " AND crs_courses.CrsCod=prg_items.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of program items", return (unsigned)
DB_QueryCOUNT ("can not get number of program items",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM deg_degrees,courses,prg_items" " FROM deg_degrees,"
"crs_courses,"
"prg_items"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=prg_items.CrsCod", " AND crs_courses.CrsCod=prg_items.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of program items", return (unsigned)
DB_QueryCOUNT ("can not get number of program items",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM courses,prg_items" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "prg_items"
" AND courses.CrsCod=prg_items.CrsCod", " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=prg_items.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
DB_QuerySELECT (&mysql_res,"can not get number of program items", return (unsigned)
DB_QueryCOUNT ("can not get number of program items",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM prg_items" " FROM prg_items"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break; break;
default: default:
Lay_WrongScopeExit (); return 0;
break;
} }
/***** Get number of program items *****/
row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%u",&NumItems) != 1)
Lay_ShowErrorAndExit ("Error when getting number of program items.");
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
return NumItems;
} }

View File

@ -4570,82 +4570,79 @@ void Prj_RemoveUsrFromProjects (long UsrCod)
unsigned Prj_GetNumCoursesWithProjects (Hie_Lvl_Level_t Scope) unsigned Prj_GetNumCoursesWithProjects (Hie_Lvl_Level_t Scope)
{ {
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumCourses;
/***** Get number of courses with projects from database *****/ /***** Get number of courses with projects from database *****/
switch (Scope) switch (Scope)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
DB_QuerySELECT (&mysql_res,"can not get number of courses with projects", return (unsigned)
"SELECT COUNT(DISTINCT CrsCod)" DB_QueryCOUNT ("can not get number of courses with projects",
" FROM projects" "SELECT COUNT(DISTINCT CrsCod)"
" WHERE CrsCod>0"); " FROM projects"
break; " WHERE CrsCod>0");
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of courses with projects", return (unsigned)
"SELECT COUNT(DISTINCT projects.CrsCod)" DB_QueryCOUNT ("can not get number of courses with projects",
" FROM institutions,centres,deg_degrees,courses,projects" "SELECT COUNT(DISTINCT projects.CrsCod)"
" WHERE institutions.CtyCod=%ld" " FROM institutions,"
" AND institutions.InsCod=centres.InsCod" "centres,"
" AND centres.CtrCod=deg_degrees.CtrCod" "deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_courses,"
" AND courses.Status=0" "projects"
" AND courses.CrsCod=projects.CrsCod", " WHERE institutions.CtyCod=%ld"
Gbl.Hierarchy.Cty.CtyCod); " AND institutions.InsCod=centres.InsCod"
break; " AND centres.CtrCod=deg_degrees.CtrCod"
case Hie_Lvl_INS: " AND deg_degrees.DegCod=crs_courses.DegCod"
DB_QuerySELECT (&mysql_res,"can not get number of courses with projects", " AND crs_courses.Status=0"
"SELECT COUNT(DISTINCT projects.CrsCod)" " AND crs_courses.CrsCod=projects.CrsCod",
" FROM centres,deg_degrees,courses,projects" Gbl.Hierarchy.Cty.CtyCod);
" WHERE centres.InsCod=%ld" case Hie_Lvl_INS:
" AND centres.CtrCod=deg_degrees.CtrCod" return (unsigned)
" AND deg_degrees.DegCod=courses.DegCod" DB_QueryCOUNT ("can not get number of courses with projects",
" AND courses.Status=0" "SELECT COUNT(DISTINCT projects.CrsCod)"
" AND courses.CrsCod=projects.CrsCod", " FROM centres,"
Gbl.Hierarchy.Ins.InsCod); "deg_degrees,"
break; "crs_courses,"
"projects"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0"
" AND crs_courses.CrsCod=projects.CrsCod",
Gbl.Hierarchy.Ins.InsCod);
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of courses with projects", return (unsigned)
"SELECT COUNT(DISTINCT projects.CrsCod)" DB_QueryCOUNT ("can not get number of courses with projects",
" FROM deg_degrees,courses,projects" "SELECT COUNT(DISTINCT projects.CrsCod)"
" WHERE deg_degrees.CtrCod=%ld" " FROM deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_courses,"
" AND courses.Status=0" "projects"
" AND courses.CrsCod=projects.CrsCod", " WHERE deg_degrees.CtrCod=%ld"
Gbl.Hierarchy.Ctr.CtrCod); " AND deg_degrees.DegCod=crs_courses.DegCod"
break; " AND crs_courses.Status=0"
" AND crs_courses.CrsCod=projects.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod);
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of courses with projects", return (unsigned)
"SELECT COUNT(DISTINCT projects.CrsCod)" DB_QueryCOUNT ("can not get number of courses with projects",
" FROM courses,projects" "SELECT COUNT(DISTINCT projects.CrsCod)"
" WHERE courses.DegCod=%ld" " FROM crs_courses,"
" AND courses.Status=0" "projects"
" AND courses.CrsCod=projects.CrsCod", " WHERE crs_courses.DegCod=%ld"
Gbl.Hierarchy.Deg.DegCod); " AND crs_courses.Status=0"
" AND crs_courses.CrsCod=projects.CrsCod",
Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
DB_QuerySELECT (&mysql_res,"can not get number of courses with projects", return (unsigned)
"SELECT COUNT(DISTINCT CrsCod)" DB_QueryCOUNT ("can not get number of courses with projects",
" FROM projects" "SELECT COUNT(DISTINCT CrsCod)"
" WHERE CrsCod=%ld", " FROM projects"
Gbl.Hierarchy.Crs.CrsCod); " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod);
break; break;
default: default:
Lay_WrongScopeExit (); return 0;
break;
} }
/***** Get number of courses *****/
row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%u",&NumCourses) != 1)
Lay_ShowErrorAndExit ("Error when getting number of courses with projects.");
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
return NumCourses;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -4655,76 +4652,77 @@ unsigned Prj_GetNumCoursesWithProjects (Hie_Lvl_Level_t Scope)
unsigned Prj_GetNumProjects (Hie_Lvl_Level_t Scope) unsigned Prj_GetNumProjects (Hie_Lvl_Level_t Scope)
{ {
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumProjects;
/***** Get number of projects from database *****/ /***** Get number of projects from database *****/
switch (Scope) switch (Scope)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
DB_QuerySELECT (&mysql_res,"can not get number of projects", return (unsigned)
"SELECT COUNT(*)" DB_QueryCOUNT ("can not get number of projects",
" FROM projects" "SELECT COUNT(*)"
" WHERE CrsCod>0"); " FROM projects"
" WHERE CrsCod>0");
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of projects", return (unsigned)
"SELECT COUNT(*)" DB_QueryCOUNT ("can not get number of projects",
" FROM institutions,centres,deg_degrees,courses,projects" "SELECT COUNT(*)"
" WHERE institutions.CtyCod=%ld" " FROM institutions,"
" AND institutions.InsCod=centres.InsCod" "centres,"
" AND centres.CtrCod=deg_degrees.CtrCod" "deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_courses,"
" AND courses.CrsCod=projects.CrsCod", "projects"
Gbl.Hierarchy.Cty.CtyCod); " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=projects.CrsCod",
Gbl.Hierarchy.Cty.CtyCod);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of projects", return (unsigned)
"SELECT COUNT(*)" DB_QueryCOUNT ("can not get number of projects",
" FROM centres,deg_degrees,courses,projects" "SELECT COUNT(*)"
" WHERE centres.InsCod=%ld" " FROM centres,"
" AND centres.CtrCod=deg_degrees.CtrCod" "deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_courses,"
" AND courses.CrsCod=projects.CrsCod", "projects"
Gbl.Hierarchy.Ins.InsCod); " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=projects.CrsCod",
Gbl.Hierarchy.Ins.InsCod);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of projects", return (unsigned)
"SELECT COUNT(*)" DB_QueryCOUNT ("can not get number of projects",
" FROM deg_degrees,courses,projects" "SELECT COUNT(*)"
" WHERE deg_degrees.CtrCod=%ld" " FROM deg_degrees,"
" AND deg_degrees.DegCod=courses.DegCod" "crs_courses,"
" AND courses.CrsCod=projects.CrsCod", "projects"
Gbl.Hierarchy.Ctr.CtrCod); " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=projects.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of projects", return (unsigned)
"SELECT COUNT(*)" DB_QueryCOUNT ("can not get number of projects",
" FROM courses,projects" "SELECT COUNT(*)"
" WHERE courses.DegCod=%ld" " FROM crs_courses,"
" AND courses.CrsCod=projects.CrsCod", "projects"
Gbl.Hierarchy.Deg.DegCod); " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=projects.CrsCod",
Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
DB_QuerySELECT (&mysql_res,"can not get number of projects", return (unsigned)
"SELECT COUNT(*)" DB_QueryCOUNT ("can not get number of projects",
" FROM projects" "SELECT COUNT(*)"
" WHERE CrsCod=%ld", " FROM projects"
Gbl.Hierarchy.Crs.CrsCod); " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod);
break; break;
default: default:
Lay_WrongScopeExit (); return 0;
break;
} }
/***** Get number of projects *****/
row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%u",&NumProjects) != 1)
Lay_ShowErrorAndExit ("Error when getting number of projects.");
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
return NumProjects;
} }

View File

@ -370,7 +370,7 @@ static void Sch_SearchInDB (void)
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
sprintf (RangeQuery," AND courses.CrsCod=%ld", sprintf (RangeQuery," AND crs_courses.CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break; break;
} }
@ -604,30 +604,34 @@ static unsigned Sch_SearchCoursesInDB (const char *RangeQuery)
/***** Check user's permission *****/ /***** Check user's permission *****/
if (Sch_CheckIfIHavePermissionToSearch (Sch_SEARCH_COURSES)) if (Sch_CheckIfIHavePermissionToSearch (Sch_SEARCH_COURSES))
/***** Split course string into words *****/ /***** Split course string into words *****/
if (Sch_BuildSearchQuery (SearchQuery,"courses.FullName",NULL,NULL)) if (Sch_BuildSearchQuery (SearchQuery,"crs_courses.FullName",NULL,NULL))
{ {
/***** Query database and list courses found *****/ /***** Query database and list courses found *****/
NumCrss = (unsigned) NumCrss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get courses", DB_QuerySELECT (&mysql_res,"can not get courses",
"SELECT deg_degrees.DegCod," // row[0] "SELECT deg_degrees.DegCod," // row[0]
"courses.CrsCod," // row[1] "crs_courses.CrsCod," // row[1]
"deg_degrees.ShortName," // row[2] "deg_degrees.ShortName," // row[2]
"deg_degrees.FullName," // row[3] "deg_degrees.FullName," // row[3]
"courses.Year," // row[4] "crs_courses.Year," // row[4]
"courses.FullName," // row[5] "crs_courses.FullName," // row[5]
"centres.ShortName" // row[6] "centres.ShortName" // row[6]
" FROM courses,deg_degrees,centres,institutions,countries" " FROM crs_courses,"
" WHERE %s" "deg_degrees,"
" AND courses.DegCod=deg_degrees.DegCod" "centres,"
" AND deg_degrees.CtrCod=centres.CtrCod" "institutions,"
" AND centres.InsCod=institutions.InsCod" "countries"
" AND institutions.CtyCod=countries.CtyCod" " WHERE %s"
"%s" " AND crs_courses.DegCod=deg_degrees.DegCod"
" ORDER BY courses.FullName," " AND deg_degrees.CtrCod=centres.CtrCod"
"institutions.FullName," " AND centres.InsCod=institutions.InsCod"
"degrees.FullName," " AND institutions.CtyCod=countries.CtyCod"
"courses.Year", "%s"
SearchQuery,RangeQuery); " ORDER BY crs_courses.FullName,"
"institutions.FullName,"
"degrees.FullName,"
"crs_courses.Year",
SearchQuery,RangeQuery);
Crs_ListCrssFound (&mysql_res,NumCrss); Crs_ListCrssFound (&mysql_res,NumCrss);
return NumCrss; return NumCrss;
} }
@ -683,108 +687,129 @@ static unsigned Sch_SearchOpenDocumentsInDB (const char *RangeQuery)
"_latin1 "," COLLATE latin1_general_ci")) "_latin1 "," COLLATE latin1_general_ci"))
{ {
/***** Query database *****/ /***** Query database *****/
NumDocs = DB_QuerySELECT (&mysql_res,"can not get files", NumDocs =
"SELECT * FROM " DB_QuerySELECT (&mysql_res,"can not get files",
"(" "SELECT * FROM "
"SELECT files.FilCod," // Institution "("
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot," "SELECT files.FilCod," // Institution
"institutions.InsCod," "SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
"institutions.ShortName AS InsShortName," "institutions.InsCod,"
"-1 AS CtrCod," "institutions.ShortName AS InsShortName,"
"'' AS CtrShortName," "-1 AS CtrCod,"
"-1 AS DegCod," "'' AS CtrShortName,"
"'' AS DegShortName," "-1 AS DegCod,"
"-1 AS CrsCod," "'' AS DegShortName,"
"'' AS CrsShortName," "-1 AS CrsCod,"
"-1 AS GrpCod" "'' AS CrsShortName,"
" FROM files,courses,deg_degrees,centres,institutions,countries" "-1 AS GrpCod"
" WHERE files.Public='Y' AND %s" " FROM files,"
" AND files.FileBrowser IN (%u,%u)" "crs_courses,"
" AND files.Cod=institutions.InsCod" "deg_degrees,"
" AND institutions.CtyCod=countries.CtyCod" "centres,"
"%s" "institutions,"
" UNION " "countries"
"SELECT files.FilCod," // Centre " WHERE files.Public='Y' AND %s"
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot," " AND files.FileBrowser IN (%u,%u)"
"institutions.InsCod," " AND files.Cod=institutions.InsCod"
"institutions.ShortName AS InsShortName," " AND institutions.CtyCod=countries.CtyCod"
"centres.CtrCod," "%s"
"centres.ShortName AS CtrShortName," " UNION "
"-1 AS DegCod," "SELECT files.FilCod," // Centre
"'' AS DegShortName," "SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
"-1 AS CrsCod," "institutions.InsCod,"
"'' AS CrsShortName," "institutions.ShortName AS InsShortName,"
"-1 AS GrpCod" "centres.CtrCod,"
" FROM files,courses,deg_degrees,centres,institutions,countries" "centres.ShortName AS CtrShortName,"
" WHERE files.Public='Y' AND %s" "-1 AS DegCod,"
" AND files.FileBrowser IN (%u,%u)" "'' AS DegShortName,"
" AND files.Cod=centres.CtrCod" "-1 AS CrsCod,"
" AND centres.InsCod=institutions.InsCod" "'' AS CrsShortName,"
" AND institutions.CtyCod=countries.CtyCod" "-1 AS GrpCod"
"%s" " FROM files,"
" UNION " "crs_courses,"
"SELECT files.FilCod," // Degree "deg_degrees,"
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot," "centres,"
"institutions.InsCod," "institutions,"
"institutions.ShortName AS InsShortName," "countries"
"centres.CtrCod," " WHERE files.Public='Y' AND %s"
"centres.ShortName AS CtrShortName," " AND files.FileBrowser IN (%u,%u)"
"deg_degrees.DegCod," " AND files.Cod=centres.CtrCod"
"deg_degrees.ShortName AS DegShortName," " AND centres.InsCod=institutions.InsCod"
"-1,'' AS CrsShortName," " AND institutions.CtyCod=countries.CtyCod"
"-1" "%s"
" FROM files,courses,deg_degrees,centres,institutions,countries" " UNION "
" WHERE files.Public='Y' AND %s" "SELECT files.FilCod," // Degree
" AND files.FileBrowser IN (%u,%u)" "SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
" AND files.Cod=deg_degrees.DegCod" "institutions.InsCod,"
" AND deg_degrees.CtrCod=centres.CtrCod" "institutions.ShortName AS InsShortName,"
" AND centres.InsCod=institutions.InsCod" "centres.CtrCod,"
" AND institutions.CtyCod=countries.CtyCod" "centres.ShortName AS CtrShortName,"
"%s" "deg_degrees.DegCod,"
" UNION " "deg_degrees.ShortName AS DegShortName,"
"SELECT files.FilCod," // Course "-1,'' AS CrsShortName,"
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot," "-1"
"institutions.InsCod," " FROM files,"
"institutions.ShortName AS InsShortName," "crs_courses,"
"centres.CtrCod," "deg_degrees,"
"centres.ShortName AS CtrShortName," "centres,"
"deg_degrees.DegCod," "institutions,"
"deg_degrees.ShortName AS DegShortName," "countries"
"courses.CrsCod," " WHERE files.Public='Y' AND %s"
"courses.ShortName AS CrsShortName," " AND files.FileBrowser IN (%u,%u)"
"-1" " AND files.Cod=deg_degrees.DegCod"
" FROM files,courses,deg_degrees,centres,institutions,countries" " AND deg_degrees.CtrCod=centres.CtrCod"
" WHERE files.Public='Y' AND %s" " AND centres.InsCod=institutions.InsCod"
" AND files.FileBrowser IN (%u,%u)" " AND institutions.CtyCod=countries.CtyCod"
" AND files.Cod=courses.CrsCod" "%s"
" AND courses.DegCod=deg_degrees.DegCod" " UNION "
" AND deg_degrees.CtrCod=centres.CtrCod" "SELECT files.FilCod," // Course
" AND centres.InsCod=institutions.InsCod" "SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
" AND institutions.CtyCod=countries.CtyCod" "institutions.InsCod,"
"%s" "institutions.ShortName AS InsShortName,"
") AS selected_files" "centres.CtrCod,"
" WHERE PathFromRoot<>''" "centres.ShortName AS CtrShortName,"
" ORDER BY InsShortName," "deg_degrees.DegCod,"
"CtrShortName," "deg_degrees.ShortName AS DegShortName,"
"DegShortName," "crs_courses.CrsCod,"
"CrsShortName," "crs_courses.ShortName AS CrsShortName,"
"PathFromRoot", "-1"
SearchQuery, " FROM files,"
(unsigned) Brw_ADMI_DOC_INS, "crs_courses,"
(unsigned) Brw_ADMI_SHR_INS, "deg_degrees,"
RangeQuery, "centres,"
SearchQuery, "institutions,"
(unsigned) Brw_ADMI_DOC_CTR, "countries"
(unsigned) Brw_ADMI_SHR_CTR, " WHERE files.Public='Y' AND %s"
RangeQuery, " AND files.FileBrowser IN (%u,%u)"
SearchQuery, " AND files.Cod=crs_courses.CrsCod"
(unsigned) Brw_ADMI_DOC_DEG, " AND crs_courses.DegCod=deg_degrees.DegCod"
(unsigned) Brw_ADMI_SHR_DEG, " AND deg_degrees.CtrCod=centres.CtrCod"
RangeQuery, " AND centres.InsCod=institutions.InsCod"
SearchQuery, " AND institutions.CtyCod=countries.CtyCod"
(unsigned) Brw_ADMI_DOC_CRS, "%s"
(unsigned) Brw_ADMI_SHR_CRS, ") AS selected_files"
RangeQuery); " WHERE PathFromRoot<>''"
" ORDER BY InsShortName,"
"CtrShortName,"
"DegShortName,"
"CrsShortName,"
"PathFromRoot",
SearchQuery,
(unsigned) Brw_ADMI_DOC_INS,
(unsigned) Brw_ADMI_SHR_INS,
RangeQuery,
SearchQuery,
(unsigned) Brw_ADMI_DOC_CTR,
(unsigned) Brw_ADMI_SHR_CTR,
RangeQuery,
SearchQuery,
(unsigned) Brw_ADMI_DOC_DEG,
(unsigned) Brw_ADMI_SHR_DEG,
RangeQuery,
SearchQuery,
(unsigned) Brw_ADMI_DOC_CRS,
(unsigned) Brw_ADMI_SHR_CRS,
RangeQuery);
/***** List documents found *****/ /***** List documents found *****/
Brw_ListDocsFound (&mysql_res,NumDocs, Brw_ListDocsFound (&mysql_res,NumDocs,
@ -849,71 +874,84 @@ static unsigned Sch_SearchDocumentsInMyCoursesInDB (const char *RangeQuery)
(unsigned) Brw_ADMI_MRK_GRP); (unsigned) Brw_ADMI_MRK_GRP);
/***** Build the query *****/ /***** Build the query *****/
NumDocs = DB_QuerySELECT (&mysql_res,"can not get files", NumDocs =
"SELECT * FROM " DB_QuerySELECT (&mysql_res,"can not get files",
"(" "SELECT * FROM "
"SELECT files.FilCod," "("
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot," "SELECT files.FilCod,"
"institutions.InsCod," "SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
"institutions.ShortName AS InsShortName," "institutions.InsCod,"
"centres.CtrCod," "institutions.ShortName AS InsShortName,"
"centres.ShortName AS CtrShortName," "centres.CtrCod,"
"deg_degrees.DegCod," "centres.ShortName AS CtrShortName,"
"deg_degrees.ShortName AS DegShortName," "deg_degrees.DegCod,"
"courses.CrsCod," "deg_degrees.ShortName AS DegShortName,"
"courses.ShortName AS CrsShortName," "crs_courses.CrsCod,"
"-1 AS GrpCod" "crs_courses.ShortName AS CrsShortName,"
" FROM files,courses,deg_degrees,centres,institutions,countries" "-1 AS GrpCod"
" WHERE files.FilCod IN (SELECT FilCod FROM my_files_crs) AND %s" " FROM files,"
" AND files.FileBrowser IN (%u,%u,%u,%u)" "crs_courses,"
" AND files.Cod=courses.CrsCod" "deg_degrees,"
" AND courses.DegCod=deg_degrees.DegCod" "centres,"
" AND deg_degrees.CtrCod=centres.CtrCod" "institutions,"
" AND centres.InsCod=institutions.InsCod" "countries"
" AND institutions.CtyCod=countries.CtyCod" " WHERE files.FilCod IN (SELECT FilCod FROM my_files_crs) AND %s"
"%s" " AND files.FileBrowser IN (%u,%u,%u,%u)"
" UNION " " AND files.Cod=crs_courses.CrsCod"
"SELECT files.FilCod," " AND crs_courses.DegCod=deg_degrees.DegCod"
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot," " AND deg_degrees.CtrCod=centres.CtrCod"
"institutions.InsCod," " AND centres.InsCod=institutions.InsCod"
"institutions.ShortName AS InsShortName," " AND institutions.CtyCod=countries.CtyCod"
"centres.CtrCod," "%s"
"centres.ShortName AS CtrShortName," " UNION "
"deg_degrees.DegCod," "SELECT files.FilCod,"
"deg_degrees.ShortName AS DegShortName," "SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
"courses.CrsCod," "institutions.InsCod,"
"courses.ShortName AS CrsShortName," "institutions.ShortName AS InsShortName,"
"crs_grp.GrpCod" "centres.CtrCod,"
" FROM files,crs_grp,crs_grp_types,courses,deg_degrees,centres,institutions,countries" "centres.ShortName AS CtrShortName,"
" WHERE files.FilCod IN (SELECT FilCod FROM my_files_grp) AND %s" "deg_degrees.DegCod,"
" AND files.FileBrowser IN (%u,%u,%u,%u)" "deg_degrees.ShortName AS DegShortName,"
" AND files.Cod=crs_grp.GrpCod" "crs_courses.CrsCod,"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" "crs_courses.ShortName AS CrsShortName,"
" AND crs_grp_types.CrsCod=courses.CrsCod" "crs_grp.GrpCod"
" AND courses.DegCod=deg_degrees.DegCod" " FROM files,"
" AND deg_degrees.CtrCod=centres.CtrCod" "crs_grp,"
" AND centres.InsCod=institutions.InsCod" "crs_grp_types,"
" AND institutions.CtyCod=countries.CtyCod" "crs_courses,"
"%s" "deg_degrees,"
") AS selected_files" "centres,"
" WHERE PathFromRoot<>''" "institutions,"
" ORDER BY InsShortName," "countries"
"CtrShortName," " WHERE files.FilCod IN (SELECT FilCod FROM my_files_grp) AND %s"
"DegShortName," " AND files.FileBrowser IN (%u,%u,%u,%u)"
"CrsShortName," " AND files.Cod=crs_grp.GrpCod"
"PathFromRoot", " AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
SearchQuery, " AND crs_grp_types.CrsCod=crs_courses.CrsCod"
(unsigned) Brw_ADMI_DOC_CRS, " AND crs_courses.DegCod=deg_degrees.DegCod"
(unsigned) Brw_ADMI_TCH_CRS, " AND deg_degrees.CtrCod=centres.CtrCod"
(unsigned) Brw_ADMI_SHR_CRS, " AND centres.InsCod=institutions.InsCod"
(unsigned) Brw_ADMI_MRK_CRS, " AND institutions.CtyCod=countries.CtyCod"
RangeQuery, "%s"
SearchQuery, ") AS selected_files"
(unsigned) Brw_ADMI_DOC_GRP, " WHERE PathFromRoot<>''"
(unsigned) Brw_ADMI_TCH_GRP, " ORDER BY InsShortName,"
(unsigned) Brw_ADMI_SHR_GRP, "CtrShortName,"
(unsigned) Brw_ADMI_MRK_GRP, "DegShortName,"
RangeQuery); "CrsShortName,"
"PathFromRoot",
SearchQuery,
(unsigned) Brw_ADMI_DOC_CRS,
(unsigned) Brw_ADMI_TCH_CRS,
(unsigned) Brw_ADMI_SHR_CRS,
(unsigned) Brw_ADMI_MRK_CRS,
RangeQuery,
SearchQuery,
(unsigned) Brw_ADMI_DOC_GRP,
(unsigned) Brw_ADMI_TCH_GRP,
(unsigned) Brw_ADMI_SHR_GRP,
(unsigned) Brw_ADMI_MRK_GRP,
RangeQuery);
/***** List documents found *****/ /***** List documents found *****/
Brw_ListDocsFound (&mysql_res,NumDocs, Brw_ListDocsFound (&mysql_res,NumDocs,
@ -949,153 +987,185 @@ static unsigned Sch_SearchMyDocumentsInDB (const char *RangeQuery)
"_latin1 "," COLLATE latin1_general_ci")) "_latin1 "," COLLATE latin1_general_ci"))
{ {
/***** Build the query *****/ /***** Build the query *****/
NumDocs = DB_QuerySELECT (&mysql_res,"can not get files", NumDocs =
"SELECT * FROM " DB_QuerySELECT (&mysql_res,"can not get files",
"(" "SELECT * FROM "
"SELECT files.FilCod," // Institution "("
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot," "SELECT files.FilCod," // Institution
"institutions.InsCod," "SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
"institutions.ShortName AS InsShortName," "institutions.InsCod,"
"-1 AS CtrCod," "institutions.ShortName AS InsShortName,"
"'' AS CtrShortName," "-1 AS CtrCod,"
"-1 AS DegCod," "'' AS CtrShortName,"
"'' AS DegShortName," "-1 AS DegCod,"
"-1 AS CrsCod," "'' AS DegShortName,"
"'' AS CrsShortName," "-1 AS CrsCod,"
"-1 AS GrpCod" "'' AS CrsShortName,"
" FROM files,courses,deg_degrees,centres,institutions,countries" "-1 AS GrpCod"
" WHERE files.PublisherUsrCod=%ld AND %s" " FROM files,"
" AND files.FileBrowser IN (%u,%u)" "crs_courses,"
" AND files.Cod=institutions.InsCod" "deg_degrees,"
" AND institutions.CtyCod=countries.CtyCod" "centres,"
"%s" "institutions,"
" UNION " "countries"
"SELECT files.FilCod," // Centre " WHERE files.PublisherUsrCod=%ld AND %s"
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot," " AND files.FileBrowser IN (%u,%u)"
"institutions.InsCod," " AND files.Cod=institutions.InsCod"
"institutions.ShortName AS InsShortName," " AND institutions.CtyCod=countries.CtyCod"
"centres.CtrCod," "%s"
"centres.ShortName AS CtrShortName," " UNION "
"-1 AS DegCod," "SELECT files.FilCod," // Centre
"'' AS DegShortName," "SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
"-1 AS CrsCod," "institutions.InsCod,"
"'' AS CrsShortName," "institutions.ShortName AS InsShortName,"
"-1 AS GrpCod" "centres.CtrCod,"
" FROM files,courses,deg_degrees,centres,institutions,countries" "centres.ShortName AS CtrShortName,"
" WHERE files.PublisherUsrCod=%ld AND %s" "-1 AS DegCod,"
" AND files.FileBrowser IN (%u,%u)" "'' AS DegShortName,"
" AND files.Cod=centres.CtrCod" "-1 AS CrsCod,"
" AND centres.InsCod=institutions.InsCod" "'' AS CrsShortName,"
" AND institutions.CtyCod=countries.CtyCod" "-1 AS GrpCod"
"%s" " FROM files,"
" UNION " "crs_courses,"
"SELECT files.FilCod," // Degree "deg_degrees,"
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot," "centres,"
"institutions.InsCod," "institutions,"
"institutions.ShortName AS InsShortName," "countries"
"centres.CtrCod," " WHERE files.PublisherUsrCod=%ld AND %s"
"centres.ShortName AS CtrShortName," " AND files.FileBrowser IN (%u,%u)"
"deg_degrees.DegCod," " AND files.Cod=centres.CtrCod"
"deg_degrees.ShortName AS DegShortName," " AND centres.InsCod=institutions.InsCod"
"-1 AS CrsCod," " AND institutions.CtyCod=countries.CtyCod"
"'' AS CrsShortName," "%s"
"-1 AS GrpCod" " UNION "
" FROM files,courses,deg_degrees,centres,institutions,countries" "SELECT files.FilCod," // Degree
" WHERE files.PublisherUsrCod=%ld AND %s" "SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
" AND files.FileBrowser IN (%u,%u)" "institutions.InsCod,"
" AND files.Cod=deg_degrees.DegCod" "institutions.ShortName AS InsShortName,"
" AND deg_degrees.CtrCod=centres.CtrCod" "centres.CtrCod,"
" AND centres.InsCod=institutions.InsCod" "centres.ShortName AS CtrShortName,"
" AND institutions.CtyCod=countries.CtyCod" "deg_degrees.DegCod,"
"%s" "deg_degrees.ShortName AS DegShortName,"
" UNION " "-1 AS CrsCod,"
"SELECT files.FilCod," // Course "'' AS CrsShortName,"
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot," "-1 AS GrpCod"
"institutions.InsCod," " FROM files,"
"institutions.ShortName AS InsShortName," "crs_courses,"
"centres.CtrCod," "deg_degrees,"
"centres.ShortName AS CtrShortName," "centres,"
"deg_degrees.DegCod," "institutions,"
"deg_degrees.ShortName AS DegShortName," "countries"
"courses.CrsCod," " WHERE files.PublisherUsrCod=%ld AND %s"
"courses.ShortName AS CrsShortName," " AND files.FileBrowser IN (%u,%u)"
"-1 AS GrpCod" " AND files.Cod=deg_degrees.DegCod"
" FROM files,courses,deg_degrees,centres,institutions,countries" " AND deg_degrees.CtrCod=centres.CtrCod"
" WHERE files.PublisherUsrCod=%ld AND %s" " AND centres.InsCod=institutions.InsCod"
" AND files.FileBrowser IN (%u,%u,%u,%u)" " AND institutions.CtyCod=countries.CtyCod"
" AND files.Cod=courses.CrsCod" "%s"
" AND courses.DegCod=deg_degrees.DegCod" " UNION "
" AND deg_degrees.CtrCod=centres.CtrCod" "SELECT files.FilCod," // Course
" AND centres.InsCod=institutions.InsCod" "SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
" AND institutions.CtyCod=countries.CtyCod" "institutions.InsCod,"
"%s" "institutions.ShortName AS InsShortName,"
" UNION " "centres.CtrCod,"
"SELECT files.FilCod," // Group "centres.ShortName AS CtrShortName,"
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot," "deg_degrees.DegCod,"
"institutions.InsCod," "deg_degrees.ShortName AS DegShortName,"
"institutions.ShortName AS InsShortName," "crs_courses.CrsCod,"
"centres.CtrCod," "crs_courses.ShortName AS CrsShortName,"
"centres.ShortName AS CtrShortName," "-1 AS GrpCod"
"deg_degrees.DegCod," " FROM files,"
"deg_degrees.ShortName AS DegShortName," "crs_courses,"
"courses.CrsCod," "deg_degrees,"
"courses.ShortName AS CrsShortName," "centres,"
"crs_grp.GrpCod" "institutions,"
" FROM files,crs_grp,crs_grp_types,courses,deg_degrees,centres,institutions,countries" "countries"
" WHERE files.PublisherUsrCod=%ld AND %s" " WHERE files.PublisherUsrCod=%ld AND %s"
" AND files.FileBrowser IN (%u,%u,%u,%u)" " AND files.FileBrowser IN (%u,%u,%u,%u)"
" AND files.Cod=crs_grp.GrpCod" " AND files.Cod=crs_courses.CrsCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod" " AND crs_courses.DegCod=deg_degrees.DegCod"
" AND crs_grp_types.CrsCod=courses.CrsCod" " AND deg_degrees.CtrCod=centres.CtrCod"
" AND courses.DegCod=deg_degrees.DegCod" " AND centres.InsCod=institutions.InsCod"
" AND deg_degrees.CtrCod=centres.CtrCod" " AND institutions.CtyCod=countries.CtyCod"
" AND centres.InsCod=institutions.InsCod" "%s"
" AND institutions.CtyCod=countries.CtyCod" " UNION "
"%s" "SELECT files.FilCod," // Group
" UNION " "SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
"SELECT files.FilCod," // Briefcase "institutions.InsCod,"
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot," "institutions.ShortName AS InsShortName,"
"-1 AS InsCod," "centres.CtrCod,"
"'' AS InsShortName," "centres.ShortName AS CtrShortName,"
"-1 AS CtrCod," "deg_degrees.DegCod,"
"'' AS CtrShortName," "deg_degrees.ShortName AS DegShortName,"
"-1 AS DegCod," "crs_courses.CrsCod,"
"'' AS DegShortName," "crs_courses.ShortName AS CrsShortName,"
"-1 AS CrsCod," "crs_grp.GrpCod"
"'' AS CrsShortName," " FROM files,"
"-1 AS GrpCod" "crs_grp,"
" FROM files" "crs_grp_types,"
" WHERE files.PublisherUsrCod=%ld AND %s" "crs_courses,"
" AND files.FileBrowser=%u" "deg_degrees,"
") AS selected_files" "centres,"
" WHERE PathFromRoot<>''" "institutions,"
" ORDER BY InsShortName,CtrShortName,DegShortName,CrsShortName,PathFromRoot", "countries"
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery, " WHERE files.PublisherUsrCod=%ld AND %s"
(unsigned) Brw_ADMI_DOC_INS, " AND files.FileBrowser IN (%u,%u,%u,%u)"
(unsigned) Brw_ADMI_SHR_INS, " AND files.Cod=crs_grp.GrpCod"
RangeQuery, " AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery, " AND crs_grp_types.CrsCod=crs_courses.CrsCod"
(unsigned) Brw_ADMI_DOC_CTR, " AND crs_courses.DegCod=deg_degrees.DegCod"
(unsigned) Brw_ADMI_SHR_CTR, " AND deg_degrees.CtrCod=centres.CtrCod"
RangeQuery, " AND centres.InsCod=institutions.InsCod"
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery, " AND institutions.CtyCod=countries.CtyCod"
(unsigned) Brw_ADMI_DOC_DEG, "%s"
(unsigned) Brw_ADMI_SHR_DEG, " UNION "
RangeQuery, "SELECT files.FilCod," // Briefcase
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery, "SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
(unsigned) Brw_ADMI_DOC_CRS, "-1 AS InsCod,"
(unsigned) Brw_ADMI_TCH_CRS, "'' AS InsShortName,"
(unsigned) Brw_ADMI_SHR_CRS, "-1 AS CtrCod,"
(unsigned) Brw_ADMI_MRK_CRS, "'' AS CtrShortName,"
RangeQuery, "-1 AS DegCod,"
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery, "'' AS DegShortName,"
(unsigned) Brw_ADMI_DOC_GRP, "-1 AS CrsCod,"
(unsigned) Brw_ADMI_TCH_GRP, "'' AS CrsShortName,"
(unsigned) Brw_ADMI_SHR_GRP, "-1 AS GrpCod"
(unsigned) Brw_ADMI_MRK_GRP, " FROM files"
RangeQuery, " WHERE files.PublisherUsrCod=%ld AND %s"
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery, " AND files.FileBrowser=%u"
(unsigned) Brw_ADMI_BRF_USR); ") AS selected_files"
" WHERE PathFromRoot<>''"
" ORDER BY InsShortName,"
"CtrShortName,"
"DegShortName,"
"CrsShortName,"
"PathFromRoot",
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
(unsigned) Brw_ADMI_DOC_INS,
(unsigned) Brw_ADMI_SHR_INS,
RangeQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
(unsigned) Brw_ADMI_DOC_CTR,
(unsigned) Brw_ADMI_SHR_CTR,
RangeQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
(unsigned) Brw_ADMI_DOC_DEG,
(unsigned) Brw_ADMI_SHR_DEG,
RangeQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
(unsigned) Brw_ADMI_DOC_CRS,
(unsigned) Brw_ADMI_TCH_CRS,
(unsigned) Brw_ADMI_SHR_CRS,
(unsigned) Brw_ADMI_MRK_CRS,
RangeQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
(unsigned) Brw_ADMI_DOC_GRP,
(unsigned) Brw_ADMI_TCH_GRP,
(unsigned) Brw_ADMI_SHR_GRP,
(unsigned) Brw_ADMI_MRK_GRP,
RangeQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
(unsigned) Brw_ADMI_BRF_USR);
/***** List documents found *****/ /***** List documents found *****/
Brw_ListDocsFound (&mysql_res,NumDocs, Brw_ListDocsFound (&mysql_res,NumDocs,

View File

@ -3877,94 +3877,83 @@ static unsigned Svy_GetNumUsrsWhoHaveAnsweredSvy (long SvyCod)
unsigned Svy_GetNumCoursesWithCrsSurveys (Hie_Lvl_Level_t Scope) unsigned Svy_GetNumCoursesWithCrsSurveys (Hie_Lvl_Level_t Scope)
{ {
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumCourses;
/***** Get number of courses with surveys from database *****/ /***** Get number of courses with surveys from database *****/
switch (Scope) switch (Scope)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with surveys", DB_QueryCOUNT ("can not get number of courses with surveys",
"SELECT COUNT(DISTINCT Cod)" "SELECT COUNT(DISTINCT Cod)"
" FROM svy_surveys" " FROM svy_surveys"
" WHERE Scope='%s'", " WHERE Scope='%s'",
Sco_GetDBStrFromScope (Hie_Lvl_CRS)); Sco_GetDBStrFromScope (Hie_Lvl_CRS));
break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with surveys", DB_QueryCOUNT ("can not get number of courses with surveys",
"SELECT COUNT(DISTINCT svy_surveys.Cod)" "SELECT COUNT(DISTINCT svy_surveys.Cod)"
" FROM institutions,centres,deg_degrees,courses,svy_surveys" " FROM institutions,"
" WHERE institutions.CtyCod=%ld" "centres,"
" AND institutions.InsCod=centres.InsCod" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "svy_surveys"
" AND courses.CrsCod=svy_surveys.Cod" " WHERE institutions.CtyCod=%ld"
" AND svy_surveys.Scope='%s'", " AND institutions.InsCod=centres.InsCod"
Gbl.Hierarchy.Ins.InsCod, " AND centres.CtrCod=deg_degrees.CtrCod"
Sco_GetDBStrFromScope (Hie_Lvl_CRS)); " AND deg_degrees.DegCod=crs_courses.DegCod"
break; " AND crs_courses.CrsCod=svy_surveys.Cod"
" AND svy_surveys.Scope='%s'",
Gbl.Hierarchy.Ins.InsCod,
Sco_GetDBStrFromScope (Hie_Lvl_CRS));
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with surveys", DB_QueryCOUNT ("can not get number of courses with surveys",
"SELECT COUNT(DISTINCT svy_surveys.Cod)" "SELECT COUNT(DISTINCT svy_surveys.Cod)"
" FROM centres,deg_degrees,courses,svy_surveys" " FROM centres,"
" WHERE centres.InsCod=%ld" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "svy_surveys"
" AND courses.CrsCod=svy_surveys.Cod" " WHERE centres.InsCod=%ld"
" AND svy_surveys.Scope='%s'", " AND centres.CtrCod=deg_degrees.CtrCod"
Gbl.Hierarchy.Ins.InsCod, " AND deg_degrees.DegCod=crs_courses.DegCod"
Sco_GetDBStrFromScope (Hie_Lvl_CRS)); " AND crs_courses.CrsCod=svy_surveys.Cod"
break; " AND svy_surveys.Scope='%s'",
Gbl.Hierarchy.Ins.InsCod,
Sco_GetDBStrFromScope (Hie_Lvl_CRS));
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with surveys", DB_QueryCOUNT ("can not get number of courses with surveys",
"SELECT COUNT(DISTINCT svy_surveys.Cod)" "SELECT COUNT(DISTINCT svy_surveys.Cod)"
" FROM deg_degrees,courses,svy_surveys" " FROM deg_degrees,"
" WHERE deg_degrees.CtrCod=%ld" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "svy_surveys"
" AND courses.CrsCod=svy_surveys.Cod" " WHERE deg_degrees.CtrCod=%ld"
" AND svy_surveys.Scope='%s'", " AND deg_degrees.DegCod=crs_courses.DegCod"
Gbl.Hierarchy.Ctr.CtrCod, " AND crs_courses.CrsCod=svy_surveys.Cod"
Sco_GetDBStrFromScope (Hie_Lvl_CRS)); " AND svy_surveys.Scope='%s'",
break; Gbl.Hierarchy.Ctr.CtrCod,
Sco_GetDBStrFromScope (Hie_Lvl_CRS));
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with surveys", DB_QueryCOUNT ("can not get number of courses with surveys",
"SELECT COUNT(DISTINCT svy_surveys.Cod)" "SELECT COUNT(DISTINCT svy_surveys.Cod)"
" FROM courses,svy_surveys" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "svy_surveys"
" AND courses.CrsCod=svy_surveys.Cod" " WHERE crs_courses.DegCod=%ld"
" AND svy_surveys.Scope='%s'", " AND crs_courses.CrsCod=svy_surveys.Cod"
Gbl.Hierarchy.Deg.DegCod, " AND svy_surveys.Scope='%s'",
Sco_GetDBStrFromScope (Hie_Lvl_CRS)); Gbl.Hierarchy.Deg.DegCod,
break; Sco_GetDBStrFromScope (Hie_Lvl_CRS));
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with surveys", DB_QueryCOUNT ("can not get number of courses with surveys",
"SELECT COUNT(DISTINCT Cod)" "SELECT COUNT(DISTINCT Cod)"
" FROM svy_surveys" " FROM svy_surveys"
" WHERE Scope='%s' AND Cod=%ld", " WHERE Scope='%s' AND Cod=%ld",
Sco_GetDBStrFromScope (Hie_Lvl_CRS), Sco_GetDBStrFromScope (Hie_Lvl_CRS),
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break;
default: default:
Lay_WrongScopeExit (); return 0;
break;
} }
/***** Get number of surveys *****/
row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%u",&NumCourses) != 1)
Lay_ShowErrorAndExit ("Error when getting number of courses with surveys.");
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
return NumCourses;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -3984,60 +3973,76 @@ unsigned Svy_GetNumCrsSurveys (Hie_Lvl_Level_t Scope,unsigned *NumNotif)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
DB_QuerySELECT (&mysql_res,"can not get number of surveys", DB_QuerySELECT (&mysql_res,"can not get number of surveys",
"SELECT COUNT(*),SUM(NumNotif)" "SELECT COUNT(*),"
"SUM(NumNotif)"
" FROM svy_surveys" " FROM svy_surveys"
" WHERE Scope='%s'", " WHERE Scope='%s'",
Sco_GetDBStrFromScope (Hie_Lvl_CRS)); Sco_GetDBStrFromScope (Hie_Lvl_CRS));
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of surveys", DB_QuerySELECT (&mysql_res,"can not get number of surveys",
"SELECT COUNT(*),SUM(svy_surveys.NumNotif)" "SELECT COUNT(*),"
" FROM institutions,centres,deg_degrees,courses,svy_surveys" "SUM(svy_surveys.NumNotif)"
" FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"svy_surveys"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=svy_surveys.Cod" " AND crs_courses.CrsCod=svy_surveys.Cod"
" AND svy_surveys.Scope='%s'", " AND svy_surveys.Scope='%s'",
Gbl.Hierarchy.Cty.CtyCod, Gbl.Hierarchy.Cty.CtyCod,
Sco_GetDBStrFromScope (Hie_Lvl_CRS)); Sco_GetDBStrFromScope (Hie_Lvl_CRS));
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of surveys", DB_QuerySELECT (&mysql_res,"can not get number of surveys",
"SELECT COUNT(*),SUM(svy_surveys.NumNotif)" "SELECT COUNT(*),"
" FROM centres,deg_degrees,courses,svy_surveys" "SUM(svy_surveys.NumNotif)"
" FROM centres,"
"deg_degrees,"
"crs_courses,"
"svy_surveys"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=svy_surveys.Cod" " AND crs_courses.CrsCod=svy_surveys.Cod"
" AND svy_surveys.Scope='%s'", " AND svy_surveys.Scope='%s'",
Gbl.Hierarchy.Ins.InsCod, Gbl.Hierarchy.Ins.InsCod,
Sco_GetDBStrFromScope (Hie_Lvl_CRS)); Sco_GetDBStrFromScope (Hie_Lvl_CRS));
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of surveys", DB_QuerySELECT (&mysql_res,"can not get number of surveys",
"SELECT COUNT(*),SUM(svy_surveys.NumNotif)" "SELECT COUNT(*),"
" FROM deg_degrees,courses,svy_surveys" "SUM(svy_surveys.NumNotif)"
" FROM deg_degrees,"
"crs_courses,"
"svy_surveys"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=svy_surveys.Cod" " AND crs_courses.CrsCod=svy_surveys.Cod"
" AND svy_surveys.Scope='%s'", " AND svy_surveys.Scope='%s'",
Gbl.Hierarchy.Ctr.CtrCod, Gbl.Hierarchy.Ctr.CtrCod,
Sco_GetDBStrFromScope (Hie_Lvl_CRS)); Sco_GetDBStrFromScope (Hie_Lvl_CRS));
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of surveys", DB_QuerySELECT (&mysql_res,"can not get number of surveys",
"SELECT COUNT(*),SUM(svy_surveys.NumNotif)" "SELECT COUNT(*),"
" FROM courses,svy_surveys" "SUM(svy_surveys.NumNotif)"
" WHERE courses.DegCod=%ld" " FROM crs_courses,"
" AND courses.CrsCod=svy_surveys.Cod" "svy_surveys"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=svy_surveys.Cod"
" AND svy_surveys.Scope='%s'", " AND svy_surveys.Scope='%s'",
Gbl.Hierarchy.Deg.DegCod, Gbl.Hierarchy.Deg.DegCod,
Sco_GetDBStrFromScope (Hie_Lvl_CRS)); Sco_GetDBStrFromScope (Hie_Lvl_CRS));
break; break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
DB_QuerySELECT (&mysql_res,"can not get number of surveys", DB_QuerySELECT (&mysql_res,"can not get number of surveys",
"SELECT COUNT(*),SUM(NumNotif)" "SELECT COUNT(*),"
"SUM(NumNotif)"
" FROM svy_surveys" " FROM svy_surveys"
" WHERE svy_surveys.Scope='%s'" " WHERE svy_surveys.Scope='%s'"
" AND CrsCod=%ld", " AND CrsCod=%ld",
@ -4087,7 +4092,8 @@ double Svy_GetNumQstsPerCrsSurvey (Hie_Lvl_Level_t Scope)
" per survey", " per survey",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(svy_questions.QstCod) AS NumQsts" " (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM svy_surveys,svy_questions" " FROM svy_surveys,"
"svy_questions"
" WHERE svy_surveys.Scope='%s'" " WHERE svy_surveys.Scope='%s'"
" AND svy_surveys.SvyCod=svy_questions.SvyCod" " AND svy_surveys.SvyCod=svy_questions.SvyCod"
" GROUP BY svy_questions.SvyCod) AS NumQstsTable", " GROUP BY svy_questions.SvyCod) AS NumQstsTable",
@ -4098,12 +4104,17 @@ double Svy_GetNumQstsPerCrsSurvey (Hie_Lvl_Level_t Scope)
" per survey", " per survey",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(svy_questions.QstCod) AS NumQsts" " (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM institutions,centres,deg_degrees,courses,svy_surveys,svy_questions" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"svy_surveys,"
"svy_questions"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=svy_surveys.Cod" " AND crs_courses.CrsCod=svy_surveys.Cod"
" AND svy_surveys.Scope='%s'" " AND svy_surveys.Scope='%s'"
" AND svy_surveys.SvyCod=svy_questions.SvyCod" " AND svy_surveys.SvyCod=svy_questions.SvyCod"
" GROUP BY svy_questions.SvyCod) AS NumQstsTable", " GROUP BY svy_questions.SvyCod) AS NumQstsTable",
@ -4115,11 +4126,15 @@ double Svy_GetNumQstsPerCrsSurvey (Hie_Lvl_Level_t Scope)
" per survey", " per survey",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(svy_questions.QstCod) AS NumQsts" " (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM centres,deg_degrees,courses,svy_surveys,svy_questions" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"svy_surveys,"
"svy_questions"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=svy_surveys.Cod" " AND crs_courses.CrsCod=svy_surveys.Cod"
" AND svy_surveys.Scope='%s'" " AND svy_surveys.Scope='%s'"
" AND svy_surveys.SvyCod=svy_questions.SvyCod" " AND svy_surveys.SvyCod=svy_questions.SvyCod"
" GROUP BY svy_questions.SvyCod) AS NumQstsTable", " GROUP BY svy_questions.SvyCod) AS NumQstsTable",
@ -4131,10 +4146,13 @@ double Svy_GetNumQstsPerCrsSurvey (Hie_Lvl_Level_t Scope)
" per survey", " per survey",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(svy_questions.QstCod) AS NumQsts" " (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM deg_degrees,courses,svy_surveys,svy_questions" " FROM deg_degrees,"
"crs_courses,"
"svy_surveys,"
"svy_questions"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=svy_surveys.Cod" " AND crs_courses.CrsCod=svy_surveys.Cod"
" AND svy_surveys.Scope='%s'" " AND svy_surveys.Scope='%s'"
" AND svy_surveys.SvyCod=svy_questions.SvyCod" " AND svy_surveys.SvyCod=svy_questions.SvyCod"
" GROUP BY svy_questions.SvyCod) AS NumQstsTable", " GROUP BY svy_questions.SvyCod) AS NumQstsTable",
@ -4146,9 +4164,11 @@ double Svy_GetNumQstsPerCrsSurvey (Hie_Lvl_Level_t Scope)
" per survey", " per survey",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(svy_questions.QstCod) AS NumQsts" " (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM courses,svy_surveys,svy_questions" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "svy_surveys,"
" AND courses.CrsCod=svy_surveys.Cod" "svy_questions"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=svy_surveys.Cod"
" AND svy_surveys.Scope='%s'" " AND svy_surveys.Scope='%s'"
" AND svy_surveys.SvyCod=svy_questions.SvyCod" " AND svy_surveys.SvyCod=svy_questions.SvyCod"
" GROUP BY svy_questions.SvyCod) AS NumQstsTable", " GROUP BY svy_questions.SvyCod) AS NumQstsTable",
@ -4160,7 +4180,8 @@ double Svy_GetNumQstsPerCrsSurvey (Hie_Lvl_Level_t Scope)
" per survey", " per survey",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(svy_questions.QstCod) AS NumQsts" " (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM svy_surveys,svy_questions" " FROM svy_surveys,"
"svy_questions"
" WHERE svy_surveys.Scope='%s' AND svy_surveys.Cod=%ld" " WHERE svy_surveys.Scope='%s' AND svy_surveys.Cod=%ld"
" AND svy_surveys.SvyCod=svy_questions.SvyCod" " AND svy_surveys.SvyCod=svy_questions.SvyCod"
" GROUP BY svy_questions.SvyCod) AS NumQstsTable", " GROUP BY svy_questions.SvyCod) AS NumQstsTable",

View File

@ -5359,24 +5359,32 @@ static unsigned Tst_GetNumTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t A
"SELECT COUNT(*)," "SELECT COUNT(*),"
"SUM(NumHits)," "SUM(NumHits),"
"SUM(Score)" "SUM(Score)"
" FROM institutions,centres,deg_degrees,courses,tst_questions" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"tst_questions"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod", " AND crs_courses.CrsCod=tst_questions.CrsCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*),"
"SUM(NumHits)," "SUM(NumHits),"
"SUM(Score)" "SUM(Score)"
" FROM institutions,centres,deg_degrees,courses,tst_questions" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"tst_questions"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod" " AND crs_courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'", " AND tst_questions.AnsType='%s'",
Gbl.Hierarchy.Cty.CtyCod, Gbl.Hierarchy.Cty.CtyCod,
Tst_StrAnswerTypesDB[AnsType]); Tst_StrAnswerTypesDB[AnsType]);
@ -5387,22 +5395,28 @@ static unsigned Tst_GetNumTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t A
"SELECT COUNT(*)," "SELECT COUNT(*),"
"SUM(NumHits)," "SUM(NumHits),"
"SUM(Score)" "SUM(Score)"
" FROM centres,deg_degrees,courses,tst_questions" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"tst_questions"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod", " AND crs_courses.CrsCod=tst_questions.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*),"
"SUM(NumHits)," "SUM(NumHits),"
"SUM(Score)" "SUM(Score)"
" FROM centres,deg_degrees,courses,tst_questions" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"tst_questions"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod" " AND crs_courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'", " AND tst_questions.AnsType='%s'",
Gbl.Hierarchy.Ins.InsCod, Gbl.Hierarchy.Ins.InsCod,
Tst_StrAnswerTypesDB[AnsType]); Tst_StrAnswerTypesDB[AnsType]);
@ -5413,20 +5427,24 @@ static unsigned Tst_GetNumTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t A
"SELECT COUNT(*)," "SELECT COUNT(*),"
"SUM(NumHits)," "SUM(NumHits),"
"SUM(Score)" "SUM(Score)"
" FROM deg_degrees,courses,tst_questions" " FROM deg_degrees,"
"crs_courses,"
"tst_questions"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod", " AND crs_courses.CrsCod=tst_questions.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*),"
"SUM(NumHits)," "SUM(NumHits),"
"SUM(Score)" "SUM(Score)"
" FROM deg_degrees,courses,tst_questions" " FROM deg_degrees,"
"crs_courses,"
"tst_questions"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod" " AND crs_courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'", " AND tst_questions.AnsType='%s'",
Gbl.Hierarchy.Ctr.CtrCod, Gbl.Hierarchy.Ctr.CtrCod,
Tst_StrAnswerTypesDB[AnsType]); Tst_StrAnswerTypesDB[AnsType]);
@ -5437,18 +5455,20 @@ static unsigned Tst_GetNumTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t A
"SELECT COUNT(*)," "SELECT COUNT(*),"
"SUM(NumHits)," "SUM(NumHits),"
"SUM(Score)" "SUM(Score)"
" FROM courses,tst_questions" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "tst_questions"
" AND courses.CrsCod=tst_questions.CrsCod", " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=tst_questions.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
else else
DB_QuerySELECT (&mysql_res,"can not get number of test questions", DB_QuerySELECT (&mysql_res,"can not get number of test questions",
"SELECT COUNT(*)," "SELECT COUNT(*),"
"SUM(NumHits)," "SUM(NumHits),"
"SUM(Score)" "SUM(Score)"
" FROM courses,tst_questions" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "tst_questions"
" AND courses.CrsCod=tst_questions.CrsCod" " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'", " AND tst_questions.AnsType='%s'",
Gbl.Hierarchy.Deg.DegCod, Gbl.Hierarchy.Deg.DegCod,
Tst_StrAnswerTypesDB[AnsType]); Tst_StrAnswerTypesDB[AnsType]);
@ -5512,151 +5532,150 @@ static unsigned Tst_GetNumTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t A
static unsigned Tst_GetNumCoursesWithTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t AnsType) static unsigned Tst_GetNumCoursesWithTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t AnsType)
{ {
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumCourses;
/***** Get number of courses with test questions from database *****/ /***** Get number of courses with test questions from database *****/
switch (Scope) switch (Scope)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with test questions", DB_QueryCOUNT ("can not get number of courses with test questions",
"SELECT COUNT(DISTINCT CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM tst_questions"); " FROM tst_questions");
else
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with test questions", DB_QueryCOUNT ("can not get number of courses with test questions",
"SELECT COUNT(DISTINCT CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM tst_questions" " FROM tst_questions"
" WHERE AnsType='%s'", " WHERE AnsType='%s'",
Tst_StrAnswerTypesDB[AnsType]); Tst_StrAnswerTypesDB[AnsType]);
break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with test questions", DB_QueryCOUNT ("can not get number of courses with test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM institutions,centres,deg_degrees,courses,tst_questions" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"tst_questions"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod", " AND crs_courses.CrsCod=tst_questions.CrsCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
else
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with test questions", DB_QueryCOUNT ("can not get number of courses with test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM institutions,centres,deg_degrees,courses,tst_questions" " FROM institutions,"
" WHERE institutions.CtyCod=%ld" "centres,"
" AND institutions.InsCod=centres.InsCod" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "tst_questions"
" AND courses.CrsCod=tst_questions.CrsCod" " WHERE institutions.CtyCod=%ld"
" AND tst_questions.AnsType='%s'", " AND institutions.InsCod=centres.InsCod"
Gbl.Hierarchy.Cty.CtyCod, " AND centres.CtrCod=deg_degrees.CtrCod"
Tst_StrAnswerTypesDB[AnsType]); " AND deg_degrees.DegCod=crs_courses.DegCod"
break; " AND crs_courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'",
Gbl.Hierarchy.Cty.CtyCod,
Tst_StrAnswerTypesDB[AnsType]);
case Hie_Lvl_INS: case Hie_Lvl_INS:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with test questions", DB_QueryCOUNT ("can not get number of courses with test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM centres,deg_degrees,courses,tst_questions" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"tst_questions"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod", " AND crs_courses.CrsCod=tst_questions.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
else
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with test questions", DB_QueryCOUNT ("can not get number of courses with test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM centres,deg_degrees,courses,tst_questions" " FROM centres,"
" WHERE centres.InsCod=%ld" "deg_degrees,"
" AND centres.CtrCod=deg_degrees.CtrCod" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "tst_questions"
" AND courses.CrsCod=tst_questions.CrsCod" " WHERE centres.InsCod=%ld"
" AND tst_questions.AnsType='%s'", " AND centres.CtrCod=deg_degrees.CtrCod"
Gbl.Hierarchy.Ins.InsCod, " AND deg_degrees.DegCod=crs_courses.DegCod"
Tst_StrAnswerTypesDB[AnsType]); " AND crs_courses.CrsCod=tst_questions.CrsCod"
break; " AND tst_questions.AnsType='%s'",
Gbl.Hierarchy.Ins.InsCod,
Tst_StrAnswerTypesDB[AnsType]);
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with test questions", DB_QueryCOUNT ("can not get number of courses with test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM deg_degrees,courses,tst_questions" " FROM deg_degrees,"
"crs_courses,"
"tst_questions"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod", " AND crs_courses.CrsCod=tst_questions.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
else
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with test questions", DB_QueryCOUNT ("can not get number of courses with test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM deg_degrees,courses,tst_questions" " FROM deg_degrees,"
" WHERE deg_degrees.CtrCod=%ld" "crs_courses,"
" AND deg_degrees.DegCod=courses.DegCod" "tst_questions"
" AND courses.CrsCod=tst_questions.CrsCod" " WHERE deg_degrees.CtrCod=%ld"
" AND tst_questions.AnsType='%s'", " AND deg_degrees.DegCod=crs_courses.DegCod"
Gbl.Hierarchy.Ctr.CtrCod, " AND crs_courses.CrsCod=tst_questions.CrsCod"
Tst_StrAnswerTypesDB[AnsType]); " AND tst_questions.AnsType='%s'",
break; Gbl.Hierarchy.Ctr.CtrCod,
Tst_StrAnswerTypesDB[AnsType]);
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with test questions", DB_QueryCOUNT ("can not get number of courses with test questions",
"SELECT COUNTDISTINCT (tst_questions.CrsCod)" "SELECT COUNTDISTINCT (tst_questions.CrsCod)"
" FROM courses,tst_questions" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "tst_questions"
" AND courses.CrsCod=tst_questions.CrsCod", " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=tst_questions.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
else
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with test questions", DB_QueryCOUNT ("can not get number of courses with test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM courses,tst_questions" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "tst_questions"
" AND courses.CrsCod=tst_questions.CrsCod" " WHERE crs_courses.DegCod=%ld"
" AND tst_questions.AnsType='%s'", " AND crs_courses.CrsCod=tst_questions.CrsCod"
Gbl.Hierarchy.Deg.DegCod, " AND tst_questions.AnsType='%s'",
Tst_StrAnswerTypesDB[AnsType]); Gbl.Hierarchy.Deg.DegCod,
break; Tst_StrAnswerTypesDB[AnsType]);
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with test questions", DB_QueryCOUNT ("can not get number of courses with test questions",
"SELECT COUNT(DISTINCT CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM tst_questions" " FROM tst_questions"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
else
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with test questions", DB_QueryCOUNT ("can not get number of courses with test questions",
"SELECT COUNT(DISTINCT CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM tst_questions" " FROM tst_questions"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" AND AnsType='%s'", " AND AnsType='%s'",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
Tst_StrAnswerTypesDB[AnsType]); Tst_StrAnswerTypesDB[AnsType]);
break;
default: default:
Lay_WrongScopeExit (); return 0;
break;
} }
/***** Get number of courses *****/
row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%u",&NumCourses) != 1)
Lay_ShowErrorAndExit ("Error when getting number of courses with test questions.");
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
return NumCourses;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -5668,165 +5687,189 @@ static unsigned Tst_GetNumCoursesWithTstQuestions (Hie_Lvl_Level_t Scope,Tst_Ans
static unsigned Tst_GetNumCoursesWithPluggableTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t AnsType) static unsigned Tst_GetNumCoursesWithPluggableTstQuestions (Hie_Lvl_Level_t Scope,Tst_AnswerType_t AnsType)
{ {
extern const char *TstCfg_PluggableDB[TstCfg_NUM_OPTIONS_PLUGGABLE]; extern const char *TstCfg_PluggableDB[TstCfg_NUM_OPTIONS_PLUGGABLE];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumCourses;
/***** Get number of courses with test questions from database *****/ /***** Get number of courses with test questions from database *****/
switch (Scope) switch (Scope)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with pluggable test questions", DB_QueryCOUNT ("can not get number of courses with pluggable test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM tst_questions,tst_config" " FROM tst_questions,"
" WHERE tst_questions.CrsCod=tst_config.CrsCod" "tst_config"
" AND tst_config.pluggable='%s'", " WHERE tst_questions.CrsCod=tst_config.CrsCod"
TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]); " AND tst_config.pluggable='%s'",
else TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]);
DB_QuerySELECT (&mysql_res,"can not get number of courses"
" with pluggable test questions", return (unsigned)
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" DB_QueryCOUNT ("can not get number of courses with pluggable test questions",
" FROM tst_questions,tst_config" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" WHERE tst_questions.AnsType='%s'" " FROM tst_questions,"
" AND tst_questions.CrsCod=tst_config.CrsCod" "tst_config"
" AND tst_config.pluggable='%s'", " WHERE tst_questions.AnsType='%s'"
Tst_StrAnswerTypesDB[AnsType], " AND tst_questions.CrsCod=tst_config.CrsCod"
TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]); " AND tst_config.pluggable='%s'",
break; Tst_StrAnswerTypesDB[AnsType],
TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]);
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with pluggable test questions", DB_QueryCOUNT ("can not get number of courses with pluggable test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM institutions,centres,deg_degrees,courses,tst_questions,tst_config" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"tst_questions,"
"tst_config"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod" " AND crs_courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.CrsCod=tst_config.CrsCod" " AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'", " AND tst_config.pluggable='%s'",
Gbl.Hierarchy.Cty.CtyCod, Gbl.Hierarchy.Cty.CtyCod,
TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]); TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]);
else
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with pluggable test questions", DB_QueryCOUNT ("can not get number of courses with pluggable test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM institutions,centres,deg_degrees,courses,tst_questions,tst_config" " FROM institutions,"
"centres,"
"deg_degrees,"
"crs_courses,"
"tst_questions,"
"tst_config"
" WHERE institutions.CtyCod=%ld" " WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod" " AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod" " AND crs_courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'" " AND tst_questions.AnsType='%s'"
" AND tst_questions.CrsCod=tst_config.CrsCod" " AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'", " AND tst_config.pluggable='%s'",
Gbl.Hierarchy.Cty.CtyCod, Gbl.Hierarchy.Cty.CtyCod,
Tst_StrAnswerTypesDB[AnsType], Tst_StrAnswerTypesDB[AnsType],
TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]); TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]);
break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with pluggable test questions", DB_QueryCOUNT ("can not get number of courses with pluggable test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM centres,deg_degrees,courses,tst_questions,tst_config" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"tst_questions,"
"tst_config"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod" " AND crs_courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.CrsCod=tst_config.CrsCod" " AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'", " AND tst_config.pluggable='%s'",
Gbl.Hierarchy.Ins.InsCod, Gbl.Hierarchy.Ins.InsCod,
TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]); TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]);
else
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with pluggable test questions", DB_QueryCOUNT ("can not get number of courses with pluggable test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM centres,deg_degrees,courses,tst_questions,tst_config" " FROM centres,"
"deg_degrees,"
"crs_courses,"
"tst_questions,"
"tst_config"
" WHERE centres.InsCod=%ld" " WHERE centres.InsCod=%ld"
" AND centres.CtrCod=deg_degrees.CtrCod" " AND centres.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod" " AND crs_courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'" " AND tst_questions.AnsType='%s'"
" AND tst_questions.CrsCod=tst_config.CrsCod" " AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'", " AND tst_config.pluggable='%s'",
Gbl.Hierarchy.Ins.InsCod, Gbl.Hierarchy.Ins.InsCod,
Tst_StrAnswerTypesDB[AnsType], Tst_StrAnswerTypesDB[AnsType],
TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]); TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]);
break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with pluggable test questions", DB_QueryCOUNT ("can not get number of courses with pluggable test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM deg_degrees,courses,tst_questions,tst_config" " FROM deg_degrees,"
"crs_courses,"
"tst_questions,"
"tst_config"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod" " AND crs_courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.CrsCod=tst_config.CrsCod" " AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'", " AND tst_config.pluggable='%s'",
Gbl.Hierarchy.Ctr.CtrCod, Gbl.Hierarchy.Ctr.CtrCod,
TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]); TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]);
else
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with pluggable test questions", DB_QueryCOUNT ("can not get number of courses with pluggable test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM deg_degrees,courses,tst_questions,tst_config" " FROM deg_degrees,"
"crs_courses,"
"tst_questions,"
"tst_config"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND courses.CrsCod=tst_questions.CrsCod" " AND crs_courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'" " AND tst_questions.AnsType='%s'"
" AND tst_questions.CrsCod=tst_config.CrsCod" " AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'", " AND tst_config.pluggable='%s'",
Gbl.Hierarchy.Ctr.CtrCod, Gbl.Hierarchy.Ctr.CtrCod,
Tst_StrAnswerTypesDB[AnsType], Tst_StrAnswerTypesDB[AnsType],
TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]); TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]);
break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with pluggable test questions", DB_QueryCOUNT ("can not get number of courses with pluggable test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM courses,tst_questions,tst_config" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "tst_questions,"
" AND courses.CrsCod=tst_questions.CrsCod" "tst_config"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.CrsCod=tst_config.CrsCod" " AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'", " AND tst_config.pluggable='%s'",
Gbl.Hierarchy.Deg.DegCod, Gbl.Hierarchy.Deg.DegCod,
TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]); TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]);
else
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with pluggable test questions", DB_QueryCOUNT ("can not get number of courses with pluggable test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM courses,tst_questions,tst_config" " FROM crs_courses,"
" WHERE courses.DegCod=%ld" "tst_questions,"
" AND courses.CrsCod=tst_questions.CrsCod" "tst_config"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=tst_questions.CrsCod"
" AND tst_questions.AnsType='%s'" " AND tst_questions.AnsType='%s'"
" AND tst_questions.CrsCod=tst_config.CrsCod" " AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'", " AND tst_config.pluggable='%s'",
Gbl.Hierarchy.Deg.DegCod, Gbl.Hierarchy.Deg.DegCod,
Tst_StrAnswerTypesDB[AnsType], Tst_StrAnswerTypesDB[AnsType],
TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]); TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]);
break;
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
if (AnsType == Tst_ANS_UNKNOWN) // Any type if (AnsType == Tst_ANS_UNKNOWN) // Any type
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with pluggable test questions", DB_QueryCOUNT ("can not get number of courses with pluggable test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM tst_questions,tst_config" " FROM tst_questions,"
"tst_config"
" WHERE tst_questions.CrsCod=%ld" " WHERE tst_questions.CrsCod=%ld"
" AND tst_questions.CrsCod=tst_config.CrsCod" " AND tst_questions.CrsCod=tst_config.CrsCod"
" AND tst_config.pluggable='%s'", " AND tst_config.pluggable='%s'",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]); TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]);
else
DB_QuerySELECT (&mysql_res,"can not get number of courses" return (unsigned)
" with pluggable test questions", DB_QueryCOUNT ("can not get number of courses with pluggable test questions",
"SELECT COUNT(DISTINCT tst_questions.CrsCod)" "SELECT COUNT(DISTINCT tst_questions.CrsCod)"
" FROM tst_questions,tst_config" " FROM tst_questions,"
"tst_config"
" WHERE tst_questions.CrsCod=%ld" " WHERE tst_questions.CrsCod=%ld"
" AND tst_questions.AnsType='%s'" " AND tst_questions.AnsType='%s'"
" AND tst_questions.CrsCod=tst_config.CrsCod" " AND tst_questions.CrsCod=tst_config.CrsCod"
@ -5834,19 +5877,7 @@ static unsigned Tst_GetNumCoursesWithPluggableTstQuestions (Hie_Lvl_Level_t Scop
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
Tst_StrAnswerTypesDB[AnsType], Tst_StrAnswerTypesDB[AnsType],
TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]); TstCfg_PluggableDB[TstCfg_PLUGGABLE_YES]);
break;
default: default:
Lay_WrongScopeExit (); return 0;
break;
} }
/***** Get number of courses *****/
row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%u",&NumCourses) != 1)
Lay_ShowErrorAndExit ("Error when getting number of courses with pluggable test questions.");
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
return NumCourses;
} }

File diff suppressed because it is too large Load Diff