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," | "
- " | ",
@@ -3816,7 +3828,7 @@ static void Tst_WriteChoiceAnsViewTest (unsigned NumQst,long QstCod,bool Shuffle
/***** Write the option text *****/
fprintf (Gbl.F.Out,""
- ""
+ ""
"%s"
"",
NumQst,NumOpt,
@@ -3839,11 +3851,12 @@ static void Tst_WriteChoiceAnsViewTest (unsigned NumQst,long QstCod,bool Shuffle
/******* Write single or multiple choice answer when assessing a test ********/
/*****************************************************************************/
-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)
{
- extern const char *Txt_TEST_User_answer;
- extern const char *Txt_TEST_Correct_answer;
+ extern const char *Txt_TST_Answer_given_by_the_user;
+ extern const char *Txt_TST_Answer_given_by_the_teachers;
unsigned NumOpt;
MYSQL_ROW row;
char StrOneIndex[10 + 1];
@@ -3851,6 +3864,11 @@ static void Tst_WriteChoiceAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res,
unsigned Indexes[Tst_MAX_OPTIONS_PER_QUESTION]; // Indexes of all answers of this question
int AnsUsr;
bool AnswersUsr[Tst_MAX_OPTIONS_PER_QUESTION];
+ struct
+ {
+ char *Class;
+ char *Str;
+ } Ans;
unsigned NumOptTotInQst = 0;
unsigned NumOptCorrInQst = 0;
unsigned NumAnsGood = 0;
@@ -3937,7 +3955,7 @@ static void Tst_WriteChoiceAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res,
/***** Start table *****/
Tbl_StartTable (2);
fprintf (Gbl.F.Out,"");
- Tst_WriteHeadUserCorrect ();
+ Tst_WriteHeadUserCorrect (UsrDat);
fprintf (Gbl.F.Out," | "
" | "
" ");
@@ -3947,49 +3965,59 @@ static void Tst_WriteChoiceAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res,
NumOpt < Gbl.Test.Answer.NumOptions;
NumOpt++)
{
+ fprintf (Gbl.F.Out,"");
+
/* Draw icon depending on user's answer */
- fprintf (Gbl.F.Out," "
- "");
if (AnswersUsr[Indexes[NumOpt]] == true) // This answer has been selected by the user
- fprintf (Gbl.F.Out,"",
- Gbl.Prefs.IconsURL,
- (Gbl.Test.Config.Feedback == Tst_FEEDBACK_EACH_GOOD_BAD ||
- Gbl.Test.Config.Feedback == Tst_FEEDBACK_FULL_FEEDBACK) ?
- (Gbl.Test.Answer.Options[Indexes[NumOpt]].Correct ? "ok_green" :
- "ok_red") :
- "ok_on",
- Txt_TEST_User_answer,
- Txt_TEST_User_answer);
- fprintf (Gbl.F.Out," | ");
+ {
+ if (Gbl.Test.Config.Feedback == Tst_FEEDBACK_EACH_GOOD_BAD ||
+ Gbl.Test.Config.Feedback == Tst_FEEDBACK_FULL_FEEDBACK)
+ {
+ if (Gbl.Test.Answer.Options[Indexes[NumOpt]].Correct)
+ {
+ Ans.Class = "ANS_OK";
+ Ans.Str = "✓";
+ }
+ else
+ {
+ Ans.Class = "ANS_BAD";
+ Ans.Str = "✗";
+ }
+ }
+ else
+ {
+ Ans.Class = "ANS_0";
+ Ans.Str = "•";
+ }
+ fprintf (Gbl.F.Out,"%s | ",
+ Ans.Class,Txt_TST_Answer_given_by_the_user,Ans.Str);
+ }
+ else // This answer has NOT been selected by the user
+ fprintf (Gbl.F.Out," | ");
/* Draw icon that indicates whether the answer is correct */
- fprintf (Gbl.F.Out,"");
+
if (Gbl.Test.Config.Feedback == Tst_FEEDBACK_EACH_GOOD_BAD ||
Gbl.Test.Config.Feedback == Tst_FEEDBACK_FULL_FEEDBACK)
{
if (Gbl.Test.Answer.Options[Indexes[NumOpt]].Correct)
- fprintf (Gbl.F.Out,"",
- Gbl.Prefs.IconsURL,
- Txt_TEST_Correct_answer,
- Txt_TEST_Correct_answer);
+ fprintf (Gbl.F.Out," | • | ",
+ Txt_TST_Answer_given_by_the_teachers);
+ else
+ fprintf (Gbl.F.Out," | ");
}
else
- fprintf (Gbl.F.Out,"?");
- fprintf (Gbl.F.Out,"");
+ fprintf (Gbl.F.Out,"? | ");
/* Answer letter (a, b, c,...) */
- fprintf (Gbl.F.Out,""
+ fprintf (Gbl.F.Out," | "
"%c) "
" | ",
'a' + (char) NumOpt);
/* Answer text and feedback */
fprintf (Gbl.F.Out,""
- ""
+ " "
"%s",
Gbl.Test.Answer.Options[Indexes[NumOpt]].Text);
Img_ShowImage (&Gbl.Test.Answer.Options[Indexes[NumOpt]].Image,
@@ -4062,7 +4090,7 @@ static void Tst_WriteChoiceAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res,
{
Tst_WriteScoreStart (4);
if (*ScoreThisQst == 0.0)
- fprintf (Gbl.F.Out,"ANS");
+ fprintf (Gbl.F.Out,"ANS_0");
else if (*ScoreThisQst > 0.0)
fprintf (Gbl.F.Out,"ANS_OK");
else
@@ -4198,7 +4226,8 @@ static void Tst_WriteTextAnsViewTest (unsigned NumQst)
/***************** Write text answer when assessing a test *******************/
/*****************************************************************************/
-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)
{
unsigned NumOpt;
@@ -4253,12 +4282,12 @@ static void Tst_WriteTextAnsAssessTest (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 *****/
fprintf (Gbl.F.Out," "
- ""
- " %s ",
+ fprintf (Gbl.F.Out," class=\"%s CENTER_TOP\">"
+ "%s",
(Gbl.Test.Config.Feedback == Tst_FEEDBACK_EACH_GOOD_BAD ||
Gbl.Test.Config.Feedback == Tst_FEEDBACK_FULL_FEEDBACK) ?
(Correct ? "ANS_OK" :
"ANS_BAD") :
- "ANS",
+ "ANS_0",
Gbl.Test.StrAnswersOneQst[NumQst]);
}
else // If user has omitted the answer
- fprintf (Gbl.F.Out,"ANS CENTER_TOP\">"
- " ");
+ fprintf (Gbl.F.Out,">");
fprintf (Gbl.F.Out," | ");
/***** Write the correct answers *****/
@@ -4313,14 +4341,14 @@ static void Tst_WriteTextAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res,
NumOpt++)
{
/* Answer letter (a, b, c,...) */
- fprintf (Gbl.F.Out,""
+ fprintf (Gbl.F.Out," | "
"%c) "
" | ",
'a' + (char) NumOpt);
/* Answer text and feedback */
fprintf (Gbl.F.Out,""
- ""
+ " "
"%s"
" ",
Gbl.Test.Answer.Options[NumOpt].Text);
@@ -4338,7 +4366,7 @@ static void Tst_WriteTextAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res,
Tbl_EndTable ();
}
else
- fprintf (Gbl.F.Out," "
+ fprintf (Gbl.F.Out," | "
"?");
fprintf (Gbl.F.Out," | "
" | ");
@@ -4365,7 +4393,7 @@ static void Tst_WriteTextAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res,
{
Tst_WriteScoreStart (4);
if (!Gbl.Test.StrAnswersOneQst[NumQst][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 (Correct) // If correct
fprintf (Gbl.F.Out,"ANS_OK\">%.2lf",1.0);
else // If wrong
@@ -4392,7 +4420,8 @@ static void Tst_WriteIntAnsViewTest (unsigned NumQst)
/**************** Write integer answer when assessing a test *****************/
/*****************************************************************************/
-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)
{
MYSQL_ROW row;
@@ -4418,39 +4447,39 @@ static void Tst_WriteIntAnsAssessTest (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 *****/
fprintf (Gbl.F.Out," "
- ""
- " %ld ",
+ fprintf (Gbl.F.Out," class=\"%s CENTER_MIDDLE\">"
+ "%ld",
(Gbl.Test.Config.Feedback == Tst_FEEDBACK_EACH_GOOD_BAD ||
Gbl.Test.Config.Feedback == Tst_FEEDBACK_FULL_FEEDBACK) ?
(IntAnswerUsr == IntAnswerCorr ? "ANS_OK" :
"ANS_BAD") :
- "ANS",
+ "ANS_0",
IntAnswerUsr);
else
{
Gbl.Test.StrAnswersOneQst[NumQst][0] = '\0';
- fprintf (Gbl.F.Out,"ANS CENTER_MIDDLE\">"
+ fprintf (Gbl.F.Out," class=\"ANS_0 CENTER_MIDDLE\">"
"?");
}
}
else // If user has omitted the answer
- fprintf (Gbl.F.Out,"ANS CENTER_MIDDLE\"> ");
+ fprintf (Gbl.F.Out,">");
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)
- fprintf (Gbl.F.Out," %ld ",IntAnswerCorr);
+ fprintf (Gbl.F.Out,"%ld",IntAnswerCorr);
else
fprintf (Gbl.F.Out,"?");
fprintf (Gbl.F.Out," | "
@@ -4478,7 +4507,7 @@ static void Tst_WriteIntAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res,
{
Tst_WriteScoreStart (2);
if (!Gbl.Test.StrAnswersOneQst[NumQst][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 (IntAnswerUsr == IntAnswerCorr) // If correct
fprintf (Gbl.F.Out,"ANS_OK\">%.2lf",1.0);
else // If wrong
@@ -4505,7 +4534,8 @@ static void Tst_WriteFloatAnsViewTest (unsigned NumQst)
/***************** Write float answer when assessing a test ******************/
/*****************************************************************************/
-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)
{
MYSQL_ROW row;
@@ -4544,36 +4574,36 @@ static void Tst_WriteFloatAnsAssessTest (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 *****/
fprintf (Gbl.F.Out," "
- " %lg ",
+ fprintf (Gbl.F.Out," class=\"%s CENTER_MIDDLE\">%lg",
(Gbl.Test.Config.Feedback == Tst_FEEDBACK_EACH_GOOD_BAD ||
Gbl.Test.Config.Feedback == Tst_FEEDBACK_FULL_FEEDBACK) ?
((FloatAnsUsr >= FloatAnsCorr[0] &&
FloatAnsUsr <= FloatAnsCorr[1]) ? "ANS_OK" :
"ANS_BAD") :
- "ANS",
+ "ANS_0",
FloatAnsUsr);
else // Not a floating point number
- fprintf (Gbl.F.Out,"ANS CENTER_MIDDLE\">?");
+ fprintf (Gbl.F.Out," class=\"ANS_0 CENTER_MIDDLE\">?");
}
else // If user has omitted the answer
- fprintf (Gbl.F.Out,"ANS CENTER_MIDDLE\"> ");
+ fprintf (Gbl.F.Out,">");
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)
- fprintf (Gbl.F.Out," [%lg; %lg] ",FloatAnsCorr[0],FloatAnsCorr[1]);
+ fprintf (Gbl.F.Out,"[%lg; %lg]",FloatAnsCorr[0],FloatAnsCorr[1]);
else
fprintf (Gbl.F.Out,"?");
fprintf (Gbl.F.Out," | "
@@ -4602,7 +4632,7 @@ static void Tst_WriteFloatAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res,
{
Tst_WriteScoreStart (2);
if (!Gbl.Test.StrAnswersOneQst[NumQst][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 (FloatAnsUsr >= FloatAnsCorr[0] &&
FloatAnsUsr <= FloatAnsCorr[1]) // If correct (inside the interval)
fprintf (Gbl.F.Out,"ANS_OK\">%.2lf",1.0);
@@ -4619,18 +4649,19 @@ static void Tst_WriteFloatAnsAssessTest (unsigned NumQst,MYSQL_RES *mysql_res,
/********* one for the user's answer and other for the correct answer ********/
/*****************************************************************************/
-static void Tst_WriteHeadUserCorrect (void)
+static void Tst_WriteHeadUserCorrect (struct UsrData *UsrDat)
{
extern const char *Txt_User[Usr_NUM_SEXS];
- extern const char *Txt_TST_Correct_ANSWER;
+ extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
fprintf (Gbl.F.Out,""
- " %s "
+ "%s"
" | "
""
- " %s "
+ "%s"
" | ",
- Txt_User[Usr_SEX_UNKNOWN],Txt_TST_Correct_ANSWER);
+ Txt_User[UsrDat->Sex],
+ Txt_ROLES_PLURAL_Abc[Rol_TCH][Usr_SEX_UNKNOWN]);
}
/*****************************************************************************/
@@ -8422,7 +8453,8 @@ static void Tst_ShowTestResult (time_t TstTimeUTC)
/***** Write questions and answers *****/
Tst_WriteQstAndAnsTest (Tst_SHOW_TEST_RESULT,
- NULL,NumQst,QstCod,row,
+ &Gbl.Usrs.Other.UsrDat,
+ NULL,NumQst,QstCod,row,
&ScoreThisQst, // Not used here
&AnswerIsNotBlank); // Not used here
}
diff --git a/swad_test.h b/swad_test.h
index 1bf7f1c98..3cfe1bfc8 100644
--- a/swad_test.h
+++ b/swad_test.h
@@ -144,6 +144,7 @@ void Tst_ShowNewTest (void);
void Tst_AssessTest (void);
void Tst_WriteQstAndAnsTest (Tst_ActionToDoWithQuestions_t ActionToDoWithQuestions,
+ struct UsrData *UsrDat,
struct Game *Game,
unsigned NumQst,long QstCod,MYSQL_ROW row,
double *ScoreThisQst,bool *AnswerIsNotBlank);
diff --git a/swad_test_import.c b/swad_test_import.c
index c1a7bdd98..73242441c 100644
--- a/swad_test_import.c
+++ b/swad_test_import.c
@@ -1003,7 +1003,7 @@ static void TsI_WriteRowImportedQst (struct XMLElement *StemElem,
extern const char *Txt_New_question;
extern const char *Txt_no_tags;
extern const char *Txt_TST_STR_ANSWER_TYPES[Tst_NUM_ANS_TYPES];
- extern const char *Txt_TEST_Correct_answer;
+ extern const char *Txt_TST_Answer_given_by_the_teachers;
static unsigned NumQst = 0;
static unsigned NumNonExistingQst = 0;
const char *Stem = (StemElem != NULL) ? StemElem->Content :
@@ -1095,8 +1095,8 @@ static void TsI_WriteRowImportedQst (struct XMLElement *StemElem,
Gbl.Prefs.IconsURL,
QuestionExists ? "ok_off" :
"ok_on",
- 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 stem and the answers *****/
@@ -1164,8 +1164,8 @@ static void TsI_WriteRowImportedQst (struct XMLElement *StemElem,
Gbl.Prefs.IconsURL,
QuestionExists ? "ok_off" :
"ok_on",
- 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 */
diff --git a/swad_text.c b/swad_text.c
index 6d4993c2a..0a3a394e6 100644
--- a/swad_text.c
+++ b/swad_text.c
@@ -42771,48 +42771,6 @@ const char *Txt_Test =
"Teste";
#endif
-const char *Txt_TEST_Correct_answer =
-#if L==1 // ca
- "Resposta correcta";
-#elif L==2 // de
- "Correct answer"; // Need Übersetzung
-#elif L==3 // en
- "Correct answer";
-#elif L==4 // es
- "Respuesta correcta";
-#elif L==5 // fr
- "Correct answer"; // Besoin de traduction
-#elif L==6 // gn
- "Respuesta correcta"; // Okoteve traducción
-#elif L==7 // it
- "Risposta corretta";
-#elif L==8 // pl
- "Prawidlowa odpowiedz";
-#elif L==9 // pt
- "Correct answer"; // Necessita de tradução
-#endif
-
-const char *Txt_TEST_User_answer =
-#if L==1 // ca
- "Resposta usuari";
-#elif L==2 // de
- "User's answer"; // Need Übersetzung
-#elif L==3 // en
- "User's answer";
-#elif L==4 // es
- "Respuesta usuario";
-#elif L==5 // fr
- "User's answer"; // Besoin de traduction
-#elif L==6 // gn
- "Respuesta usuario"; // Okoteve traducción
-#elif L==7 // it
- "Risposta utente";
-#elif L==8 // pl
- "User's answer"; // Potrzebujesz tlumaczenie
-#elif L==9 // pt
- "User's answer"; // Necessita de tradução
-#endif
-
const char *Txt_Test_No_X_that_you_make_in_this_course = // Warning: it is very important to include %u in the following sentences
#if L==1 // ca
"Test nº %u que realiza usted en esta asignatura"; // Necessita traduccio
@@ -49467,25 +49425,46 @@ const char *Txt_Total_BR_score =
"Pontuação total";
#endif
-const char *Txt_TST_Correct_ANSWER =
+const char *Txt_TST_Answer_given_by_the_teachers =
#if L==1 // ca
- "Correcta";
+ "Resposta donada pels professors";
#elif L==2 // de
- "Richtige";
+ "Antwort von den Lehrern";
#elif L==3 // en
- "Correct";
+ "Answer given by the teachers";
#elif L==4 // es
- "Correcta";
+ "Respuesta dada por los profesores";
#elif L==5 // fr
- "Bonne";
+ "Réponse donnée par les professeurs";
#elif L==6 // gn
- "Correcta"; // Okoteve traducción
+ "Respuesta dada por los profesores"; // Okoteve traducción
#elif L==7 // it
- "Corretta";
+ "Risposta fornita dagli insegnanti";
#elif L==8 // pl
- "Poprawna";
+ "Odpowiedź udzielona przez nauczycieli";
#elif L==9 // pt
- "Correta";
+ "Resposta dada pelos professores";
+#endif
+
+const char *Txt_TST_Answer_given_by_the_user =
+#if L==1 // ca
+ "Resposta donada per l'usuari/a";
+#elif L==2 // de
+ "Antwort vom Benutzer";
+#elif L==3 // en
+ "Answer given by the user";
+#elif L==4 // es
+ "Respuesta dada por el usuario/a";
+#elif L==5 // fr
+ "Réponse donnée par l'utilisateur/se";
+#elif L==6 // gn
+ "Respuesta dada por el usuario/a"; // Okoteve traducción
+#elif L==7 // it
+ "Risposta fornita dall'utente";
+#elif L==8 // pl
+ "Odpowiedź udzielona przez użytkownika";
+#elif L==9 // pt
+ "Resposta dada pelo usuário/a";
#endif
const char *Txt_TST_PLUGGABLE[Tst_NUM_OPTIONS_PLUGGABLE] =
| |