diff --git a/css/swad18.4.css b/css/swad18.22.css similarity index 99% rename from css/swad18.4.css rename to css/swad18.22.css index fa3bee1f0..381d6b8c6 100644 --- a/css/swad18.4.css +++ b/css/swad18.22.css @@ -2281,7 +2281,8 @@ a:hover img.CENTRE_PHOTO_SHOW .TAG_SEL {box-sizing:border-box; width:346px;} .TAG_TXT {box-sizing:border-box; width:346px;} .STEM {box-sizing:border-box; width:700px;} -.ANS {color:#404040; font-size:12pt;} +.ANS_TXT {color:#404040; font-size:12pt;} +.ANS_0 {color:#404040; font-size:12pt; font-weight:bold;} .ANS_OK {color:#008000; font-size:12pt; font-weight:bold;} .ANS_BAD {color:red; font-size:12pt; font-weight:bold;} .ANS_STR {box-sizing:border-box; width:600px;} diff --git a/swad_changelog.h b/swad_changelog.h index b12ca0673..646ba3e21 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -360,12 +360,13 @@ En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 18.21.3 (2018-12-08)" -#define CSS_FILE "swad18.4.css" +#define Log_PLATFORM_VERSION "SWAD 18.22 (2018-12-09)" +#define CSS_FILE "swad18.22.css" #define JS_FILE "swad17.17.1.js" /* - Version 18.21.4: Dec 08, 2018 Check icons replaced by HTML entities in tests. (? lines) - Version 18.21.3: Dec 08, 2018 Fixed bug when changing language, reported by Agostinho Silva. (237044 lines) + Version 18.22: Dec 09, 2018 Check icons replaced by HTML entities in tests. + Changes in test feedback. (237055 lines) + Version 18.21.3: Dec 09, 2018 Fixed bug when changing language, reported by Agostinho Silva. (237044 lines) Version 18.21.2: Dec 08, 2018 Check icons replaced by HTML entities in listing of users. (237039 lines) Version 18.21.1: Dec 08, 2018 Some messages translated to Portuguese (still 464 messages to be translated). (237046 lines) Version 18.21: Dec 08, 2018 Code refactoring related to languages. (237098 lines) diff --git a/swad_test.c b/swad_test.c index 67528661a..b9d075457 100644 --- a/swad_test.c +++ b/swad_test.c @@ -195,15 +195,18 @@ static void Tst_ListOneOrMoreQuestionsForSelection (long GamCod, static void Tst_WriteAnswersEdit (long QstCod); static void Tst_WriteAnswersTestToAnswer (unsigned NumQst,long QstCod,bool Shuffle); -static void Tst_WriteAnswersTestResult (unsigned NumQst,long QstCod, +static void Tst_WriteAnswersTestResult (struct UsrData *UsrDat, + unsigned NumQst,long QstCod, double *ScoreThisQst,bool *AnswerIsNotBlank); static void Tst_WriteTFAnsViewTest (unsigned NumQst); -static void Tst_WriteTFAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res, +static void Tst_WriteTFAnsAssessTest (struct UsrData *UsrDat, + unsigned NumQst,MYSQL_RES *mysql_res, double *ScoreThisQst,bool *AnswerIsNotBlank); static void Tst_WriteChoiceAnsViewTest (unsigned NumQst,long QstCod,bool Shuffle); -static void Tst_WriteChoiceAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res, +static void Tst_WriteChoiceAnsAssessTest (struct UsrData *UsrDat, + unsigned NumQst,MYSQL_RES *mysql_res, double *ScoreThisQst,bool *AnswerIsNotBlank); static void Tst_WriteChoiceAnsViewGame (struct Game *Game, unsigned NumQst,long QstCod, @@ -211,18 +214,21 @@ static void Tst_WriteChoiceAnsViewGame (struct Game *Game, bool ShowResult); static void Tst_WriteTextAnsViewTest (unsigned NumQst); -static void Tst_WriteTextAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res, +static void Tst_WriteTextAnsAssessTest (struct UsrData *UsrDat, + unsigned NumQst,MYSQL_RES *mysql_res, double *ScoreThisQst,bool *AnswerIsNotBlank); static void Tst_WriteIntAnsViewTest (unsigned NumQst); -static void Tst_WriteIntAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res, +static void Tst_WriteIntAnsAssessTest (struct UsrData *UsrDat, + unsigned NumQst,MYSQL_RES *mysql_res, double *ScoreThisQst,bool *AnswerIsNotBlank); static void Tst_WriteFloatAnsViewTest (unsigned NumQst); -static void Tst_WriteFloatAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res, +static void Tst_WriteFloatAnsAssessTest (struct UsrData *UsrDat, + unsigned NumQst,MYSQL_RES *mysql_res, double *ScoreThisQst,bool *AnswerIsNotBlank); -static void Tst_WriteHeadUserCorrect (void); +static void Tst_WriteHeadUserCorrect (struct UsrData *UsrDat); static void Tst_WriteScoreStart (unsigned ColSpan); static void Tst_WriteScoreEnd (void); static void Tst_WriteParamQstCod (unsigned NumQst,long QstCod); @@ -579,7 +585,7 @@ void Tst_AssessTest (void) /***** Store test result in database *****/ Tst_StoreScoreOfTestResultInDB (TstCod, - NumQstsNotBlank,TotalScore); + NumQstsNotBlank,TotalScore); /***** Set test status *****/ Tst_SetTstStatus (NumTst,Tst_STATUS_ASSESSED); @@ -851,6 +857,7 @@ static void Tst_ShowTestQuestionsWhenSeeing (MYSQL_RES *mysql_res) Lay_ShowErrorAndExit ("Wrong code of question."); Tst_WriteQstAndAnsTest (Tst_SHOW_TEST_TO_ANSWER, + &Gbl.Usrs.Me.UsrDat, NULL,NumQst,QstCod,row, &ScoreThisQst, // Not used here &AnswerIsNotBlank); // Not used here @@ -953,7 +960,8 @@ static void Tst_ShowTestResultAfterAssess (long TstCod,unsigned *NumQstsNotBlank /***** Write question and answers *****/ Tst_WriteQstAndAnsTest (Tst_SHOW_TEST_RESULT, - NULL,NumQst,QstCod,row, + &Gbl.Usrs.Me.UsrDat, + NULL,NumQst,QstCod,row, &ScoreThisQst,&AnswerIsNotBlank); /***** Store test result question in database *****/ @@ -993,6 +1001,7 @@ static void Tst_ShowTestResultAfterAssess (long TstCod,unsigned *NumQstsNotBlank /*****************************************************************************/ void Tst_WriteQstAndAnsTest (Tst_ActionToDoWithQuestions_t ActionToDoWithQuestions, + struct UsrData *UsrDat, struct Game *Game, unsigned NumQst,long QstCod,MYSQL_ROW row, double *ScoreThisQst,bool *AnswerIsNotBlank) @@ -1046,7 +1055,7 @@ void Tst_WriteQstAndAnsTest (Tst_ActionToDoWithQuestions_t ActionToDoWithQuestio Tst_WriteAnswersTestToAnswer (NumQst,QstCod,(row[3][0] == 'Y')); break; case Tst_SHOW_TEST_RESULT: - Tst_WriteAnswersTestResult (NumQst,QstCod,ScoreThisQst,AnswerIsNotBlank); + Tst_WriteAnswersTestResult (UsrDat,NumQst,QstCod,ScoreThisQst,AnswerIsNotBlank); /* Write question feedback (row[5]) */ if (Gbl.Test.Config.Feedback == Tst_FEEDBACK_FULL_FEEDBACK) @@ -3351,7 +3360,7 @@ unsigned Tst_GetAnswersQst (long QstCod,MYSQL_RES **mysql_res,bool Shuffle) static void Tst_WriteAnswersEdit (long QstCod) { - extern const char *Txt_TEST_Correct_answer; + extern const char *Txt_TST_Answer_given_by_the_teachers; unsigned NumOpt; unsigned i; MYSQL_RES *mysql_res; @@ -3448,8 +3457,8 @@ static void Tst_WriteAnswersEdit (long QstCod) " alt=\"%s\" title=\"%s\"" " class=\"ICO20x20\" />", Gbl.Prefs.IconsURL, - Txt_TEST_Correct_answer, - Txt_TEST_Correct_answer); + Txt_TST_Answer_given_by_the_teachers, + Txt_TST_Answer_given_by_the_teachers); fprintf (Gbl.F.Out,""); /* Write the number of option */ @@ -3528,8 +3537,9 @@ static void Tst_WriteAnswersTestToAnswer (unsigned NumQst,long QstCod,bool Shuff /************* Write answers of a question when assessing a test *************/ /*****************************************************************************/ -static void Tst_WriteAnswersTestResult (unsigned NumQst,long QstCod, - double *ScoreThisQst,bool *AnswerIsNotBlank) +static void Tst_WriteAnswersTestResult (struct UsrData *UsrDat, + unsigned NumQst,long QstCod, + double *ScoreThisQst,bool *AnswerIsNotBlank) { MYSQL_RES *mysql_res; @@ -3548,20 +3558,21 @@ static void Tst_WriteAnswersTestResult (unsigned NumQst,long QstCod, switch (Gbl.Test.AnswerType) { case Tst_ANS_INT: - Tst_WriteIntAnsAssessTest (NumQst,mysql_res,ScoreThisQst,AnswerIsNotBlank); + Tst_WriteIntAnsAssessTest (UsrDat,NumQst,mysql_res,ScoreThisQst,AnswerIsNotBlank); break; case Tst_ANS_FLOAT: - Tst_WriteFloatAnsAssessTest (NumQst,mysql_res,ScoreThisQst,AnswerIsNotBlank); + + Tst_WriteFloatAnsAssessTest (UsrDat,NumQst,mysql_res,ScoreThisQst,AnswerIsNotBlank); break; case Tst_ANS_TRUE_FALSE: - Tst_WriteTFAnsAssessTest (NumQst,mysql_res,ScoreThisQst,AnswerIsNotBlank); + Tst_WriteTFAnsAssessTest (UsrDat,NumQst,mysql_res,ScoreThisQst,AnswerIsNotBlank); break; case Tst_ANS_UNIQUE_CHOICE: case Tst_ANS_MULTIPLE_CHOICE: - Tst_WriteChoiceAnsAssessTest (NumQst,mysql_res,ScoreThisQst,AnswerIsNotBlank); + Tst_WriteChoiceAnsAssessTest (UsrDat,NumQst,mysql_res,ScoreThisQst,AnswerIsNotBlank); break; case Tst_ANS_TEXT: - Tst_WriteTextAnsAssessTest (NumQst,mysql_res,ScoreThisQst,AnswerIsNotBlank); + Tst_WriteTextAnsAssessTest (UsrDat,NumQst,mysql_res,ScoreThisQst,AnswerIsNotBlank); break; default: break; @@ -3645,7 +3656,8 @@ void Tst_WriteAnsTF (char AnsTF) /************** Write false / true answer when assessing a test **************/ /*****************************************************************************/ -static void Tst_WriteTFAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res, +static void Tst_WriteTFAnsAssessTest (struct UsrData *UsrDat, + unsigned NumQst,MYSQL_RES *mysql_res, double *ScoreThisQst,bool *AnswerIsNotBlank) { MYSQL_ROW row; @@ -3684,7 +3696,7 @@ static void Tst_WriteTFAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res, /***** Header with the title of each column *****/ Tbl_StartTable (2); fprintf (Gbl.F.Out,""); - Tst_WriteHeadUserCorrect (); + Tst_WriteHeadUserCorrect (UsrDat); fprintf (Gbl.F.Out,""); /***** Write the user answer *****/ @@ -3694,12 +3706,12 @@ static void Tst_WriteTFAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res, Gbl.Test.Config.Feedback == Tst_FEEDBACK_FULL_FEEDBACK) ? (AnsTF == row[1][0] ? "ANS_OK" : "ANS_BAD") : - "ANS"); + "ANS_0"); Tst_WriteAnsTF (AnsTF); fprintf (Gbl.F.Out,""); /***** Write the correct answer *****/ - fprintf (Gbl.F.Out,""); + fprintf (Gbl.F.Out,""); if (Gbl.Test.Config.Feedback == Tst_FEEDBACK_EACH_GOOD_BAD || Gbl.Test.Config.Feedback == Tst_FEEDBACK_FULL_FEEDBACK) Tst_WriteAnsTF (row[1][0]); @@ -3715,7 +3727,7 @@ static void Tst_WriteTFAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res, { Tst_WriteScoreStart (2); if (AnsTF == '\0') // If user has omitted the answer - fprintf (Gbl.F.Out,"ANS\">%.2lf",0.0); + fprintf (Gbl.F.Out,"ANS_0\">%.2lf",0.0); else if (AnsTF == row[1][0]) // If correct fprintf (Gbl.F.Out,"ANS_OK\">%.2lf",1.0); else // If wrong @@ -3807,7 +3819,7 @@ static void Tst_WriteChoiceAnsViewTest (unsigned NumQst,long QstCod,bool Shuffle NumQst,NumOpt, NumQst,Index); fprintf (Gbl.F.Out,"" - "