mirror of https://github.com/acanas/swad-core.git
Version19.253
This commit is contained in:
parent
4838c07663
commit
4ab83769be
|
@ -2400,11 +2400,24 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;}
|
||||||
.DAT_N_BOLD {color:black; font-size:13pt; font-weight:bold;}
|
.DAT_N_BOLD {color:black; font-size:13pt; font-weight:bold;}
|
||||||
|
|
||||||
/*********************** Line in top part of a table row *********************/
|
/*********************** Line in top part of a table row *********************/
|
||||||
.DAT_N_LINE_TOP
|
.LINE_TOP
|
||||||
{
|
{
|
||||||
color:black;
|
border-top-style:solid;
|
||||||
font-size:13pt;
|
border-width:1px;
|
||||||
border-style:solid none none none;
|
}
|
||||||
|
.LINE_BOTTOM
|
||||||
|
{
|
||||||
|
border-bottom-style:solid;
|
||||||
|
border-width:1px;
|
||||||
|
}
|
||||||
|
.LINE_LEFT
|
||||||
|
{
|
||||||
|
border-left-style:solid;
|
||||||
|
border-width:1px;
|
||||||
|
}
|
||||||
|
.LINE_RIGHT
|
||||||
|
{
|
||||||
|
border-right-style:solid;
|
||||||
border-width:1px;
|
border-width:1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4216,6 +4229,10 @@ a.PAG:hover, .PAG_CUR
|
||||||
}
|
}
|
||||||
|
|
||||||
/************ Something that takes up space but which is invisible ***********/
|
/************ Something that takes up space but which is invisible ***********/
|
||||||
|
.LIGHT
|
||||||
|
{
|
||||||
|
opacity:0.2;
|
||||||
|
}
|
||||||
.HIDDEN
|
.HIDDEN
|
||||||
{
|
{
|
||||||
visibility:hidden;
|
visibility:hidden;
|
21
swad_HTML.c
21
swad_HTML.c
|
@ -344,34 +344,34 @@ void HTM_TH_Begin (unsigned RowSpan,unsigned ColSpan,const char *Class)
|
||||||
{
|
{
|
||||||
if (Class)
|
if (Class)
|
||||||
HTM_TH_BeginAttr ("rowspan=\"%u\" colspan=\"%u\" class=\"%s\"",
|
HTM_TH_BeginAttr ("rowspan=\"%u\" colspan=\"%u\" class=\"%s\"",
|
||||||
RowSpan,ColSpan,Class);
|
RowSpan,ColSpan,Class);
|
||||||
else
|
else
|
||||||
HTM_TH_BeginAttr ("rowspan=\"%u\" colspan=\"%u\"",
|
HTM_TH_BeginAttr ("rowspan=\"%u\" colspan=\"%u\"",
|
||||||
RowSpan,ColSpan);
|
RowSpan,ColSpan);
|
||||||
}
|
}
|
||||||
else if (RowSpan > 1)
|
else if (RowSpan > 1)
|
||||||
{
|
{
|
||||||
if (Class)
|
if (Class)
|
||||||
HTM_TH_BeginAttr ("rowspan=\"%u\" class=\"%s\"",
|
HTM_TH_BeginAttr ("rowspan=\"%u\" class=\"%s\"",
|
||||||
RowSpan,Class);
|
RowSpan,Class);
|
||||||
else
|
else
|
||||||
HTM_TH_BeginAttr ("rowspan=\"%u\"",
|
HTM_TH_BeginAttr ("rowspan=\"%u\"",
|
||||||
RowSpan);
|
RowSpan);
|
||||||
}
|
}
|
||||||
else if (ColSpan > 1)
|
else if (ColSpan > 1)
|
||||||
{
|
{
|
||||||
if (Class)
|
if (Class)
|
||||||
HTM_TH_BeginAttr ("colspan=\"%u\" class=\"%s\"",
|
HTM_TH_BeginAttr ("colspan=\"%u\" class=\"%s\"",
|
||||||
ColSpan,Class);
|
ColSpan,Class);
|
||||||
else
|
else
|
||||||
HTM_TH_BeginAttr ("colspan=\"%u\"",
|
HTM_TH_BeginAttr ("colspan=\"%u\"",
|
||||||
ColSpan);
|
ColSpan);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (Class)
|
if (Class)
|
||||||
HTM_TH_BeginAttr ("class=\"%s\"",
|
HTM_TH_BeginAttr ("class=\"%s\"",
|
||||||
Class);
|
Class);
|
||||||
else
|
else
|
||||||
HTM_TH_BeginWithoutAttr ();
|
HTM_TH_BeginWithoutAttr ();
|
||||||
}
|
}
|
||||||
|
@ -1827,6 +1827,13 @@ void HTM_Unsigned (unsigned Num)
|
||||||
HTM_TxtF ("%u",Num);
|
HTM_TxtF ("%u",Num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HTM_Light0 (void)
|
||||||
|
{
|
||||||
|
HTM_SPAN_Begin ("class=\"LIGHT\"");
|
||||||
|
HTM_Txt ("0");
|
||||||
|
HTM_SPAN_End ();
|
||||||
|
}
|
||||||
|
|
||||||
void HTM_Int (int Num)
|
void HTM_Int (int Num)
|
||||||
{
|
{
|
||||||
HTM_TxtF ("%d",Num);
|
HTM_TxtF ("%d",Num);
|
||||||
|
|
|
@ -193,6 +193,7 @@ void HTM_Comma (void);
|
||||||
void HTM_Hyphen (void);
|
void HTM_Hyphen (void);
|
||||||
void HTM_Asterisk (void);
|
void HTM_Asterisk (void);
|
||||||
void HTM_Unsigned (unsigned Num);
|
void HTM_Unsigned (unsigned Num);
|
||||||
|
void HTM_Light0 (void);
|
||||||
void HTM_Int (int Num);
|
void HTM_Int (int Num);
|
||||||
void HTM_UnsignedLong (unsigned long Num);
|
void HTM_UnsignedLong (unsigned long Num);
|
||||||
void HTM_Long (long Num);
|
void HTM_Long (long Num);
|
||||||
|
|
|
@ -3356,7 +3356,7 @@ static void Att_ListUsrsAttendanceTable (const struct Att_Events *Events,
|
||||||
{
|
{
|
||||||
HTM_TR_Begin (NULL);
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
HTM_TD_Begin ("colspan=\"%u\" class=\"DAT_N_LINE_TOP RM\"",
|
HTM_TD_Begin ("colspan=\"%u\" class=\"DAT_N LINE_TOP RM\"",
|
||||||
Gbl.Usrs.Listing.WithPhotos ? 4 :
|
Gbl.Usrs.Listing.WithPhotos ? 4 :
|
||||||
3);
|
3);
|
||||||
HTM_TxtColon (Txt_Number_of_users);
|
HTM_TxtColon (Txt_Number_of_users);
|
||||||
|
@ -3367,14 +3367,14 @@ static void Att_ListUsrsAttendanceTable (const struct Att_Events *Events,
|
||||||
NumAttEvent++)
|
NumAttEvent++)
|
||||||
if (Events->Lst[NumAttEvent].Selected)
|
if (Events->Lst[NumAttEvent].Selected)
|
||||||
{
|
{
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Unsigned (Events->Lst[NumAttEvent].NumStdsFromList);
|
HTM_Unsigned (Events->Lst[NumAttEvent].NumStdsFromList);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
Total += Events->Lst[NumAttEvent].NumStdsFromList;
|
Total += Events->Lst[NumAttEvent].NumStdsFromList;
|
||||||
}
|
}
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Unsigned (Total);
|
HTM_Unsigned (Total);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
|
|
@ -556,8 +556,8 @@ 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.252.1 (2020-06-19)"
|
#define Log_PLATFORM_VERSION "SWAD 19.253 (2020-06-22)"
|
||||||
#define CSS_FILE "swad19.250.css"
|
#define CSS_FILE "swad19.253.css"
|
||||||
#define JS_FILE "swad19.246.1.js"
|
#define JS_FILE "swad19.246.1.js"
|
||||||
/*
|
/*
|
||||||
TODO: Encarnación Hidalgo Tenorio: Antonio, ¿podría @swad_ugr mandar una notificación cuando el alumnado ha mandado su tarea?
|
TODO: Encarnación Hidalgo Tenorio: Antonio, ¿podría @swad_ugr mandar una notificación cuando el alumnado ha mandado su tarea?
|
||||||
|
@ -569,6 +569,7 @@ TODO: Que al generar un examen s
|
||||||
TODO: Refactorizar MchRes_CheckIfICanSeeMatchResult y MchRes_CheckIfICanViewScore uniéndolas en una función como ExaRes_CheckIfICanSeePrintResult
|
TODO: Refactorizar MchRes_CheckIfICanSeeMatchResult y MchRes_CheckIfICanViewScore uniéndolas en una función como ExaRes_CheckIfICanSeePrintResult
|
||||||
Y dentro de las funciones TstPrn_ShowUsrPrints y TstPrn_ShowOnePrint crear y llamar a una función común similar a ExaRes_CheckIfICanSeePrintResult
|
Y dentro de las funciones TstPrn_ShowUsrPrints y TstPrn_ShowOnePrint crear y llamar a una función común similar a ExaRes_CheckIfICanSeePrintResult
|
||||||
|
|
||||||
|
Version 19.253: Jun 22, 2020 More details in listing of exams. (303643 lines)
|
||||||
Version 19.252.1: Jun 19, 2020 Changes in listing of exams and matches results. (303245 lines)
|
Version 19.252.1: Jun 19, 2020 Changes in listing of exams and matches results. (303245 lines)
|
||||||
Version 19.252: Jun 19, 2020 Fixed bug in exam results, reported by Francisco Ligero Ligero. (303243 lines)
|
Version 19.252: Jun 19, 2020 Fixed bug in exam results, reported by Francisco Ligero Ligero. (303243 lines)
|
||||||
Version 19.251: Jun 18, 2020 Changes in test, exam and match results. (303263 lines)
|
Version 19.251: Jun 18, 2020 Changes in test, exam and match results. (303263 lines)
|
||||||
|
|
|
@ -162,12 +162,17 @@ static void ExaPrn_ResetPrintExceptEvtCodAndUsrCod (struct ExaPrn_Print *Print)
|
||||||
Print->PrnCod = -1L;
|
Print->PrnCod = -1L;
|
||||||
Print->TimeUTC[Dat_START_TIME] =
|
Print->TimeUTC[Dat_START_TIME] =
|
||||||
Print->TimeUTC[Dat_END_TIME ] = (time_t) 0;
|
Print->TimeUTC[Dat_END_TIME ] = (time_t) 0;
|
||||||
Print->NumQsts.All =
|
|
||||||
Print->NumQsts.Valid =
|
|
||||||
Print->NumQsts.NotBlank = 0;
|
|
||||||
Print->Sent = false; // After creating an exam print, it's not sent
|
Print->Sent = false; // After creating an exam print, it's not sent
|
||||||
Print->Score.All =
|
Print->NumQsts.All =
|
||||||
Print->Score.Valid = 0.0;
|
Print->NumQsts.NotBlank =
|
||||||
|
Print->NumQsts.Valid.Correct =
|
||||||
|
Print->NumQsts.Valid.Wrong.Negative =
|
||||||
|
Print->NumQsts.Valid.Wrong.Zero =
|
||||||
|
Print->NumQsts.Valid.Wrong.Positive =
|
||||||
|
Print->NumQsts.Valid.Blank =
|
||||||
|
Print->NumQsts.Valid.Total = 0;
|
||||||
|
Print->Score.All =
|
||||||
|
Print->Score.Valid = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -1426,9 +1431,10 @@ static void ExaPrn_GetNumQstsNotBlank (struct ExaPrn_Print *Print)
|
||||||
/***** Count number of questions not blank in exam print in database *****/
|
/***** Count number of questions not blank in exam print in database *****/
|
||||||
Print->NumQsts.NotBlank = (unsigned)
|
Print->NumQsts.NotBlank = (unsigned)
|
||||||
DB_QueryCOUNT ("can not get number of questions not blank",
|
DB_QueryCOUNT ("can not get number of questions not blank",
|
||||||
"SELECT COUNT(*) FROM exa_print_questions"
|
"SELECT COUNT(*)"
|
||||||
" WHERE PrnCod=%ld AND Answers<>''",
|
" FROM exa_print_questions"
|
||||||
Print->PrnCod);
|
" WHERE PrnCod=%ld AND Answers<>''",
|
||||||
|
Print->PrnCod);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -38,8 +38,19 @@
|
||||||
struct ExaPrn_NumQuestions
|
struct ExaPrn_NumQuestions
|
||||||
{
|
{
|
||||||
unsigned All; // Total number of questions
|
unsigned All; // Total number of questions
|
||||||
unsigned Valid; // Number of valid questions (not invalidated by teachers)
|
unsigned NotBlank; // Answered questions (valid or not)
|
||||||
unsigned NotBlank; // Number of answered questions (not blank)
|
struct
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
unsigned Negative;
|
||||||
|
unsigned Zero;
|
||||||
|
unsigned Positive;
|
||||||
|
} Wrong;
|
||||||
|
unsigned Correct;
|
||||||
|
unsigned Blank;
|
||||||
|
unsigned Total;
|
||||||
|
} Valid; // Number of valid questions
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExaPrn_Score
|
struct ExaPrn_Score
|
||||||
|
|
|
@ -112,7 +112,6 @@ static void ExaRes_ShowResultsSummaryRow (unsigned NumResults,
|
||||||
const struct ExaPrn_NumQuestions *NumTotalQsts,
|
const struct ExaPrn_NumQuestions *NumTotalQsts,
|
||||||
const struct ExaPrn_Score *TotalScore,
|
const struct ExaPrn_Score *TotalScore,
|
||||||
double TotalGrade);
|
double TotalGrade);
|
||||||
static void ExaRes_ShowNumQsts (const struct ExaPrn_NumQuestions *NumQsts);
|
|
||||||
|
|
||||||
static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
|
static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
|
||||||
const struct ExaSes_Session *Session,
|
const struct ExaSes_Session *Session,
|
||||||
|
@ -583,7 +582,7 @@ static void ExaRes_ShowResultsBegin (struct Exa_Exams *Exams,
|
||||||
|
|
||||||
/***** Begin session results table *****/
|
/***** Begin session results table *****/
|
||||||
HTM_SECTION_Begin (ExaRes_RESULTS_TABLE_ID);
|
HTM_SECTION_Begin (ExaRes_RESULTS_TABLE_ID);
|
||||||
HTM_TABLE_BeginWidePadding (2);
|
HTM_TABLE_BeginWidePadding (5);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ExaRes_ShowResultsEnd (void)
|
static void ExaRes_ShowResultsEnd (void)
|
||||||
|
@ -703,24 +702,57 @@ static void ExaRes_ShowHeaderResults (Usr_MeOrOther_t MeOrOther)
|
||||||
extern const char *Txt_Session;
|
extern const char *Txt_Session;
|
||||||
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
||||||
extern const char *Txt_Questions;
|
extern const char *Txt_Questions;
|
||||||
extern const char *Txt_Non_blank_BR_questions;
|
extern const char *Txt_Valid_answers;
|
||||||
extern const char *Txt_Score;
|
extern const char *Txt_Score;
|
||||||
extern const char *Txt_Average_BR_score_BR_per_question_BR_less_than_or_equal_to_1;
|
|
||||||
extern const char *Txt_Grade;
|
extern const char *Txt_Grade;
|
||||||
|
extern const char *Txt_total;
|
||||||
|
extern const char *Txt_QUESTIONS_valid;
|
||||||
|
extern const char *Txt_QUESTIONS_invalid;
|
||||||
|
extern const char *Txt_correct_ANSWERS;
|
||||||
|
extern const char *Txt_wrong_ANSWERS;
|
||||||
|
extern const char *Txt_blank_ANSWERS;
|
||||||
|
extern const char *Txt_average;
|
||||||
|
|
||||||
|
/***** First row *****/
|
||||||
HTM_TR_Begin (NULL);
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
HTM_TH (1,2,"CT",Txt_User[MeOrOther == Usr_ME ? Gbl.Usrs.Me.UsrDat.Sex :
|
HTM_TH (3,2,"CT",Txt_User[MeOrOther == Usr_ME ? Gbl.Usrs.Me.UsrDat.Sex :
|
||||||
Usr_SEX_UNKNOWN]);
|
Usr_SEX_UNKNOWN]);
|
||||||
HTM_TH (1,1,"LT",Txt_START_END_TIME[Dat_START_TIME]);
|
HTM_TH (3,1,"LT",Txt_START_END_TIME[Dat_START_TIME]);
|
||||||
HTM_TH (1,1,"LT",Txt_START_END_TIME[Dat_END_TIME ]);
|
HTM_TH (3,1,"LT",Txt_START_END_TIME[Dat_END_TIME ]);
|
||||||
HTM_TH (1,1,"LT",Txt_Session);
|
HTM_TH (3,1,"LT",Txt_Session);
|
||||||
HTM_TH (1,1,"RT",Txt_Questions);
|
HTM_TH (1,3,"CT LINE_LEFT",Txt_Questions);
|
||||||
HTM_TH (1,1,"RT",Txt_Non_blank_BR_questions);
|
HTM_TH (1,5,"CT LINE_LEFT",Txt_Valid_answers);
|
||||||
HTM_TH (1,1,"RT",Txt_Score);
|
HTM_TH (1,2,"CT LINE_LEFT",Txt_Score);
|
||||||
HTM_TH (1,1,"RT",Txt_Average_BR_score_BR_per_question_BR_less_than_or_equal_to_1);
|
HTM_TH (3,1,"RT LINE_LEFT",Txt_Grade);
|
||||||
HTM_TH (1,1,"RT",Txt_Grade);
|
HTM_TH (3,1,"LINE_LEFT",NULL);
|
||||||
HTM_TH_Empty (1);
|
|
||||||
|
HTM_TR_End ();
|
||||||
|
|
||||||
|
/***** Second row *****/
|
||||||
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
|
HTM_TH (2,1,"RT LINE_LEFT",Txt_total);
|
||||||
|
HTM_TH (2,1,"RT",Txt_QUESTIONS_valid);
|
||||||
|
HTM_TH (2,1,"RT",Txt_QUESTIONS_invalid);
|
||||||
|
HTM_TH (1,1,"RT LINE_LEFT",Txt_correct_ANSWERS);
|
||||||
|
HTM_TH (1,3,"CT",Txt_wrong_ANSWERS);
|
||||||
|
HTM_TH (1,1,"RT",Txt_blank_ANSWERS);
|
||||||
|
HTM_TH (1,1,"RT LINE_LEFT",Txt_total);
|
||||||
|
HTM_TH (1,1,"RT",Txt_average);
|
||||||
|
|
||||||
|
HTM_TR_End ();
|
||||||
|
|
||||||
|
/***** Third row *****/
|
||||||
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
|
HTM_TH (1,1,"RT LINE_LEFT","<em>p<sub>i</sub></em>=1");
|
||||||
|
HTM_TH (1,1,"RT","-1≤<em>p<sub>i</sub></em><0");
|
||||||
|
HTM_TH (1,1,"RT","<em>p<sub>i</sub></em>=0");
|
||||||
|
HTM_TH (1,1,"RT","0<<em>p<sub>i</sub></em><1");
|
||||||
|
HTM_TH (1,1,"RT","<em>p<sub>i</sub></em>=0");
|
||||||
|
HTM_TH (1,1,"RT LINE_LEFT","<em>Σp<sub>i</sub></em>");
|
||||||
|
HTM_TH (1,1,"RT","-1≤<em style=\"text-decoration:overline;\">p</em>≤1");
|
||||||
|
|
||||||
HTM_TR_End ();
|
HTM_TR_End ();
|
||||||
}
|
}
|
||||||
|
@ -783,6 +815,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
|
||||||
struct ExaSes_Session Session;
|
struct ExaSes_Session Session;
|
||||||
struct Exa_Exam Exam;
|
struct Exa_Exam Exam;
|
||||||
Dat_StartEndTime_t StartEndTime;
|
Dat_StartEndTime_t StartEndTime;
|
||||||
|
unsigned NumQstsInvalid;
|
||||||
struct ExaPrn_NumQuestions NumTotalQsts;
|
struct ExaPrn_NumQuestions NumTotalQsts;
|
||||||
struct ExaPrn_Score TotalScore;
|
struct ExaPrn_Score TotalScore;
|
||||||
double Grade;
|
double Grade;
|
||||||
|
@ -795,11 +828,16 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
|
||||||
Exa_ResetExam (&Exam);
|
Exa_ResetExam (&Exam);
|
||||||
|
|
||||||
/***** Reset total number of questions and total score *****/
|
/***** Reset total number of questions and total score *****/
|
||||||
NumTotalQsts.All =
|
NumTotalQsts.All =
|
||||||
NumTotalQsts.Valid =
|
NumTotalQsts.NotBlank =
|
||||||
NumTotalQsts.NotBlank = 0;
|
NumTotalQsts.Valid.Correct =
|
||||||
TotalScore.All =
|
NumTotalQsts.Valid.Wrong.Negative =
|
||||||
TotalScore.Valid = 0.0;
|
NumTotalQsts.Valid.Wrong.Zero =
|
||||||
|
NumTotalQsts.Valid.Wrong.Positive =
|
||||||
|
NumTotalQsts.Valid.Blank =
|
||||||
|
NumTotalQsts.Valid.Total = 0;
|
||||||
|
TotalScore.All =
|
||||||
|
TotalScore.Valid = 0.0;
|
||||||
|
|
||||||
/***** Set user *****/
|
/***** Set user *****/
|
||||||
UsrDat = (MeOrOther == Usr_ME) ? &Gbl.Usrs.Me.UsrDat :
|
UsrDat = (MeOrOther == Usr_ME) ? &Gbl.Usrs.Me.UsrDat :
|
||||||
|
@ -883,8 +921,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
|
||||||
"SELECT exa_prints.PrnCod," // row[0]
|
"SELECT exa_prints.PrnCod," // row[0]
|
||||||
"exa_prints.SesCod," // row[1]
|
"exa_prints.SesCod," // row[1]
|
||||||
"UNIX_TIMESTAMP(exa_prints.StartTime)," // row[2]
|
"UNIX_TIMESTAMP(exa_prints.StartTime)," // row[2]
|
||||||
"UNIX_TIMESTAMP(exa_prints.EndTime)," // row[3]
|
"UNIX_TIMESTAMP(exa_prints.EndTime)" // row[3]
|
||||||
"exa_prints.NumQstsNotBlank" // row[4]
|
|
||||||
" FROM exa_prints,exa_sessions,exa_exams"
|
" FROM exa_prints,exa_sessions,exa_exams"
|
||||||
" WHERE exa_prints.UsrCod=%ld"
|
" WHERE exa_prints.UsrCod=%ld"
|
||||||
"%s" // Session subquery
|
"%s" // Session subquery
|
||||||
|
@ -969,38 +1006,120 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
|
||||||
|
|
||||||
/* Compute score taking into account only valid questions */
|
/* Compute score taking into account only valid questions */
|
||||||
ExaRes_ComputeValidPrintScore (&Print);
|
ExaRes_ComputeValidPrintScore (&Print);
|
||||||
NumTotalQsts.Valid += Print.NumQsts.Valid;
|
NumTotalQsts.Valid.Correct += Print.NumQsts.Valid.Correct;
|
||||||
|
NumTotalQsts.Valid.Wrong.Negative += Print.NumQsts.Valid.Wrong.Negative;
|
||||||
|
NumTotalQsts.Valid.Wrong.Zero += Print.NumQsts.Valid.Wrong.Zero;
|
||||||
|
NumTotalQsts.Valid.Wrong.Positive += Print.NumQsts.Valid.Wrong.Positive;
|
||||||
|
NumTotalQsts.Valid.Blank += Print.NumQsts.Valid.Blank;
|
||||||
|
NumTotalQsts.Valid.Total += Print.NumQsts.Valid.Total;
|
||||||
TotalScore.Valid += Print.Score.Valid;
|
TotalScore.Valid += Print.Score.Valid;
|
||||||
|
|
||||||
/* Get number of questions not blank (row[4]) */
|
|
||||||
if (sscanf (row[4],"%u",&Print.NumQsts.NotBlank) != 1)
|
|
||||||
Print.NumQsts.NotBlank = 0;
|
|
||||||
NumTotalQsts.NotBlank += Print.NumQsts.NotBlank;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Write number of questions */
|
/* Write total number of questions */
|
||||||
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT LINE_LEFT RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
if (ICanView.Score)
|
if (ICanView.Score)
|
||||||
ExaRes_ShowNumQsts (&Print.NumQsts);
|
HTM_Unsigned (Print.NumQsts.All);
|
||||||
else
|
else
|
||||||
Ico_PutIconNotVisible ();
|
Ico_PutIconNotVisible ();
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/* Write number of questions not blank */
|
/* Valid questions */
|
||||||
|
HTM_TD_Begin ("class=\"DAT_GREEN RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
|
if (ICanView.Score)
|
||||||
|
{
|
||||||
|
if (Print.NumQsts.Valid.Total)
|
||||||
|
HTM_Unsigned (Print.NumQsts.Valid.Total);
|
||||||
|
else
|
||||||
|
HTM_Light0 ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Ico_PutIconNotVisible ();
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
/* Invalid questions */
|
||||||
|
HTM_TD_Begin ("class=\"DAT_RED RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
|
if (ICanView.Score)
|
||||||
|
{
|
||||||
|
NumQstsInvalid = Print.NumQsts.All - Print.NumQsts.Valid.Total;
|
||||||
|
if (NumQstsInvalid)
|
||||||
|
HTM_Unsigned (NumQstsInvalid);
|
||||||
|
else
|
||||||
|
HTM_Light0 ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Ico_PutIconNotVisible ();
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
/* Write number of correct questions */
|
||||||
|
HTM_TD_Begin ("class=\"DAT LINE_LEFT RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
|
if (ICanView.Score)
|
||||||
|
{
|
||||||
|
if (Print.NumQsts.Valid.Correct)
|
||||||
|
HTM_Unsigned (Print.NumQsts.Valid.Correct);
|
||||||
|
else
|
||||||
|
HTM_Light0 ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Ico_PutIconNotVisible ();
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
/* Write number of wrong questions */
|
||||||
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
if (ICanView.Score)
|
if (ICanView.Score)
|
||||||
HTM_Unsigned (Print.NumQsts.NotBlank);
|
{
|
||||||
|
if (Print.NumQsts.Valid.Wrong.Negative)
|
||||||
|
HTM_Unsigned (Print.NumQsts.Valid.Wrong.Negative);
|
||||||
|
else
|
||||||
|
HTM_Light0 ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Ico_PutIconNotVisible ();
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
|
if (ICanView.Score)
|
||||||
|
{
|
||||||
|
if (Print.NumQsts.Valid.Wrong.Zero)
|
||||||
|
HTM_Unsigned (Print.NumQsts.Valid.Wrong.Zero);
|
||||||
|
else
|
||||||
|
HTM_Light0 ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Ico_PutIconNotVisible ();
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
|
if (ICanView.Score)
|
||||||
|
{
|
||||||
|
if (Print.NumQsts.Valid.Wrong.Positive)
|
||||||
|
HTM_Unsigned (Print.NumQsts.Valid.Wrong.Positive);
|
||||||
|
else
|
||||||
|
HTM_Light0 ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Ico_PutIconNotVisible ();
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
/* Write number of blank questions */
|
||||||
|
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
|
if (ICanView.Score)
|
||||||
|
{
|
||||||
|
if (Print.NumQsts.Valid.Blank)
|
||||||
|
HTM_Unsigned (Print.NumQsts.Valid.Blank);
|
||||||
|
else
|
||||||
|
HTM_Light0 ();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Ico_PutIconNotVisible ();
|
Ico_PutIconNotVisible ();
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/* Write score valid (taking into account only valid questions) */
|
/* Write score valid (taking into account only valid questions) */
|
||||||
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT LINE_LEFT RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
if (ICanView.Score)
|
if (ICanView.Score)
|
||||||
{
|
{
|
||||||
HTM_Double2Decimals (Print.Score.Valid);
|
HTM_Double2Decimals (Print.Score.Valid);
|
||||||
HTM_Txt ("/");
|
HTM_Txt ("/");
|
||||||
HTM_Unsigned (Print.NumQsts.Valid);
|
HTM_Unsigned (Print.NumQsts.Valid.Total);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Ico_PutIconNotVisible ();
|
Ico_PutIconNotVisible ();
|
||||||
|
@ -1009,18 +1128,18 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
|
||||||
/* Write average score per question (taking into account only valid questions) */
|
/* Write average score per question (taking into account only valid questions) */
|
||||||
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
if (ICanView.Score)
|
if (ICanView.Score)
|
||||||
HTM_Double2Decimals (Print.NumQsts.Valid ? Print.Score.Valid /
|
HTM_Double2Decimals (Print.NumQsts.Valid.Total ? Print.Score.Valid /
|
||||||
(double) Print.NumQsts.Valid :
|
(double) Print.NumQsts.Valid.Total :
|
||||||
0.0);
|
0.0);
|
||||||
else
|
else
|
||||||
Ico_PutIconNotVisible ();
|
Ico_PutIconNotVisible ();
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/* Write grade over maximum grade (taking into account only valid questions) */
|
/* Write grade over maximum grade (taking into account only valid questions) */
|
||||||
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT LINE_LEFT RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
if (ICanView.Score)
|
if (ICanView.Score)
|
||||||
{
|
{
|
||||||
Grade = TstPrn_ComputeGrade (Print.NumQsts.Valid,Print.Score.Valid,Exam.MaxGrade);
|
Grade = TstPrn_ComputeGrade (Print.NumQsts.Valid.Total,Print.Score.Valid,Exam.MaxGrade);
|
||||||
TstPrn_ShowGrade (Grade,Exam.MaxGrade);
|
TstPrn_ShowGrade (Grade,Exam.MaxGrade);
|
||||||
TotalGrade += Grade;
|
TotalGrade += Grade;
|
||||||
}
|
}
|
||||||
|
@ -1029,7 +1148,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/* Link to show this result */
|
/* Link to show this result */
|
||||||
HTM_TD_Begin ("class=\"RT COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"LINE_LEFT RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
if (ICanView.Result)
|
if (ICanView.Result)
|
||||||
{
|
{
|
||||||
Exams->ExaCod = Session.ExaCod;
|
Exams->ExaCod = Session.ExaCod;
|
||||||
|
@ -1081,49 +1200,99 @@ static void ExaRes_ShowResultsSummaryRow (unsigned NumResults,
|
||||||
double TotalGrade)
|
double TotalGrade)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Sessions;
|
extern const char *Txt_Sessions;
|
||||||
|
unsigned NumTotalQstsInvalid;
|
||||||
|
|
||||||
/***** 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 LINE_BOTTOM RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
HTM_TxtColonNBSP (Txt_Sessions);
|
HTM_TxtColonNBSP (Txt_Sessions);
|
||||||
HTM_Unsigned (NumResults);
|
HTM_Unsigned (NumResults);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Write total number of questions *****/
|
/***** Write total number of questions *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP LINE_BOTTOM LINE_LEFT RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
if (NumResults)
|
HTM_Unsigned (NumTotalQsts->All);
|
||||||
ExaRes_ShowNumQsts (NumTotalQsts);
|
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Write total number of questions not blank *****/
|
/***** Write total number of valid questions *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_GREEN LINE_TOP LINE_BOTTOM RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
if (NumResults)
|
if (NumTotalQsts->Valid.Total)
|
||||||
HTM_Unsigned (NumTotalQsts->NotBlank);
|
HTM_Unsigned (NumTotalQsts->Valid.Total);
|
||||||
|
else
|
||||||
|
HTM_Light0 ();
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
/***** Write total number of invalid questions *****/
|
||||||
|
HTM_TD_Begin ("class=\"DAT_RED LINE_TOP LINE_BOTTOM RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
|
NumTotalQstsInvalid = NumTotalQsts->All - NumTotalQsts->Valid.Total;
|
||||||
|
if (NumTotalQstsInvalid)
|
||||||
|
HTM_Unsigned (NumTotalQstsInvalid);
|
||||||
|
else
|
||||||
|
HTM_Light0 ();
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
/***** Write number of correct questions *****/
|
||||||
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP LINE_BOTTOM LINE_LEFT RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
|
if (NumTotalQsts->Valid.Correct)
|
||||||
|
HTM_Unsigned (NumTotalQsts->Valid.Correct);
|
||||||
|
else
|
||||||
|
HTM_Light0 ();
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
/***** Write number of wrong questions *****/
|
||||||
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP LINE_BOTTOM RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
|
if (NumTotalQsts->Valid.Wrong.Negative)
|
||||||
|
HTM_Unsigned (NumTotalQsts->Valid.Wrong.Negative);
|
||||||
|
else
|
||||||
|
HTM_Light0 ();
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP LINE_BOTTOM RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
|
if (NumTotalQsts->Valid.Wrong.Zero)
|
||||||
|
HTM_Unsigned (NumTotalQsts->Valid.Wrong.Zero);
|
||||||
|
else
|
||||||
|
HTM_Light0 ();
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP LINE_BOTTOM RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
|
if (NumTotalQsts->Valid.Wrong.Positive)
|
||||||
|
HTM_Unsigned (NumTotalQsts->Valid.Wrong.Positive);
|
||||||
|
else
|
||||||
|
HTM_Light0 ();
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
/***** Write number of blank questions *****/
|
||||||
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP LINE_BOTTOM RT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
|
if (NumTotalQsts->Valid.Blank)
|
||||||
|
HTM_Unsigned (NumTotalQsts->Valid.Blank);
|
||||||
|
else
|
||||||
|
HTM_Light0 ();
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Write total valid score *****/
|
/***** Write total valid score *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP LINE_BOTTOM LINE_LEFT RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
HTM_Double2Decimals (TotalScore->Valid);
|
HTM_Double2Decimals (TotalScore->Valid);
|
||||||
HTM_Txt ("/");
|
HTM_Txt ("/");
|
||||||
HTM_Unsigned (NumTotalQsts->Valid);
|
HTM_Unsigned (NumTotalQsts->Valid.Total);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Write average valid score per valid question *****/
|
/***** Write average valid score per valid question *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP LINE_BOTTOM RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
HTM_Double2Decimals (NumTotalQsts->Valid ? TotalScore->Valid /
|
HTM_Double2Decimals (NumTotalQsts->Valid.Total ? TotalScore->Valid /
|
||||||
(double) NumTotalQsts->Valid :
|
(double) NumTotalQsts->Valid.Total :
|
||||||
0.0);
|
0.0);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
|
||||||
/***** Write total grade *****/
|
/***** Write total grade *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP LINE_BOTTOM LINE_LEFT RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
HTM_Double2Decimals (TotalGrade);
|
HTM_Double2Decimals (TotalGrade);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Last cell *****/
|
/***** Last cell *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP LINE_BOTTOM LINE_LEFT COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** End row *****/
|
/***** End row *****/
|
||||||
|
@ -1134,39 +1303,6 @@ static void ExaRes_ShowResultsSummaryRow (unsigned NumResults,
|
||||||
/*************************** Show one exam result ****************************/
|
/*************************** Show one exam result ****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void ExaRes_ShowNumQsts (const struct ExaPrn_NumQuestions *NumQsts)
|
|
||||||
{
|
|
||||||
extern const char *Txt_QUESTIONS_valid;
|
|
||||||
extern const char *Txt_QUESTIONS_invalid;
|
|
||||||
|
|
||||||
HTM_Unsigned (NumQsts->All);
|
|
||||||
|
|
||||||
if (NumQsts->All !=
|
|
||||||
NumQsts->Valid)
|
|
||||||
{
|
|
||||||
HTM_NBSP ();
|
|
||||||
HTM_Txt ("(");
|
|
||||||
|
|
||||||
/* Valid questions */
|
|
||||||
HTM_SPAN_Begin ("class=\"DAT_GREEN\" title=\"%s\"",Txt_QUESTIONS_valid);
|
|
||||||
HTM_Unsigned (NumQsts->Valid);
|
|
||||||
HTM_SPAN_End ();
|
|
||||||
|
|
||||||
HTM_Txt ("+");
|
|
||||||
|
|
||||||
/* Invalid questions */
|
|
||||||
HTM_SPAN_Begin ("class=\"DAT_RED\" title=\"%s\"",Txt_QUESTIONS_invalid);
|
|
||||||
HTM_Unsigned (NumQsts->All - NumQsts->Valid);
|
|
||||||
HTM_SPAN_End ();
|
|
||||||
|
|
||||||
HTM_Txt (")");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/*************************** Show one exam result ****************************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
void ExaRes_ShowOneExaResult (void)
|
void ExaRes_ShowOneExaResult (void)
|
||||||
{
|
{
|
||||||
struct Exa_Exams Exams;
|
struct Exa_Exams Exams;
|
||||||
|
@ -1206,6 +1342,7 @@ void ExaRes_ShowOneExaResult (void)
|
||||||
Print.UsrCod = UsrDat->UsrCod;
|
Print.UsrCod = UsrDat->UsrCod;
|
||||||
ExaPrn_GetDataOfPrintByCodAndUsrCod (&Print);
|
ExaPrn_GetDataOfPrintByCodAndUsrCod (&Print);
|
||||||
|
|
||||||
|
|
||||||
/***** Set log action and print code *****/
|
/***** Set log action and print code *****/
|
||||||
if (Gbl.Action.Act == ActEndExaPrn)
|
if (Gbl.Action.Act == ActEndExaPrn)
|
||||||
{
|
{
|
||||||
|
@ -1241,7 +1378,10 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
|
||||||
extern const char *Txt_Questions;
|
extern const char *Txt_Questions;
|
||||||
extern const char *Txt_QUESTIONS_valid;
|
extern const char *Txt_QUESTIONS_valid;
|
||||||
extern const char *Txt_QUESTIONS_invalid;
|
extern const char *Txt_QUESTIONS_invalid;
|
||||||
extern const char *Txt_QUESTIONS_non_blank;
|
extern const char *Txt_Valid_answers;
|
||||||
|
extern const char *Txt_correct_ANSWERS;
|
||||||
|
extern const char *Txt_wrong_ANSWERS;
|
||||||
|
extern const char *Txt_blank_ANSWERS;
|
||||||
extern const char *Txt_Score;
|
extern const char *Txt_Score;
|
||||||
extern const char *Txt_valid_score;
|
extern const char *Txt_valid_score;
|
||||||
extern const char *Txt_Grade;
|
extern const char *Txt_Grade;
|
||||||
|
@ -1268,6 +1408,7 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
|
||||||
Gbl.Hierarchy.Deg.DegCod,
|
Gbl.Hierarchy.Deg.DegCod,
|
||||||
Gbl.Hierarchy.Crs.CrsCod);
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
|
|
||||||
|
|
||||||
/***** Begin table *****/
|
/***** Begin table *****/
|
||||||
HTM_TABLE_BeginWideMarginPadding (10);
|
HTM_TABLE_BeginWideMarginPadding (10);
|
||||||
|
|
||||||
|
@ -1285,7 +1426,7 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
|
||||||
HTM_TxtColon (Txt_ROLES_SINGUL_Abc[UsrDat->Roles.InCurrentCrs.Role][UsrDat->Sex]);
|
HTM_TxtColon (Txt_ROLES_SINGUL_Abc[UsrDat->Roles.InCurrentCrs.Role][UsrDat->Sex]);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT LT\"");
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
ID_WriteUsrIDs (UsrDat,NULL);
|
ID_WriteUsrIDs (UsrDat,NULL);
|
||||||
HTM_TxtF (" %s",UsrDat->Surname1);
|
HTM_TxtF (" %s",UsrDat->Surname1);
|
||||||
if (UsrDat->Surname2[0])
|
if (UsrDat->Surname2[0])
|
||||||
|
@ -1314,7 +1455,7 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
|
||||||
|
|
||||||
if (asprintf (&Id,"match_%u",(unsigned) StartEndTime) < 0)
|
if (asprintf (&Id,"match_%u",(unsigned) StartEndTime) < 0)
|
||||||
Lay_NotEnoughMemoryExit ();
|
Lay_NotEnoughMemoryExit ();
|
||||||
HTM_TD_Begin ("id=\"%s\" class=\"DAT LT\"",Id);
|
HTM_TD_Begin ("id=\"%s\" class=\"DAT LB\"",Id);
|
||||||
Dat_WriteLocalDateHMSFromUTC (Id,Print->TimeUTC[StartEndTime],
|
Dat_WriteLocalDateHMSFromUTC (Id,Print->TimeUTC[StartEndTime],
|
||||||
Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA,
|
Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA,
|
||||||
true,true,true,0x7);
|
true,true,true,0x7);
|
||||||
|
@ -1331,31 +1472,30 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
|
||||||
HTM_TxtColon (Txt_Questions);
|
HTM_TxtColon (Txt_Questions);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT LT\"");
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
if (ICanView.Result)
|
if (ICanView.Result)
|
||||||
{
|
{
|
||||||
HTM_TxtF ("%u",Print->NumQsts.All);
|
HTM_TxtF ("%u",Print->NumQsts.All);
|
||||||
if (Print->NumQsts.All != Print->NumQsts.Valid)
|
if (Print->NumQsts.All != Print->NumQsts.Valid.Total)
|
||||||
{
|
{
|
||||||
HTM_Txt (" (");
|
HTM_Txt (" (");
|
||||||
|
|
||||||
/* Valid questions */
|
/* Valid questions */
|
||||||
HTM_SPAN_Begin ("class=\"DAT_GREEN\"");
|
HTM_SPAN_Begin ("class=\"DAT_GREEN\"");
|
||||||
HTM_TxtColonNBSP (Txt_QUESTIONS_valid);
|
HTM_TxtColonNBSP (Txt_QUESTIONS_valid);
|
||||||
HTM_Unsigned (Print->NumQsts.Valid);
|
HTM_Unsigned (Print->NumQsts.Valid.Total);
|
||||||
HTM_SPAN_End ();
|
HTM_SPAN_End ();
|
||||||
|
|
||||||
HTM_TxtF (", ");
|
HTM_TxtF ("; ");
|
||||||
|
|
||||||
/* Invalid questions */
|
/* Invalid questions */
|
||||||
HTM_SPAN_Begin ("class=\"DAT_RED\"");
|
HTM_SPAN_Begin ("class=\"DAT_RED\"");
|
||||||
HTM_TxtColonNBSP (Txt_QUESTIONS_invalid);
|
HTM_TxtColonNBSP (Txt_QUESTIONS_invalid);
|
||||||
HTM_Unsigned (Print->NumQsts.All - Print->NumQsts.Valid);
|
HTM_Unsigned (Print->NumQsts.All - Print->NumQsts.Valid.Total);
|
||||||
HTM_SPAN_End ();
|
HTM_SPAN_End ();
|
||||||
|
|
||||||
HTM_Txt (")");
|
HTM_Txt (")");
|
||||||
}
|
}
|
||||||
HTM_TxtF ("; %s: %u",Txt_QUESTIONS_non_blank,Print->NumQsts.NotBlank);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Ico_PutIconNotVisible ();
|
Ico_PutIconNotVisible ();
|
||||||
|
@ -1363,6 +1503,31 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
|
||||||
|
|
||||||
HTM_TR_End ();
|
HTM_TR_End ();
|
||||||
|
|
||||||
|
/***** Number of answers *****/
|
||||||
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
|
HTM_TD_Begin ("class=\"DAT_N RT\"");
|
||||||
|
HTM_TxtColon (Txt_Valid_answers);
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
|
if (ICanView.Result)
|
||||||
|
HTM_TxtF ("%s(<em>p<sub>i</sub></em>=1): %u; "
|
||||||
|
"%s(-1≤<em>p<sub>i</sub></em><0): %u; "
|
||||||
|
"%s(<em>p<sub>i</sub></em>=0): %u; "
|
||||||
|
"%s(0<<em>p<sub>i</sub></em><1): %u; "
|
||||||
|
"%s(<em>p<sub>i</sub></em>=0): %u",
|
||||||
|
Txt_correct_ANSWERS,Print->NumQsts.Valid.Correct,
|
||||||
|
Txt_wrong_ANSWERS ,Print->NumQsts.Valid.Wrong.Negative,
|
||||||
|
Txt_wrong_ANSWERS ,Print->NumQsts.Valid.Wrong.Zero,
|
||||||
|
Txt_wrong_ANSWERS ,Print->NumQsts.Valid.Wrong.Positive,
|
||||||
|
Txt_blank_ANSWERS ,Print->NumQsts.Valid.Blank);
|
||||||
|
else
|
||||||
|
Ico_PutIconNotVisible ();
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
HTM_TR_End ();
|
||||||
|
|
||||||
/***** Score *****/
|
/***** Score *****/
|
||||||
HTM_TR_Begin (NULL);
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
|
@ -1370,27 +1535,27 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
|
||||||
HTM_TxtColon (Txt_Score);
|
HTM_TxtColon (Txt_Score);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT LT\"");
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
if (ICanView.Score)
|
if (ICanView.Score)
|
||||||
{
|
{
|
||||||
/* Score counting all questions */
|
/* Score counting all questions */
|
||||||
if (Print->NumQsts.All == Print->NumQsts.Valid)
|
if (Print->NumQsts.All == Print->NumQsts.Valid.Total)
|
||||||
HTM_STRONG_Begin ();
|
HTM_STRONG_Begin ();
|
||||||
HTM_Double2Decimals (Print->Score.All);
|
HTM_Double2Decimals (Print->Score.All);
|
||||||
HTM_Txt ("/");
|
HTM_Txt ("/");
|
||||||
HTM_Unsigned (Print->NumQsts.All);
|
HTM_Unsigned (Print->NumQsts.All);
|
||||||
if (Print->NumQsts.All == Print->NumQsts.Valid)
|
if (Print->NumQsts.All == Print->NumQsts.Valid.Total)
|
||||||
HTM_STRONG_End ();
|
HTM_STRONG_End ();
|
||||||
|
|
||||||
/* Scoure counting only valid questions */
|
/* Scoure counting only valid questions */
|
||||||
if (Print->NumQsts.All != Print->NumQsts.Valid)
|
if (Print->NumQsts.All != Print->NumQsts.Valid.Total)
|
||||||
{
|
{
|
||||||
HTM_Txt ("; ");
|
HTM_Txt ("; ");
|
||||||
HTM_TxtColonNBSP (Txt_valid_score);
|
HTM_TxtColonNBSP (Txt_valid_score);
|
||||||
HTM_STRONG_Begin ();
|
HTM_STRONG_Begin ();
|
||||||
HTM_Double2Decimals (Print->Score.Valid);
|
HTM_Double2Decimals (Print->Score.Valid);
|
||||||
HTM_Txt ("/");
|
HTM_Txt ("/");
|
||||||
HTM_Unsigned (Print->NumQsts.Valid);
|
HTM_Unsigned (Print->NumQsts.Valid.Total);
|
||||||
HTM_STRONG_End ();
|
HTM_STRONG_End ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1407,23 +1572,23 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
|
||||||
HTM_TxtColon (Txt_Grade);
|
HTM_TxtColon (Txt_Grade);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT LT\"");
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
if (ICanView.Score)
|
if (ICanView.Score)
|
||||||
{
|
{
|
||||||
/* Grade counting all questions */
|
/* Grade counting all questions */
|
||||||
if (Print->NumQsts.All == Print->NumQsts.Valid)
|
if (Print->NumQsts.All == Print->NumQsts.Valid.Total)
|
||||||
HTM_STRONG_Begin ();
|
HTM_STRONG_Begin ();
|
||||||
TstPrn_ComputeAndShowGrade (Print->NumQsts.All,Print->Score.All,Exam->MaxGrade);
|
TstPrn_ComputeAndShowGrade (Print->NumQsts.All,Print->Score.All,Exam->MaxGrade);
|
||||||
if (Print->NumQsts.All == Print->NumQsts.Valid)
|
if (Print->NumQsts.All == Print->NumQsts.Valid.Total)
|
||||||
HTM_STRONG_End ();
|
HTM_STRONG_End ();
|
||||||
|
|
||||||
/* Grade counting only valid questions */
|
/* Grade counting only valid questions */
|
||||||
if (Print->NumQsts.All != Print->NumQsts.Valid)
|
if (Print->NumQsts.All != Print->NumQsts.Valid.Total)
|
||||||
{
|
{
|
||||||
HTM_Txt ("; ");
|
HTM_Txt ("; ");
|
||||||
HTM_TxtColonNBSP (Txt_valid_grade);
|
HTM_TxtColonNBSP (Txt_valid_grade);
|
||||||
HTM_STRONG_Begin ();
|
HTM_STRONG_Begin ();
|
||||||
TstPrn_ComputeAndShowGrade (Print->NumQsts.Valid,Print->Score.Valid,Exam->MaxGrade);
|
TstPrn_ComputeAndShowGrade (Print->NumQsts.Valid.Total,Print->Score.Valid,Exam->MaxGrade);
|
||||||
HTM_STRONG_End ();
|
HTM_STRONG_End ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1503,7 +1668,12 @@ static void ExaRes_ComputeValidPrintScore (struct ExaPrn_Print *Print)
|
||||||
bool QuestionExists;
|
bool QuestionExists;
|
||||||
|
|
||||||
/***** Initialize score valid *****/
|
/***** Initialize score valid *****/
|
||||||
Print->NumQsts.Valid = 0;
|
Print->NumQsts.Valid.Correct =
|
||||||
|
Print->NumQsts.Valid.Wrong.Negative =
|
||||||
|
Print->NumQsts.Valid.Wrong.Zero =
|
||||||
|
Print->NumQsts.Valid.Wrong.Positive =
|
||||||
|
Print->NumQsts.Valid.Blank =
|
||||||
|
Print->NumQsts.Valid.Total = 0;
|
||||||
Print->Score.Valid = 0.0;
|
Print->Score.Valid = 0.0;
|
||||||
|
|
||||||
for (NumQst = 0;
|
for (NumQst = 0;
|
||||||
|
@ -1540,7 +1710,25 @@ static void ExaRes_ComputeValidPrintScore (struct ExaPrn_Print *Print)
|
||||||
if (Question.Validity == Tst_VALID_QUESTION)
|
if (Question.Validity == Tst_VALID_QUESTION)
|
||||||
{
|
{
|
||||||
ExaPrn_ComputeAnswerScore (&Print->PrintedQuestions[NumQst],&Question);
|
ExaPrn_ComputeAnswerScore (&Print->PrintedQuestions[NumQst],&Question);
|
||||||
Print->NumQsts.Valid++;
|
switch (Print->PrintedQuestions[NumQst].AnswerIsCorrect)
|
||||||
|
{
|
||||||
|
case TstPrn_ANSWER_IS_CORRECT:
|
||||||
|
Print->NumQsts.Valid.Correct++;
|
||||||
|
break;
|
||||||
|
case TstPrn_ANSWER_IS_WRONG_NEGATIVE:
|
||||||
|
Print->NumQsts.Valid.Wrong.Negative++;
|
||||||
|
break;
|
||||||
|
case TstPrn_ANSWER_IS_WRONG_ZERO:
|
||||||
|
Print->NumQsts.Valid.Wrong.Zero++;
|
||||||
|
break;
|
||||||
|
case TstPrn_ANSWER_IS_WRONG_POSITIVE:
|
||||||
|
Print->NumQsts.Valid.Wrong.Positive++;
|
||||||
|
break;
|
||||||
|
case TstPrn_ANSWER_IS_BLANK:
|
||||||
|
Print->NumQsts.Valid.Blank++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Print->NumQsts.Valid.Total++;
|
||||||
Print->Score.Valid += Print->PrintedQuestions[NumQst].Score;
|
Print->Score.Valid += Print->PrintedQuestions[NumQst].Score;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -431,7 +431,7 @@ static void Fig_GetAndShowNumUsrsInCrss (Rol_Role_t Role)
|
||||||
(Gbl.Scope.Current == Hie_DEG ? Gbl.Hierarchy.Deg.DegCod :
|
(Gbl.Scope.Current == Hie_DEG ? Gbl.Hierarchy.Deg.DegCod :
|
||||||
(Gbl.Scope.Current == Hie_CRS ? Gbl.Hierarchy.Crs.CrsCod :
|
(Gbl.Scope.Current == Hie_CRS ? Gbl.Hierarchy.Crs.CrsCod :
|
||||||
-1L)))));
|
-1L)))));
|
||||||
char *Class = (Role == Rol_UNK) ? "DAT_N_LINE_TOP RB" :
|
char *Class = (Role == Rol_UNK) ? "DAT_N LINE_TOP RB" :
|
||||||
"DAT RB";
|
"DAT RB";
|
||||||
unsigned Roles = (Role == Rol_UNK) ? ((1 << Rol_STD) |
|
unsigned Roles = (Role == Rol_UNK) ? ((1 << Rol_STD) |
|
||||||
(1 << Rol_NET) |
|
(1 << Rol_NET) |
|
||||||
|
@ -959,7 +959,7 @@ static void Fig_GetAndShowHierarchyTotal (void)
|
||||||
|
|
||||||
/***** Write total number of elements *****/
|
/***** Write total number of elements *****/
|
||||||
Fig_ShowHierarchyRow ("",Txt_Total,
|
Fig_ShowHierarchyRow ("",Txt_Total,
|
||||||
"DAT_N_LINE_TOP",
|
"DAT_N LINE_TOP",
|
||||||
(int) NumCtysTotal,
|
(int) NumCtysTotal,
|
||||||
(int) NumInssTotal,
|
(int) NumInssTotal,
|
||||||
(int) NumCtrsTotal,
|
(int) NumCtrsTotal,
|
||||||
|
@ -2577,7 +2577,7 @@ static void Fig_WriteRowStatsFileBrowsers1 (const char *NameOfFileZones,
|
||||||
char StrNumGrps[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
|
char StrNumGrps[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
|
||||||
char StrNumUsrs[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
|
char StrNumUsrs[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
|
||||||
char FileSizeStr[Fil_MAX_BYTES_FILE_SIZE_STRING + 1];
|
char FileSizeStr[Fil_MAX_BYTES_FILE_SIZE_STRING + 1];
|
||||||
char *Class = (FileZone == Brw_UNKNOWN) ? "DAT_N_LINE_TOP" :
|
char *Class = (FileZone == Brw_UNKNOWN) ? "DAT_N LINE_TOP" :
|
||||||
"DAT";
|
"DAT";
|
||||||
|
|
||||||
Fil_WriteFileSizeFull ((double) SizeOfFileZones->Size,FileSizeStr);
|
Fil_WriteFileSizeFull ((double) SizeOfFileZones->Size,FileSizeStr);
|
||||||
|
@ -2650,7 +2650,7 @@ static void Fig_WriteRowStatsFileBrowsers2 (const char *NameOfFileZones,
|
||||||
char StrNumFoldersPerCrs[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
|
char StrNumFoldersPerCrs[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
|
||||||
char StrNumFilesPerCrs[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
|
char StrNumFilesPerCrs[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
|
||||||
char FileSizePerCrsStr[Fil_MAX_BYTES_FILE_SIZE_STRING + 1];
|
char FileSizePerCrsStr[Fil_MAX_BYTES_FILE_SIZE_STRING + 1];
|
||||||
char *Class = (FileZone == Brw_UNKNOWN) ? "DAT_N_LINE_TOP" :
|
char *Class = (FileZone == Brw_UNKNOWN) ? "DAT_N LINE_TOP" :
|
||||||
"DAT";
|
"DAT";
|
||||||
|
|
||||||
if (SizeOfFileZones->NumCrss == -1) // Not applicable
|
if (SizeOfFileZones->NumCrss == -1) // Not applicable
|
||||||
|
@ -2708,7 +2708,7 @@ static void Fig_WriteRowStatsFileBrowsers3 (const char *NameOfFileZones,
|
||||||
char StrNumFoldersPerUsr[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
|
char StrNumFoldersPerUsr[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
|
||||||
char StrNumFilesPerUsr[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
|
char StrNumFilesPerUsr[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
|
||||||
char FileSizePerUsrStr[Fil_MAX_BYTES_FILE_SIZE_STRING + 1];
|
char FileSizePerUsrStr[Fil_MAX_BYTES_FILE_SIZE_STRING + 1];
|
||||||
char *Class = (FileZone == Brw_UNKNOWN) ? "DAT_N_LINE_TOP" :
|
char *Class = (FileZone == Brw_UNKNOWN) ? "DAT_N LINE_TOP" :
|
||||||
"DAT";
|
"DAT";
|
||||||
|
|
||||||
if (SizeOfFileZones->NumUsrs == -1) // Not applicable
|
if (SizeOfFileZones->NumUsrs == -1) // Not applicable
|
||||||
|
@ -3138,7 +3138,7 @@ static void Fig_GetAndShowTestsStats (void)
|
||||||
extern const char *Txt_Number_of_BR_times_that_BR_questions_BR_have_been_BR_responded;
|
extern const char *Txt_Number_of_BR_times_that_BR_questions_BR_have_been_BR_responded;
|
||||||
extern const char *Txt_Average_BR_number_of_BR_times_that_BR_questions_BR_have_been_BR_responded_BR_per_course;
|
extern const char *Txt_Average_BR_number_of_BR_times_that_BR_questions_BR_have_been_BR_responded_BR_per_course;
|
||||||
extern const char *Txt_Average_BR_number_of_BR_times_that_BR_a_question_BR_has_been_BR_responded;
|
extern const char *Txt_Average_BR_number_of_BR_times_that_BR_a_question_BR_has_been_BR_responded;
|
||||||
extern const char *Txt_Average_BR_score_BR_per_question_BR_less_than_or_equal_to_1;
|
extern const char *Txt_Average_BR_score_BR_per_question;
|
||||||
extern const char *Txt_TST_STR_ANSWER_TYPES[Tst_NUM_ANS_TYPES];
|
extern const char *Txt_TST_STR_ANSWER_TYPES[Tst_NUM_ANS_TYPES];
|
||||||
extern const char *Txt_Total;
|
extern const char *Txt_Total;
|
||||||
Tst_AnswerType_t AnsType;
|
Tst_AnswerType_t AnsType;
|
||||||
|
@ -3160,7 +3160,7 @@ static void Fig_GetAndShowTestsStats (void)
|
||||||
HTM_TH (1,1,"RM",Txt_Number_of_BR_times_that_BR_questions_BR_have_been_BR_responded);
|
HTM_TH (1,1,"RM",Txt_Number_of_BR_times_that_BR_questions_BR_have_been_BR_responded);
|
||||||
HTM_TH (1,1,"RM",Txt_Average_BR_number_of_BR_times_that_BR_questions_BR_have_been_BR_responded_BR_per_course);
|
HTM_TH (1,1,"RM",Txt_Average_BR_number_of_BR_times_that_BR_questions_BR_have_been_BR_responded_BR_per_course);
|
||||||
HTM_TH (1,1,"RM",Txt_Average_BR_number_of_BR_times_that_BR_a_question_BR_has_been_BR_responded);
|
HTM_TH (1,1,"RM",Txt_Average_BR_number_of_BR_times_that_BR_a_question_BR_has_been_BR_responded);
|
||||||
HTM_TH (1,1,"RM",Txt_Average_BR_score_BR_per_question_BR_less_than_or_equal_to_1);
|
HTM_TH (1,1,"RM",Txt_Average_BR_score_BR_per_question);
|
||||||
|
|
||||||
HTM_TR_End ();
|
HTM_TR_End ();
|
||||||
|
|
||||||
|
@ -3223,15 +3223,15 @@ static void Fig_GetAndShowTestsStats (void)
|
||||||
/***** Write number of assignments *****/
|
/***** Write number of assignments *****/
|
||||||
HTM_TR_Begin (NULL);
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP LM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP LM\"");
|
||||||
HTM_Txt (Txt_Total);
|
HTM_Txt (Txt_Total);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Unsigned (Stats.NumCoursesWithQuestions);
|
HTM_Unsigned (Stats.NumCoursesWithQuestions);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_TxtF ("%u (%.1f%%)",
|
HTM_TxtF ("%u (%.1f%%)",
|
||||||
Stats.NumCoursesWithPluggableQuestions,
|
Stats.NumCoursesWithPluggableQuestions,
|
||||||
Stats.NumCoursesWithQuestions ? (double) Stats.NumCoursesWithPluggableQuestions * 100.0 /
|
Stats.NumCoursesWithQuestions ? (double) Stats.NumCoursesWithPluggableQuestions * 100.0 /
|
||||||
|
@ -3239,27 +3239,27 @@ static void Fig_GetAndShowTestsStats (void)
|
||||||
0.0);
|
0.0);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Unsigned (Stats.NumQsts);
|
HTM_Unsigned (Stats.NumQsts);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Double2Decimals (Stats.AvgQstsPerCourse);
|
HTM_Double2Decimals (Stats.AvgQstsPerCourse);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_UnsignedLong (Stats.NumHits);
|
HTM_UnsignedLong (Stats.NumHits);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Double2Decimals (Stats.AvgHitsPerCourse);
|
HTM_Double2Decimals (Stats.AvgHitsPerCourse);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Double2Decimals (Stats.AvgHitsPerQuestion);
|
HTM_Double2Decimals (Stats.AvgHitsPerQuestion);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Double2Decimals (Stats.AvgScorePerQuestion);
|
HTM_Double2Decimals (Stats.AvgScorePerQuestion);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
@ -3661,25 +3661,25 @@ static void Fig_GetAndShowTimelineActivityStats (void)
|
||||||
/* Write totals */
|
/* Write totals */
|
||||||
HTM_TR_Begin (NULL);
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP LM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP LM\"");
|
||||||
HTM_Txt (Txt_Total);
|
HTM_Txt (Txt_Total);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_UnsignedLong (NumNotes);
|
HTM_UnsignedLong (NumNotes);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Unsigned (NumUsrs);
|
HTM_Unsigned (NumUsrs);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Percentage (NumUsrsTotal ? (double) NumUsrs * 100.0 /
|
HTM_Percentage (NumUsrsTotal ? (double) NumUsrs * 100.0 /
|
||||||
(double) NumUsrsTotal :
|
(double) NumUsrsTotal :
|
||||||
0.0);
|
0.0);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Double2Decimals (NumUsrs ? (double) NumNotes / (double) NumUsrs :
|
HTM_Double2Decimals (NumUsrs ? (double) NumNotes / (double) NumUsrs :
|
||||||
0.0);
|
0.0);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
@ -4288,38 +4288,38 @@ static void Fig_WriteForumTotalStats (struct Fig_FiguresForum *FiguresForum)
|
||||||
/***** Write forum name and stats *****/
|
/***** Write forum name and stats *****/
|
||||||
HTM_TR_Begin (NULL);
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP\" style=\"width:20px;\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP\" style=\"width:20px;\"");
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP LM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP LM\"");
|
||||||
HTM_Txt (Txt_Total);
|
HTM_Txt (Txt_Total);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Unsigned (FiguresForum->NumForums);
|
HTM_Unsigned (FiguresForum->NumForums);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Unsigned (FiguresForum->NumThreads);
|
HTM_Unsigned (FiguresForum->NumThreads);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Unsigned (FiguresForum->NumPosts);
|
HTM_Unsigned (FiguresForum->NumPosts);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Unsigned (FiguresForum->NumUsrsToBeNotifiedByEMail);
|
HTM_Unsigned (FiguresForum->NumUsrsToBeNotifiedByEMail);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Double2Decimals (NumThrsPerForum);
|
HTM_Double2Decimals (NumThrsPerForum);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Double2Decimals (NumPostsPerThread);
|
HTM_Double2Decimals (NumPostsPerThread);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Double2Decimals (NumPostsPerForum);
|
HTM_Double2Decimals (NumPostsPerForum);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
@ -4530,25 +4530,25 @@ static void Fig_GetAndShowNumUsrsPerNotifyEvent (void)
|
||||||
/***** Write total number of users who want to be notified by email on some event *****/
|
/***** Write total number of users who want to be notified by email on some event *****/
|
||||||
HTM_TR_Begin (NULL);
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP LM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP LM\"");
|
||||||
HTM_Txt (Txt_Total);
|
HTM_Txt (Txt_Total);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Unsigned (NumUsrsTotalWhoWantToBeNotifiedByEMailAboutSomeEvent);
|
HTM_Unsigned (NumUsrsTotalWhoWantToBeNotifiedByEMailAboutSomeEvent);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Percentage (NumUsrsTotal ? (double) NumUsrsTotalWhoWantToBeNotifiedByEMailAboutSomeEvent * 100.0 /
|
HTM_Percentage (NumUsrsTotal ? (double) NumUsrsTotalWhoWantToBeNotifiedByEMailAboutSomeEvent * 100.0 /
|
||||||
(double) NumUsrsTotal :
|
(double) NumUsrsTotal :
|
||||||
0.0);
|
0.0);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Unsigned (NumEventsTotal);
|
HTM_Unsigned (NumEventsTotal);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Unsigned (NumMailsTotal);
|
HTM_Unsigned (NumMailsTotal);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
|
|
@ -707,15 +707,15 @@ static void Ind_ShowNumCoursesWithIndicators (const struct Ind_Indicators *Indic
|
||||||
if (PutForm)
|
if (PutForm)
|
||||||
HTM_TD_Empty (1);
|
HTM_TD_Empty (1);
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Txt (Txt_Total);
|
HTM_Txt (Txt_Total);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_Unsigned (NumCrss);
|
HTM_Unsigned (NumCrss);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM\"");
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM\"");
|
||||||
HTM_TxtF ("(%.1f%%)",100.0);
|
HTM_TxtF ("(%.1f%%)",100.0);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
|
|
@ -614,7 +614,7 @@ static void MchRes_ShowResultsBegin (struct Gam_Games *Games,
|
||||||
|
|
||||||
/***** Begin match results table *****/
|
/***** Begin match results table *****/
|
||||||
HTM_SECTION_Begin (MchRes_RESULTS_TABLE_ID);
|
HTM_SECTION_Begin (MchRes_RESULTS_TABLE_ID);
|
||||||
HTM_TABLE_BeginWidePadding (2);
|
HTM_TABLE_BeginWidePadding (5);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MchRes_ShowResultsEnd (void)
|
static void MchRes_ShowResultsEnd (void)
|
||||||
|
@ -735,7 +735,7 @@ static void MchRes_ShowHeaderMchResults (Usr_MeOrOther_t MeOrOther)
|
||||||
extern const char *Txt_Questions;
|
extern const char *Txt_Questions;
|
||||||
extern const char *Txt_Non_blank_BR_questions;
|
extern const char *Txt_Non_blank_BR_questions;
|
||||||
extern const char *Txt_Score;
|
extern const char *Txt_Score;
|
||||||
extern const char *Txt_Average_BR_score_BR_per_question_BR_less_than_or_equal_to_1;
|
extern const char *Txt_Average_BR_score_BR_per_question;
|
||||||
extern const char *Txt_Grade;
|
extern const char *Txt_Grade;
|
||||||
|
|
||||||
HTM_TR_Begin (NULL);
|
HTM_TR_Begin (NULL);
|
||||||
|
@ -748,7 +748,7 @@ static void MchRes_ShowHeaderMchResults (Usr_MeOrOther_t MeOrOther)
|
||||||
HTM_TH (1,1,"RT",Txt_Questions);
|
HTM_TH (1,1,"RT",Txt_Questions);
|
||||||
HTM_TH (1,1,"RT",Txt_Non_blank_BR_questions);
|
HTM_TH (1,1,"RT",Txt_Non_blank_BR_questions);
|
||||||
HTM_TH (1,1,"RT",Txt_Score);
|
HTM_TH (1,1,"RT",Txt_Score);
|
||||||
HTM_TH (1,1,"RT",Txt_Average_BR_score_BR_per_question_BR_less_than_or_equal_to_1);
|
HTM_TH (1,1,"RT",Txt_Average_BR_score_BR_per_question);
|
||||||
HTM_TH (1,1,"RT",Txt_Grade);
|
HTM_TH (1,1,"RT",Txt_Grade);
|
||||||
HTM_TH_Empty (1);
|
HTM_TH_Empty (1);
|
||||||
|
|
||||||
|
@ -1082,44 +1082,44 @@ static void MchRes_ShowMchResultsSummaryRow (unsigned NumResults,
|
||||||
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_Matches);
|
||||||
HTM_Unsigned (NumResults);
|
HTM_Unsigned (NumResults);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Write total number of questions *****/
|
/***** Write total number of questions *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
if (NumResults)
|
if (NumResults)
|
||||||
HTM_Unsigned (NumTotalQsts);
|
HTM_Unsigned (NumTotalQsts);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Write total number of questions not blank *****/
|
/***** Write total number of questions not blank *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
if (NumResults)
|
if (NumResults)
|
||||||
HTM_Unsigned (NumTotalQstsNotBlank);
|
HTM_Unsigned (NumTotalQstsNotBlank);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Write total score *****/
|
/***** Write total score *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
HTM_Double2Decimals (TotalScoreOfAllResults);
|
HTM_Double2Decimals (TotalScoreOfAllResults);
|
||||||
HTM_Txt ("/");
|
HTM_Txt ("/");
|
||||||
HTM_Unsigned (NumTotalQsts);
|
HTM_Unsigned (NumTotalQsts);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Write average score per question *****/
|
/***** Write average score per question *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
HTM_Double2Decimals (NumTotalQsts ? TotalScoreOfAllResults /
|
HTM_Double2Decimals (NumTotalQsts ? TotalScoreOfAllResults /
|
||||||
(double) NumTotalQsts :
|
(double) NumTotalQsts :
|
||||||
0.0);
|
0.0);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Write total grade *****/
|
/***** Write total grade *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
HTM_Double2Decimals (TotalGrade);
|
HTM_Double2Decimals (TotalGrade);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Last cell *****/
|
/***** Last cell *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** End row *****/
|
/***** End row *****/
|
||||||
|
@ -1137,7 +1137,7 @@ void MchRes_ShowOneMchResult (void)
|
||||||
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
||||||
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
||||||
extern const char *Txt_Questions;
|
extern const char *Txt_Questions;
|
||||||
extern const char *Txt_QUESTIONS_non_blank;
|
extern const char *Txt_Answers;
|
||||||
extern const char *Txt_Score;
|
extern const char *Txt_Score;
|
||||||
extern const char *Txt_Grade;
|
extern const char *Txt_Grade;
|
||||||
extern const char *Txt_Tags;
|
extern const char *Txt_Tags;
|
||||||
|
@ -1242,7 +1242,7 @@ void MchRes_ShowOneMchResult (void)
|
||||||
HTM_TxtColon (Txt_ROLES_SINGUL_Abc[UsrDat->Roles.InCurrentCrs.Role][UsrDat->Sex]);
|
HTM_TxtColon (Txt_ROLES_SINGUL_Abc[UsrDat->Roles.InCurrentCrs.Role][UsrDat->Sex]);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT LT\"");
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
ID_WriteUsrIDs (UsrDat,NULL);
|
ID_WriteUsrIDs (UsrDat,NULL);
|
||||||
HTM_TxtF (" %s",UsrDat->Surname1);
|
HTM_TxtF (" %s",UsrDat->Surname1);
|
||||||
if (UsrDat->Surname2[0])
|
if (UsrDat->Surname2[0])
|
||||||
|
@ -1271,7 +1271,7 @@ void MchRes_ShowOneMchResult (void)
|
||||||
|
|
||||||
if (asprintf (&Id,"match_%u",(unsigned) StartEndTime) < 0)
|
if (asprintf (&Id,"match_%u",(unsigned) StartEndTime) < 0)
|
||||||
Lay_NotEnoughMemoryExit ();
|
Lay_NotEnoughMemoryExit ();
|
||||||
HTM_TD_Begin ("id=\"%s\" class=\"DAT LT\"",Id);
|
HTM_TD_Begin ("id=\"%s\" class=\"DAT LB\"",Id);
|
||||||
Dat_WriteLocalDateHMSFromUTC (Id,Print.TimeUTC[StartEndTime],
|
Dat_WriteLocalDateHMSFromUTC (Id,Print.TimeUTC[StartEndTime],
|
||||||
Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA,
|
Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA,
|
||||||
true,true,true,0x7);
|
true,true,true,0x7);
|
||||||
|
@ -1288,9 +1288,21 @@ void MchRes_ShowOneMchResult (void)
|
||||||
HTM_TxtColon (Txt_Questions);
|
HTM_TxtColon (Txt_Questions);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT LT\"");
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
HTM_TxtF ("%u; %s: %u",
|
HTM_Unsigned (Print.NumQsts);
|
||||||
Print.NumQsts,Txt_QUESTIONS_non_blank,Print.NumQstsNotBlank);
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
HTM_TR_End ();
|
||||||
|
|
||||||
|
/***** Number of answers *****/
|
||||||
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
|
HTM_TD_Begin ("class=\"DAT_N RT\"");
|
||||||
|
HTM_TxtColon (Txt_Answers);
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
|
HTM_Unsigned (Print.NumQstsNotBlank);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TR_End ();
|
HTM_TR_End ();
|
||||||
|
@ -1302,7 +1314,7 @@ void MchRes_ShowOneMchResult (void)
|
||||||
HTM_TxtColon (Txt_Score);
|
HTM_TxtColon (Txt_Score);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT LT\"");
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
if (ICanViewScore)
|
if (ICanViewScore)
|
||||||
{
|
{
|
||||||
HTM_STRONG_Begin ();
|
HTM_STRONG_Begin ();
|
||||||
|
@ -1324,7 +1336,7 @@ void MchRes_ShowOneMchResult (void)
|
||||||
HTM_TxtColon (Txt_Grade);
|
HTM_TxtColon (Txt_Grade);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT LT\"");
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
if (ICanViewScore)
|
if (ICanViewScore)
|
||||||
{
|
{
|
||||||
HTM_STRONG_Begin ();
|
HTM_STRONG_Begin ();
|
||||||
|
@ -1344,7 +1356,7 @@ void MchRes_ShowOneMchResult (void)
|
||||||
HTM_TxtColon (Txt_Tags);
|
HTM_TxtColon (Txt_Tags);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT LT\"");
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
Gam_ShowTstTagsPresentInAGame (Match.GamCod);
|
Gam_ShowTstTagsPresentInAGame (Match.GamCod);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
|
|
@ -187,7 +187,7 @@ static void TstPrn_ResetPrintExceptPrnCod (struct TstPrn_Print *Print)
|
||||||
{
|
{
|
||||||
Print->TimeUTC[Dat_START_TIME] =
|
Print->TimeUTC[Dat_START_TIME] =
|
||||||
Print->TimeUTC[Dat_END_TIME ] = (time_t) 0;
|
Print->TimeUTC[Dat_END_TIME ] = (time_t) 0;
|
||||||
Print->NumQsts =
|
Print->NumQsts = 0;
|
||||||
Print->NumQstsNotBlank = 0;
|
Print->NumQstsNotBlank = 0;
|
||||||
Print->Sent = false; // After creating an exam, it's not sent
|
Print->Sent = false; // After creating an exam, it's not sent
|
||||||
Print->AllowTeachers = false; // Teachers can't seen the exam if student don't allow it
|
Print->AllowTeachers = false; // Teachers can't seen the exam if student don't allow it
|
||||||
|
@ -1026,11 +1026,19 @@ void TstPrn_ComputeIntAnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
|
||||||
{
|
{
|
||||||
long AnswerUsr;
|
long AnswerUsr;
|
||||||
|
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_BLANK;
|
||||||
PrintedQuestion->Score = 0.0; // Default score for blank or wrong answer
|
PrintedQuestion->Score = 0.0; // Default score for blank or wrong answer
|
||||||
|
|
||||||
if (PrintedQuestion->StrAnswers[0]) // If user has answered the answer
|
if (PrintedQuestion->StrAnswers[0]) // If user has answered the answer
|
||||||
|
{
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_WRONG_ZERO;
|
||||||
if (sscanf (PrintedQuestion->StrAnswers,"%ld",&AnswerUsr) == 1)
|
if (sscanf (PrintedQuestion->StrAnswers,"%ld",&AnswerUsr) == 1)
|
||||||
if (AnswerUsr == Question->Answer.Integer) // Correct answer
|
if (AnswerUsr == Question->Answer.Integer) // Correct answer
|
||||||
|
{
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_CORRECT;
|
||||||
PrintedQuestion->Score = 1.0;
|
PrintedQuestion->Score = 1.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TstPrn_ComputeFltAnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
|
void TstPrn_ComputeFltAnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
|
||||||
|
@ -1038,30 +1046,47 @@ void TstPrn_ComputeFltAnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
|
||||||
{
|
{
|
||||||
double AnswerUsr;
|
double AnswerUsr;
|
||||||
|
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_BLANK;
|
||||||
PrintedQuestion->Score = 0.0; // Default score for blank or wrong answer
|
PrintedQuestion->Score = 0.0; // Default score for blank or wrong answer
|
||||||
|
|
||||||
if (PrintedQuestion->StrAnswers[0]) // If user has answered the answer
|
if (PrintedQuestion->StrAnswers[0]) // If user has answered the answer
|
||||||
{
|
{
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_WRONG_ZERO;
|
||||||
AnswerUsr = Str_GetDoubleFromStr (PrintedQuestion->StrAnswers);
|
AnswerUsr = Str_GetDoubleFromStr (PrintedQuestion->StrAnswers);
|
||||||
|
|
||||||
// A bad formatted floating point answer will interpreted as 0.0
|
// A bad formatted floating point answer will interpreted as 0.0
|
||||||
PrintedQuestion->Score = (AnswerUsr >= Question->Answer.FloatingPoint[0] &&
|
if (AnswerUsr >= Question->Answer.FloatingPoint[0] &&
|
||||||
AnswerUsr <= Question->Answer.FloatingPoint[1]) ? 1.0 : // If correct (inside the interval)
|
AnswerUsr <= Question->Answer.FloatingPoint[1])
|
||||||
0.0; // If wrong (outside the interval)
|
{
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_CORRECT;
|
||||||
|
PrintedQuestion->Score = 1.0; // Correct (inside the interval)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TstPrn_ComputeTF_AnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
|
void TstPrn_ComputeTF_AnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
|
||||||
const struct Tst_Question *Question)
|
const struct Tst_Question *Question)
|
||||||
{
|
{
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_BLANK;
|
||||||
|
PrintedQuestion->Score = 0.0;
|
||||||
|
|
||||||
if (PrintedQuestion->StrAnswers[0]) // If user has selected T or F
|
if (PrintedQuestion->StrAnswers[0]) // If user has selected T or F
|
||||||
PrintedQuestion->Score = (PrintedQuestion->StrAnswers[0] == Question->Answer.TF) ? 1.0 : // Correct
|
{
|
||||||
-1.0; // Wrong
|
if (PrintedQuestion->StrAnswers[0] == Question->Answer.TF)
|
||||||
else
|
{
|
||||||
PrintedQuestion->Score = 0.0;
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_CORRECT;
|
||||||
|
PrintedQuestion->Score = 1.0; // Correct
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_WRONG_NEGATIVE;
|
||||||
|
PrintedQuestion->Score = -1.0; // Wrong
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TstPrn_ComputeChoAnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
|
void TstPrn_ComputeChoAnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
|
||||||
const struct Tst_Question *Question)
|
const struct Tst_Question *Question)
|
||||||
{
|
{
|
||||||
unsigned Indexes[Tst_MAX_OPTIONS_PER_QUESTION]; // Indexes of all answers of this question
|
unsigned Indexes[Tst_MAX_OPTIONS_PER_QUESTION]; // Indexes of all answers of this question
|
||||||
bool UsrAnswers[Tst_MAX_OPTIONS_PER_QUESTION];
|
bool UsrAnswers[Tst_MAX_OPTIONS_PER_QUESTION];
|
||||||
|
@ -1071,6 +1096,9 @@ void TstPrn_ComputeChoAnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
|
||||||
unsigned NumAnsGood = 0;
|
unsigned NumAnsGood = 0;
|
||||||
unsigned NumAnsBad = 0;
|
unsigned NumAnsBad = 0;
|
||||||
|
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_BLANK;
|
||||||
|
PrintedQuestion->Score = 0.0;
|
||||||
|
|
||||||
/***** Get indexes for this question from string *****/
|
/***** Get indexes for this question from string *****/
|
||||||
TstPrn_GetIndexesFromStr (PrintedQuestion->StrIndexes,Indexes);
|
TstPrn_GetIndexesFromStr (PrintedQuestion->StrIndexes,Indexes);
|
||||||
|
|
||||||
|
@ -1095,39 +1123,68 @@ void TstPrn_ComputeChoAnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The answer is blank? */
|
/* The answer is not blank? */
|
||||||
if (NumAnsGood || NumAnsBad) // If user has answered the answer
|
if (NumAnsGood || NumAnsBad) // If user has answered the answer
|
||||||
{
|
{
|
||||||
/* Compute the score */
|
/* Compute the score */
|
||||||
if (Question->Answer.Type == Tst_ANS_UNIQUE_CHOICE)
|
if (Question->Answer.Type == Tst_ANS_UNIQUE_CHOICE)
|
||||||
{
|
{
|
||||||
if (NumOptTotInQst >= 2) // It should be 2 options at least
|
if (NumOptTotInQst >= 2) // It should be 2 options at least
|
||||||
PrintedQuestion->Score = (double) NumAnsGood -
|
{
|
||||||
(double) NumAnsBad / (double) (NumOptTotInQst - 1);
|
if (NumAnsGood == 1 && NumAnsBad == 0)
|
||||||
else // 0 or 1 options (impossible)
|
{
|
||||||
PrintedQuestion->Score = (double) NumAnsGood;
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_CORRECT;
|
||||||
|
PrintedQuestion->Score = 1;
|
||||||
|
}
|
||||||
|
else if (NumAnsGood == 0 && NumAnsBad == 1)
|
||||||
|
{
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_WRONG_NEGATIVE;
|
||||||
|
PrintedQuestion->Score = -1.0 / (double) (NumOptTotInQst - 1);
|
||||||
|
}
|
||||||
|
// other case should be impossible
|
||||||
|
}
|
||||||
|
// other case should be impossible
|
||||||
}
|
}
|
||||||
else // AnswerType == Tst_ANS_MULTIPLE_CHOICE
|
else // AnswerType == Tst_ANS_MULTIPLE_CHOICE
|
||||||
{
|
{
|
||||||
if (NumOptCorrInQst) // There are correct options in the question
|
if (NumOptCorrInQst) // There are correct options in the question
|
||||||
{
|
{
|
||||||
if (NumOptCorrInQst < NumOptTotInQst) // If there are correct options and wrong options (typical case)
|
if (NumAnsGood == NumOptCorrInQst && NumAnsBad == 0)
|
||||||
PrintedQuestion->Score = (double) NumAnsGood / (double) NumOptCorrInQst -
|
{
|
||||||
(double) NumAnsBad / (double) (NumOptTotInQst - NumOptCorrInQst);
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_CORRECT;
|
||||||
else // If all options are correct (extrange case)
|
PrintedQuestion->Score = 1.0;
|
||||||
PrintedQuestion->Score = (double) NumAnsGood / (double) NumOptCorrInQst;
|
}
|
||||||
}
|
else
|
||||||
else
|
{
|
||||||
{
|
if (NumOptCorrInQst < NumOptTotInQst) // If there are correct options and wrong options (typical case)
|
||||||
if (NumOptTotInQst) // There are options but none is correct (extrange case)
|
{
|
||||||
PrintedQuestion->Score = - (double) NumAnsBad / (double) NumOptTotInQst;
|
PrintedQuestion->Score = (double) NumAnsGood / (double) NumOptCorrInQst -
|
||||||
else // There are no options (impossible!)
|
(double) NumAnsBad / (double) (NumOptTotInQst - NumOptCorrInQst);
|
||||||
PrintedQuestion->Score = 0.0;
|
if (PrintedQuestion->Score > 0.000001)
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_WRONG_POSITIVE;
|
||||||
|
else if (PrintedQuestion->Score < -0.000001)
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_WRONG_NEGATIVE;
|
||||||
|
else // Score is 0
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_WRONG_ZERO;
|
||||||
|
}
|
||||||
|
else // If all options are correct (extrange case)
|
||||||
|
{
|
||||||
|
if (NumAnsGood == 0)
|
||||||
|
{
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_WRONG_ZERO;
|
||||||
|
PrintedQuestion->Score = 0.0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_WRONG_POSITIVE;
|
||||||
|
PrintedQuestion->Score = (double) NumAnsGood / (double) NumOptCorrInQst;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
// other case should be impossible
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // Answer is blank
|
|
||||||
PrintedQuestion->Score = 0.0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TstPrn_ComputeTxtAnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
|
void TstPrn_ComputeTxtAnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
|
||||||
|
@ -1137,7 +1194,9 @@ void TstPrn_ComputeTxtAnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
|
||||||
char TextAnsUsr[Tst_MAX_BYTES_ANSWERS_ONE_QST + 1];
|
char TextAnsUsr[Tst_MAX_BYTES_ANSWERS_ONE_QST + 1];
|
||||||
char TextAnsOK[Tst_MAX_BYTES_ANSWERS_ONE_QST + 1];
|
char TextAnsOK[Tst_MAX_BYTES_ANSWERS_ONE_QST + 1];
|
||||||
|
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_BLANK;
|
||||||
PrintedQuestion->Score = 0.0; // Default score for blank or wrong answer
|
PrintedQuestion->Score = 0.0; // Default score for blank or wrong answer
|
||||||
|
|
||||||
if (PrintedQuestion->StrAnswers[0]) // If user has answered the answer
|
if (PrintedQuestion->StrAnswers[0]) // If user has answered the answer
|
||||||
{
|
{
|
||||||
/* Filter the user answer */
|
/* Filter the user answer */
|
||||||
|
@ -1149,6 +1208,7 @@ void TstPrn_ComputeTxtAnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
|
||||||
Str_ReplaceSeveralSpacesForOne (TextAnsUsr);
|
Str_ReplaceSeveralSpacesForOne (TextAnsUsr);
|
||||||
Str_ConvertToComparable (TextAnsUsr);
|
Str_ConvertToComparable (TextAnsUsr);
|
||||||
|
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_WRONG_ZERO;
|
||||||
for (NumOpt = 0;
|
for (NumOpt = 0;
|
||||||
NumOpt < Question->Answer.NumOptions;
|
NumOpt < Question->Answer.NumOptions;
|
||||||
NumOpt++)
|
NumOpt++)
|
||||||
|
@ -1160,7 +1220,11 @@ void TstPrn_ComputeTxtAnsScore (struct TstPrn_PrintedQuestion *PrintedQuestion,
|
||||||
|
|
||||||
/* Check is user answer is correct */
|
/* Check is user answer is correct */
|
||||||
if (!strcoll (TextAnsUsr,TextAnsOK))
|
if (!strcoll (TextAnsUsr,TextAnsOK))
|
||||||
|
{
|
||||||
|
PrintedQuestion->AnswerIsCorrect = TstPrn_ANSWER_IS_CORRECT;
|
||||||
PrintedQuestion->Score = 1.0; // Correct answer
|
PrintedQuestion->Score = 1.0; // Correct answer
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1889,7 +1953,7 @@ static void TstPrn_ShowUsrsPrints (__attribute__((unused)) void *Args)
|
||||||
/***** Begin box and table *****/
|
/***** Begin box and table *****/
|
||||||
Box_BoxTableBegin (NULL,Txt_Results,
|
Box_BoxTableBegin (NULL,Txt_Results,
|
||||||
NULL,NULL,
|
NULL,NULL,
|
||||||
Hlp_ASSESSMENT_Tests_results,Box_NOT_CLOSABLE,2);
|
Hlp_ASSESSMENT_Tests_results,Box_NOT_CLOSABLE,5);
|
||||||
|
|
||||||
/***** Header of the table with the list of users *****/
|
/***** Header of the table with the list of users *****/
|
||||||
TstPrn_ShowHeaderPrints ();
|
TstPrn_ShowHeaderPrints ();
|
||||||
|
@ -1925,7 +1989,7 @@ static void TstPrn_ShowHeaderPrints (void)
|
||||||
extern const char *Txt_Questions;
|
extern const char *Txt_Questions;
|
||||||
extern const char *Txt_Non_blank_BR_questions;
|
extern const char *Txt_Non_blank_BR_questions;
|
||||||
extern const char *Txt_Score;
|
extern const char *Txt_Score;
|
||||||
extern const char *Txt_Average_BR_score_BR_per_question_BR_less_than_or_equal_to_1;
|
extern const char *Txt_Average_BR_score_BR_per_question;
|
||||||
extern const char *Txt_Grade;
|
extern const char *Txt_Grade;
|
||||||
|
|
||||||
HTM_TR_Begin (NULL);
|
HTM_TR_Begin (NULL);
|
||||||
|
@ -1936,7 +2000,7 @@ static void TstPrn_ShowHeaderPrints (void)
|
||||||
HTM_TH (1,1,"RT",Txt_Questions);
|
HTM_TH (1,1,"RT",Txt_Questions);
|
||||||
HTM_TH (1,1,"RT",Txt_Non_blank_BR_questions);
|
HTM_TH (1,1,"RT",Txt_Non_blank_BR_questions);
|
||||||
HTM_TH (1,1,"RT",Txt_Score);
|
HTM_TH (1,1,"RT",Txt_Score);
|
||||||
HTM_TH (1,1,"RT",Txt_Average_BR_score_BR_per_question_BR_less_than_or_equal_to_1);
|
HTM_TH (1,1,"RT",Txt_Average_BR_score_BR_per_question);
|
||||||
HTM_TH (1,1,"RT",Txt_Grade);
|
HTM_TH (1,1,"RT",Txt_Grade);
|
||||||
HTM_TH_Empty (1);
|
HTM_TH_Empty (1);
|
||||||
|
|
||||||
|
@ -2223,25 +2287,25 @@ static void TstPrn_ShowPrintsSummaryRow (bool ItsMe,
|
||||||
HTM_TR_Begin (NULL);
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
/***** Row title *****/
|
/***** Row title *****/
|
||||||
HTM_TD_Begin ("colspan=\"2\" class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("colspan=\"2\" class=\"DAT_N LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
HTM_TxtColonNBSP (Txt_Visible_tests);
|
HTM_TxtColonNBSP (Txt_Visible_tests);
|
||||||
HTM_Unsigned (NumPrints);
|
HTM_Unsigned (NumPrints);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Write total number of questions *****/
|
/***** Write total number of questions *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
if (NumPrints)
|
if (NumPrints)
|
||||||
HTM_Unsigned (NumTotalQsts);
|
HTM_Unsigned (NumTotalQsts);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Write total number of questions not blank *****/
|
/***** Write total number of questions not blank *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
if (NumPrints)
|
if (NumPrints)
|
||||||
HTM_Unsigned (NumTotalQstsNotBlank);
|
HTM_Unsigned (NumTotalQstsNotBlank);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Write total score *****/
|
/***** Write total score *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
if (ICanViewTotalScore)
|
if (ICanViewTotalScore)
|
||||||
{
|
{
|
||||||
HTM_Double2Decimals (TotalScoreOfAllTests);
|
HTM_Double2Decimals (TotalScoreOfAllTests);
|
||||||
|
@ -2251,20 +2315,20 @@ static void TstPrn_ShowPrintsSummaryRow (bool ItsMe,
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Write average score per question *****/
|
/***** Write average score per question *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
if (ICanViewTotalScore)
|
if (ICanViewTotalScore)
|
||||||
HTM_Double2Decimals (NumTotalQsts ? TotalScoreOfAllTests / (double) NumTotalQsts :
|
HTM_Double2Decimals (NumTotalQsts ? TotalScoreOfAllTests / (double) NumTotalQsts :
|
||||||
0.0);
|
0.0);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Write score over Tst_SCORE_MAX *****/
|
/***** Write score over Tst_SCORE_MAX *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
if (ICanViewTotalScore)
|
if (ICanViewTotalScore)
|
||||||
TstPrn_ComputeAndShowGrade (NumTotalQsts,TotalScoreOfAllTests,Tst_SCORE_MAX);
|
TstPrn_ComputeAndShowGrade (NumTotalQsts,TotalScoreOfAllTests,Tst_SCORE_MAX);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** Last cell *****/
|
/***** Last cell *****/
|
||||||
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP COLOR%u\"",Gbl.RowEvenOdd);
|
HTM_TD_Begin ("class=\"DAT_N LINE_TOP COLOR%u\"",Gbl.RowEvenOdd);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/***** End row *****/
|
/***** End row *****/
|
||||||
|
@ -2283,7 +2347,7 @@ void TstPrn_ShowOnePrint (void)
|
||||||
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
||||||
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
|
||||||
extern const char *Txt_Questions;
|
extern const char *Txt_Questions;
|
||||||
extern const char *Txt_QUESTIONS_non_blank;
|
extern const char *Txt_Answers;
|
||||||
extern const char *Txt_Score;
|
extern const char *Txt_Score;
|
||||||
extern const char *Txt_Grade;
|
extern const char *Txt_Grade;
|
||||||
extern const char *Txt_Tags;
|
extern const char *Txt_Tags;
|
||||||
|
@ -2381,7 +2445,7 @@ void TstPrn_ShowOnePrint (void)
|
||||||
HTM_TxtColon (Txt_ROLES_SINGUL_Abc[Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs.Role][Gbl.Usrs.Other.UsrDat.Sex]);
|
HTM_TxtColon (Txt_ROLES_SINGUL_Abc[Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs.Role][Gbl.Usrs.Other.UsrDat.Sex]);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT LT\"");
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
ID_WriteUsrIDs (&Gbl.Usrs.Other.UsrDat,NULL);
|
ID_WriteUsrIDs (&Gbl.Usrs.Other.UsrDat,NULL);
|
||||||
HTM_TxtF (" %s",Gbl.Usrs.Other.UsrDat.Surname1);
|
HTM_TxtF (" %s",Gbl.Usrs.Other.UsrDat.Surname1);
|
||||||
if (Gbl.Usrs.Other.UsrDat.Surname2[0])
|
if (Gbl.Usrs.Other.UsrDat.Surname2[0])
|
||||||
|
@ -2411,7 +2475,7 @@ void TstPrn_ShowOnePrint (void)
|
||||||
HTM_TxtColon (Txt_START_END_TIME[StartEndTime]);
|
HTM_TxtColon (Txt_START_END_TIME[StartEndTime]);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("id=\"%s\" class=\"DAT LT\"",Id);
|
HTM_TD_Begin ("id=\"%s\" class=\"DAT LB\"",Id);
|
||||||
Dat_WriteLocalDateHMSFromUTC (Id,Print.TimeUTC[StartEndTime],
|
Dat_WriteLocalDateHMSFromUTC (Id,Print.TimeUTC[StartEndTime],
|
||||||
Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA,
|
Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA,
|
||||||
true,true,true,0x7);
|
true,true,true,0x7);
|
||||||
|
@ -2429,9 +2493,21 @@ void TstPrn_ShowOnePrint (void)
|
||||||
HTM_TxtColon (Txt_Questions);
|
HTM_TxtColon (Txt_Questions);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT LT\"");
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
HTM_TxtF ("%u; %s: %u",
|
HTM_Unsigned (Print.NumQsts);
|
||||||
Print.NumQsts,Txt_QUESTIONS_non_blank,Print.NumQstsNotBlank);
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
HTM_TR_End ();
|
||||||
|
|
||||||
|
/***** Number of answers *****/
|
||||||
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
|
HTM_TD_Begin ("class=\"DAT_N RT\"");
|
||||||
|
HTM_TxtColon (Txt_Answers);
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
|
HTM_Unsigned (Print.NumQstsNotBlank);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TR_End ();
|
HTM_TR_End ();
|
||||||
|
@ -2443,7 +2519,7 @@ void TstPrn_ShowOnePrint (void)
|
||||||
HTM_TxtColon (Txt_Score);
|
HTM_TxtColon (Txt_Score);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT LT\"");
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
if (ICanViewScore)
|
if (ICanViewScore)
|
||||||
{
|
{
|
||||||
HTM_STRONG_Begin ();
|
HTM_STRONG_Begin ();
|
||||||
|
@ -2463,7 +2539,7 @@ void TstPrn_ShowOnePrint (void)
|
||||||
HTM_TxtColon (Txt_Grade);
|
HTM_TxtColon (Txt_Grade);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT LT\"");
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
if (ICanViewScore)
|
if (ICanViewScore)
|
||||||
{
|
{
|
||||||
HTM_STRONG_Begin ();
|
HTM_STRONG_Begin ();
|
||||||
|
@ -2483,7 +2559,7 @@ void TstPrn_ShowOnePrint (void)
|
||||||
HTM_TxtColon (Txt_Tags);
|
HTM_TxtColon (Txt_Tags);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
HTM_TD_Begin ("class=\"DAT LT\"");
|
HTM_TD_Begin ("class=\"DAT LB\"");
|
||||||
TstPrn_ShowTagsPresentInAPrint (Print.PrnCod);
|
TstPrn_ShowTagsPresentInAPrint (Print.PrnCod);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
|
|
@ -40,13 +40,23 @@
|
||||||
/******************************* Public types ********************************/
|
/******************************* Public types ********************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
TstPrn_ANSWER_IS_CORRECT,
|
||||||
|
TstPrn_ANSWER_IS_WRONG_NEGATIVE,
|
||||||
|
TstPrn_ANSWER_IS_WRONG_ZERO,
|
||||||
|
TstPrn_ANSWER_IS_WRONG_POSITIVE,
|
||||||
|
TstPrn_ANSWER_IS_BLANK,
|
||||||
|
} TstPrn_Correct_t;
|
||||||
|
|
||||||
struct TstPrn_PrintedQuestion
|
struct TstPrn_PrintedQuestion
|
||||||
{
|
{
|
||||||
long QstCod; // Question code
|
long QstCod; // Question code
|
||||||
long SetCod; // Only for exams
|
long SetCod; // Only for exams
|
||||||
char StrIndexes[Tst_MAX_BYTES_INDEXES_ONE_QST + 1]; // 0 1 2 3, 3 0 2 1, etc.
|
char StrIndexes[Tst_MAX_BYTES_INDEXES_ONE_QST + 1]; // 0 1 2 3, 3 0 2 1, etc.
|
||||||
char StrAnswers[Tst_MAX_BYTES_ANSWERS_ONE_QST + 1]; // Answers selected by user
|
char StrAnswers[Tst_MAX_BYTES_ANSWERS_ONE_QST + 1]; // Answers selected by user
|
||||||
double Score; // Question score
|
TstPrn_Correct_t AnswerIsCorrect; // Is question wrong, medium or correct?
|
||||||
|
double Score; // Question score
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TstPrn_Print
|
struct TstPrn_Print
|
||||||
|
|
167
swad_text.c
167
swad_text.c
|
@ -2522,6 +2522,27 @@ const char *Txt_Availability =
|
||||||
"Disponibilidade";
|
"Disponibilidade";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_average =
|
||||||
|
#if L==1 // ca
|
||||||
|
"mitjana";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Mittel";
|
||||||
|
#elif L==3 // en
|
||||||
|
"average";
|
||||||
|
#elif L==4 // es
|
||||||
|
"media";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"moyenne";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"media"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"media";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"średnia";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"média";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_Average_number_BR_of_ASSIG_BR_per_course =
|
const char *Txt_Average_number_BR_of_ASSIG_BR_per_course =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Nombre mitj´<br />d'activitats<br />per assignatura";
|
"Nombre mitj´<br />d'activitats<br />per assignatura";
|
||||||
|
@ -2819,25 +2840,25 @@ const char *Txt_AVERAGE_PHOTO_TYPES[Pho_NUM_AVERAGE_PHOTO_TYPES] =
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *Txt_Average_BR_score_BR_per_question_BR_less_than_or_equal_to_1 =
|
const char *Txt_Average_BR_score_BR_per_question =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Puntuació<br />mitjana<br />per pregunta<br />(≤1)";
|
"Puntuació<br />mitjana<br />per pregunta";
|
||||||
#elif L==2 // de
|
#elif L==2 // de
|
||||||
"Durchschnittliche<br />Punktzahl<br />pro Frage<br />(≤1)";
|
"Durchschnittliche<br />Punktzahl<br />pro Frage";
|
||||||
#elif L==3 // en
|
#elif L==3 // en
|
||||||
"Average<br />score<br />per question<br />(≤1)";
|
"Average<br />score<br />per question";
|
||||||
#elif L==4 // es
|
#elif L==4 // es
|
||||||
"Puntuación<br />media<br />por pregunta<br />(≤1)";
|
"Puntuación<br />media<br />por pregunta";
|
||||||
#elif L==5 // fr
|
#elif L==5 // fr
|
||||||
"Score<br />moyen<br />par question<br />(≤1)";
|
"Score<br />moyen<br />par question";
|
||||||
#elif L==6 // gn
|
#elif L==6 // gn
|
||||||
"Puntuación<br />media<br />por pregunta<br />(≤1)"; // Okoteve traducción
|
"Puntuación<br />media<br />por pregunta"; // Okoteve traducción
|
||||||
#elif L==7 // it
|
#elif L==7 // it
|
||||||
"Punteggio<br />medio<br />per domanda<br />(≤1)";
|
"Punteggio<br />medio<br />per domanda";
|
||||||
#elif L==8 // pl
|
#elif L==8 // pl
|
||||||
"Średnia<br />ocena<br />za pytanie<br />(≤1)";
|
"Średnia<br />ocena<br />za pytanie";
|
||||||
#elif L==9 // pt
|
#elif L==9 // pt
|
||||||
"Pontuação<br />média por<br />pergunta<br />(≤1)";
|
"Pontuação<br />média por<br />pergunta";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *Txt_Average_type =
|
const char *Txt_Average_type =
|
||||||
|
@ -3086,6 +3107,27 @@ const char *Txt_Before_going_to_any_other_option_you_must_fill_in_your_email_add
|
||||||
"você deve preencher seu endereço de email.";
|
"você deve preencher seu endereço de email.";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_blank_ANSWERS =
|
||||||
|
#if L==1 // ca
|
||||||
|
"en blanc";
|
||||||
|
#elif L==2 // de
|
||||||
|
"leere";
|
||||||
|
#elif L==3 // en
|
||||||
|
"blank";
|
||||||
|
#elif L==4 // es
|
||||||
|
"en blanco";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"vides";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"en blanco"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"vuote";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"puste";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"em branco";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_Briefcase_of_THE_USER_X_has_been_removed = // Warning: it is very important to include %s in the following sentences
|
const char *Txt_Briefcase_of_THE_USER_X_has_been_removed = // Warning: it is very important to include %s in the following sentences
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Se ha eliminado el maletín de <strong>%s</strong>."; // Necessita traduccio
|
"Se ha eliminado el maletín de <strong>%s</strong>."; // Necessita traduccio
|
||||||
|
@ -4988,6 +5030,27 @@ const char *Txt_Copy_source =
|
||||||
"Origem da copia";
|
"Origem da copia";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_correct_ANSWERS =
|
||||||
|
#if L==1 // ca
|
||||||
|
"correctes";
|
||||||
|
#elif L==2 // de
|
||||||
|
"richtige";
|
||||||
|
#elif L==3 // en
|
||||||
|
"correct";
|
||||||
|
#elif L==4 // es
|
||||||
|
"correctas";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"bonnes";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"correctas"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"corrette";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"prawidłowe";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"corretas";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_Could_not_detect_any_face_in_front_position_ =
|
const char *Txt_Could_not_detect_any_face_in_front_position_ =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"No s'ha detectat cap rostre en posició frontal.";
|
"No s'ha detectat cap rostre en posició frontal.";
|
||||||
|
@ -33056,27 +33119,6 @@ const char *Txt_Questions_and_problems =
|
||||||
"Perguntas e problemas";
|
"Perguntas e problemas";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *Txt_QUESTIONS_non_blank =
|
|
||||||
#if L==1 // ca
|
|
||||||
"contestades";
|
|
||||||
#elif L==2 // de
|
|
||||||
"Non-blank";
|
|
||||||
#elif L==3 // en
|
|
||||||
"non-blank";
|
|
||||||
#elif L==4 // es
|
|
||||||
"contestadas";
|
|
||||||
#elif L==5 // fr
|
|
||||||
"non vide";
|
|
||||||
#elif L==6 // gn
|
|
||||||
"contestadas"; // Okoteve traducción
|
|
||||||
#elif L==7 // it
|
|
||||||
"risposte";
|
|
||||||
#elif L==8 // pl
|
|
||||||
"niepustych";
|
|
||||||
#elif L==9 // pt
|
|
||||||
"respondidas";
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *Txt_QUESTIONS_invalid =
|
const char *Txt_QUESTIONS_invalid =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"anul·lades";
|
"anul·lades";
|
||||||
|
@ -53694,6 +53736,27 @@ const char *Txt_Total =
|
||||||
"Total";
|
"Total";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_total =
|
||||||
|
#if L==1 // ca
|
||||||
|
"total";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Gesamtzahl";
|
||||||
|
#elif L==3 // en
|
||||||
|
"total";
|
||||||
|
#elif L==4 // es
|
||||||
|
"total";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"total";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"total"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"totale";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"całkowity";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"total";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_TST_Answer_given_by_the_teachers =
|
const char *Txt_TST_Answer_given_by_the_teachers =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Resposta donada pels professors";
|
"Resposta donada pels professors";
|
||||||
|
@ -56008,6 +56071,27 @@ const char *Txt_Vacants =
|
||||||
"Desocupados";
|
"Desocupados";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_Valid_answers =
|
||||||
|
#if L==1 // ca
|
||||||
|
"Respostes vàlides";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Gültige Antworten";
|
||||||
|
#elif L==3 // en
|
||||||
|
"Valid answers";
|
||||||
|
#elif L==4 // es
|
||||||
|
"Respuestas válidas";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Réponses valides";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Respuestas válidas"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Risposte valide";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Prawidłowe odpowiedzi";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Respostas válidas";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_valid_grade =
|
const char *Txt_valid_grade =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"nota vàlida";
|
"nota vàlida";
|
||||||
|
@ -57106,6 +57190,27 @@ const char *Txt_Write_a_message =
|
||||||
"Escrever uma mensagem";
|
"Escrever uma mensagem";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_wrong_ANSWERS =
|
||||||
|
#if L==1 // ca
|
||||||
|
"incorrectes";
|
||||||
|
#elif L==2 // de
|
||||||
|
"falsche";
|
||||||
|
#elif L==3 // en
|
||||||
|
"wrong";
|
||||||
|
#elif L==4 // es
|
||||||
|
"erróneas";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"mauvaises";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"erróneas"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"sbagliate";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"złe";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"erradas";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_Wrong_file_type =
|
const char *Txt_Wrong_file_type =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Tipus d'arxiu incorrecte.";
|
"Tipus d'arxiu incorrecte.";
|
||||||
|
|
Loading…
Reference in New Issue