mirror of https://github.com/acanas/swad-core.git
Version 16.251.4
This commit is contained in:
parent
dd0306fdc4
commit
ee37f2023f
|
@ -603,13 +603,11 @@ CREATE TABLE IF NOT EXISTS gam_grp (
|
||||||
-- Table gam_questions: stores the questions in the games
|
-- Table gam_questions: stores the questions in the games
|
||||||
--
|
--
|
||||||
CREATE TABLE IF NOT EXISTS gam_questions (
|
CREATE TABLE IF NOT EXISTS gam_questions (
|
||||||
QstCod INT NOT NULL AUTO_INCREMENT,
|
|
||||||
GamCod INT NOT NULL,
|
GamCod INT NOT NULL,
|
||||||
|
QstCod INT NOT NULL,
|
||||||
QstInd INT NOT NULL DEFAULT 0,
|
QstInd INT NOT NULL DEFAULT 0,
|
||||||
AnsType ENUM('unique_choice','multiple_choice') NOT NULL,
|
INDEX(GamCod),
|
||||||
Stem TEXT NOT NULL,
|
INDEX(QstCod));
|
||||||
UNIQUE INDEX(QstCod),
|
|
||||||
INDEX(GamCod));
|
|
||||||
--
|
--
|
||||||
-- Table gam_users: stores the users who have answer the games
|
-- Table gam_users: stores the users who have answer the games
|
||||||
--
|
--
|
||||||
|
|
|
@ -232,17 +232,24 @@
|
||||||
|
|
||||||
// TODO: Cuando sólo se cambian los grupos y no el rol de un profesor ya existente, no sale ningún mensaje. se haga lo que se haga en la edición debería salir un mensaje del tipo "Cambios realizados"
|
// TODO: Cuando sólo se cambian los grupos y no el rol de un profesor ya existente, no sale ningún mensaje. se haga lo que se haga en la edición debería salir un mensaje del tipo "Cambios realizados"
|
||||||
|
|
||||||
|
// TODO: "Solicitar inscripción" como superusuario: "Usted no tiene permiso para realizar esta acción"
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 16.251.3 (2017-07-18)"
|
#define Log_PLATFORM_VERSION "SWAD 16.251.4 (2017-09-01)"
|
||||||
#define CSS_FILE "swad16.235.1.css"
|
#define CSS_FILE "swad16.235.1.css"
|
||||||
#define JS_FILE "swad16.206.3.js"
|
#define JS_FILE "swad16.206.3.js"
|
||||||
|
|
||||||
// Number of lines (includes comments but not blank lines) has been got with the following command:
|
// Number of lines (includes comments but not blank lines) has been got with the following command:
|
||||||
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
|
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
|
||||||
/*
|
/*
|
||||||
|
// TODO: "Error when getting answers of a question"
|
||||||
|
Version 16.251.4: Sep 01, 2017 Listing games for remote control. Not finished. (? lines)
|
||||||
|
DROP TABLE IF EXISTS gam_questions;
|
||||||
|
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));
|
||||||
|
|
||||||
Version 16.251.3: Jul 18, 2017 Listing games for remote control. Not finished. (227148 lines)
|
Version 16.251.3: Jul 18, 2017 Listing games for remote control. Not finished. (227148 lines)
|
||||||
Version 16.251.2: Jul 16, 2017 Listing games for remote control. Not finished. (227062 lines)
|
Version 16.251.2: Jul 16, 2017 Listing games for remote control. Not finished. (227062 lines)
|
||||||
1 change necessary in database:
|
1 change necessary in database:
|
||||||
|
|
|
@ -1311,25 +1311,21 @@ mysql> DESCRIBE gam_grp;
|
||||||
/***** Table gam_questions *****/
|
/***** Table gam_questions *****/
|
||||||
/*
|
/*
|
||||||
mysql> DESCRIBE gam_questions;
|
mysql> DESCRIBE gam_questions;
|
||||||
+---------+-----------------------------------------+------+-----+---------+----------------+
|
+--------+---------+------+-----+---------+-------+
|
||||||
| Field | Type | Null | Key | Default | Extra |
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
+---------+-----------------------------------------+------+-----+---------+----------------+
|
+--------+---------+------+-----+---------+-------+
|
||||||
| QstCod | int(11) | NO | PRI | NULL | auto_increment |
|
| GamCod | int(11) | NO | MUL | NULL | |
|
||||||
| SvyCod | int(11) | NO | MUL | NULL | |
|
| QstCod | int(11) | NO | MUL | NULL | |
|
||||||
| QstInd | int(11) | NO | | 0 | |
|
| QstInd | int(11) | NO | | 0 | |
|
||||||
| AnsType | enum('unique_choice','multiple_choice') | NO | | NULL | |
|
+--------+---------+------+-----+---------+-------+
|
||||||
| Stem | text | NO | | NULL | |
|
3 rows in set (0,00 sec)
|
||||||
+---------+-----------------------------------------+------+-----+---------+----------------+
|
|
||||||
5 rows in set (0.00 sec)
|
|
||||||
*/
|
*/
|
||||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS gam_questions ("
|
DB_CreateTable ("CREATE TABLE IF NOT EXISTS gam_questions ("
|
||||||
"QstCod INT NOT NULL AUTO_INCREMENT,"
|
|
||||||
"GamCod INT NOT NULL,"
|
"GamCod INT NOT NULL,"
|
||||||
|
"QstCod INT NOT NULL,"
|
||||||
"QstInd INT NOT NULL DEFAULT 0,"
|
"QstInd INT NOT NULL DEFAULT 0,"
|
||||||
"AnsType ENUM ('unique_choice','multiple_choice') NOT NULL,"
|
"INDEX(GamCod),"
|
||||||
"Stem TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
|
"INDEX(QstCod))");
|
||||||
"UNIQUE INDEX(QstCod),"
|
|
||||||
"INDEX(GamCod))");
|
|
||||||
|
|
||||||
/***** Table gam_users *****/
|
/***** Table gam_users *****/
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -2557,14 +2557,14 @@ static unsigned Rmt_GetNumQstsGame (long GamCod)
|
||||||
|
|
||||||
void Rmt_RequestEditQuestion (void)
|
void Rmt_RequestEditQuestion (void)
|
||||||
{
|
{
|
||||||
long GamCod;
|
struct Game Game;
|
||||||
struct GameQuestion GameQst;
|
struct GameQuestion GameQst;
|
||||||
|
|
||||||
/***** Initialize question to zero *****/
|
/***** Initialize question to zero *****/
|
||||||
Rmt_InitQst (&GameQst);
|
Rmt_InitQst (&GameQst);
|
||||||
|
|
||||||
/***** Get game code *****/
|
/***** Get game code *****/
|
||||||
if ((GamCod = Rmt_GetParamGameCod ()) == -1L)
|
if ((Game.GamCod = Rmt_GetParamGameCod ()) == -1L)
|
||||||
Lay_ShowErrorAndExit ("Code of game is missing.");
|
Lay_ShowErrorAndExit ("Code of game is missing.");
|
||||||
|
|
||||||
/* Get the question code */
|
/* Get the question code */
|
||||||
|
@ -2576,10 +2576,10 @@ void Rmt_RequestEditQuestion (void)
|
||||||
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_SURVEYS);
|
Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_SURVEYS);
|
||||||
|
|
||||||
/***** Show form to create a new question in this game *****/
|
/***** Show form to create a new question in this game *****/
|
||||||
Tst_ShowFormAskSelectTstsForGame (GamCod);
|
Tst_ShowFormAskSelectTstsForGame (Game.GamCod);
|
||||||
|
|
||||||
/***** Show current game *****/
|
/***** Show current game *****/
|
||||||
Rmt_ShowOneGame (GamCod,&GameQst,true);
|
Rmt_ShowOneGame (Game.GamCod,&GameQst,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -2741,7 +2741,7 @@ void Rmt_ReceiveQst (void)
|
||||||
extern const char *Txt_The_game_has_been_modified;
|
extern const char *Txt_The_game_has_been_modified;
|
||||||
char Txt[Cns_MAX_BYTES_TEXT + 1];
|
char Txt[Cns_MAX_BYTES_TEXT + 1];
|
||||||
char Query[512 + Cns_MAX_BYTES_TEXT];
|
char Query[512 + Cns_MAX_BYTES_TEXT];
|
||||||
long GamCod;
|
struct Game Game;
|
||||||
struct GameQuestion GameQst;
|
struct GameQuestion GameQst;
|
||||||
unsigned NumAns;
|
unsigned NumAns;
|
||||||
char AnsStr[8 + 10 + 1];
|
char AnsStr[8 + 10 + 1];
|
||||||
|
@ -2754,7 +2754,7 @@ void Rmt_ReceiveQst (void)
|
||||||
|
|
||||||
/***** Get parameters from form *****/
|
/***** Get parameters from form *****/
|
||||||
/* Get game code */
|
/* Get game code */
|
||||||
if ((GamCod = Rmt_GetParamGameCod ()) == -1L)
|
if ((Game.GamCod = Rmt_GetParamGameCod ()) == -1L)
|
||||||
Lay_ShowErrorAndExit ("Code of game is missing.");
|
Lay_ShowErrorAndExit ("Code of game is missing.");
|
||||||
|
|
||||||
/* Get question code */
|
/* Get question code */
|
||||||
|
@ -2823,20 +2823,20 @@ void Rmt_ReceiveQst (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Error)
|
if (Error)
|
||||||
Tst_ShowFormAskSelectTstsForGame (GamCod);
|
Tst_ShowFormAskSelectTstsForGame (Game.GamCod);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/***** Form is received OK ==> insert question and answer in the database *****/
|
/***** Form is received OK ==> insert question and answer in the database *****/
|
||||||
if (GameQst.QstCod < 0) // It's a new question
|
if (GameQst.QstCod < 0) // It's a new question
|
||||||
{
|
{
|
||||||
GameQst.QstInd = Rmt_GetNextQuestionIndexInGame (GamCod);
|
GameQst.QstInd = Rmt_GetNextQuestionIndexInGame (Game.GamCod);
|
||||||
|
|
||||||
/* Insert question in the table of questions */
|
/* Insert question in the table of questions */
|
||||||
sprintf (Query,"INSERT INTO gam_questions"
|
sprintf (Query,"INSERT INTO gam_questions"
|
||||||
" (GamCod,QstInd,AnsType,Stem)"
|
" (GamCod,QstInd,AnsType,Stem)"
|
||||||
" VALUES"
|
" VALUES"
|
||||||
" (%ld,%u,'%s','%s')",
|
" (%ld,%u,'%s','%s')",
|
||||||
GamCod,GameQst.QstInd,Rmt_StrAnswerTypesDB[GameQst.AnswerType],Txt);
|
Game.GamCod,GameQst.QstInd,Rmt_StrAnswerTypesDB[GameQst.AnswerType],Txt);
|
||||||
GameQst.QstCod = DB_QueryINSERTandReturnCode (Query,"can not create question");
|
GameQst.QstCod = DB_QueryINSERTandReturnCode (Query,"can not create question");
|
||||||
}
|
}
|
||||||
else // It's an existing question
|
else // It's an existing question
|
||||||
|
@ -2845,7 +2845,7 @@ void Rmt_ReceiveQst (void)
|
||||||
sprintf (Query,"UPDATE gam_questions SET Stem='%s',AnsType='%s'"
|
sprintf (Query,"UPDATE gam_questions SET Stem='%s',AnsType='%s'"
|
||||||
" WHERE QstCod=%ld AND GamCod=%ld",
|
" WHERE QstCod=%ld AND GamCod=%ld",
|
||||||
Txt,Rmt_StrAnswerTypesDB[GameQst.AnswerType],
|
Txt,Rmt_StrAnswerTypesDB[GameQst.AnswerType],
|
||||||
GameQst.QstCod,GamCod);
|
GameQst.QstCod,Game.GamCod);
|
||||||
DB_QueryUPDATE (Query,"can not update question");
|
DB_QueryUPDATE (Query,"can not update question");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2894,7 +2894,7 @@ void Rmt_ReceiveQst (void)
|
||||||
Rmt_FreeTextChoiceAnswers (&GameQst,Rmt_MAX_ANSWERS_PER_QUESTION);
|
Rmt_FreeTextChoiceAnswers (&GameQst,Rmt_MAX_ANSWERS_PER_QUESTION);
|
||||||
|
|
||||||
/***** Show current game *****/
|
/***** Show current game *****/
|
||||||
Rmt_ShowOneGame (GamCod,&GameQst,true);
|
Rmt_ShowOneGame (Game.GamCod,&GameQst,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -2976,7 +2976,7 @@ static void Rmt_ListGameQuestions (struct Game *Game,struct GameQuestion *GameQs
|
||||||
extern const char *Txt_This_game_has_no_questions;
|
extern const char *Txt_This_game_has_no_questions;
|
||||||
extern const char *Txt_Done;
|
extern const char *Txt_Done;
|
||||||
extern const char *Txt_Edit_question;
|
extern const char *Txt_Edit_question;
|
||||||
char Query[256];
|
char Query[512];
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
unsigned NumQsts;
|
unsigned NumQsts;
|
||||||
|
@ -2987,8 +2987,12 @@ static void Rmt_ListGameQuestions (struct Game *Game,struct GameQuestion *GameQs
|
||||||
bool PutFormAnswerGame = Game->Status.ICanAnswer && !Editing;
|
bool PutFormAnswerGame = Game->Status.ICanAnswer && !Editing;
|
||||||
|
|
||||||
/***** Get data of questions from database *****/
|
/***** Get data of questions from database *****/
|
||||||
sprintf (Query,"SELECT QstCod,QstInd,AnsType,Stem"
|
sprintf (Query,"SELECT gam_questions.QstCod,gam_questions.QstInd,"
|
||||||
" FROM gam_questions WHERE GamCod=%ld ORDER BY QstInd",
|
"tst_questions.AnsType,tst_questions.Stem"
|
||||||
|
" FROM gam_questions,tst_questions"
|
||||||
|
" WHERE gam_questions.GamCod=%ld"
|
||||||
|
" AND gam_questions.QstCod=tst_questions.QstCod"
|
||||||
|
" ORDER BY gam_questions.QstInd",
|
||||||
Game->GamCod);
|
Game->GamCod);
|
||||||
NumQsts = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get data of a question");
|
NumQsts = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get data of a question");
|
||||||
|
|
||||||
|
@ -3155,6 +3159,15 @@ static void Rmt_PutButtonToAddNewQuestions (void)
|
||||||
void Rmt_AddTstQuestionsToGame (void)
|
void Rmt_AddTstQuestionsToGame (void)
|
||||||
{
|
{
|
||||||
extern const char *Txt_You_must_select_one_ore_more_questions;
|
extern const char *Txt_You_must_select_one_ore_more_questions;
|
||||||
|
struct Game Game;
|
||||||
|
const char *Ptr;
|
||||||
|
char LongStr[1 + 10 + 1];
|
||||||
|
struct GameQuestion GameQst;
|
||||||
|
char Query[256];
|
||||||
|
|
||||||
|
/***** Get game code *****/
|
||||||
|
if ((Game.GamCod = Rmt_GetParamGameCod ()) == -1L)
|
||||||
|
Lay_ShowErrorAndExit ("Code of game is missing.");
|
||||||
|
|
||||||
/***** Get selected questions *****/
|
/***** Get selected questions *****/
|
||||||
/* Allocate space for selected question codes */
|
/* Allocate space for selected question codes */
|
||||||
|
@ -3172,7 +3185,28 @@ void Rmt_AddTstQuestionsToGame (void)
|
||||||
// TODO: Show form again!!!
|
// TODO: Show form again!!!
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free space for selected question codes */
|
/***** Insert questions in database *****/
|
||||||
|
Ptr = Gbl.Games.ListQuestions;
|
||||||
|
while (*Ptr)
|
||||||
|
{
|
||||||
|
/* Get next code */
|
||||||
|
Par_GetNextStrUntilSeparParamMult (&Ptr,LongStr,1 + 10);
|
||||||
|
if (sscanf (LongStr,"%ld",&GameQst.QstCod) != 1)
|
||||||
|
Lay_ShowErrorAndExit ("Wrong question code.");
|
||||||
|
|
||||||
|
/* Get next index */
|
||||||
|
GameQst.QstInd = Rmt_GetNextQuestionIndexInGame (Game.GamCod);
|
||||||
|
|
||||||
|
/* Insert question in the table of questions */
|
||||||
|
sprintf (Query,"INSERT INTO gam_questions"
|
||||||
|
" (GamCod,QstCod,QstInd)"
|
||||||
|
" VALUES"
|
||||||
|
" (%ld,%ld,%u)",
|
||||||
|
Game.GamCod,GameQst.QstCod,GameQst.QstInd);
|
||||||
|
DB_QueryINSERT (Query,"can not create question");
|
||||||
|
}
|
||||||
|
|
||||||
|
/***** Free space for selected question codes *****/
|
||||||
Rmt_FreeListsSelectedQuestions ();
|
Rmt_FreeListsSelectedQuestions ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3211,7 +3245,7 @@ static unsigned Rmt_CountNumQuestionsInList (void)
|
||||||
{
|
{
|
||||||
const char *Ptr;
|
const char *Ptr;
|
||||||
unsigned NumQuestions = 0;
|
unsigned NumQuestions = 0;
|
||||||
char LongStr[1+ 10 + 1];
|
char LongStr[1 + 10 + 1];
|
||||||
long QstCod;
|
long QstCod;
|
||||||
|
|
||||||
/***** Go over the list Gbl.Test.ListAnsTypes counting the number of types of answer *****/
|
/***** Go over the list Gbl.Test.ListAnsTypes counting the number of types of answer *****/
|
||||||
|
@ -3417,12 +3451,12 @@ void Rmt_RequestRemoveQst (void)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Do_you_really_want_to_remove_the_question_X;
|
extern const char *Txt_Do_you_really_want_to_remove_the_question_X;
|
||||||
extern const char *Txt_Remove_question;
|
extern const char *Txt_Remove_question;
|
||||||
long GamCod;
|
struct Game Game;
|
||||||
struct GameQuestion GameQst;
|
struct GameQuestion GameQst;
|
||||||
|
|
||||||
/***** Get parameters from form *****/
|
/***** Get parameters from form *****/
|
||||||
/* Get game code */
|
/* Get game code */
|
||||||
if ((GamCod = Rmt_GetParamGameCod ()) == -1L)
|
if ((Game.GamCod = Rmt_GetParamGameCod ()) == -1L)
|
||||||
Lay_ShowErrorAndExit ("Code of game is missing.");
|
Lay_ShowErrorAndExit ("Code of game is missing.");
|
||||||
|
|
||||||
/* Get question code */
|
/* Get question code */
|
||||||
|
@ -3433,7 +3467,7 @@ void Rmt_RequestRemoveQst (void)
|
||||||
GameQst.QstInd = Rmt_GetQstIndFromQstCod (GameQst.QstCod);
|
GameQst.QstInd = Rmt_GetQstIndFromQstCod (GameQst.QstCod);
|
||||||
|
|
||||||
/***** Show question and button to remove question *****/
|
/***** Show question and button to remove question *****/
|
||||||
Gbl.Games.GamCodToEdit = GamCod;
|
Gbl.Games.GamCodToEdit = Game.GamCod;
|
||||||
Gbl.Games.GamQstCodToEdit = GameQst.QstCod;
|
Gbl.Games.GamQstCodToEdit = GameQst.QstCod;
|
||||||
sprintf (Gbl.Alert.Txt,Txt_Do_you_really_want_to_remove_the_question_X,
|
sprintf (Gbl.Alert.Txt,Txt_Do_you_really_want_to_remove_the_question_X,
|
||||||
(unsigned long) (GameQst.QstInd + 1));
|
(unsigned long) (GameQst.QstInd + 1));
|
||||||
|
@ -3442,7 +3476,7 @@ void Rmt_RequestRemoveQst (void)
|
||||||
Btn_REMOVE_BUTTON,Txt_Remove_question);
|
Btn_REMOVE_BUTTON,Txt_Remove_question);
|
||||||
|
|
||||||
/***** Show current game *****/
|
/***** Show current game *****/
|
||||||
Rmt_ShowOneGame (GamCod,&GameQst,true);
|
Rmt_ShowOneGame (Game.GamCod,&GameQst,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -3453,12 +3487,12 @@ void Rmt_RemoveQst (void)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Question_removed;
|
extern const char *Txt_Question_removed;
|
||||||
char Query[512];
|
char Query[512];
|
||||||
long GamCod;
|
struct Game Game;
|
||||||
struct GameQuestion GameQst;
|
struct GameQuestion GameQst;
|
||||||
|
|
||||||
/***** Get parameters from form *****/
|
/***** Get parameters from form *****/
|
||||||
/* Get game code */
|
/* Get game code */
|
||||||
if ((GamCod = Rmt_GetParamGameCod ()) == -1L)
|
if ((Game.GamCod = Rmt_GetParamGameCod ()) == -1L)
|
||||||
Lay_ShowErrorAndExit ("Code of game is missing.");
|
Lay_ShowErrorAndExit ("Code of game is missing.");
|
||||||
|
|
||||||
/* Get question code */
|
/* Get question code */
|
||||||
|
@ -3482,7 +3516,7 @@ void Rmt_RemoveQst (void)
|
||||||
/* Change index of questions greater than this */
|
/* Change index of questions greater than this */
|
||||||
sprintf (Query,"UPDATE gam_questions SET QstInd=QstInd-1"
|
sprintf (Query,"UPDATE gam_questions SET QstInd=QstInd-1"
|
||||||
" WHERE GamCod=%ld AND QstInd>%u",
|
" WHERE GamCod=%ld AND QstInd>%u",
|
||||||
GamCod,GameQst.QstInd);
|
Game.GamCod,GameQst.QstInd);
|
||||||
DB_QueryUPDATE (Query,"can not update indexes of questions");
|
DB_QueryUPDATE (Query,"can not update indexes of questions");
|
||||||
|
|
||||||
/***** Write message *****/
|
/***** Write message *****/
|
||||||
|
@ -3490,7 +3524,7 @@ void Rmt_RemoveQst (void)
|
||||||
Ale_ShowAlert (Ale_SUCCESS,Gbl.Alert.Txt);
|
Ale_ShowAlert (Ale_SUCCESS,Gbl.Alert.Txt);
|
||||||
|
|
||||||
/***** Show current game *****/
|
/***** Show current game *****/
|
||||||
Rmt_ShowOneGame (GamCod,&GameQst,true);
|
Rmt_ShowOneGame (Game.GamCod,&GameQst,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
17
swad_test.c
17
swad_test.c
|
@ -194,8 +194,11 @@ static unsigned long Tst_GetQuestions (MYSQL_RES **mysql_res);
|
||||||
static unsigned long Tst_GetQuestionsForTest (MYSQL_RES **mysql_res);
|
static unsigned long Tst_GetQuestionsForTest (MYSQL_RES **mysql_res);
|
||||||
static void Tst_ListOneQstToEdit (void);
|
static void Tst_ListOneQstToEdit (void);
|
||||||
static bool Tst_GetOneQuestionByCod (long QstCod,MYSQL_RES **mysql_res);
|
static bool Tst_GetOneQuestionByCod (long QstCod,MYSQL_RES **mysql_res);
|
||||||
static void Tst_ListOneOrMoreQuestionsForEdition (unsigned long NumRows,MYSQL_RES *mysql_res);
|
static void Tst_ListOneOrMoreQuestionsForEdition (unsigned long NumRows,
|
||||||
static void Tst_ListOneOrMoreQuestionsForSelection (unsigned long NumRows,MYSQL_RES *mysql_res);
|
MYSQL_RES *mysql_res);
|
||||||
|
static void Tst_ListOneOrMoreQuestionsForSelection (long GamCod,
|
||||||
|
unsigned long NumRows,
|
||||||
|
MYSQL_RES *mysql_res);
|
||||||
|
|
||||||
static void Tst_WriteAnswersOfAQstEdit (long QstCod);
|
static void Tst_WriteAnswersOfAQstEdit (long QstCod);
|
||||||
static void Tst_WriteAnswersOfAQstViewTest (unsigned NumQst,long QstCod,bool Shuffle);
|
static void Tst_WriteAnswersOfAQstViewTest (unsigned NumQst,long QstCod,bool Shuffle);
|
||||||
|
@ -2632,7 +2635,7 @@ void Tst_ListQuestionsToSelect (void)
|
||||||
{
|
{
|
||||||
if ((NumRows = Tst_GetQuestions (&mysql_res)) != 0) // Query database
|
if ((NumRows = Tst_GetQuestions (&mysql_res)) != 0) // Query database
|
||||||
/* Show the table with the questions */
|
/* Show the table with the questions */
|
||||||
Tst_ListOneOrMoreQuestionsForSelection (NumRows,mysql_res);
|
Tst_ListOneOrMoreQuestionsForSelection (GamCod,NumRows,mysql_res);
|
||||||
|
|
||||||
/***** Free structure that stores the query result *****/
|
/***** Free structure that stores the query result *****/
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
DB_FreeMySQLResult (&mysql_res);
|
||||||
|
@ -2998,7 +3001,8 @@ static bool Tst_GetOneQuestionByCod (long QstCod,MYSQL_RES **mysql_res)
|
||||||
/****************** List for edition one or more test questions **************/
|
/****************** List for edition one or more test questions **************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Tst_ListOneOrMoreQuestionsForEdition (unsigned long NumRows,MYSQL_RES *mysql_res)
|
static void Tst_ListOneOrMoreQuestionsForEdition (unsigned long NumRows,
|
||||||
|
MYSQL_RES *mysql_res)
|
||||||
{
|
{
|
||||||
extern const char *Hlp_ASSESSMENT_Tests;
|
extern const char *Hlp_ASSESSMENT_Tests;
|
||||||
extern const char *Txt_Questions;
|
extern const char *Txt_Questions;
|
||||||
|
@ -3286,7 +3290,9 @@ static void Tst_ListOneOrMoreQuestionsForEdition (unsigned long NumRows,MYSQL_RE
|
||||||
/****************** List for edition one or more test questions **************/
|
/****************** List for edition one or more test questions **************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Tst_ListOneOrMoreQuestionsForSelection (unsigned long NumRows,MYSQL_RES *mysql_res)
|
static void Tst_ListOneOrMoreQuestionsForSelection (long GamCod,
|
||||||
|
unsigned long NumRows,
|
||||||
|
MYSQL_RES *mysql_res)
|
||||||
{
|
{
|
||||||
extern const char *Hlp_ASSESSMENT_Tests;
|
extern const char *Hlp_ASSESSMENT_Tests;
|
||||||
extern const char *Txt_Questions;
|
extern const char *Txt_Questions;
|
||||||
|
@ -3311,6 +3317,7 @@ static void Tst_ListOneOrMoreQuestionsForSelection (unsigned long NumRows,MYSQL_
|
||||||
|
|
||||||
/***** Start form *****/
|
/***** Start form *****/
|
||||||
Act_FormStart (ActAddTstQstToGam);
|
Act_FormStart (ActAddTstQstToGam);
|
||||||
|
Rmt_PutParamGameCod (GamCod);
|
||||||
|
|
||||||
/***** Write the heading *****/
|
/***** Write the heading *****/
|
||||||
Tbl_StartTableWideMargin (2);
|
Tbl_StartTableWideMargin (2);
|
||||||
|
|
Loading…
Reference in New Issue