Version19.229.1

This commit is contained in:
acanas 2020-05-14 01:41:20 +02:00
parent d5f75558b1
commit 736ecd8fba
6 changed files with 120 additions and 272 deletions

View File

@ -450,16 +450,6 @@ CREATE TABLE IF NOT EXISTS departments (
UNIQUE INDEX(DptCod),
INDEX(InsCod));
--
-- Table exa_answers: stores the users' answers to the exam events
--
CREATE TABLE IF NOT EXISTS exa_answers (
EvtCod INT NOT NULL,
UsrCod INT NOT NULL,
QstInd INT NOT NULL,
NumOpt TINYINT NOT NULL,
AnsInd TINYINT NOT NULL,
UNIQUE INDEX(EvtCod,UsrCod,QstInd));
--
-- Table exa_groups: stores the groups associated to each event in an exam
--
CREATE TABLE IF NOT EXISTS exa_groups (
@ -494,29 +484,6 @@ CREATE TABLE IF NOT EXISTS exa_exams (
UNIQUE INDEX(ExaCod),
INDEX(CrsCod));
--
-- Table exa_happening: stores the current events taking place right now
--
CREATE TABLE IF NOT EXISTS exa_happening (
EvtCod INT NOT NULL,
TS TIMESTAMP,
UNIQUE INDEX(EvtCod));
--
-- Table exa_indexes: stores the order of answers in an event
--
CREATE TABLE IF NOT EXISTS exa_indexes (
EvtCod INT NOT NULL,
QstInd INT NOT NULL,
Indexes TEXT NOT NULL,
UNIQUE INDEX(EvtCod,QstInd));
--
-- Table exa_participants: stores the current exam event participants
--
CREATE TABLE IF NOT EXISTS exa_participants (
EvtCod INT NOT NULL,
UsrCod INT NOT NULL,
TS TIMESTAMP,
UNIQUE INDEX(EvtCod,UsrCod));
--
-- Table exa_print_questions: stores the questions and answers in exam prints made by users
--
CREATE TABLE IF NOT EXISTS exa_print_questions (
@ -544,18 +511,6 @@ CREATE TABLE IF NOT EXISTS exa_prints (
UNIQUE INDEX(PrnCod),
UNIQUE INDEX(EvtCod,UsrCod));
--
-- Table exa_results: stores exam results
--
CREATE TABLE IF NOT EXISTS exa_results (
EvtCod INT NOT NULL,
UsrCod INT NOT NULL,
StartTime DATETIME NOT NULL,
EndTime DATETIME NOT NULL,
NumQsts INT NOT NULL DEFAULT 0,
NumQstsNotBlank INT NOT NULL DEFAULT 0,
Score DOUBLE PRECISION NOT NULL DEFAULT 0,
UNIQUE INDEX(EvtCod,UsrCod));
--
-- Table exa_set_answers: stores the answers of questions in exam sets
--
CREATE TABLE IF NOT EXISTS exa_set_answers (
@ -593,14 +548,6 @@ CREATE TABLE IF NOT EXISTS exa_sets (
UNIQUE INDEX(SetCod),
UNIQUE INDEX(ExaCod,SetInd));
--
-- Table exa_times: stores the elapsed time in every question in every exam event
--
CREATE TABLE IF NOT EXISTS exa_times (
EvtCod INT NOT NULL,
QstInd INT NOT NULL,
ElapsedTime TIME NOT NULL DEFAULT 0,
UNIQUE INDEX(EvtCod,QstInd));
--
-- Table exam_announcements: stores the calls for examination
--
CREATE TABLE IF NOT EXISTS exam_announcements (

View File

@ -548,10 +548,23 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 19.229 (2020-05-13)"
#define Log_PLATFORM_VERSION "SWAD 19.229.1 (2020-05-14)"
#define CSS_FILE "swad19.217.css"
#define JS_FILE "swad19.223.js"
/*
Version 19.229.1: May 14, 2020 Removed unused database tables in exams.
Fixed bugs in exam prints. (301009 lines)
6 changes necessary in database:
DROP TABLE exa_answers;
DROP TABLE exa_happening;
DROP TABLE exa_indexes;
DROP TABLE exa_participants;
DROP TABLE exa_results;
DROP TABLE exa_times;
If you want to use MyISAM:
ALTER TABLE exa_prints ENGINE=MyISAM;
ALTER TABLE exa_print_questions ENGINE=MyISAM;
Version 19.229: May 13, 2020 Removed unused code in exam events. (301163 lines)
1 change necessary in database:
ALTER TABLE exa_events DROP COLUMN QstInd,DROP COLUMN QstCod,DROP COLUMN Showing,DROP COLUMN Countdown,DROP COLUMN NumCols,DROP COLUMN ShowQstResults;
@ -619,7 +632,7 @@ UPDATE usr_data SET SideCols=0 WHERE (SideCols & 1)<>0 AND UsrCod NOT IN (SELECT
2 change necessary in database:
CREATE TABLE IF NOT EXISTS exa_prints (PrnCod INT NOT NULL AUTO_INCREMENT,EvtCod INT NOT NULL,UsrCod INT NOT NULL,StartTime DATETIME NOT NULL,EndTime DATETIME NOT NULL,NumQsts INT NOT NULL DEFAULT 0,NumQstsNotBlank INT NOT NULL DEFAULT 0,Sent ENUM('N','Y') NOT NULL DEFAULT 'N',Score DOUBLE PRECISION NOT NULL DEFAULT 0,UNIQUE INDEX(PrnCod),UNIQUE INDEX(EvtCod,UsrCod));
CREATE TABLE IF NOT EXISTS exa_print_questions (PrnCod INT NOT NULL,QstCod INT NOT NULL,QstInd INT NOT NULL,Score DOUBLE PRECISION NOT NULL DEFAULT 0,Indexes TEXT NOT NULL,Answers TEXT NOT NULL,UNIQUE INDEX(PrnCod,QstCod));
-----
Version 19.218.1: May 07, 2020 Fixed minor bug in test results and match results. (302171 lines)
Version 19.218: May 07, 2020 Fixed bug in creation of new exam announcements, reported by Francisco Gómez Mula.
Changes in exam announcementes. (302170 lines)

View File

@ -999,28 +999,6 @@ mysql> DESCRIBE departments;
"UNIQUE INDEX(DptCod),"
"INDEX(InsCod))");
/***** Table exa_answers *****/
/*
mysql> DESCRIBE exa_answers;
+--------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------+------+-----+---------+-------+
| EvtCod | int(11) | NO | PRI | NULL | |
| UsrCod | int(11) | NO | PRI | NULL | |
| QstInd | int(11) | NO | PRI | NULL | |
| NumOpt | tinyint(4) | NO | | NULL | |
| AnsInd | tinyint(4) | NO | | NULL | |
+--------+------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS exa_answers ("
"EvtCod INT NOT NULL,"
"UsrCod INT NOT NULL,"
"QstInd INT NOT NULL,"
"NumOpt TINYINT NOT NULL," // Number of button on screen (Always ordered: 0,1,2,3)
"AnsInd TINYINT NOT NULL," // Answer index (Can be shuffled: 0,3,1,2)
"UNIQUE INDEX(EvtCod,UsrCod,QstInd))");
/***** Table exa_groups *****/
/*
mysql> DESCRIBE exa_groups;
@ -1095,58 +1073,6 @@ mysql> DESCRIBE exa_exams;
"UNIQUE INDEX(ExaCod),"
"INDEX(CrsCod))");
/***** Table exa_happening *****/
/*
mysql> DESCRIBE exa_happening;
+--------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-----------+------+-----+-------------------+-----------------------------+
| EvtCod | int(11) | NO | PRI | NULL | |
| TS | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+--------+-----------+------+-----+-------------------+-----------------------------+
2 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS exa_happening ("
"EvtCod INT NOT NULL,"
"TS TIMESTAMP,"
"UNIQUE INDEX(EvtCod))");
/***** Table exa_indexes *****/
/*
mysql> DESCRIBE exa_indexes;
+---------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| EvtCod | int(11) | NO | PRI | NULL | |
| QstInd | int(11) | NO | PRI | NULL | |
| Indexes | text | NO | | NULL | |
+---------+---------+------+-----+---------+-------+
3 rows in set (0.01 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS exa_indexes ("
"EvtCod INT NOT NULL,"
"QstInd INT NOT NULL,"
"Indexes TEXT NOT NULL," // ExaRes_MAX_BYTES_INDEXES_ONE_QST
"UNIQUE INDEX(EvtCod,QstInd))");
/***** Table exa_participants *****/
/*
mysql> DESCRIBE exa_participants;
+--------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-----------+------+-----+-------------------+-----------------------------+
| EvtCod | int(11) | NO | PRI | NULL | |
| UsrCod | int(11) | NO | PRI | NULL | |
| TS | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+--------+-----------+------+-----+-------------------+-----------------------------+
3 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS exa_participants ("
"EvtCod INT NOT NULL,"
"UsrCod INT NOT NULL,"
"TS TIMESTAMP,"
"UNIQUE INDEX(EvtCod,UsrCod))");
/***** Table exa_print_questions *****/
/*
mysql> DESCRIBE exa_print_questions;
@ -1204,32 +1130,6 @@ mysql> DESCRIBE exa_prints;
"UNIQUE INDEX(PrnCod),"
"UNIQUE INDEX(EvtCod,UsrCod))");
/***** Table exa_results *****/
/*
mysql> DESCRIBE exa_results;
+-----------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+----------+------+-----+---------+-------+
| EvtCod | int(11) | NO | PRI | NULL | |
| UsrCod | int(11) | NO | PRI | NULL | |
| StartTime | datetime | NO | | NULL | |
| EndTime | datetime | NO | | NULL | |
| NumQsts | int(11) | NO | | 0 | |
| NumQstsNotBlank | int(11) | NO | | 0 | |
| Score | double | NO | | 0 | |
+-----------------+----------+------+-----+---------+-------+
7 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS exa_results ("
"EvtCod INT NOT NULL,"
"UsrCod INT NOT NULL,"
"StartTime DATETIME NOT NULL," // Time this user started to answer
"EndTime DATETIME NOT NULL," // Time this user finished to answer
"NumQsts INT NOT NULL DEFAULT 0,"
"NumQstsNotBlank INT NOT NULL DEFAULT 0,"
"Score DOUBLE PRECISION NOT NULL DEFAULT 0,"
"UNIQUE INDEX(EvtCod,UsrCod))");
/***** Table exa_set_answers *****/
/*
mysql> DESCRIBE exa_set_answers;
@ -1306,24 +1206,6 @@ mysql> DESCRIBE exa_sets;
"UNIQUE INDEX(SetCod),"
"UNIQUE INDEX(ExaCod,SetInd))");
/***** Table exa_times *****/
/*
mysql> DESCRIBE exa_times;
+-------------+---------+------+-----+----------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------+------+-----+----------+-------+
| EvtCod | int(11) | NO | PRI | NULL | |
| QstInd | int(11) | NO | PRI | NULL | |
| ElapsedTime | time | NO | | 00:00:00 | |
+-------------+---------+------+-----+----------+-------+
3 rows in set (0.01 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS exa_times ("
"EvtCod INT NOT NULL,"
"QstInd INT NOT NULL,"
"ElapsedTime TIME NOT NULL DEFAULT 0,"
"UNIQUE INDEX(EvtCod,QstInd))");
/***** Table exam_announcements *****/
/*
mysql> DESCRIBE exam_announcements;

View File

@ -294,21 +294,15 @@ void ExaEvt_GetDataOfEventByCod (struct ExaEvt_Event *Event)
/***** Get exam data event from database *****/
NumRows = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get events",
"SELECT EvtCod," // row[ 0]
"ExaCod," // row[ 1]
"Hidden," // row[ 2]
"UsrCod," // row[ 3]
"UNIX_TIMESTAMP(StartTime)," // row[ 4]
"UNIX_TIMESTAMP(EndTime)," // row[ 5]
"NOW() BETWEEN StartTime AND EndTime," // row[ 6]
"Title," // row[ 7]
"QstInd," // row[ 8]
"QstCod," // row[ 9]
"Showing," // row[10]
"Countdown," // row[11]
"NumCols," // row[12]
"ShowQstResults," // row[13]
"ShowUsrResults" // row[14]
"SELECT EvtCod," // row[0]
"ExaCod," // row[1]
"Hidden," // row[2]
"UsrCod," // row[3]
"UNIX_TIMESTAMP(StartTime)," // row[4]
"UNIX_TIMESTAMP(EndTime)," // row[5]
"NOW() BETWEEN StartTime AND EndTime," // row[6]
"Title," // row[7]
"ShowUsrResults" // row[8]
" FROM exa_events"
" WHERE EvtCod=%ld"
" AND ExaCod IN" // Extra check
@ -944,13 +938,7 @@ mysql> SELECT table_name FROM information_schema.tables WHERE table_name LIKE 'e
static void ExaEvt_RemoveEventFromAllTables (long EvtCod)
{
/***** Remove exam event from secondary tables *****/
ExaEvt_RemoveEventFromTable (EvtCod,"exa_participants");
ExaEvt_RemoveEventFromTable (EvtCod,"exa_happening");
ExaEvt_RemoveEventFromTable (EvtCod,"exa_results");
ExaEvt_RemoveEventFromTable (EvtCod,"exa_answers");
ExaEvt_RemoveEventFromTable (EvtCod,"exa_times");
ExaEvt_RemoveEventFromTable (EvtCod,"exa_groups");
ExaEvt_RemoveEventFromTable (EvtCod,"exa_indexes");
/***** Remove exam event from main table *****/
DB_QueryDELETE ("can not remove exam event",
@ -974,13 +962,7 @@ static void ExaEvt_RemoveEventFromTable (long EvtCod,const char *TableName)
void ExaEvt_RemoveEventsInExamFromAllTables (long ExaCod)
{
/***** Remove events from secondary tables *****/
ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_participants");
ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_happening");
ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_results");
ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_answers");
ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_times");
ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_groups");
ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_indexes");
/***** Remove events from main table *****/
DB_QueryDELETE ("can not remove events of an exam",
@ -1009,13 +991,7 @@ static void ExaEvt_RemoveEventsInExamFromTable (long ExaCod,const char *TableNam
void ExaEvt_RemoveEventInCourseFromAllTables (long CrsCod)
{
/***** Remove events from secondary tables *****/
ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_participants");
ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_happening");
ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_results");
ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_answers");
ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_times");
ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_groups");
ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_indexes");
/***** Remove events from main table *****/
DB_QueryDELETE ("can not remove events of a course",
@ -1048,9 +1024,7 @@ static void ExaEvt_RemoveEventInCourseFromTable (long CrsCod,const char *TableNa
void ExaEvt_RemoveUsrFromEventTablesInCrs (long UsrCod,long CrsCod)
{
/***** Remove student from secondary tables *****/
ExaEvt_RemoveUsrEvtResultsInCrs (UsrCod,CrsCod,"exa_participants");
ExaEvt_RemoveUsrEvtResultsInCrs (UsrCod,CrsCod,"exa_results");
ExaEvt_RemoveUsrEvtResultsInCrs (UsrCod,CrsCod,"exa_answers");
ExaEvt_RemoveUsrEvtResultsInCrs (UsrCod,CrsCod,"exa_prints");
}
static void ExaEvt_RemoveUsrEvtResultsInCrs (long UsrCod,long CrsCod,const char *TableName)
@ -1700,12 +1674,13 @@ void ExaEvt_GetQstAnsFromDB (long EvtCod,long UsrCod,unsigned QstInd,
/***** Get student's answer *****/
NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get user's answer to an exam event question",
"SELECT NumOpt," // row[0]
"AnsInd" // row[1]
" FROM exa_answers"
" WHERE EvtCod=%ld"
" AND UsrCod=%ld"
" AND QstInd=%u",
"SELECT Indexes," // row[0] // TODO: Get correctly
"Answers" // row[1] // TODO: Get correctly
" FROM exa_prints,exa_print_questions"
" WHERE exa_prints.EvtCod=%ld"
" AND exa_prints.UsrCod=%ld"
" AND exa_prints.PrnCod=exa_print_questions.PrnCod"
" AND exa_print_questions.QstInd=%u",
EvtCod,UsrCod,QstInd);
if (NumRows) // Answer found...
{

View File

@ -126,8 +126,7 @@ static unsigned ExaPrn_GetAnswerFromForm (struct ExaPrn_Print *Print);
// static void ExaPrn_PutParamNumQst (unsigned NumQst);
static unsigned ExaPrn_GetParamQstInd (void);
static void ExaPrn_ComputeScoresAndStoreQuestionsOfPrint (struct ExaPrn_Print *Print,
bool UpdateQstScore);
static void ExaPrn_ComputeScoresAndStoreQuestionsOfPrint (struct ExaPrn_Print *Print);
static void ExaPrn_ComputeScoreAndStoreQuestionOfPrint (struct ExaPrn_Print *Print,
unsigned NumQst);
@ -156,10 +155,10 @@ static void ExaPrn_GetAnswerFromDB (struct ExaPrn_Print *Print,long QstCod,
char StrAnswers[Tst_MAX_BYTES_ANSWERS_ONE_QST + 1]);
static void ExaPrn_StoreOneQstOfPrintInDB (const struct ExaPrn_Print *Print,
unsigned NumQst);
static void ExaPrn_UpdatePrintInDB (const struct ExaPrn_Print *Print);
// static void ExaPrn_PutParamPrnCod (long ExaCod);
// static long ExaPrn_GetParamPrnCod (void);
static void ExaPrn_GetNumQstsNotBlank (struct ExaPrn_Print *Print);
static void ExaPrn_ComputeTotalScoreOfPrint (struct ExaPrn_Print *Print);
static void ExaPrn_UpdatePrintInDB (const struct ExaPrn_Print *Print);
/*****************************************************************************/
/**************************** Reset exam print *******************************/
@ -229,8 +228,7 @@ void ExaPrn_ShowExamPrint (void)
{
/***** Create/update new exam print in database *****/
ExaPrn_CreatePrintInDB (&Print);
ExaPrn_ComputeScoresAndStoreQuestionsOfPrint (&Print,
false); // Don't update question score
ExaPrn_ComputeScoresAndStoreQuestionsOfPrint (&Print);
}
}
@ -976,6 +974,8 @@ void ExaPrn_ReceivePrintAnswer (void)
ExaPrn_ComputeScoreAndStoreQuestionOfPrint (&Print,NumQst);
/* Update exam print in database */
ExaPrn_GetNumQstsNotBlank (&Print);
ExaPrn_ComputeTotalScoreOfPrint (&Print);
ExaPrn_UpdatePrintInDB (&Print);
/***** Show table with questions to answer *****/
@ -1000,15 +1000,6 @@ static unsigned ExaPrn_GetAnswerFromForm (struct ExaPrn_Print *Print)
return NumQst;
}
/*****************************************************************************/
/****************** Write parameter with index of question *******************/
/*****************************************************************************/
/*
static void ExaPrn_PutParamNumQst (unsigned NumQst)
{
Par_PutHiddenParamUnsigned (NULL,"NumQst",NumQst);
}
*/
/*****************************************************************************/
/******************* Get parameter with index of question ********************/
/*****************************************************************************/
@ -1028,8 +1019,7 @@ static unsigned ExaPrn_GetParamQstInd (void)
/*********** Compute score of each question and store in database ************/
/*****************************************************************************/
static void ExaPrn_ComputeScoresAndStoreQuestionsOfPrint (struct ExaPrn_Print *Print,
bool UpdateQstScore)
static void ExaPrn_ComputeScoresAndStoreQuestionsOfPrint (struct ExaPrn_Print *Print)
{
unsigned NumQst;
@ -1049,10 +1039,6 @@ static void ExaPrn_ComputeScoresAndStoreQuestionsOfPrint (struct ExaPrn_Print *P
Print->Score += Print->PrintedQuestions[NumQst].Score;
if (Print->PrintedQuestions[NumQst].AnswerIsNotBlank)
Print->NumQstsNotBlank++;
/* Update the number of hits and the score of this question in tests database */
if (UpdateQstScore)
Tst_UpdateQstScoreInDB (&Print->PrintedQuestions[NumQst]);
}
}
@ -1373,6 +1359,53 @@ static void ExaPrn_StoreOneQstOfPrintInDB (const struct ExaPrn_Print *Print,
Str_SetDecimalPointToLocal (); // Return to local system
}
/*****************************************************************************/
/************ Get number of questions not blank in an exam print *************/
/*****************************************************************************/
static void ExaPrn_GetNumQstsNotBlank (struct ExaPrn_Print *Print)
{
/***** Count number of questions not blank in exam print in database *****/
Print->NumQstsNotBlank = (unsigned)
DB_QueryCOUNT ("can not get number of questions not blank",
"SELECT COUNT(*) FROM exa_print_questions"
" WHERE PrnCod=%ld AND Answers<>''",
Print->PrnCod);
}
/*****************************************************************************/
/***************** Compute score of questions of an exam print ***************/
/*****************************************************************************/
static void ExaPrn_ComputeTotalScoreOfPrint (struct ExaPrn_Print *Print)
{
MYSQL_RES *mysql_res;
MYSQL_ROW row;
/***** Default score *****/
Print->Score = 0.0;
/***** Compute total score of exam print *****/
if (DB_QuerySELECT (&mysql_res,"can not get score of exam print",
"SELECT SUM(Score) FROM exa_print_questions WHERE PrnCod=%ld",
Print->PrnCod))
{
/***** Get sum of individual scores (row[0]) *****/
row = mysql_fetch_row (mysql_res);
if (row[0])
{
/* Get score (row[0]) */
Str_SetDecimalPointToUS (); // To get the decimal point as a dot
if (sscanf (row[0],"%lf",&Print->Score) != 1)
Print->Score = 0.0;
Str_SetDecimalPointToLocal (); // Return to local system
}
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
/*****************************************************************************/
/********************** Update exam print in database ************************/
/*****************************************************************************/
@ -1394,8 +1427,7 @@ static void ExaPrn_UpdatePrintInDB (const struct ExaPrn_Print *Print)
'N',
Print->Score,
Print->PrnCod,
Print->EvtCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
Print->EvtCod,Gbl.Usrs.Me.UsrDat.UsrCod);
Str_SetDecimalPointToLocal (); // Return to local system
}

View File

@ -407,10 +407,10 @@ static void ExaRes_ListAllEvtResultsInExa (struct Exa_Exams *Exams,long ExaCod)
/***** Get all users who have answered any event question in this exam *****/
NumUsrs = DB_QuerySELECT (&mysql_res,"can not get users in exam",
"SELECT users.UsrCod FROM"
" (SELECT DISTINCT exa_results.UsrCod AS UsrCod" // row[0]
" FROM exa_results,exa_events,exa_exams"
" (SELECT DISTINCT exa_prints.UsrCod AS UsrCod" // row[0]
" FROM exa_prints,exa_events,exa_exams"
" WHERE exa_events.ExaCod=%ld"
" AND exa_events.EvtCod=exa_results.EvtCod"
" AND exa_events.EvtCod=exa_prints.EvtCod"
" AND exa_events.ExaCod=exa_exams.ExaCod"
" AND exa_exams.CrsCod=%ld)" // Extra check
" AS users,usr_data"
@ -503,10 +503,10 @@ static void ExaRes_ListAllEvtResultsInEvt (struct Exa_Exams *Exams,long EvtCod)
/***** Get all users who have answered any event question in this exam *****/
NumUsrs = DB_QuerySELECT (&mysql_res,"can not get users in event",
"SELECT users.UsrCod FROM"
" (SELECT exa_results.UsrCod AS UsrCod" // row[0]
" FROM exa_results,exa_events,exa_exams"
" WHERE exa_results.EvtCod=%ld"
" AND exa_results.EvtCod=exa_events.EvtCod"
" (SELECT exa_prints.UsrCod AS UsrCod" // row[0]
" FROM exa_prints,exa_events,exa_exams"
" WHERE exa_prints.EvtCod=%ld"
" AND exa_prints.EvtCod=exa_events.EvtCod"
" AND exa_events.ExaCod=exa_exams.ExaCod"
" AND exa_exams.CrsCod=%ld)" // Extra check
" AS users,usr_data"
@ -782,7 +782,7 @@ static void ExaRes_ShowEvtResults (struct Exa_Exams *Exams,
/***** Build events subquery *****/
if (EvtCod > 0)
{
if (asprintf (&EvtSubQuery," AND exa_results.EvtCod=%ld",EvtCod) < 0)
if (asprintf (&EvtSubQuery," AND exa_prints.EvtCod=%ld",EvtCod) < 0)
Lay_NotEnoughMemoryExit ();
}
else
@ -820,18 +820,18 @@ static void ExaRes_ShowEvtResults (struct Exa_Exams *Exams,
/***** Make database query *****/
NumResults =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get events results",
"SELECT exa_results.EvtCod," // row[0]
"UNIX_TIMESTAMP(exa_results.StartTime)," // row[1]
"UNIX_TIMESTAMP(exa_results.EndTime)," // row[2]
"exa_results.NumQsts," // row[3]
"exa_results.NumQstsNotBlank," // row[4]
"exa_results.Score," // row[5]
"SELECT exa_prints.EvtCod," // row[0]
"UNIX_TIMESTAMP(exa_prints.StartTime)," // row[1]
"UNIX_TIMESTAMP(exa_prints.EndTime)," // row[2]
"exa_prints.NumQsts," // row[3]
"exa_prints.NumQstsNotBlank," // row[4]
"exa_prints.Score," // row[5]
"exa_exams.MaxGrade," // row[6]
"exa_exams.Visibility" // row[7]
" FROM exa_results,exa_events,exa_exams"
" WHERE exa_results.UsrCod=%ld"
" FROM exa_prints,exa_events,exa_exams"
" WHERE exa_prints.UsrCod=%ld"
"%s" // Event subquery
" AND exa_results.EvtCod=exa_events.EvtCod"
" AND exa_prints.EvtCod=exa_events.EvtCod"
"%s" // Exams subquery
" AND exa_events.ExaCod=exa_exams.ExaCod"
" AND exa_exams.CrsCod=%ld" // Extra check
@ -1326,14 +1326,13 @@ void ExaRes_GetExamResultQuestionsFromDB (long EvtCod,long UsrCod,
Print->NumQsts = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get questions and answers"
" of a event result",
"SELECT exa_set_questions.QstCod," // row[0]
"exa_set_questions.QstInd," // row[1]
"exa_indexes.Indexes" // row[2]
" FROM exa_events,exa_set_questions,exa_indexes"
"SELECT exa_set_questions.QstCod," // row[0]
"exa_set_questions.QstInd," // row[1]
"exa_print_questions.Indexes" // row[2]
" FROM exa_events,exa_set_questions,exa_print_questions"
" WHERE exa_events.EvtCod=%ld"
" AND exa_events.ExaCod=exa_set_questions.ExaCod"
" AND exa_events.EvtCod=exa_indexes.EvtCod"
" AND exa_set_questions.QstInd=exa_indexes.QstInd"
" AND exa_events.EvtCod=exa_print_questions.EvtCod"
" AND exa_set_questions.QstInd=exa_print_questions.QstInd"
" ORDER BY exa_set_questions.QstInd",
EvtCod);
for (NumQst = 0, Print->NumQstsNotBlank = 0;
@ -1385,15 +1384,15 @@ static void ExaRes_GetEventResultDataByEvtCod (long EvtCod,long UsrCod,
/***** Make database query *****/
if (DB_QuerySELECT (&mysql_res,"can not get data"
" of a event result of a user",
"SELECT UNIX_TIMESTAMP(exa_results.StartTime)," // row[1]
"UNIX_TIMESTAMP(exa_results.EndTime)," // row[2]
"exa_results.NumQsts," // row[3]
"exa_results.NumQstsNotBlank," // row[4]
"exa_results.Score" // row[5]
" FROM exa_results,exa_events,exa_exams"
" WHERE exa_results.EvtCod=%ld"
" AND exa_results.UsrCod=%ld"
" AND exa_results.EvtCod=exa_events.EvtCod"
"SELECT UNIX_TIMESTAMP(exa_prints.StartTime)," // row[1]
"UNIX_TIMESTAMP(exa_prints.EndTime)," // row[2]
"exa_prints.NumQsts," // row[3]
"exa_prints.NumQstsNotBlank," // row[4]
"exa_prints.Score" // row[5]
" FROM exa_prints,exa_events,exa_exams"
" WHERE exa_prints.EvtCod=%ld"
" AND exa_prints.UsrCod=%ld"
" AND exa_prints.EvtCod=exa_events.EvtCod"
" AND exa_events.ExaCod=exa_exams.ExaCod"
" AND exa_exams.CrsCod=%ld", // Extra check
EvtCod,UsrCod,