Version19.193

This commit is contained in:
acanas 2020-04-22 22:40:07 +02:00
parent a352ee40ea
commit 5600f40aea
6 changed files with 424 additions and 96 deletions

View File

@ -439,6 +439,108 @@ CREATE TABLE IF NOT EXISTS departments (
UNIQUE INDEX(DptCod), UNIQUE INDEX(DptCod),
INDEX(InsCod)); 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 (
EvtCod INT NOT NULL,
GrpCod INT NOT NULL,
UNIQUE INDEX(EvtCod,GrpCod));
--
-- Table exa_events: stores the events (exams instances) that have already taken place
--
CREATE TABLE IF NOT EXISTS exa_events (
EvtCod INT NOT NULL AUTO_INCREMENT,
ExaCod INT NOT NULL,
UsrCod INT NOT NULL,
StartTime DATETIME NOT NULL,
EndTime DATETIME NOT NULL,
Title VARCHAR(2047) NOT NULL,
QstInd INT NOT NULL DEFAULT 0,
QstCod INT NOT NULL DEFAULT -1,
Showing ENUM('start','stem','answers','results','end') NOT NULL DEFAULT 'start',
Countdown INT NOT NULL DEFAULT -1,
NumCols INT NOT NULL DEFAULT 1,
ShowQstResults ENUM('N','Y') NOT NULL DEFAULT 'N',
ShowUsrResults ENUM('N','Y') NOT NULL DEFAULT 'N',
UNIQUE INDEX(EvtCod),
INDEX(ExaCod));
--
-- Table exa_exams: stores the exams
--
CREATE TABLE IF NOT EXISTS exa_exams (
ExaCod INT NOT NULL AUTO_INCREMENT,
CrsCod INT NOT NULL DEFAULT -1,
Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',
UsrCod INT NOT NULL,
MaxGrade DOUBLE PRECISION NOT NULL DEFAULT 1,
Visibility INT NOT NULL DEFAULT 0x1f,
Title VARCHAR(2047) NOT NULL,
Txt TEXT NOT NULL,
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_questions: stores the questions in the exams
--
CREATE TABLE IF NOT EXISTS exa_questions (
ExaCod INT NOT NULL,
QstCod INT NOT NULL,
QstInd INT NOT NULL DEFAULT 0,
INDEX(ExaCod),
INDEX(QstCod));
--
-- 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_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 -- Table exam_announcements: stores the calls for examination
-- --
CREATE TABLE IF NOT EXISTS exam_announcements ( CREATE TABLE IF NOT EXISTS exam_announcements (
@ -673,7 +775,7 @@ CREATE TABLE IF NOT EXISTS mch_indexes (
Indexes TEXT NOT NULL, Indexes TEXT NOT NULL,
UNIQUE INDEX(MchCod,QstInd)); UNIQUE INDEX(MchCod,QstInd));
-- --
-- Table mch_results: stores the current match results -- Table mch_results: stores match results
-- --
CREATE TABLE IF NOT EXISTS mch_results ( CREATE TABLE IF NOT EXISTS mch_results (
MchCod INT NOT NULL, MchCod INT NOT NULL,

View File

@ -497,7 +497,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD: En OpenSWAD:
ps2pdf source.ps destination.pdf ps2pdf source.ps destination.pdf
*/ */
#define Log_PLATFORM_VERSION "SWAD 19.192.1 (2020-04-22)" #define Log_PLATFORM_VERSION "SWAD 19.193 (2020-04-22)"
#define CSS_FILE "swad19.190.css" #define CSS_FILE "swad19.190.css"
#define JS_FILE "swad19.172.1.js" #define JS_FILE "swad19.172.1.js"
/* /*
@ -552,6 +552,19 @@ Funci
// TODO: Cambiar icono notificaciones nuevas con "bell-on.svg" // TODO: Cambiar icono notificaciones nuevas con "bell-on.svg"
// TODO: Ahmed El Moukhtari Koubaa: Cuando le damos a la opción de mostrar solo los mensajes no leídos, se muestran estos mensajes, pero cuando los intentamos leer, es decir, hacemos clic sobre ellos se recarga toda la página por así decirlo y vuelve a dar una lista con los mensajes, pero descartando aquel que clicamos porque, entiendo yo al menos, que ya lo ha marcado como leído. // TODO: Ahmed El Moukhtari Koubaa: Cuando le damos a la opción de mostrar solo los mensajes no leídos, se muestran estos mensajes, pero cuando los intentamos leer, es decir, hacemos clic sobre ellos se recarga toda la página por así decirlo y vuelve a dar una lista con los mensajes, pero descartando aquel que clicamos porque, entiendo yo al menos, que ya lo ha marcado como leído.
Version 19.193: Apr 22, 2020 Created database tables related to exams. (297127 lines)
2 changes necessary in database:
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));
CREATE TABLE IF NOT EXISTS exa_groups (EvtCod INT NOT NULL,GrpCod INT NOT NULL,UNIQUE INDEX(EvtCod,GrpCod));
CREATE TABLE IF NOT EXISTS exa_events (EvtCod INT NOT NULL AUTO_INCREMENT,ExaCod INT NOT NULL,UsrCod INT NOT NULL,StartTime DATETIME NOT NULL,EndTime DATETIME NOT NULL,Title VARCHAR(2047) NOT NULL,QstInd INT NOT NULL DEFAULT 0,QstCod INT NOT NULL DEFAULT -1,Showing ENUM('start','stem','answers','results','end') NOT NULL DEFAULT 'start',Countdown INT NOT NULL DEFAULT -1,NumCols INT NOT NULL DEFAULT 1,ShowQstResults ENUM('N','Y') NOT NULL DEFAULT 'N',ShowUsrResults ENUM('N','Y') NOT NULL DEFAULT 'N',UNIQUE INDEX(EvtCod),INDEX(ExaCod));
CREATE TABLE IF NOT EXISTS exa_exams (ExaCod INT NOT NULL AUTO_INCREMENT,CrsCod INT NOT NULL DEFAULT -1,Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',UsrCod INT NOT NULL,MaxGrade DOUBLE PRECISION NOT NULL DEFAULT 1,Visibility INT NOT NULL DEFAULT 0x1f,Title VARCHAR(2047) NOT NULL,Txt TEXT NOT NULL,UNIQUE INDEX(ExaCod),INDEX(CrsCod));
CREATE TABLE IF NOT EXISTS exa_happening (EvtCod INT NOT NULL,TS TIMESTAMP,UNIQUE INDEX(EvtCod));
CREATE TABLE IF NOT EXISTS exa_indexes (EvtCod INT NOT NULL,QstInd INT NOT NULL,Indexes TEXT NOT NULL,UNIQUE INDEX(EvtCod,QstInd));
CREATE TABLE IF NOT EXISTS exa_participants (EvtCod INT NOT NULL,UsrCod INT NOT NULL,TS TIMESTAMP,UNIQUE INDEX(EvtCod,UsrCod));
CREATE TABLE IF NOT EXISTS exa_questions (ExaCod INT NOT NULL,QstCod INT NOT NULL,QstInd INT NOT NULL DEFAULT 0,INDEX(ExaCod),INDEX(QstCod));
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));
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));
Version 19.192.1: Apr 22, 2020 Changed icon for exams. (296807 lines) Version 19.192.1: Apr 22, 2020 Changed icon for exams. (296807 lines)
Copy the following 2 icons to icon public directory: Copy the following 2 icons to icon public directory:
sudo cp icon/iconset/awesome/file-signature.svg /var/www/html/swad/icon/iconset/awesome sudo cp icon/iconset/awesome/file-signature.svg /var/www/html/swad/icon/iconset/awesome

View File

@ -979,6 +979,227 @@ mysql> DESCRIBE departments;
"UNIQUE INDEX(DptCod)," "UNIQUE INDEX(DptCod),"
"INDEX(InsCod))"); "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;
+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| EvtCod | int(11) | NO | PRI | NULL | |
| GrpCod | int(11) | NO | PRI | NULL | |
+--------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS exa_groups ("
"EvtCod INT NOT NULL,"
"GrpCod INT NOT NULL,"
"UNIQUE INDEX(EvtCod,GrpCod))");
/***** Table exa_events *****/
/*
mysql> DESCRIBE exa_events;
+----------------+------------------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------------------------------------+------+-----+---------+----------------+
| EvtCod | int(11) | NO | PRI | NULL | auto_increment |
| ExaCod | int(11) | NO | MUL | NULL | |
| UsrCod | int(11) | NO | | NULL | |
| StartTime | datetime | NO | | NULL | |
| EndTime | datetime | NO | | NULL | |
| Title | varchar(2047) | NO | | NULL | |
| QstInd | int(11) | NO | | 0 | |
| QstCod | int(11) | NO | | -1 | |
| Showing | enum('start','stem','answers','results','end') | NO | | start | |
| Countdown | int(11) | NO | | -1 | |
| NumCols | int(11) | NO | | 1 | |
| ShowQstResults | enum('N','Y') | NO | | N | |
| ShowUsrResults | enum('N','Y') | NO | | N | |
+----------------+------------------------------------------------+------+-----+---------+----------------+
13 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS exa_events ("
"EvtCod INT NOT NULL AUTO_INCREMENT,"
"ExaCod INT NOT NULL,"
"UsrCod INT NOT NULL,"
"StartTime DATETIME NOT NULL,"
"EndTime DATETIME NOT NULL,"
"Title VARCHAR(2047) NOT NULL," // Gam_MAX_BYTES_TITLE
"QstInd INT NOT NULL DEFAULT 0,"
"QstCod INT NOT NULL DEFAULT -1,"
"Showing ENUM('start','stem','answers','results','end') NOT NULL DEFAULT 'start',"
"Countdown INT NOT NULL DEFAULT -1,"
"NumCols INT NOT NULL DEFAULT 1,"
"ShowQstResults ENUM('N','Y') NOT NULL DEFAULT 'N',"
"ShowUsrResults ENUM('N','Y') NOT NULL DEFAULT 'N',"
"UNIQUE INDEX(EvtCod),"
"INDEX(ExaCod))");
/***** Table exa_exams *****/
/*
mysql> DESCRIBE exa_exams;
+------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+----------------+
| ExaCod | int(11) | NO | PRI | NULL | auto_increment |
| CrsCod | int(11) | NO | MUL | -1 | |
| Hidden | enum('N','Y') | NO | | N | |
| UsrCod | int(11) | NO | | NULL | |
| MaxGrade | double | NO | | 1 | |
| Visibility | int(11) | NO | | 31 | |
| Title | varchar(2047) | NO | | NULL | |
| Txt | text | NO | | NULL | |
+------------+---------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS exa_exams ("
"ExaCod INT NOT NULL AUTO_INCREMENT,"
"CrsCod INT NOT NULL DEFAULT -1,"
"Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',"
"UsrCod INT NOT NULL,"
"MaxGrade DOUBLE PRECISION NOT NULL DEFAULT 1," // Scale from score [0...num.answers] to grade [0...MaxGrade]
"Visibility INT NOT NULL DEFAULT 0x1f,"
"Title VARCHAR(2047) NOT NULL," // Exa_MAX_BYTES_TITLE
"Txt TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
"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_questions *****/
/*
mysql> DESCRIBE exa_questions;
+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| ExaCod | int(11) | NO | MUL | NULL | |
| QstCod | int(11) | NO | MUL | NULL | |
| QstInd | int(11) | NO | | 0 | |
+--------+---------+------+-----+---------+-------+
3 rows in set (0.01 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS exa_questions ("
"ExaCod INT NOT NULL,"
"QstCod INT NOT NULL,"
"QstInd INT NOT NULL DEFAULT 0,"
"INDEX(ExaCod),"
"INDEX(QstCod))");
/***** 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_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 *****/ /***** Table exam_announcements *****/
/* /*
mysql> DESCRIBE exam_announcements; mysql> DESCRIBE exam_announcements;
@ -1307,7 +1528,6 @@ mysql> DESCRIBE forum_thread;
"UNIQUE INDEX(FirstPstCod)," "UNIQUE INDEX(FirstPstCod),"
"UNIQUE INDEX(LastPstCod))"); "UNIQUE INDEX(LastPstCod))");
/***** Table gam_games *****/ /***** Table gam_games *****/
/* /*
mysql> DESCRIBE gam_games; mysql> DESCRIBE gam_games;
@ -1337,6 +1557,25 @@ mysql> DESCRIBE gam_games;
"UNIQUE INDEX(GamCod)," "UNIQUE INDEX(GamCod),"
"INDEX(CrsCod))"); "INDEX(CrsCod))");
/***** Table gam_questions *****/
/*
mysql> DESCRIBE gam_questions;
+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| GamCod | int(11) | NO | MUL | NULL | |
| QstCod | int(11) | NO | MUL | NULL | |
| QstInd | int(11) | NO | | 0 | |
+--------+---------+------+-----+---------+-------+
3 rows in set (0,00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS gam_questions ("
"GamCod INT NOT NULL,"
"QstCod INT NOT NULL,"
"QstInd INT NOT NULL DEFAULT 0,"
"INDEX(GamCod),"
"INDEX(QstCod))");
/***** Table mch_answers *****/ /***** Table mch_answers *****/
/* /*
mysql> DESCRIBE mch_answers; mysql> DESCRIBE mch_answers;
@ -1492,25 +1731,6 @@ mysql> DESCRIBE mch_results;
"Score DOUBLE PRECISION NOT NULL DEFAULT 0," "Score DOUBLE PRECISION NOT NULL DEFAULT 0,"
"UNIQUE INDEX(MchCod,UsrCod))"); "UNIQUE INDEX(MchCod,UsrCod))");
/***** Table gam_questions *****/
/*
mysql> DESCRIBE gam_questions;
+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| GamCod | int(11) | NO | MUL | NULL | |
| QstCod | int(11) | NO | MUL | NULL | |
| QstInd | int(11) | NO | | 0 | |
+--------+---------+------+-----+---------+-------+
3 rows in set (0,00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS gam_questions ("
"GamCod INT NOT NULL,"
"QstCod INT NOT NULL,"
"QstInd INT NOT NULL DEFAULT 0,"
"INDEX(GamCod),"
"INDEX(QstCod))");
/***** Table mch_times *****/ /***** Table mch_times *****/
/* /*
mysql> DESCRIBE mch_times; mysql> DESCRIBE mch_times;

View File

@ -190,7 +190,7 @@ void Exa_ResetExams (struct Exa_Exams *Exams)
Exams->ListQuestions = NULL; Exams->ListQuestions = NULL;
Exams->ExaCodsSelected = NULL; // String with selected exam codes separated by separator multiple Exams->ExaCodsSelected = NULL; // String with selected exam codes separated by separator multiple
Exams->ExaCod = -1L; // Selected/current exam code Exams->ExaCod = -1L; // Selected/current exam code
Exams->EvtCod = -1L; // Selected/current match code Exams->EvtCod = -1L; // Selected/current event code
Exams->QstInd = 0; // Current question index Exams->QstInd = 0; // Current question index
} }
@ -222,7 +222,7 @@ static void Exa_ListAllExams (struct Exa_Exams *Exams)
extern const char *Txt_Exams; extern const char *Txt_Exams;
extern const char *Txt_EXAMS_ORDER_HELP[Exa_NUM_ORDERS]; extern const char *Txt_EXAMS_ORDER_HELP[Exa_NUM_ORDERS];
extern const char *Txt_EXAMS_ORDER[Exa_NUM_ORDERS]; extern const char *Txt_EXAMS_ORDER[Exa_NUM_ORDERS];
extern const char *Txt_Matches; extern const char *Txt_Events;
extern const char *Txt_No_exams; extern const char *Txt_No_exams;
Exa_Order_t Order; Exa_Order_t Order;
struct Pagination Pagination; struct Pagination Pagination;
@ -281,7 +281,7 @@ static void Exa_ListAllExams (struct Exa_Exams *Exams)
HTM_TH_End (); HTM_TH_End ();
} }
HTM_TH (1,1,"RM",Txt_Matches); HTM_TH (1,1,"RM",Txt_Events);
HTM_TR_End (); HTM_TR_End ();
@ -432,7 +432,7 @@ void Exa_SeeOneExam (void)
/***** Show exam *****/ /***** Show exam *****/
Exa_ShowOnlyOneExam (&Exams,&Exam, Exa_ShowOnlyOneExam (&Exams,&Exam,
false, // Do not list exam questions false, // Do not list exam questions
false); // Do not put form to start new match false); // Do not put form to start new event
} }
/*****************************************************************************/ /*****************************************************************************/
@ -488,7 +488,7 @@ static void Exa_ShowOneExam (struct Exa_Exams *Exams,
extern const char *Txt_No_of_questions; extern const char *Txt_No_of_questions;
extern const char *Txt_Maximum_grade; extern const char *Txt_Maximum_grade;
extern const char *Txt_Result_visibility; extern const char *Txt_Result_visibility;
extern const char *Txt_Matches; extern const char *Txt_Events;
char *Anchor = NULL; char *Anchor = NULL;
static unsigned UniqueId = 0; static unsigned UniqueId = 0;
char *Id; char *Id;
@ -588,12 +588,12 @@ static void Exa_ShowOneExam (struct Exa_Exams *Exams,
Exams->ExaCod = Exam->ExaCod; Exams->ExaCod = Exam->ExaCod;
Frm_StartForm (ActSeeExa); Frm_StartForm (ActSeeExa);
Exa_PutParams (Exams); Exa_PutParams (Exams);
HTM_BUTTON_SUBMIT_Begin (Txt_Matches, HTM_BUTTON_SUBMIT_Begin (Txt_Events,
Exam->Hidden ? "BT_LINK LT ASG_TITLE_LIGHT" : Exam->Hidden ? "BT_LINK LT ASG_TITLE_LIGHT" :
"BT_LINK LT ASG_TITLE", "BT_LINK LT ASG_TITLE",
NULL); NULL);
if (ShowOnlyThisExam) if (ShowOnlyThisExam)
HTM_TxtColonNBSP (Txt_Matches); HTM_TxtColonNBSP (Txt_Events);
HTM_Unsigned (Exam->NumEvts); HTM_Unsigned (Exam->NumEvts);
HTM_BUTTON_End (); HTM_BUTTON_End ();
Frm_EndForm (); Frm_EndForm ();
@ -1674,7 +1674,7 @@ void Exa_RequestNewQuestion (void)
/***** Show current exam *****/ /***** Show current exam *****/
Exa_ShowOnlyOneExam (&Exams,&Exam, Exa_ShowOnlyOneExam (&Exams,&Exam,
true, // List exam questions true, // List exam questions
false); // Do not put form to start new match false); // Do not put form to start new event
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2208,7 +2208,7 @@ void Exa_AddTstQuestionsToExam (void)
/***** Show current exam *****/ /***** Show current exam *****/
Exa_ShowOnlyOneExam (&Exams,&Exam, Exa_ShowOnlyOneExam (&Exams,&Exam,
true, // List exam questions true, // List exam questions
false); // Do not put form to start new match false); // Do not put form to start new event
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2302,7 +2302,7 @@ void Exa_RequestRemoveQst (void)
/***** Show current exam *****/ /***** Show current exam *****/
Exa_ShowOnlyOneExam (&Exams,&Exam, Exa_ShowOnlyOneExam (&Exams,&Exam,
true, // List exam questions true, // List exam questions
false); // Do not put form to start new match false); // Do not put form to start new event
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2364,7 +2364,7 @@ void Exa_RemoveQst (void)
/***** Show current exam *****/ /***** Show current exam *****/
Exa_ShowOnlyOneExam (&Exams,&Exam, Exa_ShowOnlyOneExam (&Exams,&Exam,
true, // List exam questions true, // List exam questions
false); // Do not put form to start new match false); // Do not put form to start new event
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2417,7 +2417,7 @@ void Exa_MoveUpQst (void)
/***** Show current exam *****/ /***** Show current exam *****/
Exa_ShowOnlyOneExam (&Exams,&Exam, Exa_ShowOnlyOneExam (&Exams,&Exam,
true, // List exam questions true, // List exam questions
false); // Do not put form to start new match false); // Do not put form to start new event
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2480,7 +2480,7 @@ void Exa_MoveDownQst (void)
/***** Show current exam *****/ /***** Show current exam *****/
Exa_ShowOnlyOneExam (&Exams,&Exam, Exa_ShowOnlyOneExam (&Exams,&Exam,
true, // List exam questions true, // List exam questions
false); // Do not put form to start new match false); // Do not put form to start new event
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2549,17 +2549,17 @@ static bool Exa_CheckIfEditable (const struct Exa_Exam *Exam)
} }
/*****************************************************************************/ /*****************************************************************************/
/********************* Put button to create a new match **********************/ /********************* Put button to create a new event **********************/
/*****************************************************************************/ /*****************************************************************************/
void Exa_PutButtonNewEvent (struct Exa_Exams *Exams,long ExaCod) void Exa_PutButtonNewEvent (struct Exa_Exams *Exams,long ExaCod)
{ {
extern const char *Txt_New_match; extern const char *Txt_New_event;
Exams->ExaCod = ExaCod; Exams->ExaCod = ExaCod;
Frm_StartFormAnchor (ActReqNewExaEvt,ExaEvt_NEW_EVENT_SECTION_ID); Frm_StartFormAnchor (ActReqNewExaEvt,ExaEvt_NEW_EVENT_SECTION_ID);
Exa_PutParams (Exams); Exa_PutParams (Exams);
Btn_PutConfirmButton (Txt_New_match); Btn_PutConfirmButton (Txt_New_event);
Frm_EndForm (); Frm_EndForm ();
} }
@ -2583,7 +2583,7 @@ void Exa_RequestNewEvent (void)
/***** Show exam *****/ /***** Show exam *****/
Exa_ShowOnlyOneExam (&Exams,&Exam, Exa_ShowOnlyOneExam (&Exams,&Exam,
false, // Do not list exam questions false, // Do not list exam questions
true); // Put form to start new match true); // Put form to start new event
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2854,7 +2854,7 @@ void Exa_ShowTstTagsPresentInAnExam (long ExaCod)
/***** Get all tags of questions in this exam *****/ /***** Get all tags of questions in this exam *****/
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 an event result",
"SELECT tst_tags.TagTxt" // row[0] "SELECT tst_tags.TagTxt" // row[0]
" FROM" " FROM"
" (SELECT DISTINCT(tst_question_tags.TagCod)" " (SELECT DISTINCT(tst_question_tags.TagCod)"

View File

@ -201,7 +201,7 @@ static void ExaEvt_ShowQuestionAndAnswersTch (const struct ExaEvt_Event *Event);
static void ExaEvt_WriteAnswersEventResult (const struct ExaEvt_Event *Event, static void ExaEvt_WriteAnswersEventResult (const struct ExaEvt_Event *Event,
const struct Tst_Question *Question, const struct Tst_Question *Question,
const char *Class,bool ShowResult); const char *Class,bool ShowResult);
static bool ExaEvt_ShowQuestionAndAnswersStd (const struct ExaEvt_Event *Event, static void ExaEvt_ShowQuestionAndAnswersStd (const struct ExaEvt_Event *Event,
const struct ExaEvt_UsrAnswer *UsrAnswer, const struct ExaEvt_UsrAnswer *UsrAnswer,
ExaEvt_Update_t Update); ExaEvt_Update_t Update);
@ -255,8 +255,8 @@ void ExaEvt_ListEvents (struct Exa_Exams *Exams,
struct Exa_Exam *Exam, struct Exa_Exam *Exam,
bool PutFormNewEvent) bool PutFormNewEvent)
{ {
extern const char *Hlp_ASSESSMENT_Games_matches; extern const char *Hlp_ASSESSMENT_Exams_events;
extern const char *Txt_Matches; extern const char *Txt_Events;
char *SubQuery; char *SubQuery;
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
unsigned NumEvents; unsigned NumEvents;
@ -307,16 +307,16 @@ void ExaEvt_ListEvents (struct Exa_Exams *Exams,
/***** Begin box *****/ /***** Begin box *****/
Exams->ExaCod = Exam->ExaCod; Exams->ExaCod = Exam->ExaCod;
Box_BoxBegin ("100%",Txt_Matches, Box_BoxBegin ("100%",Txt_Events,
ExaEvt_PutIconsInListOfEvents,Exams, ExaEvt_PutIconsInListOfEvents,Exams,
Hlp_ASSESSMENT_Games_matches,Box_NOT_CLOSABLE); Hlp_ASSESSMENT_Exams_events,Box_NOT_CLOSABLE);
/***** Select whether show only my groups or all groups *****/ /***** Select whether show only my groups or all groups *****/
if (Gbl.Crs.Grps.NumGrps) if (Gbl.Crs.Grps.NumGrps)
{ {
Set_StartSettingsHead (); Set_StartSettingsHead ();
Grp_ShowFormToSelWhichGrps (ActSeeGam, Grp_ShowFormToSelWhichGrps (ActSeeExa,
Gam_PutParams,Exams); Exa_PutParams,Exams);
Set_EndSettingsHead (); Set_EndSettingsHead ();
} }
@ -431,12 +431,12 @@ static void ExaEvt_PutIconsInListOfEvents (void *Exams)
static void ExaEvt_PutIconToCreateNewEvent (struct Exa_Exams *Exams) static void ExaEvt_PutIconToCreateNewEvent (struct Exa_Exams *Exams)
{ {
extern const char *Txt_New_match; extern const char *Txt_New_event;
/***** Put form to create a new exam event *****/ /***** Put form to create a new exam event *****/
Ico_PutContextualIconToAdd (ActReqNewExaEvt,ExaEvt_NEW_EVENT_SECTION_ID, Ico_PutContextualIconToAdd (ActReqNewExaEvt,ExaEvt_NEW_EVENT_SECTION_ID,
Gam_PutParams,Exams, Exa_PutParams,Exams,
Txt_New_match); Txt_New_event);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -522,8 +522,8 @@ static void ExaEvt_ListOneOrMoreEventsHeading (bool ICanEditEvents)
/***** The rest of columns *****/ /***** The rest of columns *****/
HTM_TH (1,1,"LT",Txt_ROLES_SINGUL_Abc[Rol_TCH][Usr_SEX_UNKNOWN]); HTM_TH (1,1,"LT",Txt_ROLES_SINGUL_Abc[Rol_TCH][Usr_SEX_UNKNOWN]);
HTM_TH (1,1,"LT",Txt_START_END_TIME[Gam_ORDER_BY_START_DATE]); HTM_TH (1,1,"LT",Txt_START_END_TIME[Exa_ORDER_BY_START_DATE]);
HTM_TH (1,1,"LT",Txt_START_END_TIME[Gam_ORDER_BY_END_DATE ]); HTM_TH (1,1,"LT",Txt_START_END_TIME[Exa_ORDER_BY_END_DATE ]);
HTM_TH (1,1,"LT",Txt_Match); HTM_TH (1,1,"LT",Txt_Match);
HTM_TH (1,1,"RT",Txt_Players); HTM_TH (1,1,"RT",Txt_Players);
HTM_TH (1,1,"CT",Txt_Status); HTM_TH (1,1,"CT",Txt_Status);
@ -1081,8 +1081,8 @@ mysql> SELECT table_name FROM information_schema.tables WHERE table_name LIKE 'e
static void ExaEvt_RemoveEventFromAllTables (long EvtCod) static void ExaEvt_RemoveEventFromAllTables (long EvtCod)
{ {
/***** Remove exam event from secondary tables *****/ /***** Remove exam event from secondary tables *****/
ExaEvt_RemoveEventFromTable (EvtCod,"exa_players"); ExaEvt_RemoveEventFromTable (EvtCod,"exa_participants");
ExaEvt_RemoveEventFromTable (EvtCod,"exa_playing"); ExaEvt_RemoveEventFromTable (EvtCod,"exa_happening");
ExaEvt_RemoveEventFromTable (EvtCod,"exa_results"); ExaEvt_RemoveEventFromTable (EvtCod,"exa_results");
ExaEvt_RemoveEventFromTable (EvtCod,"exa_answers"); ExaEvt_RemoveEventFromTable (EvtCod,"exa_answers");
ExaEvt_RemoveEventFromTable (EvtCod,"exa_times"); ExaEvt_RemoveEventFromTable (EvtCod,"exa_times");
@ -1111,8 +1111,8 @@ static void ExaEvt_RemoveEventFromTable (long EvtCod,const char *TableName)
void ExaEvt_RemoveEventsInExamFromAllTables (long ExaCod) void ExaEvt_RemoveEventsInExamFromAllTables (long ExaCod)
{ {
/***** Remove events from secondary tables *****/ /***** Remove events from secondary tables *****/
ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_players"); ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_participants");
ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_playing"); ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_happening");
ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_results"); ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_results");
ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_answers"); ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_answers");
ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_times"); ExaEvt_RemoveEventsInExamFromTable (ExaCod,"exa_times");
@ -1146,8 +1146,8 @@ static void ExaEvt_RemoveEventsInExamFromTable (long ExaCod,const char *TableNam
void ExaEvt_RemoveEventInCourseFromAllTables (long CrsCod) void ExaEvt_RemoveEventInCourseFromAllTables (long CrsCod)
{ {
/***** Remove events from secondary tables *****/ /***** Remove events from secondary tables *****/
ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_players"); ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_participants");
ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_playing"); ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_happening");
ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_results"); ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_results");
ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_answers"); ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_answers");
ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_times"); ExaEvt_RemoveEventInCourseFromTable (CrsCod,"exa_times");
@ -1185,7 +1185,7 @@ static void ExaEvt_RemoveEventInCourseFromTable (long CrsCod,const char *TableNa
void ExaEvt_RemoveUsrFromEventTablesInCrs (long UsrCod,long CrsCod) void ExaEvt_RemoveUsrFromEventTablesInCrs (long UsrCod,long CrsCod)
{ {
/***** Remove student from secondary tables *****/ /***** Remove student from secondary tables *****/
ExaEvt_RemoveUsrEvtResultsInCrs (UsrCod,CrsCod,"exa_players"); ExaEvt_RemoveUsrEvtResultsInCrs (UsrCod,CrsCod,"exa_participants");
ExaEvt_RemoveUsrEvtResultsInCrs (UsrCod,CrsCod,"exa_results"); ExaEvt_RemoveUsrEvtResultsInCrs (UsrCod,CrsCod,"exa_results");
ExaEvt_RemoveUsrEvtResultsInCrs (UsrCod,CrsCod,"exa_answers"); ExaEvt_RemoveUsrEvtResultsInCrs (UsrCod,CrsCod,"exa_answers");
} }
@ -1216,7 +1216,7 @@ void ExaEvt_PutParamsEdit (void *Exams)
{ {
if (Exams) if (Exams)
{ {
Gam_PutParams (Exams); Exa_PutParams (Exams);
ExaEvt_PutParamEvtCod (((struct Exa_Exams *) Exams)->EvtCod); ExaEvt_PutParamEvtCod (((struct Exa_Exams *) Exams)->EvtCod);
} }
} }
@ -1286,8 +1286,8 @@ long ExaEvt_GetParamEvtCod (void)
static void ExaEvt_PutFormNewEvent (const struct Exa_Exam *Exam) static void ExaEvt_PutFormNewEvent (const struct Exa_Exam *Exam)
{ {
extern const char *Hlp_ASSESSMENT_Games_matches; extern const char *Hlp_ASSESSMENT_Exams_events;
extern const char *Txt_New_match; extern const char *Txt_New_event;
extern const char *Txt_Title; extern const char *Txt_Title;
extern const char *Txt_Play; extern const char *Txt_Play;
@ -1296,13 +1296,13 @@ static void ExaEvt_PutFormNewEvent (const struct Exa_Exam *Exam)
/***** Begin form *****/ /***** Begin form *****/
Frm_StartForm (ActNewExaEvt); Frm_StartForm (ActNewExaEvt);
Gam_PutParamGameCod (Exam->ExaCod); Exa_PutParamExamCod (Exam->ExaCod);
Gam_PutParamQstInd (0); // Start by first question in exam Exa_PutParamQstInd (0); // Start by first question in exam
/***** Begin box and table *****/ /***** Begin box and table *****/
Box_BoxTableBegin (NULL,Txt_New_match, Box_BoxTableBegin (NULL,Txt_New_event,
NULL,NULL, NULL,NULL,
Hlp_ASSESSMENT_Games_matches,Box_NOT_CLOSABLE,2); Hlp_ASSESSMENT_Exams_events,Box_NOT_CLOSABLE,2);
/***** Event title *****/ /***** Event title *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -1312,7 +1312,7 @@ static void ExaEvt_PutFormNewEvent (const struct Exa_Exam *Exam)
/* Data */ /* Data */
HTM_TD_Begin ("class=\"LT\""); HTM_TD_Begin ("class=\"LT\"");
HTM_INPUT_TEXT ("Title",Gam_MAX_CHARS_TITLE,Exam->Title,false, HTM_INPUT_TEXT ("Title",Exa_MAX_CHARS_TITLE,Exam->Title,false,
"id=\"Title\" size=\"45\" required=\"required\""); "id=\"Title\" size=\"45\" required=\"required\"");
HTM_TD_End (); HTM_TD_End ();
@ -1409,8 +1409,8 @@ void ExaEvt_CreateNewEventTch (void)
char Title[Exa_MAX_BYTES_TITLE + 1]; char Title[Exa_MAX_BYTES_TITLE + 1];
/***** Get form parameters *****/ /***** Get form parameters *****/
/* Get exam event code */ /* Get exam code */
if ((ExaCod = Gam_GetParamGameCod ()) == -1L) if ((ExaCod = Exa_GetParamExamCod ()) == -1L)
Lay_ShowErrorAndExit ("Code of exam is missing."); Lay_ShowErrorAndExit ("Code of exam is missing.");
/* Get exam event title */ /* Get exam event title */
@ -2056,11 +2056,11 @@ static void ExaEvt_SetMatchStatusToPrev (struct ExaEvt_Event *Event)
static void ExaEvt_SetMatchStatusToPrevQst (struct ExaEvt_Event *Event) static void ExaEvt_SetMatchStatusToPrevQst (struct ExaEvt_Event *Event)
{ {
/***** Get index of the previous question *****/ /***** Get index of the previous question *****/
Event->Status.QstInd = Gam_GetPrevQuestionIndexInGame (Event->ExaCod, Event->Status.QstInd = Exa_GetPrevQuestionIndexInExam (Event->ExaCod,
Event->Status.QstInd); Event->Status.QstInd);
if (Event->Status.QstInd) // Start of questions not reached if (Event->Status.QstInd) // Start of questions not reached
{ {
Event->Status.QstCod = Gam_GetQstCodFromQstInd (Event->ExaCod, Event->Status.QstCod = Exa_GetQstCodFromQstInd (Event->ExaCod,
Event->Status.QstInd); Event->Status.QstInd);
Event->Status.Showing = Event->Status.ShowQstResults ? ExaEvt_RESULTS : Event->Status.Showing = Event->Status.ShowQstResults ? ExaEvt_RESULTS :
ExaEvt_ANSWERS; ExaEvt_ANSWERS;
@ -2119,13 +2119,13 @@ static void ExaEvt_SetMatchStatusToNext (struct ExaEvt_Event *Event)
static void ExaEvt_SetMatchStatusToNextQst (struct ExaEvt_Event *Event) static void ExaEvt_SetMatchStatusToNextQst (struct ExaEvt_Event *Event)
{ {
/***** Get index of the next question *****/ /***** Get index of the next question *****/
Event->Status.QstInd = Gam_GetNextQuestionIndexInGame (Event->ExaCod, Event->Status.QstInd = Exa_GetNextQuestionIndexInExam (Event->ExaCod,
Event->Status.QstInd); Event->Status.QstInd);
/***** Get question code *****/ /***** Get question code *****/
if (Event->Status.QstInd < ExaEvt_AFTER_LAST_QUESTION) // End of questions not reached if (Event->Status.QstInd < ExaEvt_AFTER_LAST_QUESTION) // End of questions not reached
{ {
Event->Status.QstCod = Gam_GetQstCodFromQstInd (Event->ExaCod, Event->Status.QstCod = Exa_GetQstCodFromQstInd (Event->ExaCod,
Event->Status.QstInd); Event->Status.QstInd);
Event->Status.Showing = ExaEvt_STEM; Event->Status.Showing = ExaEvt_STEM;
} }
@ -2624,8 +2624,7 @@ static void ExaEvt_ShowRightColumnStd (struct ExaEvt_Event *Event,
{ {
if (Event->Status.Showing == ExaEvt_ANSWERS) // Teacher's screen is showing question answers if (Event->Status.Showing == ExaEvt_ANSWERS) // Teacher's screen is showing question answers
/* Show current question and possible answers */ /* Show current question and possible answers */
if (!ExaEvt_ShowQuestionAndAnswersStd (Event,UsrAnswer,Update)) ExaEvt_ShowQuestionAndAnswersStd (Event,UsrAnswer,Update);
Ale_ShowAlert (Ale_ERROR,"Wrong question.");
} }
else else
Ale_ShowAlert (Ale_ERROR,"You can not join this exam event."); Ale_ShowAlert (Ale_ERROR,"You can not join this exam event.");
@ -2648,7 +2647,7 @@ static void ExaEvt_ShowNumQstInEvt (const struct ExaEvt_Event *Event)
{ {
extern const char *Txt_MATCH_Start; extern const char *Txt_MATCH_Start;
extern const char *Txt_MATCH_End; extern const char *Txt_MATCH_End;
unsigned NumQsts = Gam_GetNumQstsGame (Event->ExaCod); unsigned NumQsts = Exa_GetNumQstsExam (Event->ExaCod);
HTM_DIV_Begin ("class=\"EXA_NUM_QST\""); HTM_DIV_Begin ("class=\"EXA_NUM_QST\"");
switch (Event->Status.Showing) switch (Event->Status.Showing)
@ -2893,7 +2892,7 @@ static void ExaEvt_PutIconToRemoveMyAnswer (const struct ExaEvt_Event *Event)
/***** Start form *****/ /***** Start form *****/
Frm_StartForm (ActRemExaEvtAnsQstStd); Frm_StartForm (ActRemExaEvtAnsQstStd);
ExaEvt_PutParamEvtCod (Event->EvtCod); // Current exam event being played ExaEvt_PutParamEvtCod (Event->EvtCod); // Current exam event being played
Gam_PutParamQstInd (Event->Status.QstInd); // Current question index shown Exa_PutParamQstInd (Event->Status.QstInd); // Current question index shown
/***** Put icon with link *****/ /***** Put icon with link *****/
HTM_DIV_Begin ("class=\"EXA_BIGBUTTON_CONT\""); HTM_DIV_Begin ("class=\"EXA_BIGBUTTON_CONT\"");
@ -3121,7 +3120,7 @@ void ExaEvt_WriteChoiceAnsViewEvent (const struct ExaEvt_Event *Event,
/*****************************************************************************/ /*****************************************************************************/
// Return true on valid question, false on invalid question // Return true on valid question, false on invalid question
static bool ExaEvt_ShowQuestionAndAnswersStd (const struct ExaEvt_Event *Event, static void ExaEvt_ShowQuestionAndAnswersStd (const struct ExaEvt_Event *Event,
const struct ExaEvt_UsrAnswer *UsrAnswer, const struct ExaEvt_UsrAnswer *UsrAnswer,
ExaEvt_Update_t Update) ExaEvt_Update_t Update)
{ {
@ -3129,10 +3128,6 @@ static bool ExaEvt_ShowQuestionAndAnswersStd (const struct ExaEvt_Event *Event,
unsigned NumOpt; unsigned NumOpt;
char *Class; char *Class;
/***** Trivial check: this question must be valid for exams *****/
if (!Tst_CheckIfQuestionIsValidForGame (Event->Status.QstCod))
return false;
/***** Get number of options in this question *****/ /***** Get number of options in this question *****/
NumOptions = Tst_GetNumAnswersQst (Event->Status.QstCod); NumOptions = Tst_GetNumAnswersQst (Event->Status.QstCod);
@ -3156,7 +3151,7 @@ static bool ExaEvt_ShowQuestionAndAnswersStd (const struct ExaEvt_Event *Event,
and not lose clicks due to refresh */ and not lose clicks due to refresh */
Frm_StartForm (ActAnsExaEvtQstStd); Frm_StartForm (ActAnsExaEvtQstStd);
ExaEvt_PutParamEvtCod (Event->EvtCod); // Current exam event being played ExaEvt_PutParamEvtCod (Event->EvtCod); // Current exam event being played
Gam_PutParamQstInd (Event->Status.QstInd); // Current question index shown Exa_PutParamQstInd (Event->Status.QstInd); // Current question index shown
ExaEvt_PutParamNumOpt (NumOpt); // Number of button ExaEvt_PutParamNumOpt (NumOpt); // Number of button
if (asprintf (&Class,"EXA_STD_BUTTON%s BT_%c", if (asprintf (&Class,"EXA_STD_BUTTON%s BT_%c",
@ -3181,8 +3176,6 @@ static bool ExaEvt_ShowQuestionAndAnswersStd (const struct ExaEvt_Event *Event,
/***** End table *****/ /***** End table *****/
HTM_TABLE_End (); HTM_TABLE_End ();
return true;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -3208,7 +3201,7 @@ static void ExaEvt_ShowEventScore (const struct ExaEvt_Event *Event)
unsigned NumRow; unsigned NumRow;
/***** Get minimum and maximum scores *****/ /***** Get minimum and maximum scores *****/
Gam_GetScoreRange (Event->ExaCod,&MinScore,&MaxScore); Exa_GetScoreRange (Event->ExaCod,&MinScore,&MaxScore);
Range = MaxScore - MinScore; Range = MaxScore - MinScore;
if (Range == 0.0) if (Range == 0.0)
return; return;
@ -3508,13 +3501,13 @@ static void ExaEvt_RemoveOldPlayers (void)
{ {
/***** Delete events not being played by teacher *****/ /***** Delete events not being played by teacher *****/
DB_QueryDELETE ("can not update events as not being played", DB_QueryDELETE ("can not update events as not being played",
"DELETE FROM exa_playing" "DELETE FROM exa_happening"
" WHERE TS<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)", " WHERE TS<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)",
Cfg_SECONDS_TO_REFRESH_MATCH_TCH*3); Cfg_SECONDS_TO_REFRESH_MATCH_TCH*3);
/***** Delete players (students) who have left events *****/ /***** Delete players (students) who have left events *****/
DB_QueryDELETE ("can not update exam event players", DB_QueryDELETE ("can not update exam event players",
"DELETE FROM exa_players" "DELETE FROM exa_participants"
" WHERE TS<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)", " WHERE TS<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)",
Cfg_SECONDS_TO_REFRESH_MATCH_STD*3); Cfg_SECONDS_TO_REFRESH_MATCH_STD*3);
} }
@ -3527,7 +3520,7 @@ static void ExaEvt_UpdateEventAsBeingPlayed (long EvtCod)
{ {
/***** Insert exam event as being played *****/ /***** Insert exam event as being played *****/
DB_QueryREPLACE ("can not set exam event as being played", DB_QueryREPLACE ("can not set exam event as being played",
"REPLACE exa_playing (EvtCod) VALUE (%ld)", "REPLACE exa_happening (EvtCod) VALUE (%ld)",
EvtCod); EvtCod);
} }
@ -3539,13 +3532,13 @@ static void ExaEvt_SetEventAsNotBeingPlayed (long EvtCod)
{ {
/***** Delete all exam event players ******/ /***** Delete all exam event players ******/
DB_QueryDELETE ("can not update exam event players", DB_QueryDELETE ("can not update exam event players",
"DELETE FROM exa_players" "DELETE FROM exa_participants"
" WHERE EvtCod=%ld", " WHERE EvtCod=%ld",
EvtCod); EvtCod);
/***** Delete exam event as being played ******/ /***** Delete exam event as being played ******/
DB_QueryDELETE ("can not set exam event as not being played", DB_QueryDELETE ("can not set exam event as not being played",
"DELETE FROM exa_playing" "DELETE FROM exa_happening"
" WHERE EvtCod=%ld", " WHERE EvtCod=%ld",
EvtCod); EvtCod);
} }
@ -3559,7 +3552,7 @@ static bool ExaEvt_GetIfEventIsBeingPlayed (long EvtCod)
/***** Get if an exam event is being played or not *****/ /***** Get if an exam event is being played or not *****/
return return
(bool) (DB_QueryCOUNT ("can not get if exam event is being played", (bool) (DB_QueryCOUNT ("can not get if exam event is being played",
"SELECT COUNT(*) FROM exa_playing" "SELECT COUNT(*) FROM exa_happening"
" WHERE EvtCod=%ld", " WHERE EvtCod=%ld",
EvtCod) != 0); EvtCod) != 0);
} }
@ -3573,7 +3566,7 @@ static void ExaEvt_GetNumPlayers (struct ExaEvt_Event *Event)
/***** Get number of players who are playing an exam event *****/ /***** Get number of players who are playing an exam event *****/
Event->Status.NumPlayers = Event->Status.NumPlayers =
(unsigned) DB_QueryCOUNT ("can not get number of players", (unsigned) DB_QueryCOUNT ("can not get number of players",
"SELECT COUNT(*) FROM exa_players" "SELECT COUNT(*) FROM exa_participants"
" WHERE EvtCod=%ld", " WHERE EvtCod=%ld",
Event->EvtCod); Event->EvtCod);
} }
@ -3603,7 +3596,7 @@ bool ExaEvt_RegisterMeAsPlayerInEvent (struct ExaEvt_Event *Event)
/***** Insert me as exam event player *****/ /***** Insert me as exam event player *****/
DB_QueryREPLACE ("can not insert exam event player", DB_QueryREPLACE ("can not insert exam event player",
"REPLACE exa_players (EvtCod,UsrCod) VALUES (%ld,%ld)", "REPLACE exa_participants (EvtCod,UsrCod) VALUES (%ld,%ld)",
Event->EvtCod,Gbl.Usrs.Me.UsrDat.UsrCod); Event->EvtCod,Gbl.Usrs.Me.UsrDat.UsrCod);
return true; return true;
} }

View File

@ -992,14 +992,14 @@ static void ExaRes_ShowEvtResultsSummaryRow (unsigned NumResults,
double TotalScoreOfAllResults, double TotalScoreOfAllResults,
double TotalGrade) double TotalGrade)
{ {
extern const char *Txt_Matches; extern const char *Txt_Events;
/***** Start row *****/ /***** Start row *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
/***** Row title *****/ /***** Row title *****/
HTM_TD_Begin ("colspan=\"3\" class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd); HTM_TD_Begin ("colspan=\"3\" class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
HTM_TxtColonNBSP (Txt_Matches); HTM_TxtColonNBSP (Txt_Events);
HTM_Unsigned (NumResults); HTM_Unsigned (NumResults);
HTM_TD_End (); HTM_TD_End ();