Version 20.52: Mar 28, 2021 Code refactoring in database selects.

This commit is contained in:
acanas 2021-03-28 17:03:08 +02:00
parent bad9767bd1
commit 9af1bbaa51
41 changed files with 1507 additions and 1222 deletions

View File

@ -497,7 +497,8 @@ 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 crs_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,
@ -598,7 +599,9 @@ 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 crs_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);
@ -633,7 +636,8 @@ static bool API_GetSomeUsrDataFromUsrCod (struct UsrData *UsrDat,long CrsCod)
"FirstName," // row[2] "FirstName," // row[2]
"Photo," // row[3] "Photo," // row[3]
"DATE_FORMAT(Birthday,'%%Y%%m%%d')" // row[4] "DATE_FORMAT(Birthday,'%%Y%%m%%d')" // row[4]
" FROM usr_data WHERE UsrCod=%ld", " FROM usr_data"
" WHERE UsrCod=%ld",
UsrDat->UsrCod) != 1) UsrDat->UsrCod) != 1)
return false; return false;
@ -837,7 +841,8 @@ static int API_CheckParamsNewAccount (char *NewNickWithArr, // Input
/***** Check if the new nickname matches any of the nicknames of other users *****/ /***** Check if the new nickname matches any of the nicknames of other users *****/
if (DB_QueryCOUNT ("can not check if nickname already existed", if (DB_QueryCOUNT ("can not check if nickname already existed",
"SELECT COUNT(*) FROM usr_nicknames" "SELECT COUNT(*)"
" FROM usr_nicknames"
" WHERE Nickname='%s'", " WHERE Nickname='%s'",
NewNickWithoutArr)) // A nickname of another user is the same that this nickname NewNickWithoutArr)) // A nickname of another user is the same that this nickname
return API_CHECK_NEW_ACCOUNT_NICKNAME_REGISTERED_BY_ANOTHER_USER; return API_CHECK_NEW_ACCOUNT_NICKNAME_REGISTERED_BY_ANOTHER_USER;
@ -850,8 +855,10 @@ static int API_CheckParamsNewAccount (char *NewNickWithArr, // Input
{ {
/***** Check if the new email matches any of the confirmed emails of other users *****/ /***** Check if the new email matches any of the confirmed emails of other users *****/
if (DB_QueryCOUNT ("can not check if email already existed", if (DB_QueryCOUNT ("can not check if email already existed",
"SELECT COUNT(*) FROM usr_emails" "SELECT COUNT(*)"
" WHERE E_mail='%s' AND Confirmed='Y'", " FROM usr_emails"
" WHERE E_mail='%s'"
" AND Confirmed='Y'",
NewEmail)) // An email of another user is the same that my email NewEmail)) // An email of another user is the same that my email
return API_CHECK_NEW_ACCOUNT_EMAIL_REGISTERED_BY_ANOTHER_USER; return API_CHECK_NEW_ACCOUNT_EMAIL_REGISTERED_BY_ANOTHER_USER;
} }
@ -922,11 +929,13 @@ int swad__loginByUserPasswordKey (struct soap *soap,
NumRows = NumRows =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get user's data", (unsigned) DB_QuerySELECT (&mysql_res,"can not get user's data",
"SELECT usr_nicknames.UsrCod" "SELECT usr_nicknames.UsrCod"
" FROM usr_nicknames,usr_data" " FROM usr_nicknames,"
"usr_data"
" WHERE usr_nicknames.Nickname='%s'" " WHERE usr_nicknames.Nickname='%s'"
" AND usr_nicknames.UsrCod=usr_data.UsrCod" " AND usr_nicknames.UsrCod=usr_data.UsrCod"
" AND usr_data.Password='%s'", " AND usr_data.Password='%s'",
UsrIDNickOrEmail,userPassword); UsrIDNickOrEmail,
userPassword);
} }
else if (Mai_CheckIfEmailIsValid (UsrIDNickOrEmail)) // 2: It's an email else if (Mai_CheckIfEmailIsValid (UsrIDNickOrEmail)) // 2: It's an email
{ {
@ -935,11 +944,12 @@ int swad__loginByUserPasswordKey (struct soap *soap,
NumRows = NumRows =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get user's data", (unsigned) DB_QuerySELECT (&mysql_res,"can not get user's data",
"SELECT usr_emails.UsrCod" "SELECT usr_emails.UsrCod"
" FROM usr_emails,usr_data" " FROM usr_emails,usr_data"
" WHERE usr_emails.E_mail='%s'" " WHERE usr_emails.E_mail='%s'"
" AND usr_emails.UsrCod=usr_data.UsrCod" " AND usr_emails.UsrCod=usr_data.UsrCod"
" AND usr_data.Password='%s'", " AND usr_data.Password='%s'",
UsrIDNickOrEmail,userPassword); UsrIDNickOrEmail,
userPassword);
} }
else // 3: It's not a nickname nor email else // 3: It's not a nickname nor email
{ {
@ -1284,7 +1294,8 @@ int swad__getNewPassword (struct soap *soap,
/* User has typed a nickname */ /* User has typed a nickname */
NumRows = NumRows =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get user's data", (unsigned) DB_QuerySELECT (&mysql_res,"can not get user's data",
"SELECT UsrCod FROM usr_nicknames" "SELECT UsrCod"
" FROM usr_nicknames"
" WHERE Nickname='%s'", " WHERE Nickname='%s'",
UsrIDNickOrEmail); UsrIDNickOrEmail);
} }
@ -1294,7 +1305,8 @@ int swad__getNewPassword (struct soap *soap,
// TODO: Get only if email confirmed? // TODO: Get only if email confirmed?
NumRows = NumRows =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get user's data", (unsigned) DB_QuerySELECT (&mysql_res,"can not get user's data",
"SELECT UsrCod FROM usr_emails" "SELECT UsrCod"
" FROM usr_emails"
" WHERE E_mail='%s'", " WHERE E_mail='%s'",
UsrIDNickOrEmail); UsrIDNickOrEmail);
} }
@ -2591,13 +2603,19 @@ int swad__getAttendanceEvents (struct soap *soap,
/***** Query list of attendance events *****/ /***** Query list of attendance events *****/
NumRows = NumRows =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get attendance events", (unsigned) DB_QuerySELECT (&mysql_res,"can not get attendance events",
"SELECT AttCod,Hidden,UsrCod," "SELECT AttCod,"
"UNIX_TIMESTAMP(StartTime) AS ST," "Hidden,"
"UNIX_TIMESTAMP(EndTime) AS ET," "UsrCod,"
"CommentTchVisible,Title,Txt" "UNIX_TIMESTAMP(StartTime) AS ST,"
" FROM att_events" "UNIX_TIMESTAMP(EndTime) AS ET,"
"CommentTchVisible,"
"Title,"
"Txt"
" FROM att_events"
" WHERE CrsCod=%d" " WHERE CrsCod=%d"
" ORDER BY ST DESC,ET DESC,Title DESC", " ORDER BY ST DESC,"
"ET DESC,"
"Title DESC",
courseCode); courseCode);
getAttendanceEventsOut->eventsArray.__size = getAttendanceEventsOut->eventsArray.__size =
@ -3068,9 +3086,12 @@ int swad__getAttendanceUsers (struct soap *soap,
NumRows = NumRows =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get users" (unsigned) DB_QuerySELECT (&mysql_res,"can not get users"
" in an attendance event", " in an attendance event",
"SELECT u.UsrCod,u.Present" "SELECT u.UsrCod,"
" FROM (SELECT UsrCod,Present" "u.Present"
" FROM att_users WHERE AttCod=%ld" " FROM (SELECT UsrCod,"
"Present"
" FROM att_users"
" WHERE AttCod=%ld"
" UNION %s) AS u," " UNION %s) AS u,"
"usr_data" "usr_data"
" WHERE u.UsrCod=usr_data.UsrCod" " WHERE u.UsrCod=usr_data.UsrCod"
@ -3572,7 +3593,8 @@ static int API_GetMyLanguage (struct soap *soap)
/***** Get user's language *****/ /***** Get user's language *****/
if (DB_QuerySELECT (&mysql_res,"can not get user's language", if (DB_QuerySELECT (&mysql_res,"can not get user's language",
"SELECT Language FROM usr_data" "SELECT Language"
" FROM usr_data"
" WHERE UsrCod=%ld", " WHERE UsrCod=%ld",
Gbl.Usrs.Me.UsrDat.UsrCod) != 1) Gbl.Usrs.Me.UsrDat.UsrCod) != 1)
return soap_receiver_fault (soap, return soap_receiver_fault (soap,
@ -3716,12 +3738,16 @@ int swad__sendMessage (struct soap *soap,
{ {
/***** Check if the original message was really received by me *****/ /***** Check if the original message was really received by me *****/
if (!DB_QuerySELECT (&mysql_res,"can not check original message", if (!DB_QuerySELECT (&mysql_res,"can not check original message",
"SELECT SUM(N) FROM" "SELECT SUM(N)"
" (SELECT COUNT(*) AS N FROM msg_rcv" " FROM (SELECT COUNT(*) AS N"
" WHERE UsrCod=%ld AND MsgCod=%ld" " FROM msg_rcv"
" UNION" " WHERE UsrCod=%ld"
" SELECT COUNT(*) AS N FROM msg_rcv_deleted" " AND MsgCod=%ld"
" WHERE UsrCod=%ld AND MsgCod=%ld) AS T", " UNION"
" SELECT COUNT(*) AS N"
" FROM msg_rcv_deleted"
" WHERE UsrCod=%ld"
" AND MsgCod=%ld) AS T",
Gbl.Usrs.Me.UsrDat.UsrCod,(long) messageCode, Gbl.Usrs.Me.UsrDat.UsrCod,(long) messageCode,
Gbl.Usrs.Me.UsrDat.UsrCod,(long) messageCode)) Gbl.Usrs.Me.UsrDat.UsrCod,(long) messageCode))
return soap_sender_fault (soap, return soap_sender_fault (soap,
@ -3746,12 +3772,15 @@ int swad__sendMessage (struct soap *soap,
/***** Get the recipient of the message *****/ /***** Get the recipient of the message *****/
NumRows = NumRows =
(unsigned) DB_QuerySELECT (&mysql_res,"can not check original message", (unsigned) DB_QuerySELECT (&mysql_res,"can not check original message",
"SELECT UsrCod FROM msg_snt" "SELECT UsrCod"
" FROM msg_snt"
" WHERE MsgCod=%ld" " WHERE MsgCod=%ld"
" UNION " " UNION "
"SELECT UsrCod FROM msg_snt_deleted" "SELECT UsrCod"
" FROM msg_snt_deleted"
" WHERE MsgCod=%ld", " WHERE MsgCod=%ld",
(long) messageCode,(long) messageCode); (long) messageCode,
(long) messageCode);
if (NumRows) // Message found in any of the two tables of sent messages if (NumRows) // Message found in any of the two tables of sent messages
{ {
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -3774,7 +3803,10 @@ int swad__sendMessage (struct soap *soap,
/***** Build query for recipients from database *****/ /***** Build query for recipients from database *****/
if (ReplyUsrCod > 0) if (ReplyUsrCod > 0)
snprintf (Query,API_MAX_BYTES_QUERY_RECIPIENTS + 1, snprintf (Query,API_MAX_BYTES_QUERY_RECIPIENTS + 1,
"SELECT UsrCod FROM usr_data WHERE UsrCod=%ld",ReplyUsrCod); "SELECT UsrCod"
" FROM usr_data"
" WHERE UsrCod=%ld",
ReplyUsrCod);
else else
Query[0] = '\0'; Query[0] = '\0';
@ -3802,7 +3834,8 @@ int swad__sendMessage (struct soap *soap,
{ {
if (ReplyUsrCod > 0) if (ReplyUsrCod > 0)
Str_Concat (Query," UNION ",API_MAX_BYTES_QUERY_RECIPIENTS); Str_Concat (Query," UNION ",API_MAX_BYTES_QUERY_RECIPIENTS);
Str_Concat (Query,"SELECT UsrCod FROM usr_nicknames" Str_Concat (Query,"SELECT UsrCod"
" FROM usr_nicknames"
" WHERE Nickname IN ('", " WHERE Nickname IN ('",
API_MAX_BYTES_QUERY_RECIPIENTS); API_MAX_BYTES_QUERY_RECIPIENTS);
FirstNickname = false; FirstNickname = false;
@ -4131,8 +4164,14 @@ static int API_GetTstConfig (long CrsCod)
/***** Query database *****/ /***** Query database *****/
if (DB_QuerySELECT (&mysql_res,"can not get test configuration", if (DB_QuerySELECT (&mysql_res,"can not get test configuration",
"SELECT Pluggable,Min,Def,Max,MinTimeNxtTstPerQst,Visibility" "SELECT Pluggable," // row[0]
" FROM tst_config WHERE CrsCod=%ld", "Min," // row[1]
"Def," // row[2]
"Max," // row[3]
"MinTimeNxtTstPerQst," // row[4]
"Visibility" // row[5]
" FROM tst_config"
" WHERE CrsCod=%ld",
CrsCod)) CrsCod))
{ {
/***** Get minimun, default and maximum *****/ /***** Get minimun, default and maximum *****/
@ -4166,20 +4205,23 @@ static int API_GetNumTestQuestionsInCrs (long CrsCod)
return return
(int) DB_QueryCOUNT ("can not get number of test questions", (int) DB_QueryCOUNT ("can not get number of test questions",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM tst_questions,tst_question_tags,tst_tags" " FROM tst_questions,"
"tst_question_tags,"
"tst_tags"
" WHERE tst_questions.CrsCod=%ld" " WHERE tst_questions.CrsCod=%ld"
" AND tst_questions.QstCod NOT IN" " AND tst_questions.QstCod NOT IN"
" (SELECT tst_question_tags.QstCod"
" (SELECT tst_question_tags.QstCod" " FROM tst_tags,"
" FROM tst_tags,tst_question_tags" "tst_question_tags"
" WHERE tst_tags.CrsCod=%ld" " WHERE tst_tags.CrsCod=%ld"
" 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)"
" AND tst_questions.QstCod=tst_question_tags.QstCod"
" AND tst_questions.QstCod=tst_question_tags.QstCod" " AND tst_question_tags.TagCod=tst_tags.TagCod"
" AND tst_question_tags.TagCod=tst_tags.TagCod" " AND tst_tags.CrsCod=%ld",
" AND tst_tags.CrsCod=%ld", CrsCod,
CrsCod,CrsCod,CrsCod); CrsCod,
CrsCod);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -4286,9 +4328,11 @@ static int API_GetTstTags (struct soap *soap,
/***** Get available tags from database *****/ /***** Get available tags from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get test tags", NumRows = DB_QuerySELECT (&mysql_res,"can not get test tags",
"SELECT TagCod,TagTxt" "SELECT TagCod," // row[0]
" FROM tst_tags" "TagTxt" // row[1]
" WHERE CrsCod=%ld AND TagHidden='N'" " FROM tst_tags"
" WHERE CrsCod=%ld"
" AND TagHidden='N'"
" ORDER BY TagTxt", " ORDER BY TagTxt",
CrsCod); CrsCod);
@ -4345,24 +4389,28 @@ static int API_GetTstQuestions (struct soap *soap,
// DISTINCTROW is necessary to not repeat questions // DISTINCTROW is necessary to not repeat questions
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.QstCod," // row[0]
"tst_questions.AnsType,tst_questions.Shuffle," "tst_questions.AnsType," // row[1]
"tst_questions.Stem,tst_questions.Feedback" "tst_questions.Shuffle," // row[2]
" FROM tst_questions,tst_question_tags,tst_tags" "tst_questions.Stem," // row[3]
"tst_questions.Feedback" // row[4]
" FROM tst_questions,"
"tst_question_tags,"
"tst_tags"
" WHERE tst_questions.CrsCod=%ld" " WHERE tst_questions.CrsCod=%ld"
" AND tst_questions.QstCod NOT IN" " AND tst_questions.QstCod NOT IN"
" (SELECT tst_question_tags.QstCod FROM tst_tags,tst_question_tags" " (SELECT tst_question_tags.QstCod"
" WHERE tst_tags.CrsCod=%ld AND tst_tags.TagHidden='Y'" " FROM tst_tags,"
" AND tst_tags.TagCod=tst_question_tags.TagCod)" "tst_question_tags"
" AND tst_questions.QstCod=tst_question_tags.QstCod" " WHERE tst_tags.CrsCod=%ld"
" AND tst_question_tags.TagCod=tst_tags.TagCod" " AND tst_tags.TagHidden='Y'"
" AND tst_tags.CrsCod=%ld" " AND tst_tags.TagCod=tst_question_tags.TagCod)"
" AND " " AND tst_questions.QstCod=tst_question_tags.QstCod"
"(" " AND tst_question_tags.TagCod=tst_tags.TagCod"
"tst_questions.EditTime>=FROM_UNIXTIME(%ld)" " AND tst_tags.CrsCod=%ld"
" OR " " AND (tst_questions.EditTime>=FROM_UNIXTIME(%ld)"
"tst_tags.ChangeTime>=FROM_UNIXTIME(%ld)" " OR "
")" "tst_tags.ChangeTime>=FROM_UNIXTIME(%ld))"
" ORDER BY QstCod", " ORDER BY QstCod",
CrsCod,CrsCod,CrsCod, CrsCod,CrsCod,CrsCod,
BeginTime, BeginTime,
@ -4437,26 +4485,33 @@ static int API_GetTstAnswers (struct soap *soap,
/***** Get recent test questions from database *****/ /***** Get recent test questions from database *****/
NumRows = NumRows =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get test answers", (unsigned) DB_QuerySELECT (&mysql_res,"can not get test answers",
"SELECT QstCod,AnsInd,Correct,Answer,Feedback" "SELECT QstCod,"
" FROM tst_answers WHERE QstCod IN " "AnsInd,"
"(SELECT tst_questions.QstCod" "Correct,"
" FROM tst_questions,tst_question_tags,tst_tags" "Answer,"
" WHERE tst_questions.CrsCod=%ld" "Feedback"
" AND tst_questions.QstCod NOT IN" " FROM tst_answers"
" (SELECT tst_question_tags.QstCod FROM tst_tags,tst_question_tags" " WHERE QstCod IN "
" WHERE tst_tags.CrsCod=%ld AND tst_tags.TagHidden='Y'" "(SELECT tst_questions.QstCod"
" AND tst_tags.TagCod=tst_question_tags.TagCod)" " FROM tst_questions,"
" AND tst_questions.QstCod=tst_question_tags.QstCod" "tst_question_tags,"
" AND tst_question_tags.TagCod=tst_tags.TagCod" "tst_tags"
" AND tst_tags.CrsCod=%ld" " WHERE tst_questions.CrsCod=%ld"
" AND " " AND tst_questions.QstCod NOT IN"
"(" " (SELECT tst_question_tags.QstCod"
"tst_questions.EditTime>=FROM_UNIXTIME(%ld)" " FROM tst_tags,"
" OR " "tst_question_tags"
"tst_tags.ChangeTime>=FROM_UNIXTIME(%ld)" " WHERE tst_tags.CrsCod=%ld"
")" " AND tst_tags.TagHidden='Y'"
")" " AND tst_tags.TagCod=tst_question_tags.TagCod)"
" ORDER BY QstCod,AnsInd", " AND tst_questions.QstCod=tst_question_tags.QstCod"
" AND tst_question_tags.TagCod=tst_tags.TagCod"
" AND tst_tags.CrsCod=%ld"
" AND (tst_questions.EditTime>=FROM_UNIXTIME(%ld)"
" OR "
"tst_tags.ChangeTime>=FROM_UNIXTIME(%ld)))"
" ORDER BY QstCod,"
"AnsInd",
CrsCod,CrsCod,CrsCod, CrsCod,CrsCod,CrsCod,
BeginTime, BeginTime,
BeginTime); BeginTime);
@ -4528,26 +4583,31 @@ static int API_GetTstQuestionTags (struct soap *soap,
/***** Get recent test questions from database *****/ /***** Get recent test questions from database *****/
NumRows = NumRows =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get test question tags", (unsigned) DB_QuerySELECT (&mysql_res,"can not get test question tags",
"SELECT QstCod,TagCod,TagInd" "SELECT QstCod,"
" FROM tst_question_tags WHERE QstCod IN " "TagCod,"
"(SELECT tst_questions.QstCod" "TagInd"
" FROM tst_questions,tst_question_tags,tst_tags" " FROM tst_question_tags"
" WHERE tst_questions.CrsCod=%ld" " WHERE QstCod IN "
" AND tst_questions.QstCod NOT IN" "(SELECT tst_questions.QstCod"
" (SELECT tst_question_tags.QstCod FROM tst_tags,tst_question_tags" " FROM tst_questions,"
" WHERE tst_tags.CrsCod=%ld AND tst_tags.TagHidden='Y'" "tst_question_tags,"
" AND tst_tags.TagCod=tst_question_tags.TagCod)" "tst_tags"
" AND tst_questions.QstCod=tst_question_tags.QstCod" " WHERE tst_questions.CrsCod=%ld"
" AND tst_question_tags.TagCod=tst_tags.TagCod" " AND tst_questions.QstCod NOT IN"
" AND tst_tags.CrsCod=%ld" " (SELECT tst_question_tags.QstCod"
" AND " " FROM tst_tags,"
"(" "tst_question_tags"
"tst_questions.EditTime>=FROM_UNIXTIME(%ld)" " WHERE tst_tags.CrsCod=%ld"
" OR " " AND tst_tags.TagHidden='Y'"
"tst_tags.ChangeTime>=FROM_UNIXTIME(%ld)" " AND tst_tags.TagCod=tst_question_tags.TagCod)"
")" " AND tst_questions.QstCod=tst_question_tags.QstCod"
")" " AND tst_question_tags.TagCod=tst_tags.TagCod"
" ORDER BY QstCod,TagInd", " AND tst_tags.CrsCod=%ld"
" AND (tst_questions.EditTime>=FROM_UNIXTIME(%ld)"
" OR "
"tst_tags.ChangeTime>=FROM_UNIXTIME(%ld)))"
" ORDER BY QstCod,"
"TagInd",
CrsCod,CrsCod,CrsCod, CrsCod,CrsCod,CrsCod,
BeginTime, BeginTime,
BeginTime); BeginTime);
@ -4680,29 +4740,32 @@ int swad__getTrivialQuestion (struct soap *soap,
NumRows = NumRows =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get test questions", (unsigned) DB_QuerySELECT (&mysql_res,"can not get test questions",
"SELECT DISTINCTROW " "SELECT DISTINCTROW "
"tst_questions.QstCod," "tst_questions.QstCod," // row[0]
"tst_questions.AnsType," "tst_questions.AnsType," // row[1]
"tst_questions.Shuffle," "tst_questions.Shuffle," // row[2]
"tst_questions.Stem," "tst_questions.Stem," // row[3]
"tst_questions.Feedback," "tst_questions.Feedback," // row[4]
"tst_questions.Score/tst_questions.NumHits AS S" "tst_questions.Score/"
" FROM crs_courses," "tst_questions.NumHits AS S" // row[5]
"tst_questions" " FROM crs_courses,"
"tst_questions"
" WHERE crs_courses.DegCod IN (%s)" " WHERE crs_courses.DegCod IN (%s)"
" AND crs_courses.CrsCod=tst_questions.CrsCod" " 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 crs_courses," " FROM crs_courses,"
"tst_tags," "tst_tags,"
"tst_question_tags" "tst_question_tags"
" WHERE crs_courses.DegCod IN (%s)" " WHERE crs_courses.DegCod IN (%s)"
" AND crs_courses.CrsCod=tst_tags.CrsCod" " 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'"
" ORDER BY RAND() LIMIT 1", " AND S<='%f'"
" ORDER BY RAND()"
" LIMIT 1",
DegreesStr,DegreesStr, DegreesStr,DegreesStr,
lowerScore,upperScore); lowerScore,upperScore);
Str_SetDecimalPointToLocal (); // Return to local system Str_SetDecimalPointToLocal (); // Return to local system
@ -4765,12 +4828,17 @@ int swad__getTrivialQuestion (struct soap *soap,
if (QstCod > 0) if (QstCod > 0)
{ {
/***** Get answer from database *****/ /***** Get answer from database *****/
NumRows = NumRows = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get test answers", DB_QuerySELECT (&mysql_res,"can not get test answers",
"SELECT QstCod,AnsInd,Correct,Answer,Feedback" "SELECT QstCod," // row[0]
" FROM tst_answers WHERE QstCod=%ld" "AnsInd," // row[1]
" ORDER BY AnsInd", "Correct," // row[2]
QstCod); "Answer," // row[3]
"Feedback" // row[4]
" FROM tst_answers"
" WHERE QstCod=%ld"
" ORDER BY AnsInd",
QstCod);
getTrivialQuestionOut->answersArray.__size = (int) NumRows; getTrivialQuestionOut->answersArray.__size = (int) NumRows;
@ -4885,11 +4953,11 @@ int swad__getGames (struct soap *soap,
"gam_games.Visibility," // row[5] "gam_games.Visibility," // row[5]
"gam_games.Title," // row[6] "gam_games.Title," // row[6]
"gam_games.Txt" // row[7] "gam_games.Txt" // row[7]
" FROM gam_games" " FROM gam_games"
" LEFT JOIN mch_matches" " LEFT JOIN mch_matches"
" ON gam_games.GamCod=mch_matches.GamCod" " ON gam_games.GamCod=mch_matches.GamCod"
" WHERE gam_games.CrsCod=%ld" " WHERE gam_games.CrsCod=%ld"
" AND Hidden='N'" " AND Hidden='N'"
" GROUP BY gam_games.GamCod" " GROUP BY gam_games.GamCod"
" ORDER BY StartTime DESC," " ORDER BY StartTime DESC,"
"EndTime DESC," "EndTime DESC,"
@ -5401,10 +5469,12 @@ static void API_GetListGrpsInGameFromDB (struct soap *soap,
size_t Length; size_t Length;
/***** Get list of groups *****/ /***** Get list of groups *****/
NumGrps = NumGrps = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get groups of a match", DB_QuerySELECT (&mysql_res,"can not get groups of a match",
"SELECT GrpCod FROM mch_groups WHERE MchCod=%ld", "SELECT GrpCod"
MchCod); " FROM mch_groups"
" WHERE MchCod=%ld",
MchCod);
if (NumGrps == 0) if (NumGrps == 0)
*ListGroups = NULL; *ListGroups = NULL;
else // Groups found else // Groups found

View File

@ -659,8 +659,10 @@ static bool Acc_GetParamsNewAccount (char NewNickWithoutArr[Nck_MAX_BYTES_NICK_F
/* Check if the new nickname /* Check if the new nickname
matches any of the nicknames of other users */ matches any of the nicknames of other users */
if (DB_QueryCOUNT ("can not check if nickname already existed", if (DB_QueryCOUNT ("can not check if nickname already existed",
"SELECT COUNT(*) FROM usr_nicknames" "SELECT COUNT(*)"
" WHERE Nickname='%s' AND UsrCod<>%ld", " FROM usr_nicknames"
" WHERE Nickname='%s'"
" AND UsrCod<>%ld",
NewNickWithoutArr, NewNickWithoutArr,
Gbl.Usrs.Me.UsrDat.UsrCod)) // A nickname of another user is the same that this nickname Gbl.Usrs.Me.UsrDat.UsrCod)) // A nickname of another user is the same that this nickname
{ {
@ -686,8 +688,10 @@ static bool Acc_GetParamsNewAccount (char NewNickWithoutArr[Nck_MAX_BYTES_NICK_F
/* Check if the new email matches /* Check if the new email matches
any of the confirmed emails of other users */ any of the confirmed emails of other users */
if (DB_QueryCOUNT ("can not check if email already existed", if (DB_QueryCOUNT ("can not check if email already existed",
"SELECT COUNT(*) FROM usr_emails" "SELECT COUNT(*)"
" WHERE E_mail='%s' AND Confirmed='Y'", " FROM usr_emails"
" WHERE E_mail='%s'"
" AND Confirmed='Y'",
NewEmail)) // An email of another user is the same that my email NewEmail)) // An email of another user is the same that my email
{ {
Error = true; Error = true;

View File

@ -1151,7 +1151,8 @@ static void Agd_GetListEvents (struct Agd_Agenda *Agenda,
{ {
/* Make query */ /* Make query */
NumRows = DB_QuerySELECT (&mysql_res,"can not get agenda events", NumRows = DB_QuerySELECT (&mysql_res,"can not get agenda events",
"SELECT AgdCod FROM agd_agendas" "SELECT AgdCod"
" FROM agd_agendas"
" WHERE %s%s%s%s" " WHERE %s%s%s%s"
" ORDER BY %s", " ORDER BY %s",
UsrSubQuery, UsrSubQuery,
@ -1300,9 +1301,9 @@ static void Agd_GetEventTxtFromDB (struct Agd_Event *AgdEvent,
/***** Get text of event from database *****/ /***** Get text of event from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get event text", NumRows = DB_QuerySELECT (&mysql_res,"can not get event text",
"SELECT Txt" // row[0] "SELECT Txt" // row[0]
" FROM agd_agendas" " FROM agd_agendas"
" WHERE AgdCod=%ld" " WHERE AgdCod=%ld"
" AND UsrCod=%ld", " AND UsrCod=%ld",
AgdEvent->AgdCod, AgdEvent->AgdCod,
AgdEvent->UsrCod); AgdEvent->UsrCod);
@ -1865,7 +1866,7 @@ unsigned Agd_GetNumEventsFromUsr (long UsrCod)
/***** Get number of events in a course from database *****/ /***** Get number of events in a course from database *****/
return (unsigned) DB_QueryCOUNT ("can not get number of events from user", return (unsigned) DB_QueryCOUNT ("can not get number of events from user",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM agd_agendas" " FROM agd_agendas"
" WHERE UsrCod=%ld", " WHERE UsrCod=%ld",
UsrCod); UsrCod);
} }
@ -1887,7 +1888,7 @@ unsigned Agd_GetNumUsrsWithEvents (Hie_Lvl_Level_t Scope)
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
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 UsrCod)" "SELECT COUNT(DISTINCT UsrCod)"
" FROM agd_agendas" " FROM agd_agendas"
" WHERE UsrCod>0"); " WHERE UsrCod>0");
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
@ -1992,7 +1993,7 @@ unsigned Agd_GetNumEvents (Hie_Lvl_Level_t Scope)
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
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 agd_agendas" " FROM agd_agendas"
" WHERE UsrCod>0"); " WHERE UsrCod>0");
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:

View File

@ -104,7 +104,7 @@ void Ann_ShowAllAnnouncements (void)
"Roles," // row[2] "Roles," // row[2]
"Subject," // row[3] "Subject," // row[3]
"Content" // row[4] "Content" // row[4]
" FROM ann_announcements" " FROM ann_announcements"
" ORDER BY AnnCod DESC"); " ORDER BY AnnCod DESC");
} }
else if (Gbl.Usrs.Me.Logged) else if (Gbl.Usrs.Me.Logged)
@ -117,7 +117,7 @@ void Ann_ShowAllAnnouncements (void)
"Roles," // row[2] "Roles," // row[2]
"Subject," // row[3] "Subject," // row[3]
"Content" // row[4] "Content" // row[4]
" FROM ann_announcements" " FROM ann_announcements"
" WHERE (Roles&%u)<>0 " // All my roles in different courses " 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); (unsigned) Gbl.Usrs.Me.UsrDat.Roles.InCrss);
@ -131,8 +131,9 @@ void Ann_ShowAllAnnouncements (void)
"Roles," // row[2] "Roles," // row[2]
"Subject," // row[3] "Subject," // row[3]
"Content" // row[4] "Content" // row[4]
" FROM ann_announcements" " FROM ann_announcements"
" WHERE Status=%u AND (Roles&%u)<>0 " " WHERE Status=%u"
" AND (Roles&%u)<>0 "
" ORDER BY AnnCod DESC", " ORDER BY AnnCod DESC",
(unsigned) Ann_ACTIVE_ANNOUNCEMENT, (unsigned) Ann_ACTIVE_ANNOUNCEMENT,
(unsigned) (1 << Rol_UNK)); (unsigned) (1 << Rol_UNK));
@ -234,13 +235,13 @@ void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void)
"SELECT AnnCod," // row[0] "SELECT AnnCod," // row[0]
"Subject," // row[1] "Subject," // row[1]
"Content" // row[2] "Content" // row[2]
" FROM ann_announcements" " FROM ann_announcements"
" WHERE Status=%u" " WHERE Status=%u"
" AND (Roles&%u)<>0 " // All my roles in different courses " AND (Roles&%u)<>0 " // All my roles in different courses
" AND AnnCod NOT IN" " AND AnnCod NOT IN"
" (SELECT AnnCod" " (SELECT AnnCod"
" FROM ann_seen" " FROM ann_seen"
" WHERE UsrCod=%ld)" " 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, (unsigned) Gbl.Usrs.Me.UsrDat.Roles.InCrss,

View File

@ -695,7 +695,7 @@ static void Asg_GetListAssignments (struct Asg_Assignments *Assignments)
if (Gbl.Crs.Grps.WhichGrps == Grp_MY_GROUPS) if (Gbl.Crs.Grps.WhichGrps == Grp_MY_GROUPS)
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignments", NumRows = DB_QuerySELECT (&mysql_res,"can not get assignments",
"SELECT AsgCod" "SELECT AsgCod"
" FROM asg_assignments" " FROM asg_assignments"
" WHERE CrsCod=%ld%s" " WHERE CrsCod=%ld%s"
" AND (" " AND ("
// Assignment is for the whole course // Assignment is for the whole course
@ -719,7 +719,7 @@ static void Asg_GetListAssignments (struct Asg_Assignments *Assignments)
else // Gbl.Crs.Grps.WhichGrps == Grp_ALL_GROUPS else // Gbl.Crs.Grps.WhichGrps == Grp_ALL_GROUPS
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignments", NumRows = DB_QuerySELECT (&mysql_res,"can not get assignments",
"SELECT AsgCod" "SELECT AsgCod"
" FROM asg_assignments" " FROM asg_assignments"
" WHERE CrsCod=%ld%s" " WHERE CrsCod=%ld%s"
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
@ -776,7 +776,7 @@ void Asg_GetDataOfAssignmentByCod (struct Asg_Assignment *Asg)
"NOW() BETWEEN StartTime AND EndTime," // row[5] "NOW() BETWEEN StartTime AND EndTime," // row[5]
"Title," // row[6] "Title," // row[6]
"Folder" // row[7] "Folder" // row[7]
" FROM asg_assignments" " FROM asg_assignments"
" WHERE AsgCod=%ld" " WHERE AsgCod=%ld"
" AND CrsCod=%ld", " AND CrsCod=%ld",
Asg->AsgCod, Asg->AsgCod,
@ -814,7 +814,7 @@ void Asg_GetDataOfAssignmentByFolder (struct Asg_Assignment *Asg)
"NOW() BETWEEN StartTime AND EndTime," // row[5] "NOW() BETWEEN StartTime AND EndTime," // row[5]
"Title," // row[6] "Title," // row[6]
"Folder" // row[7] "Folder" // row[7]
" FROM asg_assignments" " FROM asg_assignments"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" AND Folder='%s'", " AND Folder='%s'",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
@ -941,7 +941,7 @@ static void Asg_GetAssignmentTxtFromDB (long AsgCod,char Txt[Cns_MAX_BYTES_TEXT
/***** Get text of assignment from database *****/ /***** Get text of assignment from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignment text", NumRows = DB_QuerySELECT (&mysql_res,"can not get assignment text",
"SELECT Txt" // row[0] "SELECT Txt" // row[0]
" FROM asg_assignments" " FROM asg_assignments"
" WHERE AsgCod=%ld" " WHERE AsgCod=%ld"
" AND CrsCod=%ld", " AND CrsCod=%ld",
AsgCod, AsgCod,
@ -984,7 +984,7 @@ void Asg_GetNotifAssignment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
NumRows = DB_QuerySELECT (&mysql_res,"can not get assignment title and text", NumRows = DB_QuerySELECT (&mysql_res,"can not get assignment title and text",
"SELECT Title," // row[0] "SELECT Title," // row[0]
"Txt" // row[1] "Txt" // row[1]
" FROM asg_assignments" " FROM asg_assignments"
" WHERE AsgCod=%ld", " WHERE AsgCod=%ld",
AsgCod); AsgCod);
@ -1202,9 +1202,10 @@ static bool Asg_CheckIfSimilarAssignmentExists (const char *Field,const char *Va
/***** Get number of assignments with a field value from database *****/ /***** Get number of assignments with a field value from database *****/
return (DB_QueryCOUNT ("can not get similar assignments", return (DB_QueryCOUNT ("can not get similar assignments",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM asg_assignments" " FROM asg_assignments"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" AND %s='%s' AND AsgCod<>%ld", " AND %s='%s'"
" AND AsgCod<>%ld",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
Field,Value,AsgCod) != 0); Field,Value,AsgCod) != 0);
} }
@ -1841,7 +1842,7 @@ static bool Asg_CheckIfIBelongToCrsOrGrpsThisAssignment (long AsgCod)
/***** Get if I can do an assignment from database *****/ /***** Get if I can do an assignment from database *****/
return (DB_QueryCOUNT ("can not check if I can do an assignment", return (DB_QueryCOUNT ("can not check if I can do an assignment",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM asg_assignments" " FROM asg_assignments"
" WHERE AsgCod=%ld" " WHERE AsgCod=%ld"
" AND (" " AND ("
// Assignment is for the whole course // Assignment is for the whole course
@ -1880,65 +1881,65 @@ unsigned Asg_GetNumCoursesWithAssignments (Hie_Lvl_Level_t Scope)
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with assignments", DB_QueryCOUNT ("can not get number of courses with assignments",
"SELECT COUNT(DISTINCT CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM asg_assignments" " FROM asg_assignments"
" WHERE CrsCod>0"); " WHERE CrsCod>0");
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with assignments", DB_QueryCOUNT ("can not get number of courses with assignments",
"SELECT COUNT(DISTINCT asg_assignments.CrsCod)" "SELECT COUNT(DISTINCT asg_assignments.CrsCod)"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"courses," "courses,"
"asg_assignments" "asg_assignments"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0" " AND crs_courses.Status=0"
" AND crs_courses.CrsCod=asg_assignments.CrsCod", " AND crs_courses.CrsCod=asg_assignments.CrsCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
case Hie_Lvl_INS: case Hie_Lvl_INS:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with assignments", DB_QueryCOUNT ("can not get number of courses with assignments",
"SELECT COUNT(DISTINCT asg_assignments.CrsCod)" "SELECT COUNT(DISTINCT asg_assignments.CrsCod)"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"asg_assignments" "asg_assignments"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0" " AND crs_courses.Status=0"
" AND crs_courses.CrsCod=asg_assignments.CrsCod", " AND crs_courses.CrsCod=asg_assignments.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with assignments", DB_QueryCOUNT ("can not get number of courses with assignments",
"SELECT COUNT(DISTINCT asg_assignments.CrsCod)" "SELECT COUNT(DISTINCT asg_assignments.CrsCod)"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"asg_assignments" "asg_assignments"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0" " AND crs_courses.Status=0"
" AND crs_courses.CrsCod=asg_assignments.CrsCod", " AND crs_courses.CrsCod=asg_assignments.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with assignments", DB_QueryCOUNT ("can not get number of courses with assignments",
"SELECT COUNT(DISTINCT asg_assignments.CrsCod)" "SELECT COUNT(DISTINCT asg_assignments.CrsCod)"
" FROM crs_courses," " FROM crs_courses,"
"asg_assignments" "asg_assignments"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.Status=0" " AND crs_courses.Status=0"
" AND crs_courses.CrsCod=asg_assignments.CrsCod", " AND crs_courses.CrsCod=asg_assignments.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with assignments", DB_QueryCOUNT ("can not get number of courses with assignments",
"SELECT COUNT(DISTINCT CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM asg_assignments" " FROM asg_assignments"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
default: default:
@ -1966,66 +1967,66 @@ unsigned Asg_GetNumAssignments (Hie_Lvl_Level_t Scope,unsigned *NumNotif)
DB_QuerySELECT (&mysql_res,"can not get number of assignments", DB_QuerySELECT (&mysql_res,"can not get number of assignments",
"SELECT COUNT(*)," // row[0] "SELECT COUNT(*)," // row[0]
"SUM(NumNotif)" // row[1] "SUM(NumNotif)" // row[1]
" FROM asg_assignments" " FROM asg_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(*)," // row[0] "SELECT COUNT(*)," // row[0]
"SUM(asg_assignments.NumNotif)" // row[1] "SUM(asg_assignments.NumNotif)" // row[1]
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"asg_assignments" "asg_assignments"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=asg_assignments.CrsCod", " AND crs_courses.CrsCod=asg_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(*)," // row[0] "SELECT COUNT(*)," // row[0]
"SUM(asg_assignments.NumNotif)" // row[1] "SUM(asg_assignments.NumNotif)" // row[1]
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"asg_assignments" "asg_assignments"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=asg_assignments.CrsCod", " AND crs_courses.CrsCod=asg_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(*)," "SELECT COUNT(*),"
"SUM(asg_assignments.NumNotif)" "SUM(asg_assignments.NumNotif)"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"asg_assignments" "asg_assignments"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=asg_assignments.CrsCod", " AND crs_courses.CrsCod=asg_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(*)," "SELECT COUNT(*),"
"SUM(asg_assignments.NumNotif)" "SUM(asg_assignments.NumNotif)"
" FROM crs_courses," " FROM crs_courses,"
"asg_assignments" "asg_assignments"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=asg_assignments.CrsCod", " AND crs_courses.CrsCod=asg_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(*)," "SELECT COUNT(*),"
"SUM(NumNotif)" "SUM(NumNotif)"
" FROM asg_assignments" " FROM asg_assignments"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break; break;

View File

@ -700,7 +700,7 @@ static void Att_GetListAttEvents (struct Att_Events *Events,
else // Gbl.Crs.Grps.WhichGrps == Grp_ALL_GROUPS else // Gbl.Crs.Grps.WhichGrps == Grp_ALL_GROUPS
NumRows = DB_QuerySELECT (&mysql_res,"can not get attendance events", NumRows = DB_QuerySELECT (&mysql_res,"can not get attendance events",
"SELECT AttCod" "SELECT AttCod"
" FROM att_events" " FROM att_events"
" WHERE CrsCod=%ld%s" " WHERE CrsCod=%ld%s"
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
@ -770,13 +770,16 @@ bool Att_GetDataOfAttEventByCod (struct Att_Event *Event)
{ {
/***** Build query *****/ /***** Build query *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get attendance event data", NumRows = DB_QuerySELECT (&mysql_res,"can not get attendance event data",
"SELECT AttCod,CrsCod,Hidden,UsrCod," "SELECT AttCod," // row[0]
"UNIX_TIMESTAMP(StartTime)," "CrsCod," // row[1]
"UNIX_TIMESTAMP(EndTime)," "Hidden," // row[2]
"NOW() BETWEEN StartTime AND EndTime," "UsrCod," // row[3]
"CommentTchVisible," "UNIX_TIMESTAMP(StartTime)," // row[4]
"Title" "UNIX_TIMESTAMP(EndTime)," // row[5]
" FROM att_events" "NOW() BETWEEN StartTime AND EndTime," // row[6]
"CommentTchVisible," // row[7]
"Title" // row[8]
" FROM att_events"
" WHERE AttCod=%ld", " WHERE AttCod=%ld",
Event->AttCod); Event->AttCod);
@ -870,8 +873,10 @@ static void Att_GetAttEventDescriptionFromDB (long AttCod,char Description[Cns_M
/***** Get text of attendance event from database *****/ /***** Get text of attendance event from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get attendance event text", NumRows = DB_QuerySELECT (&mysql_res,"can not get attendance event text",
"SELECT Txt FROM att_events" "SELECT Txt"
" WHERE AttCod=%ld AND CrsCod=%ld", " FROM att_events"
" WHERE AttCod=%ld"
" AND CrsCod=%ld",
AttCod,Gbl.Hierarchy.Crs.CrsCod); AttCod,Gbl.Hierarchy.Crs.CrsCod);
/***** The result of the query must have one row or none *****/ /***** The result of the query must have one row or none *****/
@ -1067,9 +1072,11 @@ static bool Att_CheckIfSimilarAttEventExists (const char *Field,const char *Valu
/***** Get number of attendance events /***** Get number of attendance events
with a field value from database *****/ with a field value from database *****/
return (DB_QueryCOUNT ("can not get similar attendance events", return (DB_QueryCOUNT ("can not get similar attendance events",
"SELECT COUNT(*) FROM att_events" "SELECT COUNT(*)"
" FROM att_events"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" AND %s='%s' AND AttCod<>%ld", " AND %s='%s'"
" AND AttCod<>%ld",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
Field,Value,AttCod) != 0); Field,Value,AttCod) != 0);
} }
@ -1697,12 +1704,12 @@ void Att_RemoveCrsAttEvents (long CrsCod)
unsigned Att_GetNumAttEventsInCrs (long CrsCod) unsigned Att_GetNumAttEventsInCrs (long CrsCod)
{ {
/***** Get number of attendance events in a course from database *****/ /***** Get number of attendance events in a course from database *****/
return return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number of attendance events" DB_QueryCOUNT ("can not get number of attendance events in course",
" in course", "SELECT COUNT(*)"
"SELECT COUNT(*) FROM att_events" " FROM att_events"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
CrsCod); CrsCod);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1723,49 +1730,49 @@ unsigned Att_GetNumCoursesWithAttEvents (Hie_Lvl_Level_t Scope)
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
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 CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM att_events" " FROM att_events"
" WHERE CrsCod>0"); " WHERE CrsCod>0");
break; break;
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 ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"att_events" "att_events"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0" " AND crs_courses.Status=0"
" AND crs_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," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"att_events" "att_events"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.Status=0" " AND crs_courses.Status=0"
" AND crs_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 crs_courses," " FROM crs_courses,"
"att_events" "att_events"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.Status=0" " AND crs_courses.Status=0"
" AND crs_courses.CrsCod=att_events.CrsCod", " 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 courses with attendance events", DB_QuerySELECT (&mysql_res,"can not get number of courses with attendance events",
"SELECT COUNT(DISTINCT CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM att_events" " FROM att_events"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break; break;
@ -1802,51 +1809,52 @@ unsigned Att_GetNumAttEvents (Hie_Lvl_Level_t Scope,unsigned *NumNotif)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
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(*),"
" FROM att_events" "SUM(NumNotif)"
" FROM att_events"
" WHERE CrsCod>0"); " WHERE CrsCod>0");
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(*)," "SELECT COUNT(*),"
"SUM(att_events.NumNotif)" "SUM(att_events.NumNotif)"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"att_events" "att_events"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_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(*)," "SELECT COUNT(*),"
"SUM(att_events.NumNotif)" "SUM(att_events.NumNotif)"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"att_events" "att_events"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_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(*)," "SELECT COUNT(*),"
"SUM(att_events.NumNotif)" "SUM(att_events.NumNotif)"
" FROM crs_courses," " FROM crs_courses,"
"att_events" "att_events"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=att_events.CrsCod", " 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(*)," "SELECT COUNT(*),"
"SUM(NumNotif)" "SUM(NumNotif)"
" FROM att_events" " FROM att_events"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break; break;
@ -3071,12 +3079,12 @@ static void Att_GetListSelectedAttCods (struct Att_Events *Events)
else // No students attended to this event else // No students attended to this event
{ {
/***** Get groups associated to an attendance event from database *****/ /***** Get groups associated to an attendance event from database *****/
NumGrpsInThisEvent = (unsigned) DB_QuerySELECT (&mysql_res,"can not get groups" NumGrpsInThisEvent = (unsigned)
" of an attendance event", DB_QuerySELECT (&mysql_res,"can not get groups of an attendance event",
"SELECT GrpCod" // row[0] "SELECT GrpCod" // row[0]
" FROM att_groups" " FROM att_groups"
" WHERE att_groups.AttCod=%ld", " WHERE att_groups.AttCod=%ld",
Events->Lst[NumAttEvent].AttCod); Events->Lst[NumAttEvent].AttCod);
if (NumGrpsInThisEvent) // This event is associated to groups if (NumGrpsInThisEvent) // This event is associated to groups
/* Get groups associated to this event */ /* Get groups associated to this event */
for (NumGrpInThisEvent = 0; for (NumGrpInThisEvent = 0;

View File

@ -147,7 +147,7 @@ void Ban_SeeBanners (void)
"FullName," // row[3] "FullName," // row[3]
"Img," // row[4] "Img," // row[4]
"WWW" // row[5] "WWW" // row[5]
" FROM ban_banners" " FROM ban_banners"
" WHERE Hidden='N'" " WHERE Hidden='N'"
" ORDER BY ShortName"); " ORDER BY ShortName");
Ban_GetListBanners (&Banners,&mysql_res,NumRows); Ban_GetListBanners (&Banners,&mysql_res,NumRows);

View File

@ -903,7 +903,8 @@ void Cfe_CreateListCallsForExams (struct Cfe_CallsForExams *CallsForExams)
"SELECT ExaCod," // row[0] "SELECT ExaCod," // row[0]
"DATE(ExamDate)" // row[1] "DATE(ExamDate)" // row[1]
" FROM cfe_exams" " FROM cfe_exams"
" WHERE CrsCod=%ld AND Status=%u" " WHERE CrsCod=%ld"
" AND Status=%u"
" ORDER BY ExamDate DESC", " ORDER BY ExamDate DESC",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
(unsigned) Cfe_VISIBLE_CALL_FOR_EXAM); (unsigned) Cfe_VISIBLE_CALL_FOR_EXAM);

View File

@ -130,15 +130,15 @@ void Ctr_SeeCtrWithPendingDegs (void)
case Rol_CTR_ADM: case Rol_CTR_ADM:
NumCtrs = (unsigned) NumCtrs = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get centers with pending degrees", DB_QuerySELECT (&mysql_res,"can not get centers with pending degrees",
"SELECT deg_degrees.CtrCod," "SELECT deg_degrees.CtrCod," // row[0]
"COUNT(*)" "COUNT(*)" // row[1]
" FROM deg_degrees," " FROM deg_degrees,"
"ctr_admin," "ctr_admin,"
"ctr_centers" "ctr_centers"
" WHERE (deg_degrees.Status & %u)<>0" " WHERE (deg_degrees.Status & %u)<>0"
" AND deg_degrees.CtrCod=ctr_admin.CtrCod" " AND deg_degrees.CtrCod=ctr_admin.CtrCod"
" AND ctr_admin.UsrCod=%ld" " AND ctr_admin.UsrCod=%ld"
" AND deg_degrees.CtrCod=ctr_centers.CtrCod" " AND deg_degrees.CtrCod=ctr_centers.CtrCod"
" GROUP BY deg_degrees.CtrCod" " GROUP BY deg_degrees.CtrCod"
" ORDER BY ctr_centers.ShortName", " ORDER BY ctr_centers.ShortName",
(unsigned) Deg_STATUS_BIT_PENDING, (unsigned) Deg_STATUS_BIT_PENDING,
@ -149,10 +149,10 @@ void Ctr_SeeCtrWithPendingDegs (void)
DB_QuerySELECT (&mysql_res,"can not get centers with pending degrees", DB_QuerySELECT (&mysql_res,"can not get centers with pending degrees",
"SELECT deg_degrees.CtrCod," "SELECT deg_degrees.CtrCod,"
"COUNT(*)" "COUNT(*)"
" FROM deg_degrees," " FROM deg_degrees,"
"ctr_centers" "ctr_centers"
" WHERE (deg_degrees.Status & %u)<>0" " WHERE (deg_degrees.Status & %u)<>0"
" AND deg_degrees.CtrCod=ctr_centers.CtrCod" " AND deg_degrees.CtrCod=ctr_centers.CtrCod"
" GROUP BY deg_degrees.CtrCod" " GROUP BY deg_degrees.CtrCod"
" ORDER BY ctr_centers.ShortName", " ORDER BY ctr_centers.ShortName",
(unsigned) Deg_STATUS_BIT_PENDING); (unsigned) Deg_STATUS_BIT_PENDING);
@ -567,7 +567,7 @@ void Ctr_GetBasicListOfCenters (long InsCod)
"ShortName," // row[ 8] "ShortName," // row[ 8]
"FullName," // row[ 9] "FullName," // row[ 9]
"WWW" // row[10] "WWW" // row[10]
" FROM ctr_centers" " FROM ctr_centers"
" WHERE InsCod=%ld" " WHERE InsCod=%ld"
" ORDER BY FullName", " ORDER BY FullName",
InsCod); InsCod);
@ -636,9 +636,9 @@ void Ctr_GetFullListOfCenters (long InsCod)
"ctr_centers.FullName," // row[ 9] "ctr_centers.FullName," // row[ 9]
"ctr_centers.WWW," // row[10] "ctr_centers.WWW," // row[10]
"COUNT(*) AS NumUsrs" // row[11] "COUNT(*) AS NumUsrs" // row[11]
" FROM ctr_centers,usr_data" " FROM ctr_centers,usr_data"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=usr_data.CtrCod" " AND ctr_centers.CtrCod=usr_data.CtrCod"
" GROUP BY ctr_centers.CtrCod)" " GROUP BY ctr_centers.CtrCod)"
" UNION " " UNION "
"(SELECT CtrCod," // row[ 0] "(SELECT CtrCod," // row[ 0]
@ -653,12 +653,14 @@ void Ctr_GetFullListOfCenters (long InsCod)
"FullName," // row[ 9] "FullName," // row[ 9]
"WWW," // row[10] "WWW," // row[10]
"0 AS NumUsrs" // row[11] "0 AS NumUsrs" // row[11]
" FROM ctr_centers" " FROM ctr_centers"
" WHERE InsCod=%ld" " WHERE InsCod=%ld"
" AND CtrCod NOT IN" " AND CtrCod NOT IN"
" (SELECT DISTINCT CtrCod FROM usr_data))" " (SELECT DISTINCT CtrCod"
" FROM usr_data))"
" ORDER BY %s", " ORDER BY %s",
InsCod,InsCod, InsCod,
InsCod,
OrderBySubQuery[Gbl.Hierarchy.Ctrs.SelectedOrder]); OrderBySubQuery[Gbl.Hierarchy.Ctrs.SelectedOrder]);
if (NumRows) // Centers found... if (NumRows) // Centers found...
@ -732,7 +734,7 @@ bool Ctr_GetDataOfCenterByCod (struct Ctr_Center *Ctr)
"ShortName," // row[ 8] "ShortName," // row[ 8]
"FullName," // row[ 9] "FullName," // row[ 9]
"WWW" // row[10] "WWW" // row[10]
" FROM ctr_centers" " FROM ctr_centers"
" WHERE CtrCod=%ld", " WHERE CtrCod=%ld",
Ctr->CtrCod); Ctr->CtrCod);
if (NumRows) // Center found... if (NumRows) // Center found...
@ -801,7 +803,9 @@ long Ctr_GetInsCodOfCenterByCod (long CtrCod)
{ {
/***** Get the institution code of a center from database *****/ /***** Get the institution code of a center from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get the institution of a center", if (DB_QuerySELECT (&mysql_res,"can not get the institution of a center",
"SELECT InsCod FROM ctr_centers WHERE CtrCod=%ld", "SELECT InsCod"
" FROM ctr_centers"
" WHERE CtrCod=%ld",
CtrCod) == 1) CtrCod) == 1)
{ {
/***** Get the institution code of this center *****/ /***** Get the institution code of this center *****/
@ -830,7 +834,9 @@ void Ctr_GetShortNameOfCenterByCod (struct Ctr_Center *Ctr)
{ {
/***** Get the short name of a center from database *****/ /***** Get the short name of a center from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get the short name of a center", if (DB_QuerySELECT (&mysql_res,"can not get the short name of a center",
"SELECT ShortName FROM ctr_centers WHERE CtrCod=%ld", "SELECT ShortName"
" FROM ctr_centers"
" WHERE CtrCod=%ld",
Ctr->CtrCod) == 1) Ctr->CtrCod) == 1)
{ {
/***** Get the short name of this center *****/ /***** Get the short name of this center *****/
@ -892,7 +898,7 @@ void Ctr_WriteSelectorOfCenter (void)
DB_QuerySELECT (&mysql_res,"can not get centers", DB_QuerySELECT (&mysql_res,"can not get centers",
"SELECT DISTINCT CtrCod," "SELECT DISTINCT CtrCod,"
"ShortName" "ShortName"
" FROM ctr_centers" " FROM ctr_centers"
" WHERE InsCod=%ld" " WHERE InsCod=%ld"
" ORDER BY ShortName", " ORDER BY ShortName",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
@ -1435,9 +1441,15 @@ bool Ctr_CheckIfCtrNameExistsInIns (const char *FieldName,const char *Name,
/***** Get number of centers with a name from database *****/ /***** Get number of centers with a name from database *****/
return (DB_QueryCOUNT ("can not check if the name of a center" return (DB_QueryCOUNT ("can not check if the name of a center"
" already existed", " already existed",
"SELECT COUNT(*) FROM ctr_centers" "SELECT COUNT(*)"
" WHERE InsCod=%ld AND %s='%s' AND CtrCod<>%ld", " FROM ctr_centers"
InsCod,FieldName,Name,CtrCod) != 0); " WHERE InsCod=%ld"
" AND %s='%s'"
" AND CtrCod<>%ld",
InsCod,
FieldName,
Name,
CtrCod) != 0);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1953,10 +1965,10 @@ static unsigned Ctr_GetNumCtrsInCty (long CtyCod)
Gbl.Cache.NumCtrsInCty.NumCtrs = (unsigned) Gbl.Cache.NumCtrsInCty.NumCtrs = (unsigned)
DB_QueryCOUNT ("can not get number of centers in a country", DB_QueryCOUNT ("can not get number of centers in a country",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers" "ctr_centers"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod", " AND ins_instits.InsCod=ctr_centers.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);
@ -2000,7 +2012,9 @@ unsigned Ctr_GetNumCtrsInIns (long InsCod)
Gbl.Cache.NumCtrsInIns.InsCod = InsCod; Gbl.Cache.NumCtrsInIns.InsCod = InsCod;
Gbl.Cache.NumCtrsInIns.NumCtrs = (unsigned) Gbl.Cache.NumCtrsInIns.NumCtrs = (unsigned)
DB_QueryCOUNT ("can not get number of centers in an institution", DB_QueryCOUNT ("can not get number of centers in an institution",
"SELECT COUNT(*) FROM ctr_centers WHERE InsCod=%ld", "SELECT COUNT(*)"
" FROM ctr_centers"
" 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);
@ -2036,8 +2050,10 @@ unsigned Ctr_GetCachedNumCtrsWithMapInSys (void)
/* 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 centers with map", DB_QueryCOUNT ("can not get number of centers with map",
"SELECT COUNT(*) FROM ctr_centers" "SELECT COUNT(*)"
" WHERE Latitude<>0 OR Longitude<>0"); " FROM ctr_centers"
" 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);
} }
@ -2062,12 +2078,12 @@ unsigned Ctr_GetCachedNumCtrsWithMapInCty (long CtyCod)
NumCtrsWithMap = (unsigned) NumCtrsWithMap = (unsigned)
DB_QueryCOUNT ("can not get number of centers with map", DB_QueryCOUNT ("can not get number of centers with map",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers" "ctr_centers"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND (ctr_centers.Latitude<>0" " AND (ctr_centers.Latitude<>0"
" OR ctr_centers.Longitude<>0)", " OR ctr_centers.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);
@ -2092,9 +2108,11 @@ unsigned Ctr_GetCachedNumCtrsWithMapInIns (long InsCod)
/* 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 centers with map", DB_QueryCOUNT ("can not get number of centers with map",
"SELECT COUNT(*) FROM ctr_centers" "SELECT COUNT(*)"
" FROM ctr_centers"
" 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);
@ -2112,9 +2130,12 @@ unsigned Ctr_GetNumCtrsInPlc (long PlcCod)
/***** Get number of centers (of the current institution) in a place *****/ /***** Get number of centers (of the current institution) in a place *****/
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get the number of centers in a place", DB_QueryCOUNT ("can not get the number of centers in a place",
"SELECT COUNT(*) FROM ctr_centers" "SELECT COUNT(*)"
" WHERE InsCod=%ld AND PlcCod=%ld", " FROM ctr_centers"
Gbl.Hierarchy.Ins.InsCod,PlcCod); " WHERE InsCod=%ld"
" AND PlcCod=%ld",
Gbl.Hierarchy.Ins.InsCod,
PlcCod);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2134,11 +2155,11 @@ unsigned Ctr_GetCachedNumCtrsWithDegs (const char *SubQuery,
NumCtrsWithDegs = (unsigned) NumCtrsWithDegs = (unsigned)
DB_QueryCOUNT ("can not get number of centers with degrees", DB_QueryCOUNT ("can not get number of centers with degrees",
"SELECT COUNT(DISTINCT ctr_centers.CtrCod)" "SELECT COUNT(DISTINCT ctr_centers.CtrCod)"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees" "deg_degrees"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod" " WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod", " AND ctr_centers.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);
@ -2164,13 +2185,13 @@ unsigned Ctr_GetCachedNumCtrsWithCrss (const char *SubQuery,
NumCtrsWithCrss = (unsigned) NumCtrsWithCrss = (unsigned)
DB_QueryCOUNT ("can not get number of centers with courses", DB_QueryCOUNT ("can not get number of centers with courses",
"SELECT COUNT(DISTINCT ctr_centers.CtrCod)" "SELECT COUNT(DISTINCT ctr_centers.CtrCod)"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses" "crs_courses"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod" " WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod", " AND deg_degrees.DegCod=crs_courses.DegCod",
SubQuery); 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);

View File

@ -517,7 +517,8 @@ static void CtrCfg_GetPhotoAttr (long CtrCod,char **PhotoAttribution)
/***** Get photo attribution from database *****/ /***** Get photo attribution from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get photo attribution", if (DB_QuerySELECT (&mysql_res,"can not get photo attribution",
"SELECT PhotoAttribution FROM ctr_centers" "SELECT PhotoAttribution"
" FROM ctr_centers"
" WHERE CtrCod=%ld", " WHERE CtrCod=%ld",
CtrCod)) CtrCod))
{ {

View File

@ -600,13 +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.51.49 (2021-03-26)" #define Log_PLATFORM_VERSION "SWAD 20.52 (2021-03-28)"
#define CSS_FILE "swad20.45.css" #define CSS_FILE "swad20.45.css"
#define JS_FILE "swad20.6.2.js" #define JS_FILE "swad20.6.2.js"
/* /*
TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename CENTRE to CENTER in help wiki.
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
Version 20.52: Mar 28, 2021 Code refactoring in database selects. (309103 lines)
Version 20.51.49: Mar 26, 2021 User IDs database table renamed. (308816 lines) Version 20.51.49: Mar 26, 2021 User IDs database table renamed. (308816 lines)
1 change necessary in database: 1 change necessary in database:
RENAME TABLE usr_IDs TO usr_ids; RENAME TABLE usr_IDs TO usr_ids;

View File

@ -356,7 +356,7 @@ static unsigned Cht_GetNumUsrsInChatRoom (const char *RoomCode)
/***** Get number of users connected to chat rooms from database *****/ /***** Get number of users connected to chat rooms from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get number of users" if (DB_QuerySELECT (&mysql_res,"can not get number of users"
" connected to a chat room", " connected to a chat room",
"SELECT NumUsrs" "SELECT NumUsrs" // row[0]
" FROM cht_rooms" " FROM cht_rooms"
" WHERE RoomCode='%s'", " WHERE RoomCode='%s'",
RoomCode)) RoomCode))

View File

@ -466,7 +466,7 @@ static unsigned Con_GetConnectedUsrsTotal (Rol_Role_t Role)
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of connected users", DB_QueryCOUNT ("can not get number of connected users",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM usr_connected" " FROM usr_connected"
" WHERE RoleInLastCrs=%u", " WHERE RoleInLastCrs=%u",
(unsigned) Role); (unsigned) Role);
} }

View File

@ -126,12 +126,12 @@ void Cty_SeeCtyWithPendingInss (void)
NumCtys = (unsigned) NumCtys = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get countries" DB_QuerySELECT (&mysql_res,"can not get countries"
" with pending institutions", " with pending institutions",
"SELECT ins_instits.CtyCod," "SELECT ins_instits.CtyCod," // row[0]
"COUNT(*)" "COUNT(*)" // row[1]
" FROM ins_instits," " FROM ins_instits,"
"cty_countrs" "cty_countrs"
" WHERE (ins_instits.Status & %u)<>0" " WHERE (ins_instits.Status & %u)<>0"
" AND ins_instits.CtyCod=cty_countrs.CtyCod" " AND ins_instits.CtyCod=cty_countrs.CtyCod"
" GROUP BY ins_instits.CtyCod" " GROUP BY ins_instits.CtyCod"
" ORDER BY cty_countrs.Name_%s", " ORDER BY cty_countrs.Name_%s",
(unsigned) Ins_STATUS_BIT_PENDING, (unsigned) Ins_STATUS_BIT_PENDING,
@ -763,7 +763,7 @@ void Cty_GetBasicListOfCountries (void)
"SELECT CtyCod," // row[0] "SELECT CtyCod," // row[0]
"Alpha2," // row[1] "Alpha2," // row[1]
"Name_%s" // row[2] "Name_%s" // row[2]
" FROM cty_countrs" " FROM cty_countrs"
" ORDER BY Name_%s", " ORDER BY Name_%s",
Lan_STR_LANG_ID[Gbl.Prefs.Language], Lan_STR_LANG_ID[Gbl.Prefs.Language],
Lan_STR_LANG_ID[Gbl.Prefs.Language]); Lan_STR_LANG_ID[Gbl.Prefs.Language]);
@ -876,8 +876,8 @@ void Cty_GetFullListOfCountries (void)
"%s" // row[...] "%s" // row[...]
"%s" // row[...] "%s" // row[...]
"COUNT(*) AS NumUsrs" // row[...] "COUNT(*) AS NumUsrs" // row[...]
" FROM cty_countrs," " FROM cty_countrs,"
"usr_data" "usr_data"
" WHERE cty_countrs.CtyCod=usr_data.CtyCod" " WHERE cty_countrs.CtyCod=usr_data.CtyCod"
" GROUP BY cty_countrs.CtyCod)" " GROUP BY cty_countrs.CtyCod)"
" UNION " " UNION "
@ -886,9 +886,10 @@ void Cty_GetFullListOfCountries (void)
"%s" // row[...] "%s" // row[...]
"%s" // row[...] "%s" // row[...]
"0 AS NumUsrs" // row[...] "0 AS NumUsrs" // row[...]
" FROM cty_countrs" " FROM cty_countrs"
" WHERE CtyCod NOT IN" " WHERE CtyCod NOT IN"
" (SELECT DISTINCT CtyCod FROM usr_data))" " (SELECT DISTINCT CtyCod"
" FROM usr_data))"
" ORDER BY %s", " ORDER BY %s",
SubQueryNam1,SubQueryWWW1, SubQueryNam1,SubQueryWWW1,
SubQueryNam2,SubQueryWWW2,OrderBySubQuery); SubQueryNam2,SubQueryWWW2,OrderBySubQuery);
@ -973,7 +974,7 @@ void Cty_WriteSelectorOfCountry (void)
DB_QuerySELECT (&mysql_res,"can not get countries", DB_QuerySELECT (&mysql_res,"can not get countries",
"SELECT DISTINCT CtyCod," // row[0] "SELECT DISTINCT CtyCod," // row[0]
"Name_%s" // row[1] "Name_%s" // row[1]
" FROM cty_countrs" " FROM cty_countrs"
" ORDER BY Name_%s", " ORDER BY Name_%s",
Lan_STR_LANG_ID[Gbl.Prefs.Language], Lan_STR_LANG_ID[Gbl.Prefs.Language],
Lan_STR_LANG_ID[Gbl.Prefs.Language]); Lan_STR_LANG_ID[Gbl.Prefs.Language]);
@ -1082,7 +1083,7 @@ bool Cty_GetDataOfCountryByCod (struct Cty_Countr *Cty)
"SELECT Alpha2," // row[0] "SELECT Alpha2," // row[0]
"Name_%s," // row[1] "Name_%s," // row[1]
"WWW_%s" // row[2] "WWW_%s" // row[2]
" FROM cty_countrs" " FROM cty_countrs"
" WHERE CtyCod='%03ld'", " WHERE CtyCod='%03ld'",
Lan_STR_LANG_ID[Gbl.Prefs.Language], Lan_STR_LANG_ID[Gbl.Prefs.Language],
Lan_STR_LANG_ID[Gbl.Prefs.Language], Lan_STR_LANG_ID[Gbl.Prefs.Language],
@ -1153,7 +1154,7 @@ void Cty_GetCountryName (long CtyCod,Lan_Language_t Language,
if (DB_QuerySELECT (&mysql_res,"can not get the name of a country", if (DB_QuerySELECT (&mysql_res,"can not get the name of a country",
"SELECT Name_%s" // row[0] "SELECT Name_%s" // row[0]
" FROM cty_countrs" " FROM cty_countrs"
" WHERE CtyCod='%03ld'", " WHERE CtyCod='%03ld'",
Lan_STR_LANG_ID[Language],CtyCod)) // Country found... Lan_STR_LANG_ID[Language],CtyCod)) // Country found...
{ {
@ -1476,7 +1477,7 @@ static bool Cty_CheckIfNumericCountryCodeExists (long CtyCod)
return (DB_QueryCOUNT ("can not check if the numeric code" return (DB_QueryCOUNT ("can not check if the numeric code"
" of a country already existed", " of a country already existed",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM cty_countrs" " FROM cty_countrs"
" WHERE CtyCod='%03ld'", " WHERE CtyCod='%03ld'",
CtyCod) != 0); CtyCod) != 0);
} }
@ -1491,7 +1492,7 @@ static bool Cty_CheckIfAlpha2CountryCodeExists (const char Alpha2[2 + 1])
return (DB_QueryCOUNT ("can not check if the alphabetic code" return (DB_QueryCOUNT ("can not check if the alphabetic code"
" of a country already existed", " of a country already existed",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM cty_countrs" " FROM cty_countrs"
" WHERE Alpha2='%s'", " WHERE Alpha2='%s'",
Alpha2) != 0); Alpha2) != 0);
} }
@ -1508,9 +1509,9 @@ static bool Cty_CheckIfCountryNameExists (Lan_Language_t Language,const char *Na
return (DB_QueryCOUNT ("can not check if the name" return (DB_QueryCOUNT ("can not check if the name"
" of a country already existed", " of a country already existed",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM cty_countrs" " FROM cty_countrs"
" WHERE Name_%s='%s'" " WHERE Name_%s='%s'"
" AND CtyCod<>'%03ld'", " AND CtyCod<>'%03ld'",
Lan_STR_LANG_ID[Language],Name, Lan_STR_LANG_ID[Language],Name,
CtyCod) != 0); CtyCod) != 0);
} }
@ -1939,8 +1940,8 @@ unsigned Cty_GetCachedNumCtysWithInss (void)
NumCtysWithInss = (unsigned) NumCtysWithInss = (unsigned)
DB_QueryCOUNT ("can not get number of countries with institutions", DB_QueryCOUNT ("can not get number of countries with institutions",
"SELECT COUNT(DISTINCT cty_countrs.CtyCod)" "SELECT COUNT(DISTINCT cty_countrs.CtyCod)"
" FROM cty_countrs," " FROM cty_countrs,"
"ins_instits" "ins_instits"
" WHERE cty_countrs.CtyCod=ins_instits.CtyCod"); " WHERE cty_countrs.CtyCod=ins_instits.CtyCod");
FigCch_UpdateFigureIntoCache (FigCch_NUM_CTYS_WITH_INSS,Hie_Lvl_SYS,-1L, FigCch_UpdateFigureIntoCache (FigCch_NUM_CTYS_WITH_INSS,Hie_Lvl_SYS,-1L,
FigCch_UNSIGNED,&NumCtysWithInss); FigCch_UNSIGNED,&NumCtysWithInss);
@ -1965,11 +1966,11 @@ unsigned Cty_GetCachedNumCtysWithCtrs (void)
NumCtysWithCtrs = (unsigned) NumCtysWithCtrs = (unsigned)
DB_QueryCOUNT ("can not get number of countries with centers", DB_QueryCOUNT ("can not get number of countries with centers",
"SELECT COUNT(DISTINCT cty_countrs.CtyCod)" "SELECT COUNT(DISTINCT cty_countrs.CtyCod)"
" FROM cty_countrs," " FROM cty_countrs,"
"ins_instits," "ins_instits,"
"ctr_centers" "ctr_centers"
" WHERE cty_countrs.CtyCod=ins_instits.CtyCod" " WHERE cty_countrs.CtyCod=ins_instits.CtyCod"
" AND ins_instits.InsCod=ctr_centers.InsCod"); " AND ins_instits.InsCod=ctr_centers.InsCod");
FigCch_UpdateFigureIntoCache (FigCch_NUM_CTYS_WITH_CTRS,Hie_Lvl_SYS,-1L, FigCch_UpdateFigureIntoCache (FigCch_NUM_CTYS_WITH_CTRS,Hie_Lvl_SYS,-1L,
FigCch_UNSIGNED,&NumCtysWithCtrs); FigCch_UNSIGNED,&NumCtysWithCtrs);
} }
@ -1991,13 +1992,13 @@ unsigned Cty_GetCachedNumCtysWithDegs (void)
NumCtysWithDegs = (unsigned) NumCtysWithDegs = (unsigned)
DB_QueryCOUNT ("can not get number of countries with degrees", DB_QueryCOUNT ("can not get number of countries with degrees",
"SELECT COUNT(DISTINCT cty_countrs.CtyCod)" "SELECT COUNT(DISTINCT cty_countrs.CtyCod)"
" FROM cty_countrs," " FROM cty_countrs,"
"ins_instits," "ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees" "deg_degrees"
" WHERE cty_countrs.CtyCod=ins_instits.CtyCod" " WHERE cty_countrs.CtyCod=ins_instits.CtyCod"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"); " AND ctr_centers.CtrCod=deg_degrees.CtrCod");
FigCch_UpdateFigureIntoCache (FigCch_NUM_CTYS_WITH_DEGS,Hie_Lvl_SYS,-1L, FigCch_UpdateFigureIntoCache (FigCch_NUM_CTYS_WITH_DEGS,Hie_Lvl_SYS,-1L,
FigCch_UNSIGNED,&NumCtysWithDegs); FigCch_UNSIGNED,&NumCtysWithDegs);
} }
@ -2021,15 +2022,15 @@ unsigned Cty_GetCachedNumCtysWithCrss (void)
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 cty_countrs.CtyCod)" "SELECT COUNT(DISTINCT cty_countrs.CtyCod)"
" FROM cty_countrs," " FROM cty_countrs,"
"ins_instits," "ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses" "crs_courses"
" WHERE cty_countrs.CtyCod=ins_instits.CtyCod" " WHERE cty_countrs.CtyCod=ins_instits.CtyCod"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod"); " 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);
} }
@ -2060,18 +2061,19 @@ unsigned Cty_GetCachedNumCtysWithUsrs (Rol_Role_t Role,const char *SubQuery,
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 cty_countrs.CtyCod)" "SELECT COUNT(DISTINCT cty_countrs.CtyCod)"
" FROM cty_countrs," " FROM cty_countrs,"
"ins_instits," "ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"crs_users" "crs_users"
" WHERE %scty_countrs.CtyCod=ins_instits.CtyCod" " WHERE %s"
" AND ins_instits.InsCod=ctr_centers.InsCod" "cty_countrs.CtyCod=ins_instits.CtyCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND crs_courses.CrsCod=crs_users.CrsCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_users.Role=%u", " AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.Role=%u",
SubQuery,(unsigned) Role); SubQuery,(unsigned) Role);
FigCch_UpdateFigureIntoCache (FigureCtys[Role],Scope,Cod, FigCch_UpdateFigureIntoCache (FigureCtys[Role],Scope,Cod,
FigCch_UNSIGNED,&NumCtysWithUsrs); FigCch_UNSIGNED,&NumCtysWithUsrs);
@ -2205,12 +2207,12 @@ bool Cty_GetIfMapIsAvailable (long CtyCod)
if (DB_QuerySELECT (&mysql_res,"can not get if map is available", if (DB_QuerySELECT (&mysql_res,"can not get if map is available",
"SELECT EXISTS" "SELECT EXISTS"
"(SELECT *" "(SELECT *"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers" "ctr_centers"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND (ctr_centers.Latitude<>0" " AND (ctr_centers.Latitude<>0"
" OR ctr_centers.Longitude<>0))", " OR ctr_centers.Longitude<>0))",
CtyCod)) CtyCod))
{ {
/* Get if map is available */ /* Get if map is available */

View File

@ -250,12 +250,12 @@ static void CtyCfg_GetCoordAndZoom (struct Coordinates *Coord,unsigned *Zoom)
"AVG(ctr_centers.Longitude)," // row[1] "AVG(ctr_centers.Longitude)," // row[1]
"GREATEST(MAX(ctr_centers.Latitude)-MIN(ctr_centers.Latitude)," "GREATEST(MAX(ctr_centers.Latitude)-MIN(ctr_centers.Latitude),"
"MAX(ctr_centers.Longitude)-MIN(ctr_centers.Longitude))" // row[2] "MAX(ctr_centers.Longitude)-MIN(ctr_centers.Longitude))" // row[2]
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers" "ctr_centers"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.Latitude<>0" " AND ctr_centers.Latitude<>0"
" AND ctr_centers.Longitude<>0", " AND ctr_centers.Longitude<>0",
Gbl.Hierarchy.Cty.CtyCod) < 0) Gbl.Hierarchy.Cty.CtyCod) < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
Map_GetCoordAndZoom (Coord,Zoom,Query); Map_GetCoordAndZoom (Coord,Zoom,Query);
@ -300,16 +300,16 @@ static void CtyCfg_Map (void)
Map_AddTileLayer (); Map_AddTileLayer ();
/* Get centers with coordinates */ /* Get centers with coordinates */
NumCtrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get centers" NumCtrs = (unsigned)
" with coordinates", DB_QuerySELECT (&mysql_res,"can not get centers with coordinates",
"SELECT ctr_centers.CtrCod" // row[0] "SELECT ctr_centers.CtrCod" // row[0]
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers" "ctr_centers"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.Latitude<>0" " AND ctr_centers.Latitude<>0"
" AND ctr_centers.Longitude<>0", " AND ctr_centers.Longitude<>0",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
/* Add a marker and a popup for each center */ /* Add a marker and a popup for each center */
for (NumCtr = 0; for (NumCtr = 0;
@ -584,7 +584,7 @@ static void CtyCfg_GetMapAttr (long CtyCod,char **MapAttribution)
/***** Get photo attribution from database *****/ /***** Get photo attribution from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get photo attribution", if (DB_QuerySELECT (&mysql_res,"can not get photo attribution",
"SELECT MapAttribution" "SELECT MapAttribution"
" FROM cty_countrs" " FROM cty_countrs"
" WHERE CtyCod=%ld", " WHERE CtyCod=%ld",
CtyCod)) CtyCod))
{ {

View File

@ -448,14 +448,14 @@ unsigned Crs_GetNumCrssInCty (long CtyCod)
Gbl.Cache.NumCrssInCty.NumCrss = (unsigned) Gbl.Cache.NumCrssInCty.NumCrss = (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 ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses" "crs_courses"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod", " AND deg_degrees.DegCod=crs_courses.DegCod",
CtyCod); 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);
@ -500,12 +500,12 @@ unsigned Crs_GetNumCrssInIns (long InsCod)
Gbl.Cache.NumCrssInIns.NumCrss = (unsigned) Gbl.Cache.NumCrssInIns.NumCrss = (unsigned)
DB_QueryCOUNT ("can not get the number of courses in an institution", DB_QueryCOUNT ("can not get the number of courses in an institution",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses" "crs_courses"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod", " AND deg_degrees.DegCod=crs_courses.DegCod",
InsCod); 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);
@ -550,10 +550,10 @@ unsigned Crs_GetNumCrssInCtr (long CtrCod)
Gbl.Cache.NumCrssInCtr.NumCrss = (unsigned) Gbl.Cache.NumCrssInCtr.NumCrss = (unsigned)
DB_QueryCOUNT ("can not get the number of courses in a center", DB_QueryCOUNT ("can not get the number of courses in a center",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses" "crs_courses"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod", " AND deg_degrees.DegCod=crs_courses.DegCod",
CtrCod); CtrCod);
return Gbl.Cache.NumCrssInCtr.NumCrss; return Gbl.Cache.NumCrssInCtr.NumCrss;
} }
@ -599,7 +599,9 @@ unsigned Crs_GetNumCrssInDeg (long DegCod)
Gbl.Cache.NumCrssInDeg.DegCod = DegCod; Gbl.Cache.NumCrssInDeg.DegCod = DegCod;
Gbl.Cache.NumCrssInDeg.NumCrss = (unsigned) Gbl.Cache.NumCrssInDeg.NumCrss = (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 crs_courses WHERE DegCod=%ld", "SELECT COUNT(*)"
" FROM crs_courses"
" 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);
@ -692,9 +694,9 @@ void Crs_WriteSelectorOfCourse (void)
/***** Get courses belonging to the current degree from database *****/ /***** Get courses belonging to the current degree from database *****/
NumCrss = (unsigned) NumCrss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get courses of a degree", DB_QuerySELECT (&mysql_res,"can not get courses of a degree",
"SELECT CrsCod," "SELECT CrsCod," // row[0]
"ShortName" "ShortName" // row[1]
" FROM crs_courses" " FROM crs_courses"
" WHERE DegCod=%ld" " WHERE DegCod=%ld"
" ORDER BY ShortName", " ORDER BY ShortName",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
@ -768,33 +770,37 @@ static void Crs_GetListCrssInCurrentDeg (Crs_WhatCourses_t WhatCourses)
case Crs_ACTIVE_COURSES: case Crs_ACTIVE_COURSES:
NumCrss = (unsigned) NumCrss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get courses of a degree", DB_QuerySELECT (&mysql_res,"can not get courses of a degree",
"SELECT CrsCod," "SELECT CrsCod," // row[0]
"DegCod," "DegCod," // row[1]
"Year," "Year," // row[2]
"InsCrsCod," "InsCrsCod," // row[3]
"Status," "Status," // row[4]
"RequesterUsrCod," "RequesterUsrCod," // row[5]
"ShortName," "ShortName," // row[6]
"FullName" "FullName" // row[7]
" FROM crs_courses" " FROM crs_courses"
" WHERE DegCod=%ld AND Status=0" " WHERE DegCod=%ld"
" ORDER BY Year,ShortName", " AND Status=0"
" ORDER BY Year,"
"ShortName",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
break; break;
case Crs_ALL_COURSES_EXCEPT_REMOVED: case Crs_ALL_COURSES_EXCEPT_REMOVED:
NumCrss = (unsigned) NumCrss = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get courses of a degree", DB_QuerySELECT (&mysql_res,"can not get courses of a degree",
"SELECT CrsCod," "SELECT CrsCod," // row[0]
"DegCod," "DegCod," // row[1]
"Year," "Year," // row[2]
"InsCrsCod," "InsCrsCod," // row[3]
"Status," "Status," // row[4]
"RequesterUsrCod," "RequesterUsrCod," // row[5]
"ShortName," "ShortName," // row[6]
"FullName" "FullName" // row[7]
" FROM crs_courses" " FROM crs_courses"
" WHERE DegCod=%ld AND (Status & %u)=0" " WHERE DegCod=%ld"
" ORDER BY Year,ShortName", " AND (Status & %u)=0"
" ORDER BY Year,"
"ShortName",
Gbl.Hierarchy.Deg.DegCod, Gbl.Hierarchy.Deg.DegCod,
(unsigned) Crs_STATUS_BIT_REMOVED); (unsigned) Crs_STATUS_BIT_REMOVED);
break; break;
@ -1797,7 +1803,7 @@ 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 crs_courses" " FROM crs_courses"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Crs->CrsCod)) // Course found... Crs->CrsCod)) // Course found...
{ {
@ -1864,12 +1870,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 crs_courses.ShortName," "SELECT crs_courses.ShortName," // row[0]
"deg_degrees.ShortName" "deg_degrees.ShortName" // row[1]
" FROM crs_courses," " FROM crs_courses,"
"deg_degrees" "deg_degrees"
" WHERE crs_courses.CrsCod=%ld" " WHERE crs_courses.CrsCod=%ld"
" AND crs_courses.DegCod=deg_degrees.DegCod", " 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 *****/
@ -2327,10 +2333,17 @@ 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 crs_courses" "SELECT COUNT(*)"
" WHERE DegCod=%ld AND Year=%u" " FROM crs_courses"
" AND %s='%s' AND CrsCod<>%ld", " WHERE DegCod=%ld"
DegCod,Year,FieldName,Name,CrsCod) != 0); " AND Year=%u"
" AND %s='%s'"
" AND CrsCod<>%ld",
DegCod,
Year,
FieldName,
Name,
CrsCod) != 0);
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -3835,7 +3835,8 @@ unsigned long DB_GetNumRowsTable (const char *Table)
{ {
/***** Get total number of rows from database *****/ /***** Get total number of rows from database *****/
return DB_QueryCOUNT ("can not get number of rows in table", return DB_QueryCOUNT ("can not get number of rows in table",
"SELECT COUNT(*) FROM %s", "SELECT COUNT(*)"
" FROM %s",
Table); Table);
} }

View File

@ -129,16 +129,16 @@ void Deg_SeeDegWithPendingCrss (void)
case Rol_DEG_ADM: case Rol_DEG_ADM:
NumDegs = (unsigned) NumDegs = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get degrees with pending courses", DB_QuerySELECT (&mysql_res,"can not get degrees with pending courses",
"SELECT crs_courses.DegCod," "SELECT crs_courses.DegCod," // row[0]
"COUNT(*)" "COUNT(*)" // row[1]
" FROM usr_admins," " FROM usr_admins,"
"crs_courses," "crs_courses,"
"deg_degrees" "deg_degrees"
" WHERE usr_admins.UsrCod=%ld" " WHERE usr_admins.UsrCod=%ld"
" AND usr_admins.Scope='%s'" " AND usr_admins.Scope='%s'"
" AND usr_admins.Cod=crs_courses.DegCod" " AND usr_admins.Cod=crs_courses.DegCod"
" AND (crs_courses.Status & %u)<>0" " AND (crs_courses.Status & %u)<>0"
" AND crs_courses.DegCod=deg_degrees.DegCod" " AND crs_courses.DegCod=deg_degrees.DegCod"
" GROUP BY crs_courses.DegCod" " GROUP BY crs_courses.DegCod"
" ORDER BY deg_degrees.ShortName", " ORDER BY deg_degrees.ShortName",
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
@ -148,12 +148,12 @@ void Deg_SeeDegWithPendingCrss (void)
case Rol_SYS_ADM: case Rol_SYS_ADM:
NumDegs = (unsigned) NumDegs = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get degrees with pending courses", DB_QuerySELECT (&mysql_res,"can not get degrees with pending courses",
"SELECT crs_courses.DegCod," "SELECT crs_courses.DegCod," // row[0]
"COUNT(*)" "COUNT(*)" // row[1]
" FROM crs_courses," " FROM crs_courses,"
"deg_degrees" "deg_degrees"
" WHERE (crs_courses.Status & %u)<>0" " WHERE (crs_courses.Status & %u)<>0"
" AND crs_courses.DegCod=deg_degrees.DegCod" " AND crs_courses.DegCod=deg_degrees.DegCod"
" GROUP BY crs_courses.DegCod" " GROUP BY crs_courses.DegCod"
" ORDER BY deg_degrees.ShortName", " ORDER BY deg_degrees.ShortName",
(unsigned) Crs_STATUS_BIT_PENDING); (unsigned) Crs_STATUS_BIT_PENDING);
@ -277,13 +277,14 @@ void Deg_WriteSelectorOfDegree (void)
if (Gbl.Hierarchy.Ctr.CtrCod > 0) if (Gbl.Hierarchy.Ctr.CtrCod > 0)
{ {
/***** Get degrees belonging to the current center from database *****/ /***** Get degrees belonging to the current center from database *****/
NumDegs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get degrees" NumDegs = (unsigned)
" of a center", DB_QuerySELECT (&mysql_res,"can not get degrees of a center",
"SELECT DegCod,ShortName" "SELECT DegCod," // row[0]
" FROM deg_degrees" "ShortName" // row[1]
" WHERE CtrCod=%ld" " FROM deg_degrees"
" ORDER BY ShortName", " WHERE CtrCod=%ld"
Gbl.Hierarchy.Ctr.CtrCod); " ORDER BY ShortName",
Gbl.Hierarchy.Ctr.CtrCod);
/***** Get degrees of this center *****/ /***** Get degrees of this center *****/
for (NumDeg = 0; for (NumDeg = 0;
@ -1138,7 +1139,7 @@ void Deg_GetListDegsInCurrentCtr (void)
"ShortName," // row[5] "ShortName," // row[5]
"FullName," // row[6] "FullName," // row[6]
"WWW" // row[7] "WWW" // row[7]
" FROM deg_degrees" " FROM deg_degrees"
" WHERE CtrCod=%ld" " WHERE CtrCod=%ld"
" ORDER BY FullName", " ORDER BY FullName",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
@ -1375,7 +1376,8 @@ bool Deg_GetDataOfDegreeByCod (struct Deg_Degree *Deg)
"ShortName," // row[5] "ShortName," // row[5]
"FullName," // row[6] "FullName," // row[6]
"WWW" // row[7] "WWW" // row[7]
" FROM deg_degrees WHERE DegCod=%ld", " FROM deg_degrees"
" WHERE DegCod=%ld",
Deg->DegCod)) // Degree found... Deg->DegCod)) // Degree found...
{ {
/***** Get data of degree *****/ /***** Get data of degree *****/
@ -1436,7 +1438,9 @@ void Deg_GetShortNameOfDegreeByCod (struct Deg_Degree *Deg)
{ {
/***** 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 degree", if (DB_QuerySELECT (&mysql_res,"can not get the short name of a degree",
"SELECT ShortName FROM deg_degrees WHERE DegCod=%ld", "SELECT ShortName"
" FROM deg_degrees"
" WHERE DegCod=%ld",
Deg->DegCod) == 1) Deg->DegCod) == 1)
{ {
/***** Get the short name of this degree *****/ /***** Get the short name of this degree *****/
@ -1463,7 +1467,9 @@ long Deg_GetCtrCodOfDegreeByCod (long DegCod)
{ {
/***** Get the center code of a degree from database *****/ /***** Get the center code of a degree from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get the center of a degree", if (DB_QuerySELECT (&mysql_res,"can not get the center of a degree",
"SELECT CtrCod FROM deg_degrees WHERE DegCod=%ld", "SELECT CtrCod"
" FROM deg_degrees"
" WHERE DegCod=%ld",
DegCod) == 1) DegCod) == 1)
{ {
/***** Get the center code of this degree *****/ /***** Get the center code of this degree *****/
@ -1493,10 +1499,10 @@ long Deg_GetInsCodOfDegreeByCod (long DegCod)
/***** Get the institution code of a degree from database *****/ /***** Get the institution code of a degree from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get the institution of a degree", if (DB_QuerySELECT (&mysql_res,"can not get the institution of a degree",
"SELECT ctr_centers.InsCod" "SELECT ctr_centers.InsCod"
" FROM deg_degrees," " FROM deg_degrees,"
"ctr_centers" "ctr_centers"
" WHERE deg_degrees.DegCod=%ld" " WHERE deg_degrees.DegCod=%ld"
" AND deg_degrees.CtrCod=ctr_centers.CtrCod", " AND deg_degrees.CtrCod=ctr_centers.CtrCod",
DegCod) == 1) DegCod) == 1)
{ {
/***** Get the institution code of this degree *****/ /***** Get the institution code of this degree *****/
@ -1527,7 +1533,7 @@ 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" "SELECT CrsCod"
" FROM crs_courses" " FROM crs_courses"
" WHERE DegCod=%ld", " WHERE DegCod=%ld",
DegCod); DegCod);
@ -1690,9 +1696,14 @@ bool Deg_CheckIfDegNameExistsInCtr (const char *FieldName,const char *Name,
/***** Get number of degrees with a type and a name from database *****/ /***** Get number of degrees with a type and a name from database *****/
return (DB_QueryCOUNT ("can not check if the name of a degree" return (DB_QueryCOUNT ("can not check if the name of a degree"
" already existed", " already existed",
"SELECT COUNT(*) FROM deg_degrees" "SELECT COUNT(*)"
" WHERE CtrCod=%ld AND %s='%s' AND DegCod<>%ld", " FROM deg_degrees"
CtrCod,FieldName,Name,DegCod) != 0); " WHERE CtrCod=%ld"
" AND %s='%s'"
" AND DegCod<>%ld",
CtrCod,
FieldName,Name,
DegCod) != 0);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1955,12 +1966,12 @@ unsigned Deg_GetNumDegsInCty (long CtyCod)
Gbl.Cache.NumDegsInCty.NumDegs = (unsigned) Gbl.Cache.NumDegsInCty.NumDegs = (unsigned)
DB_QueryCOUNT ("can not get the number of degrees in a country", DB_QueryCOUNT ("can not get the number of degrees in a country",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees" "deg_degrees"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod", " AND ctr_centers.CtrCod=deg_degrees.CtrCod",
CtyCod); CtyCod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,Hie_Lvl_CTY,Gbl.Cache.NumDegsInCty.CtyCod, FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,Hie_Lvl_CTY,Gbl.Cache.NumDegsInCty.CtyCod,
FigCch_UNSIGNED,&Gbl.Cache.NumDegsInCty.NumDegs); FigCch_UNSIGNED,&Gbl.Cache.NumDegsInCty.NumDegs);
@ -2005,10 +2016,10 @@ unsigned Deg_GetNumDegsInIns (long InsCod)
Gbl.Cache.NumDegsInIns.NumDegs = (unsigned) Gbl.Cache.NumDegsInIns.NumDegs = (unsigned)
DB_QueryCOUNT ("can not get the number of degrees in an institution", DB_QueryCOUNT ("can not get the number of degrees in an institution",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees" "deg_degrees"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod", " AND ctr_centers.CtrCod=deg_degrees.CtrCod",
InsCod); InsCod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,Hie_Lvl_INS,Gbl.Cache.NumDegsInIns.InsCod, FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,Hie_Lvl_INS,Gbl.Cache.NumDegsInIns.InsCod,
FigCch_UNSIGNED,&Gbl.Cache.NumDegsInIns.NumDegs); FigCch_UNSIGNED,&Gbl.Cache.NumDegsInIns.NumDegs);
@ -2052,7 +2063,8 @@ unsigned Deg_GetNumDegsInCtr (long CtrCod)
Gbl.Cache.NumDegsInCtr.CtrCod = CtrCod; Gbl.Cache.NumDegsInCtr.CtrCod = CtrCod;
Gbl.Cache.NumDegsInCtr.NumDegs = Gbl.Cache.NumDegsInCtr.NumDegs =
(unsigned) DB_QueryCOUNT ("can not get the number of degrees in a center", (unsigned) DB_QueryCOUNT ("can not get the number of degrees in a center",
"SELECT COUNT(*) FROM deg_degrees" "SELECT COUNT(*)"
" FROM deg_degrees"
" WHERE CtrCod=%ld", " WHERE CtrCod=%ld",
CtrCod); CtrCod);
FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,Hie_Lvl_CTR,Gbl.Cache.NumDegsInCtr.CtrCod, FigCch_UpdateFigureIntoCache (FigCch_NUM_DEGS,Hie_Lvl_CTR,Gbl.Cache.NumDegsInCtr.CtrCod,
@ -2090,13 +2102,13 @@ unsigned Deg_GetCachedNumDegsWithCrss (const char *SubQuery,
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 ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses" "crs_courses"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod" " WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod", " AND deg_degrees.DegCod=crs_courses.DegCod",
SubQuery); 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);

View File

@ -606,7 +606,8 @@ void DT_GetListDegreeTypes (Hie_Lvl_Level_t Scope,DT_Order_t Order)
"(SELECT deg_types.DegTypCod," // row[0] "(SELECT deg_types.DegTypCod," // row[0]
"deg_types.DegTypName," // row[1] "deg_types.DegTypName," // row[1]
"COUNT(deg_degrees.DegCod) AS NumDegs" // row[2] "COUNT(deg_degrees.DegCod) AS NumDegs" // row[2]
" FROM deg_degrees,deg_types" " FROM deg_degrees,"
"deg_types"
" WHERE deg_degrees.DegTypCod=deg_types.DegTypCod" " WHERE deg_degrees.DegTypCod=deg_types.DegTypCod"
" GROUP BY deg_degrees.DegTypCod)" " GROUP BY deg_degrees.DegTypCod)"
" UNION " " UNION "
@ -616,9 +617,10 @@ void DT_GetListDegreeTypes (Hie_Lvl_Level_t Scope,DT_Order_t Order)
// do not use '0' because // do not use '0' because
// NumDegs will be casted to string // NumDegs will be casted to string
// and order will be wrong // and order will be wrong
" FROM deg_types" " FROM deg_types"
" WHERE DegTypCod NOT IN" " WHERE DegTypCod NOT IN"
" (SELECT DegTypCod FROM deg_degrees))" " (SELECT DegTypCod"
" FROM deg_degrees))"
" ORDER BY %s", " ORDER BY %s",
OrderBySubQuery[Order]); OrderBySubQuery[Order]);
break; break;
@ -629,14 +631,14 @@ void DT_GetListDegreeTypes (Hie_Lvl_Level_t Scope,DT_Order_t Order)
"SELECT deg_types.DegTypCod," // row[0] "SELECT deg_types.DegTypCod," // row[0]
"deg_types.DegTypName," // row[1] "deg_types.DegTypName," // row[1]
"COUNT(deg_degrees.DegCod) AS NumDegs" // row[2] "COUNT(deg_degrees.DegCod) AS NumDegs" // row[2]
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"deg_types" "deg_types"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegTypCod=deg_types.DegTypCod" " AND deg_degrees.DegTypCod=deg_types.DegTypCod"
" GROUP BY deg_degrees.DegTypCod" " GROUP BY deg_degrees.DegTypCod"
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Cty.CtyCod, Gbl.Hierarchy.Cty.CtyCod,
@ -649,12 +651,12 @@ void DT_GetListDegreeTypes (Hie_Lvl_Level_t Scope,DT_Order_t Order)
"SELECT deg_types.DegTypCod," // row[0] "SELECT deg_types.DegTypCod," // row[0]
"deg_types.DegTypName," // row[1] "deg_types.DegTypName," // row[1]
"COUNT(deg_degrees.DegCod) AS NumDegs" // row[2] "COUNT(deg_degrees.DegCod) AS NumDegs" // row[2]
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"deg_types" "deg_types"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegTypCod=deg_types.DegTypCod" " AND deg_degrees.DegTypCod=deg_types.DegTypCod"
" GROUP BY deg_degrees.DegTypCod" " GROUP BY deg_degrees.DegTypCod"
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Ins.InsCod, Gbl.Hierarchy.Ins.InsCod,
@ -667,9 +669,10 @@ void DT_GetListDegreeTypes (Hie_Lvl_Level_t Scope,DT_Order_t Order)
"SELECT deg_types.DegTypCod," // row[0] "SELECT deg_types.DegTypCod," // row[0]
"deg_types.DegTypName," // row[1] "deg_types.DegTypName," // row[1]
"COUNT(deg_degrees.DegCod) AS NumDegs" // row[2] "COUNT(deg_degrees.DegCod) AS NumDegs" // row[2]
" FROM deg_degrees,deg_types" " FROM deg_degrees,"
"deg_types"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegTypCod=deg_types.DegTypCod" " AND deg_degrees.DegTypCod=deg_types.DegTypCod"
" GROUP BY deg_degrees.DegTypCod" " GROUP BY deg_degrees.DegTypCod"
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Ctr.CtrCod, Gbl.Hierarchy.Ctr.CtrCod,
@ -683,9 +686,10 @@ void DT_GetListDegreeTypes (Hie_Lvl_Level_t Scope,DT_Order_t Order)
"SELECT deg_types.DegTypCod," // row[0] "SELECT deg_types.DegTypCod," // row[0]
"deg_types.DegTypName," // row[1] "deg_types.DegTypName," // row[1]
"COUNT(deg_degrees.DegCod) AS NumDegs" // row[2] "COUNT(deg_degrees.DegCod) AS NumDegs" // row[2]
" FROM deg_degrees,deg_types" " FROM deg_degrees,"
"deg_types"
" WHERE deg_degrees.DegCod=%ld" " WHERE deg_degrees.DegCod=%ld"
" AND deg_degrees.DegTypCod=deg_types.DegTypCod" " AND deg_degrees.DegTypCod=deg_types.DegTypCod"
" GROUP BY deg_degrees.DegTypCod" " GROUP BY deg_degrees.DegTypCod"
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Deg.DegCod, Gbl.Hierarchy.Deg.DegCod,
@ -851,7 +855,8 @@ static unsigned DT_CountNumDegsOfType (long DegTypCod)
/***** Get number of degrees of a type from database *****/ /***** Get number of degrees of a type from database *****/
return return
(unsigned) DB_QueryCOUNT ("can not get number of degrees of a type", (unsigned) DB_QueryCOUNT ("can not get number of degrees of a type",
"SELECT COUNT(*) FROM deg_degrees" "SELECT COUNT(*)"
" FROM deg_degrees"
" WHERE DegTypCod=%ld", " WHERE DegTypCod=%ld",
DegTypCod); DegTypCod);
} }
@ -877,7 +882,9 @@ bool DT_GetDataOfDegreeTypeByCod (struct DegreeType *DegTyp)
/***** Get the name of a type of degree from database *****/ /***** Get the name of a type of degree from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get the name of a type of degree", NumRows = DB_QuerySELECT (&mysql_res,"can not get the name of a type of degree",
"SELECT DegTypName FROM deg_types WHERE DegTypCod=%ld", "SELECT DegTypName"
" FROM deg_types"
" WHERE DegTypCod=%ld",
DegTyp->DegTypCod); DegTyp->DegTypCod);
if (NumRows == 1) if (NumRows == 1)
{ {
@ -923,7 +930,8 @@ static void DT_RemoveDegreeTypeCompletely (long DegTypCod)
/***** Get degrees of a type from database *****/ /***** Get degrees of a type from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get degrees of a type", NumRows = DB_QuerySELECT (&mysql_res,"can not get degrees of a type",
"SELECT DegCod FROM deg_degrees" "SELECT DegCod"
" FROM deg_degrees"
" WHERE DegTypCod=%ld", " WHERE DegTypCod=%ld",
DegTypCod); DegTypCod);
@ -1027,8 +1035,10 @@ static bool DT_CheckIfDegreeTypeNameExists (const char *DegTypName,long DegTypCo
/***** Get number of degree types with a name from database *****/ /***** Get number of degree types with a name from database *****/
return (DB_QueryCOUNT ("can not check if the name of a type of degree" return (DB_QueryCOUNT ("can not check if the name of a type of degree"
" already existed", " already existed",
"SELECT COUNT(*) FROM deg_types" "SELECT COUNT(*)"
" WHERE DegTypName='%s' AND DegTypCod<>%ld", " FROM deg_types"
" WHERE DegTypName='%s'"
" AND DegTypCod<>%ld",
DegTypName,DegTypCod) != 0); DegTypName,DegTypCod) != 0);
} }

View File

@ -517,7 +517,8 @@ unsigned Dpt_GetNumDepartmentsInInstitution (long InsCod)
/***** Get number of departments in an institution from database *****/ /***** Get number of departments in an institution from database *****/
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of departments in an institution", DB_QueryCOUNT ("can not get number of departments in an institution",
"SELECT COUNT(*) FROM dpt_departments" "SELECT COUNT(*)"
" FROM dpt_departments"
" WHERE InsCod=%ld", " WHERE InsCod=%ld",
InsCod); InsCod);
} }
@ -833,7 +834,8 @@ static bool Dpt_CheckIfDepartmentNameExists (const char *FieldName,const char *N
{ {
/***** Get number of departments with a name from database *****/ /***** Get number of departments with a name from database *****/
return (DB_QueryCOUNT ("can not check if the department name already existed", return (DB_QueryCOUNT ("can not check if the department name already existed",
"SELECT COUNT(*) FROM dpt_departments" "SELECT COUNT(*)"
" FROM dpt_departments"
" WHERE %s='%s'" " WHERE %s='%s'"
" AND DptCod<>%ld", " AND DptCod<>%ld",
FieldName,Name, FieldName,Name,
@ -1131,7 +1133,8 @@ unsigned Dpt_GetNumDptsInIns (long InsCod)
Gbl.Cache.NumDptsInIns.InsCod = InsCod; Gbl.Cache.NumDptsInIns.InsCod = InsCod;
Gbl.Cache.NumDptsInIns.NumDpts = (unsigned) Gbl.Cache.NumDptsInIns.NumDpts = (unsigned)
DB_QueryCOUNT ("can not get number of departments in an institution", DB_QueryCOUNT ("can not get number of departments in an institution",
"SELECT COUNT(*) FROM departments" "SELECT COUNT(*)"
" FROM departments"
" WHERE InsCod=%ld", " WHERE InsCod=%ld",
InsCod); InsCod);
return Gbl.Cache.NumDptsInIns.NumDpts; return Gbl.Cache.NumDptsInIns.NumDpts;

View File

@ -144,12 +144,15 @@ void Dup_ListDuplicateUsrs (void)
Hlp_USERS_Duplicates_possibly_duplicate_users,Box_NOT_CLOSABLE); Hlp_USERS_Duplicates_possibly_duplicate_users,Box_NOT_CLOSABLE);
/***** Make query *****/ /***** Make query *****/
NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get possibly" NumUsrs = (unsigned)
" duplicate users", DB_QuerySELECT (&mysql_res,"can not get possibly duplicate users",
"SELECT UsrCod,COUNT(*) AS N,UNIX_TIMESTAMP(MIN(InformTime)) AS T" "SELECT UsrCod,"
" FROM usr_duplicated" "COUNT(*) AS N,"
" GROUP BY UsrCod" "UNIX_TIMESTAMP(MIN(InformTime)) AS T"
" ORDER BY N DESC,T DESC"); " FROM usr_duplicated"
" GROUP BY UsrCod"
" ORDER BY N DESC,"
"T DESC");
/***** List possible duplicated users *****/ /***** List possible duplicated users *****/
if (NumUsrs) if (NumUsrs)
@ -293,8 +296,12 @@ static void Dup_ListSimilarUsrs (void)
Gbl.Usrs.Other.UsrDat.FrstName); Gbl.Usrs.Other.UsrDat.FrstName);
else else
NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get similar users", NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get similar users",
"SELECT DISTINCT UsrCod FROM usr_ids" "SELECT DISTINCT UsrCod"
" WHERE UsrID IN (SELECT UsrID FROM usr_ids WHERE UsrCod=%ld)", " FROM usr_ids"
" WHERE UsrID IN"
" (SELECT UsrID"
" FROM usr_ids"
" WHERE UsrCod=%ld)",
Gbl.Usrs.Other.UsrDat.UsrCod); Gbl.Usrs.Other.UsrDat.UsrCod);
/***** List possible similar users *****/ /***** List possible similar users *****/
@ -401,7 +408,8 @@ static bool Dup_CheckIfUsrIsDup (long UsrCod)
{ {
return (DB_QueryCOUNT ("can not if user is in list" return (DB_QueryCOUNT ("can not if user is in list"
" of possible duplicate users", " of possible duplicate users",
"SELECT COUNT(*) FROM usr_duplicated" "SELECT COUNT(*)"
" FROM usr_duplicated"
" WHERE UsrCod=%ld", " WHERE UsrCod=%ld",
UsrCod) != 0); UsrCod) != 0);
} }

View File

@ -833,11 +833,11 @@ void Exa_GetListExams (struct Exa_Exams *Exams,Exa_Order_t SelectedOrder)
"SELECT exa_exams.ExaCod," // row[0] "SELECT exa_exams.ExaCod," // row[0]
"MIN(exa_sessions.StartTime) AS StartTime," // row[1] "MIN(exa_sessions.StartTime) AS StartTime," // row[1]
"MAX(exa_sessions.EndTime) AS EndTime" // row[2] "MAX(exa_sessions.EndTime) AS EndTime" // row[2]
" FROM exa_exams" " FROM exa_exams"
" LEFT JOIN exa_sessions" " LEFT JOIN exa_sessions"
" ON exa_exams.ExaCod=exa_sessions.ExaCod" " ON exa_exams.ExaCod=exa_sessions.ExaCod"
" WHERE exa_exams.CrsCod=%ld" " WHERE exa_exams.CrsCod=%ld"
"%s" "%s"
" GROUP BY exa_exams.ExaCod" " GROUP BY exa_exams.ExaCod"
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
@ -964,7 +964,7 @@ void Exa_GetDataOfExamByCod (struct Exa_Exam *Exam)
"MaxGrade," // row[4] "MaxGrade," // row[4]
"Visibility," // row[5] "Visibility," // row[5]
"Title" // row[6] "Title" // row[6]
" FROM exa_exams" " FROM exa_exams"
" WHERE ExaCod=%ld", " WHERE ExaCod=%ld",
Exam->ExaCod); Exam->ExaCod);
if (NumRows) // Exam found... if (NumRows) // Exam found...
@ -1020,7 +1020,7 @@ void Exa_GetDataOfExamByCod (struct Exa_Exam *Exam)
NumRows = DB_QuerySELECT (&mysql_res,"can not get exam data", NumRows = DB_QuerySELECT (&mysql_res,"can not get exam data",
"SELECT UNIX_TIMESTAMP(MIN(StartTime))," // row[0] "SELECT UNIX_TIMESTAMP(MIN(StartTime))," // row[0]
"UNIX_TIMESTAMP(MAX(EndTime))" // row[1] "UNIX_TIMESTAMP(MAX(EndTime))" // row[1]
" FROM exa_sessions" " FROM exa_sessions"
" WHERE ExaCod=%ld", " WHERE ExaCod=%ld",
Exam->ExaCod); Exam->ExaCod);
if (NumRows) if (NumRows)
@ -1073,7 +1073,9 @@ void Exa_GetExamTxtFromDB (long ExaCod,char Txt[Cns_MAX_BYTES_TEXT + 1])
/***** Get text of exam from database *****/ /***** Get text of exam from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get exam text", NumRows = DB_QuerySELECT (&mysql_res,"can not get exam text",
"SELECT Txt FROM exa_exams WHERE ExaCod=%ld", "SELECT Txt" // row[0]
" FROM exa_exams"
" WHERE ExaCod=%ld",
ExaCod); ExaCod);
/***** The result of the query must have one row or none *****/ /***** The result of the query must have one row or none *****/
@ -1388,10 +1390,13 @@ static bool Exa_CheckIfSimilarExamExists (const struct Exa_Exam *Exam)
{ {
/***** Get number of exams with a field value from database *****/ /***** Get number of exams with a field value from database *****/
return (DB_QueryCOUNT ("can not get similar exams", return (DB_QueryCOUNT ("can not get similar exams",
"SELECT COUNT(*) FROM exa_exams" "SELECT COUNT(*)"
" WHERE CrsCod=%ld AND Title='%s'" " FROM exa_exams"
" AND ExaCod<>%ld", " WHERE CrsCod=%ld"
Gbl.Hierarchy.Crs.CrsCod,Exam->Title, " AND Title='%s'"
" AND ExaCod<>%ld",
Gbl.Hierarchy.Crs.CrsCod,
Exam->Title,
Exam->ExaCod) != 0); Exam->ExaCod) != 0);
} }
@ -1770,8 +1775,10 @@ long Exa_GetQstCodFromQstInd (long ExaCod,unsigned QstInd)
/***** Get question code of the question to be moved up *****/ /***** Get question code of the question to be moved up *****/
if (!DB_QuerySELECT (&mysql_res,"can not get question code", if (!DB_QuerySELECT (&mysql_res,"can not get question code",
"SELECT QstCod FROM exa_set_questions" "SELECT QstCod"
" WHERE ExaCod=%ld AND QstInd=%u", " FROM exa_set_questions"
" WHERE ExaCod=%ld"
" AND QstInd=%u",
ExaCod,QstInd)) ExaCod,QstInd))
Lay_ShowErrorAndExit ("Error: wrong question index."); Lay_ShowErrorAndExit ("Error: wrong question index.");
@ -1802,9 +1809,12 @@ unsigned Exa_GetPrevQuestionIndexInExam (long ExaCod,unsigned QstInd)
// Although indexes are always continuous... // Although indexes are always continuous...
// ...this implementation works even with non continuous indexes // ...this implementation works even with non continuous indexes
if (!DB_QuerySELECT (&mysql_res,"can not get previous question index", if (!DB_QuerySELECT (&mysql_res,"can not get previous question index",
"SELECT MAX(QstInd) FROM exa_set_questions" "SELECT MAX(QstInd)"
" WHERE ExaCod=%ld AND QstInd<%u", " FROM exa_set_questions"
ExaCod,QstInd)) " WHERE ExaCod=%ld"
" AND QstInd<%u",
ExaCod,
QstInd))
Lay_ShowErrorAndExit ("Error: previous question index not found."); Lay_ShowErrorAndExit ("Error: previous question index not found.");
/***** Get previous question index (row[0]) *****/ /***** Get previous question index (row[0]) *****/
@ -1836,8 +1846,10 @@ unsigned Exa_GetNextQuestionIndexInExam (long ExaCod,unsigned QstInd)
// Although indexes are always continuous... // Although indexes are always continuous...
// ...this implementation works even with non continuous indexes // ...this implementation works even with non continuous indexes
if (!DB_QuerySELECT (&mysql_res,"can not get next question index", if (!DB_QuerySELECT (&mysql_res,"can not get next question index",
"SELECT MIN(QstInd) FROM exa_set_questions" "SELECT MIN(QstInd)"
" WHERE ExaCod=%ld AND QstInd>%u", " FROM exa_set_questions"
" WHERE ExaCod=%ld"
" AND QstInd>%u",
ExaCod,QstInd)) ExaCod,QstInd))
Lay_ShowErrorAndExit ("Error: next question index not found."); Lay_ShowErrorAndExit ("Error: next question index not found.");
@ -1897,60 +1909,60 @@ unsigned Exa_GetNumCoursesWithExams (Hie_Lvl_Level_t Scope)
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
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 CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM exa_exams"); " FROM exa_exams");
break; break;
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 ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"exa_exams" "exa_exams"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_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 ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"exa_exams" "exa_exams"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_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," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"exa_exams" "exa_exams"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_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 crs_courses," " FROM crs_courses,"
"exa_exams" "exa_exams"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=exa_exams.CrsCod", " 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:
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 CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM exa_exams" " FROM exa_exams"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break; break;
@ -1987,60 +1999,60 @@ unsigned Exa_GetNumExams (Hie_Lvl_Level_t Scope)
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
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 exa_exams"); " FROM exa_exams");
break; break;
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 ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"exa_exams" "exa_exams"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_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 ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"exa_exams" "exa_exams"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_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," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"exa_exams" "exa_exams"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_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 crs_courses," " FROM crs_courses,"
"exa_exams" "exa_exams"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=exa_exams.CrsCod", " 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:
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 exa_exams" " FROM exa_exams"
" WHERE CrsCod=%ld", " WHERE CrsCod=%ld",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break; break;
@ -2075,85 +2087,86 @@ double Exa_GetNumQstsPerCrsExam (Hie_Lvl_Level_t Scope)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
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)"
" (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
" FROM exa_exams,exa_set_questions" " FROM exa_exams,"
" WHERE exa_exams.ExaCod=exa_set_questions.ExaCod" "exa_set_questions"
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable"); " WHERE exa_exams.ExaCod=exa_set_questions.ExaCod"
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable");
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
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)"
" (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"exa_exams," "exa_exams,"
"exa_set_questions" "exa_set_questions"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_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);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
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)"
" (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"exa_exams," "exa_exams,"
"exa_set_questions" "exa_set_questions"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_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);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
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)"
" (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"exa_exams," "exa_exams,"
"exa_set_questions" "exa_set_questions"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_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);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
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)"
" (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
" FROM crs_courses," " FROM crs_courses,"
"exa_exams," "exa_exams,"
"exa_set_questions" "exa_set_questions"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
" AND crs_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.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 questions per exam", DB_QuerySELECT (&mysql_res,"can not get number of questions per exam",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts)"
" (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
" FROM exa_exams," " FROM exa_exams,"
"exa_set_questions" "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",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break; break;
default: default:
@ -2187,9 +2200,10 @@ void Exa_GetScoreRange (long ExaCod,double *MinScore,double *MaxScore)
NumRows = (unsigned) NumRows = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get data of a question", DB_QuerySELECT (&mysql_res,"can not get data of a question",
"SELECT COUNT(tst_answers.AnsInd) AS N" "SELECT COUNT(tst_answers.AnsInd) AS N"
" FROM tst_answers,exa_set_questions" " FROM tst_answers,"
"exa_set_questions"
" WHERE exa_set_questions.ExaCod=%ld" " WHERE exa_set_questions.ExaCod=%ld"
" AND exa_set_questions.QstCod=tst_answers.QstCod" " AND exa_set_questions.QstCod=tst_answers.QstCod"
" GROUP BY tst_answers.QstCod", " GROUP BY tst_answers.QstCod",
ExaCod); ExaCod);
for (NumRow = 0, *MinScore = *MaxScore = 0.0; for (NumRow = 0, *MinScore = *MaxScore = 0.0;

View File

@ -265,7 +265,7 @@ void ExaPrn_GetDataOfPrintByPrnCod (struct ExaPrn_Print *Print)
"NumQstsNotBlank," // row[6] "NumQstsNotBlank," // row[6]
"Sent," // row[7] "Sent," // row[7]
"Score" // row[8] "Score" // row[8]
" FROM exa_prints" " FROM exa_prints"
" WHERE PrnCod=%ld", " WHERE PrnCod=%ld",
Print->PrnCod); Print->PrnCod);
@ -293,9 +293,9 @@ void ExaPrn_GetDataOfPrintBySesCodAndUsrCod (struct ExaPrn_Print *Print)
"NumQstsNotBlank," // row[6] "NumQstsNotBlank," // row[6]
"Sent," // row[7] "Sent," // row[7]
"Score" // row[8] "Score" // row[8]
" FROM exa_prints" " FROM exa_prints"
" WHERE SesCod=%ld" " WHERE SesCod=%ld"
" AND UsrCod=%ld", " AND UsrCod=%ld",
Print->SesCod, Print->SesCod,
Print->UsrCod); Print->UsrCod);
@ -374,7 +374,7 @@ static void ExaPrn_GetQuestionsForNewPrintFromDB (struct ExaPrn_Print *Print,lon
"SELECT SetCod," // row[0] "SELECT SetCod," // row[0]
"NumQstsToPrint," // row[1] "NumQstsToPrint," // row[1]
"Title" // row[2] "Title" // row[2]
" FROM exa_sets" " FROM exa_sets"
" WHERE ExaCod=%ld" " WHERE ExaCod=%ld"
" ORDER BY SetInd", " ORDER BY SetInd",
ExaCod); ExaCod);
@ -440,7 +440,7 @@ static unsigned ExaPrn_GetSomeQstsFromSetToPrint (struct ExaPrn_Print *Print,
"SELECT QstCod," // row[0] "SELECT QstCod," // row[0]
"AnsType," // row[1] "AnsType," // row[1]
"Shuffle" // row[2] "Shuffle" // row[2]
" FROM exa_set_questions" " FROM exa_set_questions"
" WHERE SetCod=%ld" " WHERE SetCod=%ld"
" ORDER BY RAND()" // Don't use RAND(NOW()) because the same ordering will be repeated across sets " ORDER BY RAND()" // Don't use RAND(NOW()) because the same ordering will be repeated across sets
" LIMIT %u", " LIMIT %u",
@ -617,7 +617,7 @@ void ExaPrn_GetPrintQuestionsFromDB (struct ExaPrn_Print *Print)
"Score," // row[2] "Score," // row[2]
"Indexes," // row[3] "Indexes," // row[3]
"Answers" // row[4] "Answers" // row[4]
" FROM exa_print_questions" " FROM exa_print_questions"
" WHERE PrnCod=%ld" " WHERE PrnCod=%ld"
" ORDER BY QstInd", " ORDER BY QstInd",
Print->PrnCod); Print->PrnCod);
@ -1276,7 +1276,7 @@ static void ExaPrn_GetCorrectIntAnswerFromDB (struct Tst_Question *Question)
Question->Answer.NumOptions = Question->Answer.NumOptions =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get answers of a question", (unsigned) DB_QuerySELECT (&mysql_res,"can not get answers of a question",
"SELECT Answer" // row[0] "SELECT Answer" // row[0]
" FROM exa_set_answers" " FROM exa_set_answers"
" WHERE QstCod=%ld", " WHERE QstCod=%ld",
Question->QstCod); Question->QstCod);
@ -1303,7 +1303,7 @@ static void ExaPrn_GetCorrectFltAnswerFromDB (struct Tst_Question *Question)
Question->Answer.NumOptions = Question->Answer.NumOptions =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get answers of a question", (unsigned) DB_QuerySELECT (&mysql_res,"can not get answers of a question",
"SELECT Answer" // row[0] "SELECT Answer" // row[0]
" FROM exa_set_answers" " FROM exa_set_answers"
" WHERE QstCod=%ld", " WHERE QstCod=%ld",
Question->QstCod); Question->QstCod);
@ -1341,7 +1341,7 @@ static void ExaPrn_GetCorrectTF_AnswerFromDB (struct Tst_Question *Question)
Question->Answer.NumOptions = Question->Answer.NumOptions =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get answers of a question", (unsigned) DB_QuerySELECT (&mysql_res,"can not get answers of a question",
"SELECT Answer" // row[0] "SELECT Answer" // row[0]
" FROM exa_set_answers" " FROM exa_set_answers"
" WHERE QstCod=%ld", " WHERE QstCod=%ld",
Question->QstCod); Question->QstCod);
@ -1366,7 +1366,7 @@ static void ExaPrn_GetCorrectChoAnswerFromDB (struct Tst_Question *Question)
Question->Answer.NumOptions = Question->Answer.NumOptions =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get answers of a question", (unsigned) DB_QuerySELECT (&mysql_res,"can not get answers of a question",
"SELECT Correct" // row[0] "SELECT Correct" // row[0]
" FROM exa_set_answers" " FROM exa_set_answers"
" WHERE QstCod=%ld" " WHERE QstCod=%ld"
" ORDER BY AnsInd", " ORDER BY AnsInd",
Question->QstCod); Question->QstCod);
@ -1395,7 +1395,7 @@ static void ExaPrn_GetCorrectTxtAnswerFromDB (struct Tst_Question *Question)
Question->Answer.NumOptions = Question->Answer.NumOptions =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get answers of a question", (unsigned) DB_QuerySELECT (&mysql_res,"can not get answers of a question",
"SELECT Answer" // row[0] "SELECT Answer" // row[0]
" FROM exa_set_answers" " FROM exa_set_answers"
" WHERE QstCod=%ld", " WHERE QstCod=%ld",
Question->QstCod); Question->QstCod);
@ -1437,8 +1437,9 @@ static void ExaPrn_GetAnswerFromDB (struct ExaPrn_Print *Print,long QstCod,
/***** Get questions of an exam print from database *****/ /***** Get questions of an exam print from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get answer in an exam print", if (DB_QuerySELECT (&mysql_res,"can not get answer in an exam print",
"SELECT Answers" "SELECT Answers"
" FROM exa_print_questions" " FROM exa_print_questions"
" WHERE PrnCod=%ld AND QstCod=%ld", " WHERE PrnCod=%ld"
" AND QstCod=%ld",
Print->PrnCod,QstCod)) Print->PrnCod,QstCod))
{ {
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -1484,11 +1485,12 @@ static void ExaPrn_GetNumQstsNotBlank (struct ExaPrn_Print *Print)
{ {
/***** Count number of questions not blank in exam print in database *****/ /***** Count number of questions not blank in exam print in database *****/
Print->NumQsts.NotBlank = (unsigned) Print->NumQsts.NotBlank = (unsigned)
DB_QueryCOUNT ("can not get number of questions not blank", DB_QueryCOUNT ("can not get number of questions not blank",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM exa_print_questions" " FROM exa_print_questions"
" WHERE PrnCod=%ld AND Answers<>''", " WHERE PrnCod=%ld"
Print->PrnCod); " AND Answers<>''",
Print->PrnCod);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1506,7 +1508,7 @@ static void ExaPrn_ComputeTotalScoreOfPrint (struct ExaPrn_Print *Print)
/***** Compute total score of exam print *****/ /***** Compute total score of exam print *****/
if (DB_QuerySELECT (&mysql_res,"can not get score of exam print", if (DB_QuerySELECT (&mysql_res,"can not get score of exam print",
"SELECT SUM(Score)" "SELECT SUM(Score)"
" FROM exa_print_questions" " FROM exa_print_questions"
" WHERE PrnCod=%ld", " WHERE PrnCod=%ld",
Print->PrnCod)) Print->PrnCod))
{ {

View File

@ -436,14 +436,14 @@ static void ExaRes_ListAllResultsInExa (struct Exa_Exams *Exams,long ExaCod)
/***** Get all users who have answered any session question in this exam *****/ /***** Get all users who have answered any session question in this exam *****/
NumUsrs = DB_QuerySELECT (&mysql_res,"can not get users in exam", NumUsrs = DB_QuerySELECT (&mysql_res,"can not get users in exam",
"SELECT users.UsrCod FROM" "SELECT users.UsrCod" // row[0]
" (SELECT DISTINCT exa_prints.UsrCod AS UsrCod" // row[0] " FROM (SELECT DISTINCT exa_prints.UsrCod AS UsrCod"
" FROM exa_prints,exa_sessions,exa_exams" " FROM exa_prints,exa_sessions,exa_exams"
" WHERE exa_sessions.ExaCod=%ld" " WHERE exa_sessions.ExaCod=%ld"
" AND exa_sessions.SesCod=exa_prints.SesCod" " AND exa_sessions.SesCod=exa_prints.SesCod"
" AND exa_sessions.ExaCod=exa_exams.ExaCod" " AND exa_sessions.ExaCod=exa_exams.ExaCod"
" AND exa_exams.CrsCod=%ld)" // Extra check " AND exa_exams.CrsCod=%ld) AS users," // Extra check
" AS users,usr_data" "usr_data"
" WHERE users.UsrCod=usr_data.UsrCod" " WHERE users.UsrCod=usr_data.UsrCod"
" ORDER BY usr_data.Surname1," " ORDER BY usr_data.Surname1,"
"usr_data.Surname2," "usr_data.Surname2,"
@ -532,14 +532,14 @@ static void ExaRes_ListAllResultsInSes (struct Exa_Exams *Exams,long SesCod)
/***** Get all users who have answered any session question in this exam *****/ /***** Get all users who have answered any session question in this exam *****/
NumUsrs = DB_QuerySELECT (&mysql_res,"can not get users in session", NumUsrs = DB_QuerySELECT (&mysql_res,"can not get users in session",
"SELECT users.UsrCod FROM" "SELECT users.UsrCod"
" (SELECT exa_prints.UsrCod AS UsrCod" // row[0] " FROM (SELECT exa_prints.UsrCod AS UsrCod" // row[0]
" FROM exa_prints,exa_sessions,exa_exams" " FROM exa_prints,exa_sessions,exa_exams"
" WHERE exa_prints.SesCod=%ld" " WHERE exa_prints.SesCod=%ld"
" AND exa_prints.SesCod=exa_sessions.SesCod" " AND exa_prints.SesCod=exa_sessions.SesCod"
" AND exa_sessions.ExaCod=exa_exams.ExaCod" " AND exa_sessions.ExaCod=exa_exams.ExaCod"
" AND exa_exams.CrsCod=%ld)" // Extra check " AND exa_exams.CrsCod=%ld) AS users," // Extra check
" AS users,usr_data" "usr_data"
" WHERE users.UsrCod=usr_data.UsrCod" " WHERE users.UsrCod=usr_data.UsrCod"
" ORDER BY usr_data.Surname1," " ORDER BY usr_data.Surname1,"
"usr_data.Surname2," "usr_data.Surname2,"
@ -923,15 +923,15 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
NumResults = NumResults =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get sessions results", (unsigned) DB_QuerySELECT (&mysql_res,"can not get sessions results",
"SELECT exa_prints.PrnCod" // row[0] "SELECT exa_prints.PrnCod" // row[0]
" FROM exa_prints,exa_sessions,exa_exams" " FROM exa_prints,exa_sessions,exa_exams"
" WHERE exa_prints.UsrCod=%ld" " WHERE exa_prints.UsrCod=%ld"
"%s" // Session subquery "%s" // Session subquery
" AND exa_prints.SesCod=exa_sessions.SesCod" " AND exa_prints.SesCod=exa_sessions.SesCod"
"%s" // Hidden sessions subquery "%s" // Hidden sessions subquery
"%s" // Exams subquery "%s" // Exams subquery
" AND exa_sessions.ExaCod=exa_exams.ExaCod" " AND exa_sessions.ExaCod=exa_exams.ExaCod"
"%s" // Hidden exams subquery "%s" // Hidden exams subquery
" AND exa_exams.CrsCod=%ld" // Extra check " AND exa_exams.CrsCod=%ld" // Extra check
" ORDER BY exa_sessions.Title", " ORDER BY exa_sessions.Title",
UsrDat->UsrCod, UsrDat->UsrCod,
SesSubQuery, SesSubQuery,
@ -1578,7 +1578,7 @@ static void ExaRes_ComputeValidPrintScore (struct ExaPrn_Print *Print)
QuestionExists = (DB_QuerySELECT (&mysql_res,"can not get a question", QuestionExists = (DB_QuerySELECT (&mysql_res,"can not get a question",
"SELECT Invalid," // row[0] "SELECT Invalid," // row[0]
"AnsType" // row[1] "AnsType" // row[1]
" FROM exa_set_questions" " FROM exa_set_questions"
" WHERE QstCod=%ld", " WHERE QstCod=%ld",
Question.QstCod) != 0); Question.QstCod) != 0);
if (QuestionExists) if (QuestionExists)

View File

@ -210,7 +210,7 @@ void ExaSes_ListSessions (struct Exa_Exams *Exams,
"NOW() BETWEEN StartTime AND EndTime," // row[6] "NOW() BETWEEN StartTime AND EndTime," // row[6]
"Title," // row[7] "Title," // row[7]
"ShowUsrResults" // row[8] "ShowUsrResults" // row[8]
" FROM exa_sessions" " FROM exa_sessions"
" WHERE ExaCod=%ld%s%s" " WHERE ExaCod=%ld%s%s"
" ORDER BY SesCod", " ORDER BY SesCod",
Exam->ExaCod,HiddenSubQuery,GroupsSubQuery); Exam->ExaCod,HiddenSubQuery,GroupsSubQuery);
@ -313,11 +313,12 @@ void ExaSes_GetDataOfSessionByCod (struct ExaSes_Session *Session)
"NOW() BETWEEN StartTime AND EndTime," // row[6] "NOW() BETWEEN StartTime AND EndTime," // row[6]
"Title," // row[7] "Title," // row[7]
"ShowUsrResults" // row[8] "ShowUsrResults" // row[8]
" FROM exa_sessions" " FROM exa_sessions"
" WHERE SesCod=%ld" " WHERE SesCod=%ld"
" AND ExaCod IN" // Extra check " AND ExaCod IN" // Extra check
" (SELECT ExaCod FROM exa_exams" " (SELECT ExaCod"
" WHERE CrsCod='%ld')", " FROM exa_exams"
" WHERE CrsCod='%ld')",
Session->SesCod, Session->SesCod,
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
if (NumRows) // Session found... if (NumRows) // Session found...
@ -1685,7 +1686,8 @@ unsigned ExaSes_GetNumSessionsInExam (long ExaCod)
/***** Get number of sessions in an exam from database *****/ /***** Get number of sessions in an exam from database *****/
return return
(unsigned) DB_QueryCOUNT ("can not get number of sessions of an exam", (unsigned) DB_QueryCOUNT ("can not get number of sessions of an exam",
"SELECT COUNT(*) FROM exa_sessions" "SELECT COUNT(*)"
" FROM exa_sessions"
" WHERE ExaCod=%ld", " WHERE ExaCod=%ld",
ExaCod); ExaCod);
} }
@ -1703,9 +1705,10 @@ unsigned ExaSes_GetNumOpenSessionsInExam (long ExaCod)
/***** Get number of open sessions in an exam from database *****/ /***** Get number of open sessions in an exam from database *****/
return return
(unsigned) DB_QueryCOUNT ("can not get number of open sessions of an exam", (unsigned) DB_QueryCOUNT ("can not get number of open sessions of an exam",
"SELECT COUNT(*) FROM exa_sessions" "SELECT COUNT(*)"
" FROM exa_sessions"
" WHERE ExaCod=%ld" " WHERE ExaCod=%ld"
" AND NOW() BETWEEN StartTime AND EndTime", " AND NOW() BETWEEN StartTime AND EndTime",
ExaCod); ExaCod);
} }
@ -1718,7 +1721,9 @@ bool ExaSes_CheckIfICanAnswerThisSession (const struct Exa_Exam *Exam,
{ {
/***** 1. Sessions in hidden exams are not accesible /***** 1. Sessions in hidden exams are not accesible
2. Hidden or closed sessions are not accesible *****/ 2. Hidden or closed sessions are not accesible *****/
if (Exam->Hidden || Session->Hidden || !Session->Open) if (Exam->Hidden ||
Session->Hidden ||
!Session->Open)
return false; return false;
/***** Exam is visible, session is visible and open ==> /***** Exam is visible, session is visible and open ==>

View File

@ -190,7 +190,8 @@ static unsigned ExaSet_GetNumQstsInSet (long SetCod)
/***** Get number of questions in set from database *****/ /***** Get number of questions in set from database *****/
return return
(unsigned) DB_QueryCOUNT ("can not get number of questions in a set", (unsigned) DB_QueryCOUNT ("can not get number of questions in a set",
"SELECT COUNT(*) FROM exa_set_questions" "SELECT COUNT(*)"
" FROM exa_set_questions"
" WHERE SetCod=%ld", " WHERE SetCod=%ld",
SetCod); SetCod);
} }
@ -220,7 +221,7 @@ void ExaSet_GetDataOfSetByCod (struct ExaSet_Set *Set)
"SetInd," // row[2] "SetInd," // row[2]
"NumQstsToPrint," // row[3] "NumQstsToPrint," // row[3]
"Title" // row[4] "Title" // row[4]
" FROM exa_sets" " FROM exa_sets"
" WHERE SetCod=%ld", " WHERE SetCod=%ld",
Set->SetCod)) // Set found... Set->SetCod)) // Set found...
{ {
@ -266,11 +267,14 @@ static bool ExaSet_CheckIfSimilarSetExists (const struct ExaSet_Set *Set,
{ {
/***** Get number of set of questions with a field value from database *****/ /***** Get number of set of questions with a field value from database *****/
return (DB_QueryCOUNT ("can not get similar sets of questions", return (DB_QueryCOUNT ("can not get similar sets of questions",
"SELECT COUNT(*) FROM exa_sets,exa_exams" "SELECT COUNT(*)"
" WHERE exa_sets.ExaCod=%ld AND exa_sets.Title='%s'" " FROM exa_sets,"
" AND exa_sets.SetCod<>%ld" "exa_exams"
" AND exa_sets.ExaCod=exa_exams.ExaCod" " WHERE exa_sets.ExaCod=%ld"
" AND exa_exams.CrsCod=%ld", // Extra check " AND exa_sets.Title='%s'"
" AND exa_sets.SetCod<>%ld"
" AND exa_sets.ExaCod=exa_exams.ExaCod"
" AND exa_exams.CrsCod=%ld", // Extra check
Set->ExaCod,Title, Set->ExaCod,Title,
Set->SetCod, Set->SetCod,
Gbl.Hierarchy.Crs.CrsCod) != 0); Gbl.Hierarchy.Crs.CrsCod) != 0);
@ -624,7 +628,8 @@ unsigned ExaSet_GetNumSetsExam (long ExaCod)
/***** Get number of sets in an exam from database *****/ /***** Get number of sets in an exam from database *****/
return return
(unsigned) DB_QueryCOUNT ("can not get number of sets in an exam", (unsigned) DB_QueryCOUNT ("can not get number of sets in an exam",
"SELECT COUNT(*) FROM exa_sets" "SELECT COUNT(*)"
" FROM exa_sets"
" WHERE ExaCod=%ld", " WHERE ExaCod=%ld",
ExaCod); ExaCod);
} }
@ -641,7 +646,8 @@ unsigned ExaSet_GetNumQstsExam (long ExaCod)
/***** Get total number of questions to appear in exam print *****/ /***** Get total number of questions to appear in exam print *****/
if (!DB_QuerySELECT (&mysql_res,"can not get number of questions in an exam print", if (!DB_QuerySELECT (&mysql_res,"can not get number of questions in an exam print",
"SELECT SUM(NumQstsToPrint) FROM exa_sets" "SELECT SUM(NumQstsToPrint)"
" FROM exa_sets"
" WHERE ExaCod=%ld", " WHERE ExaCod=%ld",
ExaCod)) ExaCod))
Lay_ShowErrorAndExit ("Error: wrong question index."); Lay_ShowErrorAndExit ("Error: wrong question index.");
@ -784,9 +790,10 @@ static unsigned ExaSet_GetSetIndFromSetCod (long ExaCod,long SetCod)
/***** Get set index from set code *****/ /***** Get set index from set code *****/
if (!DB_QuerySELECT (&mysql_res,"can not get set index", if (!DB_QuerySELECT (&mysql_res,"can not get set index",
"SELECT SetInd FROM exa_sets" "SELECT SetInd"
" FROM exa_sets"
" WHERE SetCod=%u" " WHERE SetCod=%u"
" AND ExaCod=%ld", // Extra check " AND ExaCod=%ld", // Extra check
SetCod,ExaCod)) SetCod,ExaCod))
Lay_ShowErrorAndExit ("Error: wrong set code."); Lay_ShowErrorAndExit ("Error: wrong set code.");
@ -812,8 +819,10 @@ static long ExaSet_GetSetCodFromSetInd (long ExaCod,unsigned SetInd)
/***** Get set code from set index *****/ /***** Get set code from set index *****/
if (!DB_QuerySELECT (&mysql_res,"can not get set code", if (!DB_QuerySELECT (&mysql_res,"can not get set code",
"SELECT SetCod FROM exa_sets" "SELECT SetCod"
" WHERE ExaCod=%ld AND SetInd=%u", " FROM exa_sets"
" WHERE ExaCod=%ld"
" AND SetInd=%u",
ExaCod,SetInd)) ExaCod,SetInd))
Lay_ShowErrorAndExit ("Error: wrong set index."); Lay_ShowErrorAndExit ("Error: wrong set index.");
@ -843,7 +852,7 @@ static unsigned ExaSet_GetMaxSetIndexInExam (long ExaCod)
/***** Get maximum set index in an exam from database *****/ /***** Get maximum set index in an exam from database *****/
DB_QuerySELECT (&mysql_res,"can not get max set index", DB_QuerySELECT (&mysql_res,"can not get max set index",
"SELECT MAX(SetInd)" "SELECT MAX(SetInd)"
" FROM exa_sets" " FROM exa_sets"
" WHERE ExaCod=%ld", " WHERE ExaCod=%ld",
ExaCod); ExaCod);
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -873,8 +882,10 @@ static unsigned ExaSet_GetPrevSetIndexInExam (long ExaCod,unsigned SetInd)
// Although indexes are always continuous... // Although indexes are always continuous...
// ...this implementation works even with non continuous indexes // ...this implementation works even with non continuous indexes
if (!DB_QuerySELECT (&mysql_res,"can not get previous set index", if (!DB_QuerySELECT (&mysql_res,"can not get previous set index",
"SELECT MAX(SetInd) FROM exa_sets" "SELECT MAX(SetInd)"
" WHERE ExaCod=%ld AND SetInd<%u", " FROM exa_sets"
" WHERE ExaCod=%ld"
" AND SetInd<%u",
ExaCod,SetInd)) ExaCod,SetInd))
Lay_ShowErrorAndExit ("Error: previous set index not found."); Lay_ShowErrorAndExit ("Error: previous set index not found.");
@ -907,8 +918,10 @@ static unsigned ExaSet_GetNextSetIndexInExam (long ExaCod,unsigned SetInd)
// Although indexes are always continuous... // Although indexes are always continuous...
// ...this implementation works even with non continuous indexes // ...this implementation works even with non continuous indexes
if (!DB_QuerySELECT (&mysql_res,"can not get next set index", if (!DB_QuerySELECT (&mysql_res,"can not get next set index",
"SELECT MIN(SetInd) FROM exa_sets" "SELECT MIN(SetInd)"
" WHERE ExaCod=%ld AND SetInd>%u", " FROM exa_sets"
" WHERE ExaCod=%ld"
" AND SetInd>%u",
ExaCod,SetInd)) ExaCod,SetInd))
Lay_ShowErrorAndExit ("Error: next set index not found."); Lay_ShowErrorAndExit ("Error: next set index not found.");
@ -950,7 +963,7 @@ void ExaSet_ListExamSets (struct Exa_Exams *Exams,
"SetInd," // row[1] "SetInd," // row[1]
"NumQstsToPrint," // row[2] "NumQstsToPrint," // row[2]
"Title" // row[3] "Title" // row[3]
" FROM exa_sets" " FROM exa_sets"
" WHERE ExaCod=%ld" " WHERE ExaCod=%ld"
" ORDER BY SetInd", " ORDER BY SetInd",
Exam->ExaCod); Exam->ExaCod);
@ -997,7 +1010,7 @@ static void ExaSet_ListSetQuestions (struct Exa_Exams *Exams,
NumQsts = (unsigned) NumQsts = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get exam questions", DB_QuerySELECT (&mysql_res,"can not get exam questions",
"SELECT QstCod" // row[0] "SELECT QstCod" // row[0]
" FROM exa_set_questions" " FROM exa_set_questions"
" WHERE SetCod=%ld" " WHERE SetCod=%ld"
" ORDER BY Stem", " ORDER BY Stem",
Set->SetCod); Set->SetCod);
@ -1369,7 +1382,7 @@ Tst_AnswerType_t ExaSet_GetQstAnswerTypeFromDB (long QstCod)
/***** Get type of answer from database *****/ /***** Get type of answer from database *****/
if (!DB_QuerySELECT (&mysql_res,"can not get the type of a question", if (!DB_QuerySELECT (&mysql_res,"can not get the type of a question",
"SELECT AnsType" // row[0] "SELECT AnsType" // row[0]
" FROM exa_set_questions" " FROM exa_set_questions"
" WHERE QstCod=%ld", " WHERE QstCod=%ld",
QstCod)) QstCod))
Lay_ShowErrorAndExit ("Question does not exist."); Lay_ShowErrorAndExit ("Question does not exist.");
@ -1403,7 +1416,7 @@ void ExaSet_GetQstDataFromDB (struct Tst_Question *Question)
"Stem," // row[3] "Stem," // row[3]
"Feedback," // row[4] "Feedback," // row[4]
"MedCod" // row[5] "MedCod" // row[5]
" FROM exa_set_questions" " FROM exa_set_questions"
" WHERE QstCod=%ld", " WHERE QstCod=%ld",
Question->QstCod) != 0); Question->QstCod) != 0);
@ -1531,7 +1544,7 @@ void ExaSet_GetAnswersQst (struct Tst_Question *Question,MYSQL_RES **mysql_res,
"Feedback," // row[2] "Feedback," // row[2]
"MedCod," // row[3] "MedCod," // row[3]
"Correct" // row[4] "Correct" // row[4]
" FROM exa_set_answers" " FROM exa_set_answers"
" WHERE QstCod=%ld" " WHERE QstCod=%ld"
" ORDER BY %s", " ORDER BY %s",
Question->QstCod, Question->QstCod,

View File

@ -1077,7 +1077,7 @@ static void Fig_GetAndShowInssOrderedByNumCtrs (void)
DB_QuerySELECT (&mysql_res,"can not get institutions", DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT InsCod," "SELECT InsCod,"
"COUNT(*) AS N" "COUNT(*) AS N"
" FROM ctr_centers" " FROM ctr_centers"
" GROUP BY InsCod" " GROUP BY InsCod"
" ORDER BY N DESC"); " ORDER BY N DESC");
break; break;
@ -1086,10 +1086,10 @@ static void Fig_GetAndShowInssOrderedByNumCtrs (void)
DB_QuerySELECT (&mysql_res,"can not get institutions", DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," "SELECT ctr_centers.InsCod,"
"COUNT(*) AS N" "COUNT(*) AS N"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers" "ctr_centers"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" GROUP BY ctr_centers.InsCod" " GROUP BY ctr_centers.InsCod"
" ORDER BY N DESC", " ORDER BY N DESC",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
@ -1102,7 +1102,7 @@ static void Fig_GetAndShowInssOrderedByNumCtrs (void)
DB_QuerySELECT (&mysql_res,"can not get institutions", DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT InsCod," "SELECT InsCod,"
"COUNT(*) AS N" "COUNT(*) AS N"
" FROM ctr_centers" " FROM ctr_centers"
" WHERE InsCod=%ld" " WHERE InsCod=%ld"
" GROUP BY InsCod" " GROUP BY InsCod"
" ORDER BY N DESC", " ORDER BY N DESC",
@ -1147,8 +1147,8 @@ static void Fig_GetAndShowInssOrderedByNumDegs (void)
DB_QuerySELECT (&mysql_res,"can not get institutions", DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," "SELECT ctr_centers.InsCod,"
"COUNT(*) AS N" "COUNT(*) AS N"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees" "deg_degrees"
" WHERE ctr_centers.CtrCod=deg_degrees.CtrCod" " WHERE ctr_centers.CtrCod=deg_degrees.CtrCod"
" GROUP BY InsCod" " GROUP BY InsCod"
" ORDER BY N DESC"); " ORDER BY N DESC");
@ -1158,12 +1158,12 @@ static void Fig_GetAndShowInssOrderedByNumDegs (void)
DB_QuerySELECT (&mysql_res,"can not get institutions", DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," "SELECT ctr_centers.InsCod,"
"COUNT(*) AS N" "COUNT(*) AS N"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees" "deg_degrees"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" GROUP BY ctr_centers.InsCod" " GROUP BY ctr_centers.InsCod"
" ORDER BY N DESC", " ORDER BY N DESC",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
@ -1176,10 +1176,10 @@ static void Fig_GetAndShowInssOrderedByNumDegs (void)
DB_QuerySELECT (&mysql_res,"can not get institutions", DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," "SELECT ctr_centers.InsCod,"
"COUNT(*) AS N" "COUNT(*) AS N"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees" "deg_degrees"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" GROUP BY ctr_centers.InsCod" " GROUP BY ctr_centers.InsCod"
" ORDER BY N DESC", " ORDER BY N DESC",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
@ -1223,11 +1223,11 @@ static void Fig_GetAndShowInssOrderedByNumCrss (void)
DB_QuerySELECT (&mysql_res,"can not get institutions", DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," "SELECT ctr_centers.InsCod,"
"COUNT(*) AS N" "COUNT(*) AS N"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses" "crs_courses"
" WHERE ctr_centers.CtrCod=deg_degrees.CtrCod" " WHERE ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" GROUP BY InsCod" " GROUP BY InsCod"
" ORDER BY N DESC"); " ORDER BY N DESC");
break; break;
@ -1236,14 +1236,14 @@ static void Fig_GetAndShowInssOrderedByNumCrss (void)
DB_QuerySELECT (&mysql_res,"can not get institutions", DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," "SELECT ctr_centers.InsCod,"
"COUNT(*) AS N" "COUNT(*) AS N"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses" "crs_courses"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" GROUP BY ctr_centers.InsCod" " GROUP BY ctr_centers.InsCod"
" ORDER BY N DESC", " ORDER BY N DESC",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
@ -1256,12 +1256,12 @@ static void Fig_GetAndShowInssOrderedByNumCrss (void)
DB_QuerySELECT (&mysql_res,"can not get institutions", DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT ctr_centers.InsCod," "SELECT ctr_centers.InsCod,"
"COUNT(*) AS N" "COUNT(*) AS N"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses" "crs_courses"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" GROUP BY ctr_centers.InsCod" " GROUP BY ctr_centers.InsCod"
" ORDER BY N DESC", " ORDER BY N DESC",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
@ -1393,7 +1393,7 @@ static void Fig_GetAndShowInssOrderedByNumUsrsWhoClaimToBelongToThem (void)
NumInss = NumInss =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get institutions", (unsigned) DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT InsCod,COUNT(*) AS N" "SELECT InsCod,COUNT(*) AS N"
" FROM usr_data" " FROM usr_data"
" WHERE InsCod>0" " WHERE InsCod>0"
" GROUP BY InsCod" " GROUP BY InsCod"
" ORDER BY N DESC"); " ORDER BY N DESC");
@ -1402,9 +1402,9 @@ static void Fig_GetAndShowInssOrderedByNumUsrsWhoClaimToBelongToThem (void)
NumInss = NumInss =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get institutions", (unsigned) DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT usr_data.InsCod,COUNT(*) AS N" "SELECT usr_data.InsCod,COUNT(*) AS N"
" FROM ins_instits,usr_data" " FROM ins_instits,usr_data"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=usr_data.InsCod" " AND ins_instits.InsCod=usr_data.InsCod"
" GROUP BY usr_data.InsCod" " GROUP BY usr_data.InsCod"
" ORDER BY N DESC", " ORDER BY N DESC",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
@ -1416,7 +1416,7 @@ static void Fig_GetAndShowInssOrderedByNumUsrsWhoClaimToBelongToThem (void)
NumInss = NumInss =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get institutions", (unsigned) DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT InsCod,COUNT(*) AS N" "SELECT InsCod,COUNT(*) AS N"
" FROM usr_data" " FROM usr_data"
" WHERE InsCod=%ld" " WHERE InsCod=%ld"
" GROUP BY InsCod" " GROUP BY InsCod"
" ORDER BY N DESC", " ORDER BY N DESC",
@ -4065,31 +4065,31 @@ static void Fig_GetAndShowFollowStats (void)
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
DB_QuerySELECT (&mysql_res,"can not get number of questions" DB_QuerySELECT (&mysql_res,"can not get number of questions"
" per survey", " per survey",
"SELECT AVG(N) FROM " // row[0] "SELECT AVG(N)" // row[0]
"(SELECT COUNT(%s) AS N" " FROM (SELECT COUNT(%s) AS N"
" FROM usr_follow" " FROM usr_follow"
" GROUP BY %s) AS F", " GROUP BY %s) AS F",
FieldDB[Fol], FieldDB[Fol],
FieldDB[1 - Fol]); FieldDB[1 - Fol]);
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
DB_QuerySELECT (&mysql_res,"can not get number of questions" DB_QuerySELECT (&mysql_res,"can not get number of questions"
" per survey", " per survey",
"SELECT AVG(N) FROM " // row[0] "SELECT AVG(N)" // row[0]
"(SELECT COUNT(DISTINCT usr_follow.%s) AS N" " FROM (SELECT COUNT(DISTINCT usr_follow.%s) AS N"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"crs_users," "crs_users,"
"usr_follow" "usr_follow"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_users.CrsCod" " AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.UsrCod=usr_follow.%s" " AND crs_users.UsrCod=usr_follow.%s"
" GROUP BY %s) AS F", " GROUP BY %s) AS F",
FieldDB[Fol], FieldDB[Fol],
Gbl.Hierarchy.Cty.CtyCod, Gbl.Hierarchy.Cty.CtyCod,
FieldDB[Fol], FieldDB[Fol],
@ -4098,19 +4098,19 @@ static void Fig_GetAndShowFollowStats (void)
case Hie_Lvl_INS: case Hie_Lvl_INS:
DB_QuerySELECT (&mysql_res,"can not get number of questions" DB_QuerySELECT (&mysql_res,"can not get number of questions"
" per survey", " per survey",
"SELECT AVG(N) FROM " // row[0] "SELECT AVG(N)" // row[0]
"(SELECT COUNT(DISTINCT usr_follow.%s) AS N" " FROM (SELECT COUNT(DISTINCT usr_follow.%s) AS N"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"crs_users," "crs_users,"
"usr_follow" "usr_follow"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_users.CrsCod" " AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.UsrCod=usr_follow.%s" " AND crs_users.UsrCod=usr_follow.%s"
" GROUP BY %s) AS F", " GROUP BY %s) AS F",
FieldDB[Fol], FieldDB[Fol],
Gbl.Hierarchy.Ins.InsCod, Gbl.Hierarchy.Ins.InsCod,
FieldDB[Fol], FieldDB[Fol],
@ -4119,17 +4119,17 @@ static void Fig_GetAndShowFollowStats (void)
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
DB_QuerySELECT (&mysql_res,"can not get number of questions" DB_QuerySELECT (&mysql_res,"can not get number of questions"
" per survey", " per survey",
"SELECT AVG(N) FROM " // row[0] "SELECT AVG(N)" // row[0]
"(SELECT COUNT(DISTINCT usr_follow.%s) AS N" " FROM (SELECT COUNT(DISTINCT usr_follow.%s) AS N"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"crs_users," "crs_users,"
"usr_follow" "usr_follow"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=crs_users.CrsCod" " AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.UsrCod=usr_follow.%s" " AND crs_users.UsrCod=usr_follow.%s"
" GROUP BY %s) AS F", " GROUP BY %s) AS F",
FieldDB[Fol], FieldDB[Fol],
Gbl.Hierarchy.Ctr.CtrCod, Gbl.Hierarchy.Ctr.CtrCod,
FieldDB[Fol], FieldDB[Fol],
@ -4138,15 +4138,15 @@ static void Fig_GetAndShowFollowStats (void)
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
DB_QuerySELECT (&mysql_res,"can not get number of questions" DB_QuerySELECT (&mysql_res,"can not get number of questions"
" per survey", " per survey",
"SELECT AVG(N) FROM " // row[0] "SELECT AVG(N)" // row[0]
"(SELECT COUNT(DISTINCT usr_follow.%s) AS N" " FROM (SELECT COUNT(DISTINCT usr_follow.%s) AS N"
" FROM crs_courses," " FROM crs_courses,"
"crs_users," "crs_users,"
"usr_follow" "usr_follow"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=crs_users.CrsCod" " AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.UsrCod=usr_follow.%s" " AND crs_users.UsrCod=usr_follow.%s"
" GROUP BY %s) AS F", " GROUP BY %s) AS F",
FieldDB[Fol], FieldDB[Fol],
Gbl.Hierarchy.Deg.DegCod, Gbl.Hierarchy.Deg.DegCod,
FieldDB[Fol], FieldDB[Fol],
@ -4155,13 +4155,13 @@ static void Fig_GetAndShowFollowStats (void)
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
DB_QuerySELECT (&mysql_res,"can not get number of questions" DB_QuerySELECT (&mysql_res,"can not get number of questions"
" per survey", " per survey",
"SELECT AVG(N) FROM " // row[0] "SELECT AVG(N)" // row[0]
"(SELECT COUNT(DISTINCT usr_follow.%s) AS N" " FROM (SELECT COUNT(DISTINCT usr_follow.%s) AS N"
" FROM crs_users," " FROM crs_users,"
"usr_follow" "usr_follow"
" WHERE crs_users.CrsCod=%ld" " WHERE crs_users.CrsCod=%ld"
" AND crs_users.UsrCod=usr_follow.%s" " AND crs_users.UsrCod=usr_follow.%s"
" GROUP BY %s) AS F", " GROUP BY %s) AS F",
FieldDB[Fol], FieldDB[Fol],
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
FieldDB[Fol], FieldDB[Fol],
@ -5806,7 +5806,7 @@ unsigned Fig_GetNumUsrsWhoChoseAnOption (const char *SubQuery)
NumUsrs = (unsigned) NumUsrs = (unsigned)
DB_QueryCOUNT ("can not get the number of users who have chosen an option", DB_QueryCOUNT ("can not get the number of users who have chosen an option",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM usr_data WHERE %s", " FROM usr_data WHERE %s",
SubQuery); SubQuery);
break; break;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:

View File

@ -138,7 +138,7 @@ bool FigCch_GetFigureFromCache (FigCch_FigureCached_t Figure,
/***** Get figure's value if cached and recent *****/ /***** Get figure's value if cached and recent *****/
if (DB_QuerySELECT (&mysql_res,"can not get cached figure value", if (DB_QuerySELECT (&mysql_res,"can not get cached figure value",
"SELECT %s" // row[0] "SELECT %s" // row[0]
" FROM fig_figures" " FROM fig_figures"
" WHERE Figure=%u" " WHERE Figure=%u"
" AND Scope='%s'" " AND Scope='%s'"
" AND Cod=%ld" " AND Cod=%ld"

View File

@ -7113,7 +7113,7 @@ static bool Brw_GetMyClipboard (void)
"WorksUsrCod," // row[2] "WorksUsrCod," // row[2]
"FileType," // row[3] "FileType," // row[3]
"Path" // row[4] "Path" // row[4]
" FROM brw_clipboards" " FROM brw_clipboards"
" WHERE UsrCod=%ld", " WHERE UsrCod=%ld",
Gbl.Usrs.Me.UsrDat.UsrCod); Gbl.Usrs.Me.UsrDat.UsrCod);
@ -9420,12 +9420,15 @@ bool Brw_CheckIfFileOrFolderIsHidden (struct FileMetadata *FileMetadata)
2) the argument Path begins by 'x/', where x is a path stored in database 2) the argument Path begins by 'x/', where x is a path stored in database
*/ */
return (DB_QueryCOUNT ("can not check if a file or folder is hidden", return (DB_QueryCOUNT ("can not check if a file or folder is hidden",
"SELECT COUNT(*) FROM brw_files" "SELECT COUNT(*)"
" FROM brw_files"
" WHERE FileBrowser=%u" " WHERE FileBrowser=%u"
" AND Cod=%ld" " AND Cod=%ld"
" AND ZoneUsrCod=%ld" " AND ZoneUsrCod=%ld"
" AND Hidden='Y'" " AND Hidden='Y'"
" AND (Path='%s' OR LOCATE(CONCAT(Path,'/'),'%s')=1)", " AND (Path='%s'"
" OR"
" LOCATE(CONCAT(Path,'/'),'%s')=1)",
FileMetadata->FileBrowser, FileMetadata->FileBrowser,
FileMetadata->Cod, FileMetadata->Cod,
FileMetadata->ZoneUsrCod, FileMetadata->ZoneUsrCod,
@ -10382,7 +10385,8 @@ long Brw_GetFilCodByPath (const char *Path,bool OnlyIfPublic)
" WHERE FileBrowser=%u" " WHERE FileBrowser=%u"
" AND Cod=%ld" " AND Cod=%ld"
" AND ZoneUsrCod=%ld" " AND ZoneUsrCod=%ld"
" AND Path='%s'%s", " AND Path='%s'"
"%s",
(unsigned) Brw_FileBrowserForDB_files[Gbl.FileBrowser.Type], (unsigned) Brw_FileBrowserForDB_files[Gbl.FileBrowser.Type],
Cod,ZoneUsrCod, Cod,ZoneUsrCod,
Path, Path,
@ -11758,7 +11762,9 @@ static long Brw_GetPublisherOfSubtree (void)
" FROM brw_files" " FROM brw_files"
" WHERE FileBrowser=%u" " WHERE FileBrowser=%u"
" AND Cod=%ld" " AND Cod=%ld"
" AND (Path='%s' OR Path LIKE '%s/%%')", " AND (Path='%s'"
" OR"
" Path LIKE '%s/%%')",
(unsigned) Brw_FileBrowserForDB_files[Gbl.FileBrowser.Type], (unsigned) Brw_FileBrowserForDB_files[Gbl.FileBrowser.Type],
Cod, Cod,
Gbl.FileBrowser.FilFolLnk.Full, Gbl.FileBrowser.FilFolLnk.Full,

View File

@ -135,9 +135,9 @@ void Fir_CheckFirewallAndExitIfTooManyRequests (void)
/***** Get number of clicks from database *****/ /***** Get number of clicks from database *****/
NumClicks = DB_QueryCOUNT ("can not check firewall log", NumClicks = DB_QueryCOUNT ("can not check firewall log",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM fir_log" " FROM fir_log"
" WHERE IP='%s'" " WHERE IP='%s'"
" AND ClickTime>FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)", " AND ClickTime>FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)",
Gbl.IP, Gbl.IP,
Fw_CHECK_INTERVAL); Fw_CHECK_INTERVAL);

View File

@ -461,8 +461,10 @@ bool Fol_CheckUsrIsFollowerOf (long FollowerCod,long FollowedCod)
/***** Check if a user is a follower of another user *****/ /***** Check if a user is a follower of another user *****/
return (DB_QueryCOUNT ("can not get if a user is a follower of another one", return (DB_QueryCOUNT ("can not get if a user is a follower of another one",
"SELECT COUNT(*) FROM usr_follow" "SELECT COUNT(*)"
" WHERE FollowerCod=%ld AND FollowedCod=%ld", " FROM usr_follow"
" WHERE FollowerCod=%ld"
" AND FollowedCod=%ld",
FollowerCod,FollowedCod) != 0); FollowerCod,FollowedCod) != 0);
} }
@ -499,12 +501,14 @@ void Fol_GetNumFollow (long UsrCod,
Gbl.Cache.Follow.UsrCod = UsrCod; Gbl.Cache.Follow.UsrCod = UsrCod;
*NumFollowing = Gbl.Cache.Follow.NumFollowing = *NumFollowing = Gbl.Cache.Follow.NumFollowing =
(unsigned) DB_QueryCOUNT ("can not get number of followed", (unsigned) DB_QueryCOUNT ("can not get number of followed",
"SELECT COUNT(*) FROM usr_follow" "SELECT COUNT(*)"
" FROM usr_follow"
" WHERE FollowerCod=%ld", " WHERE FollowerCod=%ld",
UsrCod); UsrCod);
*NumFollowers = Gbl.Cache.Follow.NumFollowers = *NumFollowers = Gbl.Cache.Follow.NumFollowers =
(unsigned) DB_QueryCOUNT ("can not get number of followers", (unsigned) DB_QueryCOUNT ("can not get number of followers",
"SELECT COUNT(*) FROM usr_follow" "SELECT COUNT(*)"
" FROM usr_follow"
" WHERE FollowedCod=%ld", " WHERE FollowedCod=%ld",
UsrCod); UsrCod);
} }
@ -681,7 +685,8 @@ static void Fol_ListFollowingUsr (struct UsrData *UsrDat)
{ {
/***** Check if a user is a follower of another user *****/ /***** Check if a user is a follower of another user *****/
NumUsrs = DB_QuerySELECT (&mysql_res,"can not get followed users", NumUsrs = DB_QuerySELECT (&mysql_res,"can not get followed users",
"SELECT FollowedCod FROM usr_follow" "SELECT FollowedCod"
" FROM usr_follow"
" WHERE FollowerCod=%ld" " WHERE FollowerCod=%ld"
" ORDER BY FollowTime DESC", " ORDER BY FollowTime DESC",
UsrDat->UsrCod); UsrDat->UsrCod);
@ -765,7 +770,8 @@ static void Fol_ListFollowersUsr (struct UsrData *UsrDat)
{ {
/***** Check if a user is a follower of another user *****/ /***** Check if a user is a follower of another user *****/
NumUsrs = DB_QuerySELECT (&mysql_res,"can not get followers", NumUsrs = DB_QuerySELECT (&mysql_res,"can not get followers",
"SELECT FollowerCod FROM usr_follow" "SELECT FollowerCod"
" FROM usr_follow"
" WHERE FollowedCod=%ld" " WHERE FollowedCod=%ld"
" ORDER BY FollowTime DESC", " ORDER BY FollowTime DESC",
UsrDat->UsrCod); UsrDat->UsrCod);
@ -1372,9 +1378,9 @@ void Fol_GetAndShowRankingFollowers (void)
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
NumUsrs = (unsigned) NumUsrs = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get ranking", DB_QuerySELECT (&mysql_res,"can not get ranking",
"SELECT FollowedCod," "SELECT FollowedCod," // row[0]
"COUNT(FollowerCod) AS N" "COUNT(FollowerCod) AS N" // row[1]
" FROM usr_follow" " FROM usr_follow"
" GROUP BY FollowedCod" " GROUP BY FollowedCod"
" ORDER BY N DESC," " ORDER BY N DESC,"
"FollowedCod" "FollowedCod"
@ -1526,8 +1532,8 @@ void Fol_CreateTmpTableMeAndUsrsIFollow (void)
" SELECT %ld AS UsrCod" // Me " SELECT %ld AS UsrCod" // Me
" UNION" " UNION"
" SELECT FollowedCod AS UsrCod" // Users I follow " SELECT FollowedCod AS UsrCod" // Users I follow
" FROM usr_follow" " FROM usr_follow"
" WHERE FollowerCod=%ld", " WHERE FollowerCod=%ld",
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Usrs.Me.UsrDat.UsrCod); Gbl.Usrs.Me.UsrDat.UsrCod);
} }

View File

@ -899,11 +899,11 @@ void Gam_GetListGames (struct Gam_Games *Games,Gam_Order_t SelectedOrder)
"SELECT gam_games.GamCod," // row[0] "SELECT gam_games.GamCod," // row[0]
"MIN(mch_matches.StartTime) AS StartTime," // row[1] "MIN(mch_matches.StartTime) AS StartTime," // row[1]
"MAX(mch_matches.EndTime) AS EndTime" // row[2] "MAX(mch_matches.EndTime) AS EndTime" // row[2]
" FROM gam_games" " FROM gam_games"
" LEFT JOIN mch_matches" " LEFT JOIN mch_matches"
" ON gam_games.GamCod=mch_matches.GamCod" " ON gam_games.GamCod=mch_matches.GamCod"
" WHERE gam_games.CrsCod=%ld" " WHERE gam_games.CrsCod=%ld"
"%s" "%s"
" GROUP BY gam_games.GamCod" " GROUP BY gam_games.GamCod"
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
@ -1028,11 +1028,11 @@ void Gam_GetDataOfGameByCod (struct Gam_Game *Game)
"gam_games.MaxGrade," // row[4] "gam_games.MaxGrade," // row[4]
"gam_games.Visibility," // row[5] "gam_games.Visibility," // row[5]
"gam_games.Title" // row[6] "gam_games.Title" // row[6]
" FROM gam_games" " FROM gam_games"
" LEFT JOIN mch_matches" " LEFT JOIN mch_matches"
" ON gam_games.GamCod=mch_matches.GamCod" " ON gam_games.GamCod=mch_matches.GamCod"
" WHERE gam_games.GamCod=%ld" " WHERE gam_games.GamCod=%ld"
" AND gam_games.CrsCod='%ld'", // Extra check " AND gam_games.CrsCod='%ld'", // Extra check
Game->GamCod, Game->GamCod,
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
if (NumRows) // Game found... if (NumRows) // Game found...
@ -1138,7 +1138,9 @@ static void Gam_GetGameTxtFromDB (long GamCod,char Txt[Cns_MAX_BYTES_TEXT + 1])
/***** Get text of game from database *****/ /***** Get text of game from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get game text", NumRows = DB_QuerySELECT (&mysql_res,"can not get game text",
"SELECT Txt FROM gam_games WHERE GamCod=%ld", "SELECT Txt"
" FROM gam_games"
" WHERE GamCod=%ld",
GamCod); GamCod);
/***** The result of the query must have one row or none *****/ /***** The result of the query must have one row or none *****/
@ -1350,10 +1352,13 @@ static bool Gam_CheckIfSimilarGameExists (const struct Gam_Game *Game)
{ {
/***** Get number of games with a field value from database *****/ /***** Get number of games with a field value from database *****/
return (DB_QueryCOUNT ("can not get similar games", return (DB_QueryCOUNT ("can not get similar games",
"SELECT COUNT(*) FROM gam_games" "SELECT COUNT(*)"
" WHERE CrsCod=%ld AND Title='%s'" " FROM gam_games"
" AND GamCod<>%ld", " WHERE CrsCod=%ld"
Gbl.Hierarchy.Crs.CrsCod,Game->Title, " AND Title='%s'"
" AND GamCod<>%ld",
Gbl.Hierarchy.Crs.CrsCod,
Game->Title,
Game->GamCod) != 0); Game->GamCod) != 0);
} }
@ -1724,11 +1729,12 @@ static void Gam_UpdateGame (struct Gam_Game *Game,const char *Txt)
unsigned Gam_GetNumQstsGame (long GamCod) unsigned Gam_GetNumQstsGame (long GamCod)
{ {
/***** Get nuumber of questions in a game from database *****/ /***** Get nuumber of questions in a game from database *****/
return return (unsigned)
(unsigned) DB_QueryCOUNT ("can not get number of questions of a game", DB_QueryCOUNT ("can not get number of questions of a game",
"SELECT COUNT(*) FROM gam_questions" "SELECT COUNT(*)"
" WHERE GamCod=%ld", " FROM gam_questions"
GamCod); " WHERE GamCod=%ld",
GamCod);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1846,9 +1852,12 @@ static unsigned Gam_GetQstIndFromQstCod (long GamCod,long QstCod)
/***** Get question index in a game given the question code *****/ /***** Get question index in a game given the question code *****/
if (DB_QuerySELECT (&mysql_res,"can not get question index", if (DB_QuerySELECT (&mysql_res,"can not get question index",
"SELECT QstInd FROM gam_questions" "SELECT QstInd" // row[0]
" WHERE GamCod=%ld AND QstCod=%ld", " FROM gam_questions"
GamCod,QstCod)) " WHERE GamCod=%ld"
" AND QstCod=%ld",
GamCod,
QstCod))
{ {
/***** Get question code (row[0]) *****/ /***** Get question code (row[0]) *****/
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -1875,8 +1884,10 @@ long Gam_GetQstCodFromQstInd (long GamCod,unsigned QstInd)
/***** Get question code of the question to be moved up *****/ /***** Get question code of the question to be moved up *****/
if (!DB_QuerySELECT (&mysql_res,"can not get question code", if (!DB_QuerySELECT (&mysql_res,"can not get question code",
"SELECT QstCod FROM gam_questions" "SELECT QstCod"
" WHERE GamCod=%ld AND QstInd=%u", " FROM gam_questions"
" WHERE GamCod=%ld"
" AND QstInd=%u",
GamCod,QstInd)) GamCod,QstInd))
Lay_ShowErrorAndExit ("Error: wrong question index."); Lay_ShowErrorAndExit ("Error: wrong question index.");
@ -1906,7 +1917,7 @@ static unsigned Gam_GetMaxQuestionIndexInGame (long GamCod)
/***** Get maximum question index in a game from database *****/ /***** Get maximum question index in a game from database *****/
DB_QuerySELECT (&mysql_res,"can not get last question index", DB_QuerySELECT (&mysql_res,"can not get last question index",
"SELECT MAX(QstInd)" "SELECT MAX(QstInd)"
" FROM gam_questions" " FROM gam_questions"
" WHERE GamCod=%ld", " WHERE GamCod=%ld",
GamCod); GamCod);
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -1936,9 +1947,12 @@ unsigned Gam_GetPrevQuestionIndexInGame (long GamCod,unsigned QstInd)
// Although indexes are always continuous... // Although indexes are always continuous...
// ...this implementation works even with non continuous indexes // ...this implementation works even with non continuous indexes
if (!DB_QuerySELECT (&mysql_res,"can not get previous question index", if (!DB_QuerySELECT (&mysql_res,"can not get previous question index",
"SELECT MAX(QstInd) FROM gam_questions" "SELECT MAX(QstInd)" // row[0]
" WHERE GamCod=%ld AND QstInd<%u", " FROM gam_questions"
GamCod,QstInd)) " WHERE GamCod=%ld"
" AND QstInd<%u",
GamCod,
QstInd))
Lay_ShowErrorAndExit ("Error: previous question index not found."); Lay_ShowErrorAndExit ("Error: previous question index not found.");
/***** Get previous question index (row[0]) *****/ /***** Get previous question index (row[0]) *****/
@ -1970,9 +1984,12 @@ unsigned Gam_GetNextQuestionIndexInGame (long GamCod,unsigned QstInd)
// Although indexes are always continuous... // Although indexes are always continuous...
// ...this implementation works even with non continuous indexes // ...this implementation works even with non continuous indexes
if (!DB_QuerySELECT (&mysql_res,"can not get next question index", if (!DB_QuerySELECT (&mysql_res,"can not get next question index",
"SELECT MIN(QstInd) FROM gam_questions" "SELECT MIN(QstInd)"
" WHERE GamCod=%ld AND QstInd>%u", " FROM gam_questions"
GamCod,QstInd)) " WHERE GamCod=%ld"
" AND QstInd>%u",
GamCod,
QstInd))
Lay_ShowErrorAndExit ("Error: next question index not found."); Lay_ShowErrorAndExit ("Error: next question index not found.");
/***** Get next question index (row[0]) *****/ /***** Get next question index (row[0]) *****/
@ -2005,7 +2022,7 @@ static void Gam_ListGameQuestions (struct Gam_Games *Games,struct Gam_Game *Game
DB_QuerySELECT (&mysql_res,"can not get game questions", DB_QuerySELECT (&mysql_res,"can not get game questions",
"SELECT QstInd," // row[0] "SELECT QstInd," // row[0]
"QstCod" // row[1] "QstCod" // row[1]
" FROM gam_questions" " FROM gam_questions"
" WHERE GamCod=%ld" " WHERE GamCod=%ld"
" ORDER BY QstInd", " ORDER BY QstInd",
Game->GamCod); Game->GamCod);
@ -2666,60 +2683,60 @@ unsigned Gam_GetNumCoursesWithGames (Hie_Lvl_Level_t Scope)
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with games", DB_QueryCOUNT ("can not get number of courses with games",
"SELECT COUNT(DISTINCT CrsCod)" "SELECT COUNT(DISTINCT CrsCod)"
" FROM gam_games"); " FROM gam_games");
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with games", DB_QueryCOUNT ("can not get number of courses with games",
"SELECT COUNT(DISTINCT gam_games.CrsCod)" "SELECT COUNT(DISTINCT gam_games.CrsCod)"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"gam_games" "gam_games"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=gam_games.CrsCod", " AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
case Hie_Lvl_INS: case Hie_Lvl_INS:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with games", DB_QueryCOUNT ("can not get number of courses with games",
"SELECT COUNT(DISTINCT gam_games.CrsCod)" "SELECT COUNT(DISTINCT gam_games.CrsCod)"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"gam_games" "gam_games"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=gam_games.CrsCod", " AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with games", 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," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"gam_games" "gam_games"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=gam_games.CrsCod", " AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with games", DB_QueryCOUNT ("can not get number of courses with games",
"SELECT COUNT(DISTINCT gam_games.CrsCod)" "SELECT COUNT(DISTINCT gam_games.CrsCod)"
" FROM crs_courses," " FROM crs_courses,"
"gam_games" "gam_games"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=gam_games.CrsCod", " AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of courses with games", 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);
default: default:
@ -2741,60 +2758,60 @@ unsigned Gam_GetNumGames (Hie_Lvl_Level_t Scope)
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of games", DB_QueryCOUNT ("can not get number of games",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM gam_games"); " FROM gam_games");
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of games", DB_QueryCOUNT ("can not get number of games",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"gam_games" "gam_games"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=gam_games.CrsCod", " AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
case Hie_Lvl_INS: case Hie_Lvl_INS:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of games", DB_QueryCOUNT ("can not get number of games",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"gam_games" "gam_games"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=gam_games.CrsCod", " AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of games", DB_QueryCOUNT ("can not get number of games",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"gam_games" "gam_games"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_courses.CrsCod=gam_games.CrsCod", " AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Ctr.CtrCod); Gbl.Hierarchy.Ctr.CtrCod);
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of games", DB_QueryCOUNT ("can not get number of games",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM crs_courses," " FROM crs_courses,"
"gam_games" "gam_games"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=gam_games.CrsCod", " AND crs_courses.CrsCod=gam_games.CrsCod",
Gbl.Hierarchy.Deg.DegCod); Gbl.Hierarchy.Deg.DegCod);
case Hie_Lvl_CRS: case Hie_Lvl_CRS:
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of games", 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);
default: default:
@ -2817,86 +2834,86 @@ double Gam_GetNumQstsPerCrsGame (Hie_Lvl_Level_t Scope)
{ {
case Hie_Lvl_SYS: case Hie_Lvl_SYS:
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)"
" (SELECT COUNT(gam_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
" FROM gam_games," " FROM gam_games,"
"gam_questions" "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;
case Hie_Lvl_CTY: case Hie_Lvl_CTY:
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)"
" (SELECT COUNT(gam_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"gam_games," "gam_games,"
"gam_questions" "gam_questions"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=ctr_centers.InsCod" " AND ins_instits.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_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);
break; break;
case Hie_Lvl_INS: case Hie_Lvl_INS:
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)"
" (SELECT COUNT(gam_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
"gam_games," "gam_games,"
"gam_questions" "gam_questions"
" WHERE ctr_centers.InsCod=%ld" " WHERE ctr_centers.InsCod=%ld"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_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);
break; break;
case Hie_Lvl_CTR: case Hie_Lvl_CTR:
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)"
" (SELECT COUNT(gam_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"gam_games," "gam_games,"
"gam_questions" "gam_questions"
" WHERE deg_degrees.CtrCod=%ld" " WHERE deg_degrees.CtrCod=%ld"
" AND deg_degrees.DegCod=crs_courses.DegCod" " AND deg_degrees.DegCod=crs_courses.DegCod"
" AND crs_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);
break; break;
case Hie_Lvl_DEG: case Hie_Lvl_DEG:
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)"
" (SELECT COUNT(gam_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
" FROM crs_courses," " FROM crs_courses,"
"gam_games," "gam_games,"
"gam_questions" "gam_questions"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"
" AND crs_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.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 questions per game", DB_QuerySELECT (&mysql_res,"can not get number of questions per game",
"SELECT AVG(NumQsts) FROM" "SELECT AVG(NumQsts)"
" (SELECT COUNT(gam_questions.QstCod) AS NumQsts" " FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
" FROM gam_games," " FROM gam_games,"
"gam_questions" "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",
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
break; break;
default: default:
@ -2925,18 +2942,16 @@ void Gam_ShowTstTagsPresentInAGame (long GamCod)
/***** Get all tags of questions in this game *****/ /***** Get all tags of questions in this game *****/
NumTags = (unsigned) NumTags = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get tags" DB_QuerySELECT (&mysql_res,"can not get tags present in a match result",
" present in a match result", "SELECT tst_tags.TagTxt" // row[0]
"SELECT tst_tags.TagTxt" // row[0] " FROM (SELECT DISTINCT(tst_question_tags.TagCod)"
" FROM" " FROM tst_question_tags,gam_questions"
" (SELECT DISTINCT(tst_question_tags.TagCod)" " WHERE gam_questions.GamCod=%ld"
" FROM tst_question_tags,gam_questions" " AND gam_questions.QstCod=tst_question_tags.QstCod) AS TagsCods,"
" WHERE gam_questions.GamCod=%ld" "tst_tags"
" AND gam_questions.QstCod=tst_question_tags.QstCod)" " WHERE TagsCods.TagCod=tst_tags.TagCod"
" AS TagsCods,tst_tags" " ORDER BY tst_tags.TagTxt",
" WHERE TagsCods.TagCod=tst_tags.TagCod" GamCod);
" ORDER BY tst_tags.TagTxt",
GamCod);
Tst_ShowTagList (NumTags,mysql_res); Tst_ShowTagList (NumTags,mysql_res);
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/
@ -2957,13 +2972,14 @@ void Gam_GetScoreRange (long GamCod,double *MinScore,double *MaxScore)
/***** Get maximum score of a game from database *****/ /***** Get maximum score of a game from database *****/
NumRows = (unsigned) NumRows = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get data of a question", DB_QuerySELECT (&mysql_res,"can not get data of a question",
"SELECT COUNT(tst_answers.AnsInd) AS N" "SELECT COUNT(tst_answers.AnsInd) AS N"
" FROM tst_answers,gam_questions" " FROM tst_answers,"
" WHERE gam_questions.GamCod=%ld" "gam_questions"
" AND gam_questions.QstCod=tst_answers.QstCod" " WHERE gam_questions.GamCod=%ld"
" GROUP BY tst_answers.QstCod", " AND gam_questions.QstCod=tst_answers.QstCod"
GamCod); " GROUP BY tst_answers.QstCod",
GamCod);
for (NumRow = 0, *MinScore = *MaxScore = 0.0; for (NumRow = 0, *MinScore = *MaxScore = 0.0;
NumRow < NumRows; NumRow < NumRows;
NumRow++) NumRow++)

View File

@ -1770,9 +1770,13 @@ static bool Grp_CheckIfAssociatedToGrp (const char *Table,const char *Field,
/***** Get if an assignment, attendance event, survey, exam event or match /***** Get if an assignment, attendance event, survey, exam event or match
is associated to a given group from database *****/ is associated to a given group from database *****/
return (DB_QueryCOUNT ("can not check if associated to a group", return (DB_QueryCOUNT ("can not check if associated to a group",
"SELECT COUNT(*) FROM %s" "SELECT COUNT(*)"
" WHERE %s=%ld AND GrpCod=%ld", " FROM %s"
Table,Field,Cod,GrpCod) != 0); " WHERE %s=%ld"
" AND GrpCod=%ld",
Table,
Field,Cod,
GrpCod) != 0);
} }
@ -1790,9 +1794,11 @@ bool Grp_CheckIfAssociatedToGrps (const char *Table,const char *Field,long Cod)
/***** Get if an assignment, attendance event, survey, exam event or match /***** Get if an assignment, attendance event, survey, exam event or match
is associated to any group from database *****/ is associated to any group from database *****/
return (DB_QueryCOUNT ("can not check if associated to groups", return (DB_QueryCOUNT ("can not check if associated to groups",
"SELECT COUNT(*) FROM %s" "SELECT COUNT(*)"
" FROM %s"
" WHERE %s=%ld", " WHERE %s=%ld",
Table,Field,Cod) != 0); Table,
Field,Cod) != 0);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -3090,13 +3096,13 @@ unsigned long Grp_GetGrpsOfType (long GrpTypCod,MYSQL_RES **mysql_res)
/***** Get groups of a type from database *****/ /***** Get groups of a type from database *****/
// Don't use INNER JOIN because there are groups without assigned room // Don't use INNER JOIN because there are groups without assigned room
return DB_QuerySELECT (mysql_res,"can not get groups of a type", return DB_QuerySELECT (mysql_res,"can not get groups of a type",
"SELECT grp_groups.GrpCod," "SELECT grp_groups.GrpCod," // row[0]
"grp_groups.GrpName," "grp_groups.GrpName," // row[1]
"grp_groups.RooCod," "grp_groups.RooCod," // row[2]
"roo_rooms.ShortName," "roo_rooms.ShortName," // row[3]
"grp_groups.MaxStudents," "grp_groups.MaxStudents," // row[4]
"grp_groups.Open," "grp_groups.Open," // row[5]
"grp_groups.FileZones" "grp_groups.FileZones" // row[6]
" FROM grp_groups" " FROM grp_groups"
" LEFT JOIN roo_rooms" " LEFT JOIN roo_rooms"
" ON grp_groups.RooCod=roo_rooms.RooCod" " ON grp_groups.RooCod=roo_rooms.RooCod"

View File

@ -660,44 +660,48 @@ void Hie_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan)
struct Hie_Hierarchy Hie; struct Hie_Hierarchy Hie;
/***** Get institutions, centers, degrees admin by user from database *****/ /***** Get institutions, centers, degrees admin by user from database *****/
NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get institutions," NumRows = (unsigned)
" centers, degrees" DB_QuerySELECT (&mysql_res,"can not get institutions, centers, degrees"
" admin by a user", " admin by a user",
"(SELECT %u AS S,-1 AS Cod,'' AS FullName" "(SELECT %u AS S," // row[0]
" FROM usr_admins" "-1 AS Cod," // row[1]
" WHERE UsrCod=%ld" "'' AS FullName" // row[2]
" AND Scope='%s')" " FROM usr_admins"
" UNION " " WHERE UsrCod=%ld"
"(SELECT %u AS S," " AND Scope='%s')"
"usr_admins.Cod," " UNION "
"ins_instits.FullName" "(SELECT %u AS S," // row[0]
" FROM usr_admins," "usr_admins.Cod," // row[1]
"ins_instits" "ins_instits.FullName" // row[2]
" WHERE usr_admins.UsrCod=%ld" " FROM usr_admins,"
" AND usr_admins.Scope='%s'" "ins_instits"
" AND usr_admins.Cod=ins_instits.InsCod)" " WHERE usr_admins.UsrCod=%ld"
" UNION " " AND usr_admins.Scope='%s'"
"(SELECT %u AS S," " AND usr_admins.Cod=ins_instits.InsCod)"
"usr_admins.Cod," " UNION "
"ctr_centers.FullName" "(SELECT %u AS S," // row[0]
" FROM usr_admins," "usr_admins.Cod," // row[1]
"ctr_centers" "ctr_centers.FullName" // row[2]
" WHERE usr_admins.UsrCod=%ld" " FROM usr_admins,"
" AND usr_admins.Scope='%s'" "ctr_centers"
" AND usr_admins.Cod=ctr_centers.CtrCod)" " WHERE usr_admins.UsrCod=%ld"
" UNION " " AND usr_admins.Scope='%s'"
"(SELECT %u AS S," " AND usr_admins.Cod=ctr_centers.CtrCod)"
"usr_admins.Cod," " UNION "
"deg_degrees.FullName" "(SELECT %u AS S," // row[0]
" FROM usr_admins,deg_degrees" "usr_admins.Cod," // row[1]
" WHERE usr_admins.UsrCod=%ld" "deg_degrees.FullName" // row[2]
" AND usr_admins.Scope='%s'" " FROM usr_admins,"
" AND usr_admins.Cod=deg_degrees.DegCod)" "deg_degrees"
" ORDER BY S,FullName", " WHERE usr_admins.UsrCod=%ld"
(unsigned) Hie_Lvl_SYS,UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_SYS), " AND usr_admins.Scope='%s'"
(unsigned) Hie_Lvl_INS,UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_INS), " AND usr_admins.Cod=deg_degrees.DegCod)"
(unsigned) Hie_Lvl_CTR,UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_CTR), " ORDER BY S,"
(unsigned) Hie_Lvl_DEG,UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_DEG)); "FullName",
(unsigned) Hie_Lvl_SYS,UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_SYS),
(unsigned) Hie_Lvl_INS,UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_INS),
(unsigned) Hie_Lvl_CTR,UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_CTR),
(unsigned) Hie_Lvl_DEG,UsrCod,Sco_GetDBStrFromScope (Hie_Lvl_DEG));
if (NumRows) if (NumRows)
/***** Get the list of degrees *****/ /***** Get the list of degrees *****/
for (NumRow = 1; for (NumRow = 1;

View File

@ -1375,7 +1375,9 @@ 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 crs_courses WHERE CrsCod=%ld", "SELECT NumIndicators"
" FROM crs_courses"
" WHERE CrsCod=%ld",
CrsCod)) CrsCod))
{ {
/***** Get row *****/ /***** Get row *****/

View File

@ -506,8 +506,11 @@ static bool Inf_CheckIfIHaveReadInfo (void)
{ {
/***** Get if info source is already stored in database *****/ /***** Get if info source is already stored in database *****/
return (DB_QueryCOUNT ("can not get if I have read course info", return (DB_QueryCOUNT ("can not get if I have read course info",
"SELECT COUNT(*) FROM crs_info_read" "SELECT COUNT(*)"
" WHERE UsrCod=%ld AND CrsCod=%ld AND InfoType='%s'", " FROM crs_info_read"
" WHERE UsrCod=%ld"
" AND CrsCod=%ld"
" AND InfoType='%s'",
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
Inf_NamesInDBForInfoType[Gbl.Crs.Info.Type]) != 0); Inf_NamesInDBForInfoType[Gbl.Crs.Info.Type]) != 0);
@ -534,11 +537,15 @@ bool Inf_GetIfIMustReadAnyCrsInfoInThisCrs (void)
/***** Get info types where students must read info *****/ /***** Get info types where students must read info *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get if you must read" NumRows = DB_QuerySELECT (&mysql_res,"can not get if you must read"
" any course info", " any course info",
"SELECT InfoType FROM crs_info_src" "SELECT InfoType"
" WHERE CrsCod=%ld AND MustBeRead='Y'" " FROM crs_info_src"
" AND InfoType NOT IN" " WHERE CrsCod=%ld"
" (SELECT InfoType FROM crs_info_read" " AND MustBeRead='Y'"
" WHERE UsrCod=%ld AND CrsCod=%ld)", " AND InfoType NOT IN"
" (SELECT InfoType"
" FROM crs_info_read"
" WHERE UsrCod=%ld"
" AND CrsCod=%ld)",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Hierarchy.Crs.CrsCod); Gbl.Hierarchy.Crs.CrsCod);
@ -1408,23 +1415,30 @@ void Inf_SetInfoSrcIntoDB (Inf_InfoSrc_t InfoSrc)
{ {
/***** Get if info source is already stored in database *****/ /***** Get if info source is already stored in database *****/
if (DB_QueryCOUNT ("can not get if info source is already stored in database", if (DB_QueryCOUNT ("can not get if info source is already stored in database",
"SELECT COUNT(*) FROM crs_info_src" "SELECT COUNT(*)"
" WHERE CrsCod=%ld AND InfoType='%s'", " FROM crs_info_src"
" WHERE CrsCod=%ld"
" AND InfoType='%s'",
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
Inf_NamesInDBForInfoType[Gbl.Crs.Info.Type])) Inf_NamesInDBForInfoType[Gbl.Crs.Info.Type]))
// Info is already stored in database, so update it // Info is already stored in database, so update it
{ // Update info source { // Update info source
if (InfoSrc == Inf_INFO_SRC_NONE) if (InfoSrc == Inf_INFO_SRC_NONE)
DB_QueryUPDATE ("can not update info source", DB_QueryUPDATE ("can not update info source",
"UPDATE crs_info_src SET InfoSrc='%s',MustBeRead='N'" "UPDATE crs_info_src"
" WHERE CrsCod=%ld AND InfoType='%s'", " SET InfoSrc='%s',"
"MustBeRead='N'"
" WHERE CrsCod=%ld"
" AND InfoType='%s'",
Inf_NamesInDBForInfoSrc[Inf_INFO_SRC_NONE], Inf_NamesInDBForInfoSrc[Inf_INFO_SRC_NONE],
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
Inf_NamesInDBForInfoType[Gbl.Crs.Info.Type]); Inf_NamesInDBForInfoType[Gbl.Crs.Info.Type]);
else // MustBeRead remains unchanged else // MustBeRead remains unchanged
DB_QueryUPDATE ("can not update info source", DB_QueryUPDATE ("can not update info source",
"UPDATE crs_info_src SET InfoSrc='%s'" "UPDATE crs_info_src"
" WHERE CrsCod=%ld AND InfoType='%s'", " SET InfoSrc='%s'"
" WHERE CrsCod=%ld"
" AND InfoType='%s'",
Inf_NamesInDBForInfoSrc[InfoSrc], Inf_NamesInDBForInfoSrc[InfoSrc],
Gbl.Hierarchy.Crs.CrsCod, Gbl.Hierarchy.Crs.CrsCod,
Inf_NamesInDBForInfoType[Gbl.Crs.Info.Type]); Inf_NamesInDBForInfoType[Gbl.Crs.Info.Type]);
@ -1453,9 +1467,12 @@ Inf_InfoSrc_t Inf_GetInfoSrcFromDB (long CrsCod,Inf_InfoType_t InfoType)
/***** Get info source for a specific type of info from database *****/ /***** Get info source for a specific type of info from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get info source", if (DB_QuerySELECT (&mysql_res,"can not get info source",
"SELECT InfoSrc FROM crs_info_src" "SELECT InfoSrc"
" WHERE CrsCod=%ld AND InfoType='%s'", " FROM crs_info_src"
CrsCod,Inf_NamesInDBForInfoType[InfoType])) " WHERE CrsCod=%ld"
" AND InfoType='%s'",
CrsCod,
Inf_NamesInDBForInfoType[InfoType]))
{ {
/* Get row */ /* Get row */
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -1491,9 +1508,13 @@ void Inf_GetAndCheckInfoSrcFromDB (struct Syl_Syllabus *Syllabus,
/***** Get info source for a specific type of info from database *****/ /***** Get info source for a specific type of info from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get info source", NumRows = DB_QuerySELECT (&mysql_res,"can not get info source",
"SELECT InfoSrc,MustBeRead FROM crs_info_src" "SELECT InfoSrc,"
" WHERE CrsCod=%ld AND InfoType='%s'", "MustBeRead"
CrsCod,Inf_NamesInDBForInfoType[InfoType]); " FROM crs_info_src"
" WHERE CrsCod=%ld"
" AND InfoType='%s'",
CrsCod,
Inf_NamesInDBForInfoType[InfoType]);
/***** The result of the query must have one row or none *****/ /***** The result of the query must have one row or none *****/
if (NumRows == 1) if (NumRows == 1)
@ -1647,9 +1668,13 @@ void Inf_GetInfoTxtFromDB (long CrsCod,Inf_InfoType_t InfoType,
/***** Get info source for a specific type of course information /***** Get info source for a specific type of course information
(bibliography, FAQ, links or evaluation) from database *****/ (bibliography, FAQ, links or evaluation) from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get info text", NumRows = DB_QuerySELECT (&mysql_res,"can not get info text",
"SELECT InfoTxtHTML,InfoTxtMD FROM crs_info_txt" "SELECT InfoTxtHTML,"
" WHERE CrsCod=%ld AND InfoType='%s'", "InfoTxtMD"
CrsCod,Inf_NamesInDBForInfoType[InfoType]); " FROM crs_info_txt"
" WHERE CrsCod=%ld"
" AND InfoType='%s'",
CrsCod,
Inf_NamesInDBForInfoType[InfoType]);
/***** The result of the query must have one row or none *****/ /***** The result of the query must have one row or none *****/
if (NumRows == 1) if (NumRows == 1)

View File

@ -131,36 +131,34 @@ void Ins_SeeInsWithPendingCtrs (void)
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
case Rol_INS_ADM: case Rol_INS_ADM:
NumInss = NumInss = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get institutions" DB_QuerySELECT (&mysql_res,"can not get institutions with pending centers",
" with pending centers", "SELECT ctr_centers.InsCod,"
"SELECT ctr_centers.InsCod," "COUNT(*)"
"COUNT(*)" " FROM ctr_centers,"
" FROM ctr_centers," "ins_admin,"
"ins_admin," "ins_instits"
"ins_instits" " WHERE (ctr_centers.Status & %u)<>0"
" WHERE (ctr_centers.Status & %u)<>0" " AND ctr_centers.InsCod=ins_admin.InsCod"
" AND ctr_centers.InsCod=ins_admin.InsCod" " AND ins_admin.UsrCod=%ld"
" AND ins_admin.UsrCod=%ld" " AND ctr_centers.InsCod=ins_instits.InsCod"
" AND ctr_centers.InsCod=ins_instits.InsCod" " GROUP BY ctr_centers.InsCod"
" GROUP BY ctr_centers.InsCod" " ORDER BY ins_instits.ShortName",
" ORDER BY ins_instits.ShortName", (unsigned) Ctr_STATUS_BIT_PENDING,
(unsigned) Ctr_STATUS_BIT_PENDING, Gbl.Usrs.Me.UsrDat.UsrCod);
Gbl.Usrs.Me.UsrDat.UsrCod);
break; break;
case Rol_SYS_ADM: case Rol_SYS_ADM:
NumInss = NumInss = (unsigned)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get institutions" DB_QuerySELECT (&mysql_res,"can not get institutions with pending centers",
" with pending centers", "SELECT ctr_centers.InsCod,"
"SELECT ctr_centers.InsCod," "COUNT(*)"
"COUNT(*)" " FROM ctr_centers,"
" FROM ctr_centers," "ins_instits"
"ins_instits" " WHERE (ctr_centers.Status & %u)<>0"
" WHERE (ctr_centers.Status & %u)<>0" " AND ctr_centers.InsCod=ins_instits.InsCod"
" AND ctr_centers.InsCod=ins_instits.InsCod" " GROUP BY ctr_centers.InsCod"
" GROUP BY ctr_centers.InsCod" " ORDER BY ins_instits.ShortName",
" ORDER BY ins_instits.ShortName", (unsigned) Ctr_STATUS_BIT_PENDING);
(unsigned) Ctr_STATUS_BIT_PENDING);
break; break;
default: // Forbidden for other users default: // Forbidden for other users
return; return;
@ -643,7 +641,7 @@ void Ins_GetBasicListOfInstitutions (long CtyCod)
"ShortName," // row[4] "ShortName," // row[4]
"FullName," // row[5] "FullName," // row[5]
"WWW" // row[6] "WWW" // row[6]
" FROM ins_instits" " FROM ins_instits"
" WHERE CtyCod=%ld" " WHERE CtyCod=%ld"
" ORDER BY FullName", " ORDER BY FullName",
CtyCod); CtyCod);
@ -710,11 +708,12 @@ void Ins_GetFullListOfInstitutions (long CtyCod)
"ins_instits.RequesterUsrCod," // row[3] "ins_instits.RequesterUsrCod," // row[3]
"ins_instits.ShortName," // row[4] "ins_instits.ShortName," // row[4]
"ins_instits.FullName," // row[5] "ins_instits.FullName," // row[5]
"ins_instits.WWW," // row[6] "ins_instits.WWW," // row[6]
"COUNT(*) AS NumUsrs" // row[7] "COUNT(*) AS NumUsrs" // row[7]
" FROM ins_instits,usr_data" " FROM ins_instits,"
"usr_data"
" WHERE ins_instits.CtyCod=%ld" " WHERE ins_instits.CtyCod=%ld"
" AND ins_instits.InsCod=usr_data.InsCod" " AND ins_instits.InsCod=usr_data.InsCod"
" GROUP BY ins_instits.InsCod)" " GROUP BY ins_instits.InsCod)"
" UNION " " UNION "
"(SELECT InsCod," // row[0] "(SELECT InsCod," // row[0]
@ -725,12 +724,15 @@ void Ins_GetFullListOfInstitutions (long CtyCod)
"FullName," // row[5] "FullName," // row[5]
"WWW," // row[6] "WWW," // row[6]
"0 AS NumUsrs" // row[7] "0 AS NumUsrs" // row[7]
" FROM ins_instits" " FROM ins_instits"
" WHERE CtyCod=%ld" " WHERE CtyCod=%ld"
" AND InsCod NOT IN" " AND InsCod NOT IN"
" (SELECT DISTINCT InsCod FROM usr_data))" " (SELECT DISTINCT InsCod"
" ORDER BY %s", " FROM usr_data))"
CtyCod,CtyCod,OrderBySubQuery[Gbl.Hierarchy.Inss.SelectedOrder]); " ORDER BY %s",
CtyCod,
CtyCod,
OrderBySubQuery[Gbl.Hierarchy.Inss.SelectedOrder]);
if (NumRows) // Institutions found... if (NumRows) // Institutions found...
{ {
@ -818,7 +820,8 @@ bool Ins_GetDataOfInstitutionByCod (struct Ins_Instit *Ins)
"ShortName," // row[4] "ShortName," // row[4]
"FullName," // row[5] "FullName," // row[5]
"WWW" // row[6] "WWW" // row[6]
" FROM ins_instits WHERE InsCod=%ld", " FROM ins_instits"
" WHERE InsCod=%ld",
Ins->InsCod)) // Institution found... Ins->InsCod)) // Institution found...
{ {
/* Get institution data */ /* Get institution data */
@ -898,7 +901,8 @@ void Ins_GetShortNameOfInstitution (struct Ins_Instit *Ins)
if (DB_QuerySELECT (&mysql_res,"can not get the short name" if (DB_QuerySELECT (&mysql_res,"can not get the short name"
" of an institution", " of an institution",
"SELECT ShortName FROM ins_instits" "SELECT ShortName"
" FROM ins_instits"
" WHERE InsCod=%ld", " WHERE InsCod=%ld",
Ins->InsCod) == 1) Ins->InsCod) == 1)
{ {
@ -961,10 +965,10 @@ static void Ins_GetShrtNameAndCtyOfInstitution (struct Ins_Instit *Ins,
" of an institution", " of an institution",
"SELECT ins_instits.ShortName," // row[0] "SELECT ins_instits.ShortName," // row[0]
"cty_countrs.Name_%s" // row[1] "cty_countrs.Name_%s" // row[1]
" FROM ins_instits," " FROM ins_instits,"
"cty_countrs" "cty_countrs"
" WHERE ins_instits.InsCod=%ld" " WHERE ins_instits.InsCod=%ld"
" AND ins_instits.CtyCod=cty_countrs.CtyCod", " AND ins_instits.CtyCod=cty_countrs.CtyCod",
Lan_STR_LANG_ID[Gbl.Prefs.Language],Ins->InsCod) == 1) Lan_STR_LANG_ID[Gbl.Prefs.Language],Ins->InsCod) == 1)
{ {
/* Get row */ /* Get row */
@ -1039,7 +1043,7 @@ void Ins_WriteSelectorOfInstitution (void)
(unsigned) DB_QuerySELECT (&mysql_res,"can not get institutions", (unsigned) DB_QuerySELECT (&mysql_res,"can not get institutions",
"SELECT DISTINCT InsCod," "SELECT DISTINCT InsCod,"
"ShortName" "ShortName"
" FROM ins_instits" " FROM ins_instits"
" WHERE CtyCod=%ld" " WHERE CtyCod=%ld"
" ORDER BY ShortName", " ORDER BY ShortName",
Gbl.Hierarchy.Cty.CtyCod); Gbl.Hierarchy.Cty.CtyCod);
@ -1533,8 +1537,11 @@ bool Ins_CheckIfInsNameExistsInCty (const char *FieldName,
/***** Get number of institutions in current country with a name from database *****/ /***** Get number of institutions in current country with a name from database *****/
return (DB_QueryCOUNT ("can not check if the name of an institution" return (DB_QueryCOUNT ("can not check if the name of an institution"
" already existed", " already existed",
"SELECT COUNT(*) FROM ins_instits" "SELECT COUNT(*)"
" WHERE CtyCod=%ld AND %s='%s' AND InsCod<>%ld", " FROM ins_instits"
" WHERE CtyCod=%ld"
" AND %s='%s'"
" AND InsCod<>%ld",
CtyCod,FieldName,Name,InsCod) != 0); CtyCod,FieldName,Name,InsCod) != 0);
} }
@ -1970,7 +1977,8 @@ unsigned Ins_GetNumInssInCty (long CtyCod)
Gbl.Cache.NumInssInCty.NumInss = Gbl.Cache.NumInssInCty.NumInss =
(unsigned) DB_QueryCOUNT ("can not get the number of institutions" (unsigned) DB_QueryCOUNT ("can not get the number of institutions"
" in a country", " in a country",
"SELECT COUNT(*) FROM ins_instits" "SELECT COUNT(*)"
" FROM ins_instits"
" WHERE CtyCod=%ld", " WHERE CtyCod=%ld",
CtyCod); CtyCod);
Gbl.Cache.NumInssInCty.Valid = true; Gbl.Cache.NumInssInCty.Valid = true;
@ -2009,8 +2017,8 @@ unsigned Ins_GetCachedNumInssWithCtrs (const char *SubQuery,
NumInssWithCtrs = (unsigned) NumInssWithCtrs = (unsigned)
DB_QueryCOUNT ("can not get number of institutions with centers", DB_QueryCOUNT ("can not get number of institutions with centers",
"SELECT COUNT(DISTINCT ins_instits.InsCod)" "SELECT COUNT(DISTINCT ins_instits.InsCod)"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers" "ctr_centers"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod", " WHERE %sinstitutions.InsCod=ctr_centers.InsCod",
SubQuery); SubQuery);
FigCch_UpdateFigureIntoCache (FigCch_NUM_INSS_WITH_CTRS,Scope,Cod, FigCch_UpdateFigureIntoCache (FigCch_NUM_INSS_WITH_CTRS,Scope,Cod,
@ -2037,11 +2045,11 @@ unsigned Ins_GetCachedNumInssWithDegs (const char *SubQuery,
NumInssWithDegs = (unsigned) NumInssWithDegs = (unsigned)
DB_QueryCOUNT ("can not get number of institutions with degrees", DB_QueryCOUNT ("can not get number of institutions with degrees",
"SELECT COUNT(DISTINCT ins_instits.InsCod)" "SELECT COUNT(DISTINCT ins_instits.InsCod)"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees" "deg_degrees"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod" " WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod", " AND ctr_centers.CtrCod=deg_degrees.CtrCod",
SubQuery); SubQuery);
FigCch_UpdateFigureIntoCache (FigCch_NUM_INSS_WITH_DEGS,Scope,Cod, FigCch_UpdateFigureIntoCache (FigCch_NUM_INSS_WITH_DEGS,Scope,Cod,
FigCch_UNSIGNED,&NumInssWithDegs); FigCch_UNSIGNED,&NumInssWithDegs);
@ -2067,13 +2075,13 @@ unsigned Ins_GetCachedNumInssWithCrss (const char *SubQuery,
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 ins_instits.InsCod)" "SELECT COUNT(DISTINCT ins_instits.InsCod)"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses" "crs_courses"
" WHERE %sinstitutions.InsCod=ctr_centers.InsCod" " WHERE %sinstitutions.InsCod=ctr_centers.InsCod"
" AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod"
" AND deg_degrees.DegCod=crs_courses.DegCod", " AND deg_degrees.DegCod=crs_courses.DegCod",
SubQuery); 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);
@ -2240,9 +2248,12 @@ bool Ins_GetIfMapIsAvailable (long InsCod)
(coordinates 0, 0 means not set ==> don't show map) *****/ (coordinates 0, 0 means not set ==> don't show map) *****/
if (DB_QuerySELECT (&mysql_res,"can not get if map is available", if (DB_QuerySELECT (&mysql_res,"can not get if map is available",
"SELECT EXISTS" "SELECT EXISTS"
"(SELECT * FROM ctr_centers" "(SELECT *"
" WHERE InsCod=%ld" " FROM ctr_centers"
" AND (Latitude<>0 OR Longitude<>0))", " WHERE InsCod=%ld"
" AND (Latitude<>0"
" OR"
" Longitude<>0))",
InsCod)) InsCod))
{ {
/* Get if map is available */ /* Get if map is available */

View File

@ -259,10 +259,10 @@ static void InsCfg_GetCoordAndZoom (struct Coordinates *Coord,unsigned *Zoom)
"AVG(Longitude)," // row[1] "AVG(Longitude)," // row[1]
"GREATEST(MAX(Latitude)-MIN(Latitude)," "GREATEST(MAX(Latitude)-MIN(Latitude),"
"MAX(Longitude)-MIN(Longitude))" // row[2] "MAX(Longitude)-MIN(Longitude))" // row[2]
" FROM ctr_centers" " FROM ctr_centers"
" WHERE InsCod=%ld" " WHERE InsCod=%ld"
" AND Latitude<>0" " AND Latitude<>0"
" AND Longitude<>0", " AND Longitude<>0",
Gbl.Hierarchy.Ins.InsCod) < 0) Gbl.Hierarchy.Ins.InsCod) < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
Map_GetCoordAndZoom (Coord,Zoom,Query); Map_GetCoordAndZoom (Coord,Zoom,Query);
@ -306,14 +306,14 @@ static void InsCfg_Map (void)
Map_AddTileLayer (); Map_AddTileLayer ();
/* Get centers with coordinates */ /* Get centers with coordinates */
NumCtrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get centers" NumCtrs = (unsigned)
" with coordinates", DB_QuerySELECT (&mysql_res,"can not get centers with coordinates",
"SELECT CtrCod" // row[0] "SELECT CtrCod" // row[0]
" FROM ctr_centers" " FROM ctr_centers"
" WHERE InsCod=%ld" " WHERE InsCod=%ld"
" AND Latitude<>0" " AND Latitude<>0"
" AND Longitude<>0", " AND Longitude<>0",
Gbl.Hierarchy.Ins.InsCod); Gbl.Hierarchy.Ins.InsCod);
/* Add a marker and a popup for each center */ /* Add a marker and a popup for each center */
for (NumCtr = 0; for (NumCtr = 0;

View File

@ -275,8 +275,9 @@ void Log_GetAndShowLastClicks (void)
"InsCod," // row[5] "InsCod," // row[5]
"CtrCod," // row[6] "CtrCod," // row[6]
"DegCod" // row[7] "DegCod" // row[7]
" FROM log_recent" " FROM log_recent"
" ORDER BY LogCod DESC LIMIT 20"); " ORDER BY LogCod DESC"
" LIMIT 20");
/***** Write list of connected users *****/ /***** Write list of connected users *****/
HTM_TABLE_BeginCenterPadding (1); HTM_TABLE_BeginCenterPadding (1);

View File

@ -273,10 +273,13 @@ static void Mai_GetListMailDomainsAllowedForNotif (void)
DB_Query ("can not create temporary table", DB_Query ("can not create temporary table",
"CREATE TEMPORARY TABLE T1 ENGINE=MEMORY" "CREATE TEMPORARY TABLE T1 ENGINE=MEMORY"
" SELECT SUBSTRING_INDEX(E_mail,'@',-1) AS Domain,COUNT(*) as N" " SELECT SUBSTRING_INDEX(E_mail,'@',-1) AS Domain,COUNT(*) as N"
" FROM usr_emails GROUP BY Domain"); " FROM usr_emails"
" GROUP BY Domain");
DB_Query ("can not create temporary table", DB_Query ("can not create temporary table",
"CREATE TEMPORARY TABLE T2 ENGINE=MEMORY SELECT * FROM T1"); "CREATE TEMPORARY TABLE T2 ENGINE=MEMORY"
" SELECT *"
" FROM T1");
/***** Get mail domains from database *****/ /***** Get mail domains from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get mail domains", NumRows = DB_QuerySELECT (&mysql_res,"can not get mail domains",
@ -293,7 +296,8 @@ static void Mai_GetListMailDomainsAllowedForNotif (void)
"0 AS N" // row[3] "0 AS N" // row[3]
" FROM ntf_mail_domains" " FROM ntf_mail_domains"
" WHERE Domain NOT IN" " WHERE Domain NOT IN"
" (SELECT Domain COLLATE 'latin1_bin' FROM T2))" " (SELECT Domain COLLATE 'latin1_bin'"
" FROM T2))"
" ORDER BY %s", // COLLATE necessary to avoid error in comparisons " ORDER BY %s", // COLLATE necessary to avoid error in comparisons
OrderBySubQuery[Gbl.Mails.SelectedOrder]); OrderBySubQuery[Gbl.Mails.SelectedOrder]);
@ -1083,9 +1087,12 @@ bool Mai_GetEmailFromUsrCod (struct UsrData *UsrDat)
/***** Get current (last updated) user's nickname from database *****/ /***** Get current (last updated) user's nickname from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get email address", NumRows = DB_QuerySELECT (&mysql_res,"can not get email address",
"SELECT E_mail,Confirmed FROM usr_emails" "SELECT E_mail,"
"Confirmed"
" FROM usr_emails"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC LIMIT 1", " ORDER BY CreatTime DESC"
" LIMIT 1",
UsrDat->UsrCod); UsrDat->UsrCod);
if (NumRows == 0) if (NumRows == 0)
@ -1126,12 +1133,14 @@ long Mai_GetUsrCodFromEmail (const char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1])
{ {
/***** Get user's code from database *****/ /***** Get user's code from database *****/
/* Check if user code from table usr_emails is also in table usr_data */ /* Check if user code from table usr_emails is also in table usr_data */
NumUsrs = (unsigned) DB_QuerySELECT (&mysql_res,"can not get user's code", NumUsrs = (unsigned)
"SELECT usr_emails.UsrCod" DB_QuerySELECT (&mysql_res,"can not get user's code",
" FROM usr_emails,usr_data" "SELECT usr_emails.UsrCod"
" WHERE usr_emails.E_mail='%s'" " FROM usr_emails,"
" AND usr_emails.UsrCod=usr_data.UsrCod", "usr_data"
Email); " WHERE usr_emails.E_mail='%s'"
" AND usr_emails.UsrCod=usr_data.UsrCod",
Email);
if (NumUsrs == 0) if (NumUsrs == 0)
/* User not found for this email ==> set user's code to void */ /* User not found for this email ==> set user's code to void */
UsrCod = -1L; UsrCod = -1L;
@ -1253,14 +1262,14 @@ static void Mai_ShowFormChangeUsrEmail (bool ItsMe,
Ale_ShowAlert (Ale_WARNING,Txt_Please_confirm_your_email_address); Ale_ShowAlert (Ale_WARNING,Txt_Please_confirm_your_email_address);
/***** Get my emails *****/ /***** Get my emails *****/
NumEmails = (unsigned) DB_QuerySELECT (&mysql_res,"can not get" NumEmails = (unsigned)
" old email addresses" DB_QuerySELECT (&mysql_res,"can not get old email addresses of a user",
" of a user", "SELECT E_mail," // row[0]
"SELECT E_mail,Confirmed" "Confirmed" // row[1]
" FROM usr_emails" " FROM usr_emails"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC", " ORDER BY CreatTime DESC",
UsrDat->UsrCod); UsrDat->UsrCod);
/***** Begin table *****/ /***** Begin table *****/
HTM_TABLE_BeginWidePadding (2); HTM_TABLE_BeginWidePadding (2);
@ -1617,23 +1626,30 @@ bool Mai_UpdateEmailInDB (const struct UsrData *UsrDat,const char NewEmail[Cns_M
{ {
/***** Check if the new email matches any of the confirmed emails of other users *****/ /***** Check if the new email matches any of the confirmed emails of other users *****/
if (DB_QueryCOUNT ("can not check if email already existed", if (DB_QueryCOUNT ("can not check if email already existed",
"SELECT COUNT(*) FROM usr_emails" "SELECT COUNT(*)"
" WHERE E_mail='%s' AND Confirmed='Y'" " FROM usr_emails"
" AND UsrCod<>%ld", " WHERE E_mail='%s'"
NewEmail,UsrDat->UsrCod)) // An email of another user is the same that my email " AND Confirmed='Y'"
" AND UsrCod<>%ld",
NewEmail,
UsrDat->UsrCod)) // An email of another user is the same that my email
return false; // Don't update return false; // Don't update
/***** Delete email (not confirmed) for other users *****/ /***** Delete email (not confirmed) for other users *****/
DB_QueryDELETE ("can not remove pending email for other users", DB_QueryDELETE ("can not remove pending email for other users",
"DELETE FROM usr_pending_emails" "DELETE FROM usr_pending_emails"
" WHERE E_mail='%s' AND UsrCod<>%ld", " WHERE E_mail='%s'"
NewEmail,UsrDat->UsrCod); " AND UsrCod<>%ld",
NewEmail,
UsrDat->UsrCod);
DB_QueryDELETE ("can not remove not confirmed email for other users", DB_QueryDELETE ("can not remove not confirmed email for other users",
"DELETE FROM usr_emails" "DELETE FROM usr_emails"
" WHERE E_mail='%s' AND Confirmed='N'" " WHERE E_mail='%s'"
" AND UsrCod<>%ld", " AND Confirmed='N'"
NewEmail,UsrDat->UsrCod); " AND UsrCod<>%ld",
NewEmail,
UsrDat->UsrCod);
/***** Update email in database *****/ /***** Update email in database *****/
DB_QueryREPLACE ("can not update email", DB_QueryREPLACE ("can not update email",

View File

@ -179,8 +179,8 @@ static void Mrk_GetNumRowsHeaderAndFooter (struct MarksProperties *Marks)
" in header and footer", " in header and footer",
"SELECT mrk_marks.%s," // row[0] "SELECT mrk_marks.%s," // row[0]
"mrk_marks.%s" // row[1] "mrk_marks.%s" // row[1]
" FROM brw_files," " FROM brw_files,"
"mrk_marks" "mrk_marks"
" WHERE brw_files.FileBrowser=%u" " WHERE brw_files.FileBrowser=%u"
" AND brw_files.Cod=%ld" " AND brw_files.Cod=%ld"
" AND brw_files.Path='%s'" " AND brw_files.Path='%s'"
@ -729,11 +729,11 @@ void Mrk_GetNotifMyMarks (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
/***** Get subject of message from database *****/ /***** Get subject of message from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get the number of rows" if (DB_QuerySELECT (&mysql_res,"can not get the number of rows"
" in header and footer", " in header and footer",
"SELECT brw_files.FileBrowser," "SELECT brw_files.FileBrowser," // row[0]
"brw_files.Cod," "brw_files.Cod," // row[1]
"brw_files.Path," "brw_files.Path," // row[2]
"mrk_marks.Header," "mrk_marks.Header," // row[3]
"mrk_marks.Footer" "mrk_marks.Footer" // row[4]
" FROM brw_files," " FROM brw_files,"
"mrk_marks" "mrk_marks"
" WHERE brw_files.FilCod=%ld" " WHERE brw_files.FilCod=%ld"