mirror of https://github.com/acanas/swad-core.git
Version18.132.2
This commit is contained in:
parent
ad554839d6
commit
bcef02f59f
|
@ -2674,6 +2674,10 @@ a:hover img.CENTRE_PHOTO_SHOW
|
|||
line-height:normal;
|
||||
white-space:nowrap;
|
||||
}
|
||||
.GAM_PLAY_STD_ANSWER_SELECTED
|
||||
{
|
||||
box-shadow: 0px 0px 24px 12px rgba(0,180,0,1);
|
||||
}
|
||||
.GAM_PLAY_TCH_BUTTON:hover, .GAM_PLAY_STD_BUTTON:hover
|
||||
{
|
||||
background-image:-webkit-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0.2)); /* Safari */
|
|
@ -458,10 +458,11 @@ En OpenSWAD:
|
|||
ps2pdf source.ps destination.pdf
|
||||
*/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 18.132.1 (2019-07-15)"
|
||||
#define CSS_FILE "swad18.131.css"
|
||||
#define Log_PLATFORM_VERSION "SWAD 18.132.2 (2019-07-15)"
|
||||
#define CSS_FILE "swad18.132.2.css"
|
||||
#define JS_FILE "swad18.130.2.js"
|
||||
/*
|
||||
Version 18.132.2: Jul 15, 2019 Reception of student answer to a match question. Not finished. (243456 lines)
|
||||
Version 18.132.1: Jul 15, 2019 Reception of student answer to a match question. Not finished. (243405 lines)
|
||||
2 changes necessary in database:
|
||||
DROP TABLE IF EXISTS gam_answers;
|
||||
|
|
79
swad_game.c
79
swad_game.c
|
@ -191,6 +191,7 @@ static void Gam_PlayGameShowQuestionAndAnswers (struct Match *Match);
|
|||
static void Gam_PutBigButton (long MchCod,const char *Txt,const char *Icon);
|
||||
|
||||
static void Gam_ShowMatchStatusForStd (struct Match *Match);
|
||||
static int Gam_GetQstAnsFromDB (long MchCod,unsigned QstInd);
|
||||
|
||||
static unsigned Gam_GetNumUsrsWhoHaveAnsweredGame (long GamCod);
|
||||
|
||||
|
@ -3636,6 +3637,7 @@ static void Gam_ShowMatchStatusForStd (struct Match *Match)
|
|||
bool Shuffle = false; // TODO: Read shuffle from question
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
int StdAnsInd;
|
||||
unsigned NumOptions;
|
||||
unsigned NumOpt;
|
||||
unsigned Index;
|
||||
|
@ -3674,13 +3676,15 @@ static void Gam_ShowMatchStatusForStd (struct Match *Match)
|
|||
{
|
||||
if (Tst_CheckIfQuestionIsValidForGame (Match->Status.QstCod))
|
||||
{
|
||||
/***** Start table *****/
|
||||
Tbl_StartTableWide (8);
|
||||
/***** Get student's answer to this question
|
||||
(<0 ==> no answer) *****/
|
||||
StdAnsInd = Gam_GetQstAnsFromDB (Match->MchCod,
|
||||
Match->Status.QstInd);
|
||||
|
||||
/***** Write answers *****/
|
||||
/***** Get number of options in this question *****/
|
||||
NumOptions = Tst_GetNumAnswersQst (Match->Status.QstCod);
|
||||
|
||||
/***** Get answers of a question from database *****/
|
||||
/***** Get answers of question from database *****/
|
||||
Shuffle = false;
|
||||
NumOptions = Tst_GetAnswersQst (Match->Status.QstCod,&mysql_res,Shuffle);
|
||||
/*
|
||||
|
@ -3691,6 +3695,9 @@ static void Gam_ShowMatchStatusForStd (struct Match *Match)
|
|||
row[4] Correct
|
||||
*/
|
||||
|
||||
/***** Start table *****/
|
||||
Tbl_StartTableWide (8);
|
||||
|
||||
for (NumOpt = 0;
|
||||
NumOpt < NumOptions;
|
||||
NumOpt++)
|
||||
|
@ -3725,7 +3732,10 @@ static void Gam_ShowMatchStatusForStd (struct Match *Match)
|
|||
Gam_PutParamQstInd (Match->Status.QstInd); // Current question index shown
|
||||
Gam_PutParamAnswer (Index); // Index for this option
|
||||
fprintf (Gbl.F.Out,"<button type=\"submit\""
|
||||
" class=\"GAM_PLAY_STD_BUTTON BT_%c\">"
|
||||
" class=\"");
|
||||
if (StdAnsInd == (int) NumOpt) // Student's answer
|
||||
fprintf (Gbl.F.Out,"GAM_PLAY_STD_ANSWER_SELECTED ");
|
||||
fprintf (Gbl.F.Out,"GAM_PLAY_STD_BUTTON BT_%c\">"
|
||||
"%c"
|
||||
"</button>",
|
||||
'A' + (char) NumOpt,
|
||||
|
@ -3752,6 +3762,38 @@ static void Gam_ShowMatchStatusForStd (struct Match *Match)
|
|||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**** Receive previous question answer in a match question from database *****/
|
||||
/*****************************************************************************/
|
||||
|
||||
static int Gam_GetQstAnsFromDB (long MchCod,unsigned QstInd)
|
||||
{
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumRows;
|
||||
int StdAnsInd = -1; // <0 ==> no answer selected
|
||||
|
||||
/***** Get student's answer *****/
|
||||
NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get student's answer to a match question",
|
||||
"SELECT AnsInd FROM gam_answers"
|
||||
" WHERE MchCod=%ld AND UsrCod=%ld AND QstInd=%u",
|
||||
MchCod,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
QstInd);
|
||||
if (NumRows) // Answer found...
|
||||
{
|
||||
/***** Get answer index *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
if (sscanf (row[0],"%d",&StdAnsInd) != 1)
|
||||
Lay_ShowErrorAndExit ("Error when getting student's answer to a match question.");
|
||||
}
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
|
||||
return StdAnsInd;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********* Receive question answer from student when playing a match *********/
|
||||
/*****************************************************************************/
|
||||
|
@ -3760,7 +3802,8 @@ void Gam_ReceiveQstAnsFromStd (void)
|
|||
{
|
||||
struct Match Match;
|
||||
unsigned QstInd;
|
||||
unsigned AnsInd;
|
||||
unsigned StdAnsInd;
|
||||
int PreviousStdAnsInd;
|
||||
|
||||
/***** Get match code *****/
|
||||
if ((Match.MchCod = Gam_GetParamMatchCod ()) == -1L)
|
||||
|
@ -3786,15 +3829,25 @@ void Gam_ReceiveQstAnsFromStd (void)
|
|||
| d | 3 |
|
||||
| ... | ... |
|
||||
+--------+-------------*/
|
||||
AnsInd = Gam_GetParamAnswer ();
|
||||
StdAnsInd = Gam_GetParamAnswer ();
|
||||
|
||||
/***** Get previous student's answer to this question
|
||||
(<0 ==> no answer) *****/
|
||||
PreviousStdAnsInd = Gam_GetQstAnsFromDB (Match.MchCod,QstInd);
|
||||
|
||||
/***** Store student's answer *****/
|
||||
DB_QueryUPDATE ("can not register your answer to the game",
|
||||
"REPLACE gam_answers"
|
||||
" (MchCod,UsrCod,QstInd,AnsInd)"
|
||||
" VALUES"
|
||||
" (%ld,%ld,%u,%u)",
|
||||
Match.MchCod,Gbl.Usrs.Me.UsrDat.UsrCod,QstInd,AnsInd);
|
||||
if (PreviousStdAnsInd == (int) StdAnsInd)
|
||||
DB_QueryDELETE ("can not register your answer to the match question",
|
||||
"DELETE FROM gam_answers"
|
||||
" WHERE MchCod=%ld AND UsrCod=%ld AND QstInd=%u",
|
||||
Match.MchCod,Gbl.Usrs.Me.UsrDat.UsrCod,QstInd);
|
||||
else
|
||||
DB_QueryREPLACE ("can not register your answer to the match question",
|
||||
"REPLACE gam_answers"
|
||||
" (MchCod,UsrCod,QstInd,AnsInd)"
|
||||
" VALUES"
|
||||
" (%ld,%ld,%u,%u)",
|
||||
Match.MchCod,Gbl.Usrs.Me.UsrDat.UsrCod,QstInd,StdAnsInd);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue