Version19.251

This commit is contained in:
acanas 2020-06-18 20:06:17 +02:00
parent 4e51c2192d
commit d0ff85847a
37 changed files with 583 additions and 419 deletions

View File

@ -2392,7 +2392,7 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;}
.DAT {color:#404040; font-size:13pt;}
.DAT_NOBR {color:#404040; font-size:13pt; white-space:nowrap;}
.DAT_BOLD {color:#404040; font-size:13pt; font-weight:bold;}
.DAT_GREEN {color:darkgreen; font-size:13pt;}
.DAT_GREEN {color:#246600; font-size:13pt;}
.DAT_RED {color:#660000; font-size:13pt;}
.DAT_LIGHT {color:#A0A0A0; font-size:13pt;}
.DAT_N {color:black; font-size:13pt;}

View File

@ -1784,6 +1784,12 @@ void HTM_Txt (const char *Txt)
fputs (Txt,Gbl.F.Out);
}
void HTM_TxtColon (const char *Txt)
{
HTM_Txt (Txt);
HTM_Colon ();
}
void HTM_TxtColonNBSP (const char *Txt)
{
HTM_Txt (Txt);

View File

@ -185,6 +185,7 @@ void HTM_BR (void);
void HTM_TxtF (const char *fmt,...);
void HTM_Txt (const char *Txt);
void HTM_TxtColon (const char *Txt);
void HTM_TxtColonNBSP (const char *Txt);
void HTM_NBSP (void);
void HTM_Colon (void);

View File

@ -340,7 +340,7 @@ static void Ann_DrawAnAnnouncement (long AnnCod,Ann_Status_t Status,
if (ShowAllAnnouncements)
{
/* Users' roles who can view this announcement */
HTM_TxtF ("%s:",Txt_Users);
HTM_TxtColon (Txt_Users);
for (Role = Rol_UNK, SomeRolesAreSelected = false;
Role <= Rol_TCH;
Role++)

View File

@ -1288,7 +1288,7 @@ void Asg_RequestCreatOrEditAsg (void)
/* Data */
HTM_TD_Begin ("class=\"LM\"");
HTM_LABEL_Begin ("class=\"DAT\"");
HTM_TxtF ("%s:",Txt_Folder);
HTM_TxtColon (Txt_Folder);
HTM_INPUT_TEXT ("Folder",Brw_MAX_CHARS_FOLDER,Asg.Folder,
HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"Folder\" size=\"30\"");
@ -1351,7 +1351,7 @@ static void Asg_ShowLstGrpsToEditAssignment (long AsgCod)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Groups);
HTM_TxtColon (Txt_Groups);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LT\"");

View File

@ -1253,7 +1253,7 @@ static void Att_ShowLstGrpsToEditAttEvent (long AttCod)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Groups);
HTM_TxtColon (Txt_Groups);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LT\"");
@ -3359,7 +3359,7 @@ static void Att_ListUsrsAttendanceTable (const struct Att_Events *Events,
HTM_TD_Begin ("colspan=\"%u\" class=\"DAT_N_LINE_TOP RM\"",
Gbl.Usrs.Listing.WithPhotos ? 4 :
3);
HTM_TxtF ("%s:",Txt_Number_of_users);
HTM_TxtColon (Txt_Number_of_users);
HTM_TD_End ();
for (NumAttEvent = 0, Total = 0;
@ -3720,7 +3720,7 @@ static void Att_ListAttEventsForAStd (const struct Att_Events *Events,
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
CommentStd,Cns_MAX_BYTES_TEXT,false);
HTM_DT_Begin ();
HTM_TxtF ("%s:",Txt_Student_comment);
HTM_TxtColon (Txt_Student_comment);
HTM_DT_End ();
HTM_DD_Begin ();
HTM_Txt (CommentStd);
@ -3731,7 +3731,7 @@ static void Att_ListAttEventsForAStd (const struct Att_Events *Events,
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
CommentTch,Cns_MAX_BYTES_TEXT,false);
HTM_DT_Begin ();
HTM_TxtF ("%s:",Txt_Teachers_comment);
HTM_TxtColon (Txt_Teachers_comment);
HTM_DT_End ();
HTM_DD_Begin ();
HTM_Txt (CommentTch);

View File

@ -556,15 +556,17 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 19.250.3 (2020-06-18)"
#define Log_PLATFORM_VERSION "SWAD 19.251 (2020-06-18)"
#define CSS_FILE "swad19.250.css"
#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?
Se trataría de añadir un par de líneas "Nuevos archivos en actividades", "Nuevos archivos en otros trabajos".
TODO: Fix bug: Un estudiante recibe una notificación de un archivo de calificaciones. Luego el archivo es ocultado por el profesor. Pero desde la notificación sigue estando accesible, cuando no debería ser así. Reported by Adrián José Martínez Navarro.
TODO: Fix bug: Cuando se pulsa en ver fichas, y luego en una ficha en "Ver trabajos" o "Ver exámenes", o lo que sea, sale dos veces ese estudiante.
TODO: No limitar el número de preguntas en un examen a ExaPrn_MAX_QUESTIONS_PER_EXAM_PRINT, sino asignar PrintedQuestions dinámicamente con malloc
Version 19.251: Jun 18, 2020 Changes in test, exam and match results. (303263 lines)
Version 19.250.3: Jun 18, 2020 Show valid score and valid grade in listing of exam results. (303113 lines)
Version 19.250.2: Jun 17, 2020 Show valid score and valid grade in one exam result. (303069 lines)
Version 19.250.1: Jun 17, 2020 Fixed bug in attendance events, reported by Carlos A. Pozzo. (302977 lines)

View File

@ -1268,7 +1268,7 @@ static void Cty_ListCountriesForEdition (void)
/* Language */
HTM_TD_Begin ("class=\"DAT RM\"");
HTM_TxtF ("%s:",Txt_STR_LANG_NAME[Lan]);
HTM_TxtColon (Txt_STR_LANG_NAME[Lan]);
HTM_TD_End ();
/* Name */

View File

@ -2615,9 +2615,9 @@ void Crs_GetAndWriteCrssOfAUsr (const struct UsrData *UsrDat,Rol_Role_t Role)
HTM_TR_Begin (NULL);
HTM_TH_Begin (1,7,"LM");
HTM_TxtF ("%s:",Str_BuildStringStr (Txt_USER_in_COURSE,
Role == Rol_UNK ? Txt_User[Usr_SEX_UNKNOWN] : // Role == Rol_UNK ==> any role
Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex]));
HTM_TxtColon (Str_BuildStringStr (Txt_USER_in_COURSE,
Role == Rol_UNK ? Txt_User[Usr_SEX_UNKNOWN] : // Role == Rol_UNK ==> any role
Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex]));
Str_FreeString ();
HTM_TH_End ();

View File

@ -1521,7 +1521,7 @@ void Exa_PutFormEditionExam (struct Exa_Exams *Exams,
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RM\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Maximum_grade);
HTM_TxtColon (Txt_Maximum_grade);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LM\"");
@ -1535,7 +1535,7 @@ void Exa_PutFormEditionExam (struct Exa_Exams *Exams,
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Result_visibility);
HTM_TxtColon (Txt_Result_visibility);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LB\"");

View File

@ -162,12 +162,12 @@ static void ExaPrn_ResetPrintExceptEvtCodAndUsrCod (struct ExaPrn_Print *Print)
Print->PrnCod = -1L;
Print->TimeUTC[Dat_START_TIME] =
Print->TimeUTC[Dat_END_TIME ] = (time_t) 0;
Print->NumQsts =
Print->NumQstsValid =
Print->NumQstsNotBlank = 0;
Print->NumQsts.All =
Print->NumQsts.Valid =
Print->NumQsts.NotBlank = 0;
Print->Sent = false; // After creating an exam print, it's not sent
Print->Score =
Print->ScoreValid = 0.0;
Print->Score.All =
Print->Score.Valid = 0.0;
}
/*****************************************************************************/
@ -204,7 +204,7 @@ void ExaPrn_ShowExamPrint (void)
/***** Get questions from database *****/
ExaPrn_GetQuestionsForNewPrintFromDB (&Print,Exam.ExaCod);
if (Print.NumQsts)
if (Print.NumQsts.All)
{
/***** Create new exam print in database *****/
ExaPrn_CreatePrintInDB (&Print);
@ -268,20 +268,20 @@ void ExaPrn_GetDataOfPrintByCodAndUsrCod (struct ExaPrn_Print *Print)
Print->TimeUTC[Dat_END_TIME ] = Dat_GetUNIXTimeFromStr (row[2]);
/* Get number of questions (row[3]) */
if (sscanf (row[3],"%u",&Print->NumQsts) != 1)
Print->NumQsts = 0;
if (sscanf (row[3],"%u",&Print->NumQsts.All) != 1)
Print->NumQsts.All = 0;
/* Get number of questions not blank (row[4]) */
if (sscanf (row[4],"%u",&Print->NumQstsNotBlank) != 1)
Print->NumQstsNotBlank = 0;
if (sscanf (row[4],"%u",&Print->NumQsts.NotBlank) != 1)
Print->NumQsts.NotBlank = 0;
/* Get if exam has been sent (row[5]) */
Print->Sent = (row[5][0] == 'Y');
/* Get score (row[6]) */
Str_SetDecimalPointToUS (); // To get the decimal point as a dot
if (sscanf (row[6],"%lf",&Print->Score) != 1)
Print->Score = 0.0;
if (sscanf (row[6],"%lf",&Print->Score.All) != 1)
Print->Score.All = 0.0;
Str_SetDecimalPointToLocal (); // Return to local system
}
else
@ -317,7 +317,7 @@ static void ExaPrn_GetQuestionsForNewPrintFromDB (struct ExaPrn_Print *Print,lon
ExaCod);
/***** Get questions from all sets *****/
Print->NumQsts = 0;
Print->NumQsts.All = 0;
if (NumSets)
/***** For each set in exam... *****/
for (NumSet = 0;
@ -346,11 +346,11 @@ static void ExaPrn_GetQuestionsForNewPrintFromDB (struct ExaPrn_Print *Print,lon
/***** Questions in this set *****/
NumQstsFromSet = ExaPrn_GetSomeQstsFromSetToPrint (Print,&Set,&NumQstInPrint);
Print->NumQsts += NumQstsFromSet;
Print->NumQsts.All += NumQstsFromSet;
}
/***** Check *****/
if (Print->NumQsts != NumQstInPrint)
if (Print->NumQsts.All != NumQstInPrint)
Lay_ShowErrorAndExit ("Wrong number of questions.");
/***** Free structure that stores the query result *****/
@ -531,7 +531,7 @@ static void ExaPrn_CreatePrintInDB (struct ExaPrn_Print *Print)
/***** Store all questions (with blank answers)
of this exam print just generated in database *****/
for (NumQst = 0;
NumQst < Print->NumQsts;
NumQst < Print->NumQsts.All;
NumQst++)
ExaPrn_StoreOneQstOfPrintInDB (Print,NumQst);
}
@ -547,7 +547,7 @@ void ExaPrn_GetPrintQuestionsFromDB (struct ExaPrn_Print *Print)
unsigned NumQst;
/***** Get questions of an exam print from database *****/
Print->NumQsts =
Print->NumQsts.All =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get questions"
" of an exam print",
"SELECT QstCod," // row[0]
@ -561,9 +561,9 @@ void ExaPrn_GetPrintQuestionsFromDB (struct ExaPrn_Print *Print)
Print->PrnCod);
/***** Get questions *****/
if (Print->NumQsts <= ExaPrn_MAX_QUESTIONS_PER_EXAM_PRINT)
if (Print->NumQsts.All <= ExaPrn_MAX_QUESTIONS_PER_EXAM_PRINT)
for (NumQst = 0;
NumQst < Print->NumQsts;
NumQst < Print->NumQsts.All;
NumQst++)
{
row = mysql_fetch_row (mysql_res);
@ -594,7 +594,7 @@ void ExaPrn_GetPrintQuestionsFromDB (struct ExaPrn_Print *Print)
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
if (Print->NumQsts > ExaPrn_MAX_QUESTIONS_PER_EXAM_PRINT)
if (Print->NumQsts.All > ExaPrn_MAX_QUESTIONS_PER_EXAM_PRINT)
Lay_ShowErrorAndExit ("Too many questions.");
}
@ -620,7 +620,7 @@ static void ExaPrn_ShowExamPrintToFillIt (struct Exa_Exams *Exams,
Gbl.Hierarchy.Crs.CrsCod);
ExaPrn_GetAndWriteDescription (Exam->ExaCod);
if (Print->NumQsts)
if (Print->NumQsts.All)
{
/***** Show table with questions to answer *****/
HTM_DIV_Begin ("id=\"examprint\""); // Used for AJAX based refresh
@ -668,7 +668,7 @@ static void ExaPrn_ShowTableWithQstsToFill (struct Exa_Exams *Exams,
/***** Write one row for each question *****/
for (NumQst = 0;
NumQst < Print->NumQsts;
NumQst < Print->NumQsts.All;
NumQst++)
{
/* Create test question */
@ -1424,11 +1424,11 @@ static void ExaPrn_StoreOneQstOfPrintInDB (const struct ExaPrn_Print *Print,
static void ExaPrn_GetNumQstsNotBlank (struct ExaPrn_Print *Print)
{
/***** Count number of questions not blank in exam print in database *****/
Print->NumQstsNotBlank = (unsigned)
DB_QueryCOUNT ("can not get number of questions not blank",
"SELECT COUNT(*) FROM exa_print_questions"
" WHERE PrnCod=%ld AND Answers<>''",
Print->PrnCod);
Print->NumQsts.NotBlank = (unsigned)
DB_QueryCOUNT ("can not get number of questions not blank",
"SELECT COUNT(*) FROM exa_print_questions"
" WHERE PrnCod=%ld AND Answers<>''",
Print->PrnCod);
}
/*****************************************************************************/
@ -1441,7 +1441,7 @@ static void ExaPrn_ComputeTotalScoreOfPrint (struct ExaPrn_Print *Print)
MYSQL_ROW row;
/***** Default score *****/
Print->Score = 0.0;
Print->Score.All = 0.0;
/***** Compute total score of exam print *****/
if (DB_QuerySELECT (&mysql_res,"can not get score of exam print",
@ -1456,8 +1456,8 @@ static void ExaPrn_ComputeTotalScoreOfPrint (struct ExaPrn_Print *Print)
{
/* Get score (row[0]) */
Str_SetDecimalPointToUS (); // To get the decimal point as a dot
if (sscanf (row[0],"%lf",&Print->Score) != 1)
Print->Score = 0.0;
if (sscanf (row[0],"%lf",&Print->Score.All) != 1)
Print->Score.All = 0.0;
Str_SetDecimalPointToLocal (); // Return to local system
}
}
@ -1482,7 +1482,7 @@ static void ExaPrn_UpdatePrintInDB (const struct ExaPrn_Print *Print)
"Score='%.15lg'"
" WHERE PrnCod=%ld"
" AND SesCod=%ld AND UsrCod=%ld", // Extra checks
Print->NumQstsNotBlank,
Print->NumQsts.NotBlank,
Print->Sent ? 'Y' :
'N',
Print->Score,

View File

@ -35,19 +35,29 @@
#define ExaPrn_MAX_QUESTIONS_PER_EXAM_PRINT 100 // Absolute maximum number of questions in an exam print
struct ExaPrn_NumQuestions
{
unsigned All; // Total number of questions
unsigned Valid; // Number of valid questions (not invalidated by teachers)
unsigned NotBlank; // Number of answered questions (not blank)
};
struct ExaPrn_Score
{
double All; // Total score of the exam print (counting valid and invalid questions)
double Valid; // Total score of the exam print (counting only valid questions)
};
struct ExaPrn_Print
{
long PrnCod; // Exam print code
long SesCod; // Session code associated to this print
long UsrCod; // User who answered the exam print
long PrnCod; // Exam print code
long SesCod; // Session code associated to this print
long UsrCod; // User who answered the exam print
time_t TimeUTC[Dat_NUM_START_END_TIME];
unsigned NumQsts; // Number of questions
unsigned NumQstsValid; // Number of valid questions (not invalidated by teachers)
unsigned NumQstsNotBlank; // Number of questions not blank
bool Sent; // This exam print has been sent or not?
// "Sent" means that user has clicked "Send" button after finishing
double Score; // Total score of the exam print
double ScoreValid; // Total score taking into account only valid questions
bool Sent; // This exam print has been sent or not?
// "Sent" means that user has clicked "Send" button after finishing
struct ExaPrn_NumQuestions NumQsts;
struct ExaPrn_Score Score;
struct TstPrn_PrintedQuestion PrintedQuestions[ExaPrn_MAX_QUESTIONS_PER_EXAM_PRINT];
};

View File

@ -103,11 +103,10 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
long ExaCod, // <= 0 ==> any
const char *ExamsSelectedCommas);
static void ExaRes_ShowResultsSummaryRow (unsigned NumResults,
unsigned NumTotalQsts,
unsigned NumTotalQstsValid,
unsigned NumTotalQstsNotBlank,
double TotalScoreOfAllResults,
const struct ExaPrn_NumQuestions *NumTotalQsts,
const struct ExaPrn_Score *TotalScore,
double TotalGrade);
static void ExaRes_ShowNumQsts (const struct ExaPrn_NumQuestions *NumQsts);
static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
const struct ExaSes_Session *Session,
@ -119,7 +118,7 @@ static bool ExaRes_CheckIfICanSeePrintResult (const struct Exa_Exam *Exam,
long UsrCod);
static bool ExaRes_CheckIfICanViewScore (bool ICanViewResult,unsigned Visibility);
static void ExaRes_ComputeScoreValid (struct ExaPrn_Print *Print);
static void ExaRes_ComputeValidPrintScore (struct ExaPrn_Print *Print);
static void ExaRes_ShowExamAnswers (struct UsrData *UsrDat,
struct ExaPrn_Print *Print,
@ -700,21 +699,20 @@ static void ExaRes_ShowHeaderResults (Usr_MeOrOther_t MeOrOther)
extern const char *Txt_Questions;
extern const char *Txt_Non_blank_BR_questions;
extern const char *Txt_Score;
extern const char *Txt_Average_BR_score_BR_per_question_BR_from_0_to_1;
extern const char *Txt_Average_BR_score_BR_per_question_BR_less_than_or_equal_to_1;
extern const char *Txt_Grade;
HTM_TR_Begin (NULL);
HTM_TH (1,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 (1,1,"LT",Txt_START_END_TIME[Dat_END_TIME ]);
HTM_TH (1,1,"LT",Txt_Session);
HTM_TH (1,1,"RT",Txt_Questions);
HTM_TH (1,1,"RT","Preguntas v&aacute;lidas"); // TODO: Need translation!!!!
HTM_TH (1,1,"RT",Txt_Non_blank_BR_questions);
HTM_TH (1,1,"RT",Txt_Score);
HTM_TH (1,1,"RT",Txt_Average_BR_score_BR_per_question_BR_from_0_to_1);
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_Grade);
HTM_TH_Empty (1);
@ -778,11 +776,8 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
struct ExaPrn_Print Print;
struct ExaSes_Session Session;
Dat_StartEndTime_t StartEndTime;
unsigned NumTotalQsts = 0;
unsigned NumTotalQstsValid = 0;
unsigned NumTotalQstsNotBlank = 0;
double TotalScoreOfAllResults = 0.0;
double TotalScoreValidOfAllResults = 0.0;
struct ExaPrn_NumQuestions NumTotalQsts;
struct ExaPrn_Score TotalScore;
double MaxGrade;
double Grade;
double TotalGrade = 0.0;
@ -793,6 +788,13 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
ExaPrn_ResetPrint (&Print);
ExaSes_ResetSession (&Session);
/***** Reset total number of questions and total score *****/
NumTotalQsts.All =
NumTotalQsts.Valid =
NumTotalQsts.NotBlank = 0;
TotalScore.All =
TotalScore.Valid = 0.0;
/***** Set user *****/
UsrDat = (MeOrOther == Usr_ME) ? &Gbl.Usrs.Me.UsrDat :
&Gbl.Usrs.Other.UsrDat;
@ -861,11 +863,9 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
"exa_prints.SesCod," // row[1]
"UNIX_TIMESTAMP(exa_prints.StartTime)," // row[2]
"UNIX_TIMESTAMP(exa_prints.EndTime)," // row[3]
"exa_prints.NumQsts," // row[4]
"exa_prints.NumQstsNotBlank," // row[5]
"exa_prints.Score," // row[6]
"exa_exams.MaxGrade," // row[7]
"exa_exams.Visibility" // row[8]
"exa_prints.NumQstsNotBlank," // row[4]
"exa_exams.MaxGrade," // row[5]
"exa_exams.Visibility" // row[6]
" FROM exa_prints,exa_sessions,exa_exams"
" WHERE exa_prints.UsrCod=%ld"
"%s" // Session subquery
@ -906,8 +906,8 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
Lay_ShowErrorAndExit ("Wrong code of session.");
ExaSes_GetDataOfSessionByCod (&Session);
/* Get visibility (row[8]) */
Visibility = TstVis_GetVisibilityFromStr (row[8]);
/* Get visibility (row[6]) */
Visibility = TstVis_GetVisibilityFromStr (row[6]);
/* Show session result? */
ICanViewResult = true; // Filtering is already made in the query
@ -943,27 +943,22 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
{
/* Get questions and user's answers of exam print from database */
ExaPrn_GetPrintQuestionsFromDB (&Print);
NumTotalQsts += Print.NumQsts;
NumTotalQsts.All += Print.NumQsts.All;
/* Compute score taking into account only valid questions */
ExaRes_ComputeScoreValid (&Print);
NumTotalQstsValid += Print.NumQstsValid;
TotalScoreValidOfAllResults += Print.ScoreValid;
ExaRes_ComputeValidPrintScore (&Print);
NumTotalQsts.Valid += Print.NumQsts.Valid;
TotalScore.Valid += Print.Score.Valid;
/* Get number of questions not blank (row[5]) */
if (sscanf (row[5],"%u",&Print.NumQstsNotBlank) != 1)
Print.NumQstsNotBlank = 0;
NumTotalQstsNotBlank += Print.NumQstsNotBlank;
/* 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;
Str_SetDecimalPointToUS (); // To get the decimal point as a dot
/* Get score (row[6]) */
if (sscanf (row[6],"%lf",&Print.Score) != 1)
Print.Score = 0.0;
TotalScoreOfAllResults += Print.Score;
/* Get maximum grade (row[7]) */
if (sscanf (row[7],"%lf",&MaxGrade) != 1)
/* Get maximum grade (row[5]) */
if (sscanf (row[5],"%lf",&MaxGrade) != 1)
MaxGrade = 0.0;
Str_SetDecimalPointToLocal (); // Return to local system
@ -972,15 +967,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
/* Write number of questions */
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
if (ICanViewScore)
HTM_Unsigned (Print.NumQsts);
else
Ico_PutIconNotVisible ();
HTM_TD_End ();
/* Write number of valid questions */
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
if (ICanViewScore)
HTM_Unsigned (Print.NumQstsValid);
ExaRes_ShowNumQsts (&Print.NumQsts);
else
Ico_PutIconNotVisible ();
HTM_TD_End ();
@ -988,7 +975,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
/* Write number of questions not blank */
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
if (ICanViewScore)
HTM_Unsigned (Print.NumQstsNotBlank);
HTM_Unsigned (Print.NumQsts.NotBlank);
else
Ico_PutIconNotVisible ();
HTM_TD_End ();
@ -996,7 +983,11 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
/* Write score valid (taking into account only valid questions) */
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
if (ICanViewScore)
HTM_Double2Decimals (Print.ScoreValid);
{
HTM_Double2Decimals (Print.Score.Valid);
HTM_Txt ("/");
HTM_Unsigned (Print.NumQsts.Valid);
}
else
Ico_PutIconNotVisible ();
HTM_TD_End ();
@ -1004,9 +995,9 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
/* Write average score per question (taking into account only valid questions) */
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
if (ICanViewScore)
HTM_Double2Decimals (Print.NumQstsValid ? Print.ScoreValid /
(double) Print.NumQstsValid :
0.0);
HTM_Double2Decimals (Print.NumQsts.Valid ? Print.Score.Valid /
(double) Print.NumQsts.Valid :
0.0);
else
Ico_PutIconNotVisible ();
HTM_TD_End ();
@ -1015,7 +1006,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
if (ICanViewScore)
{
Grade = TstPrn_ComputeGrade (Print.NumQstsValid,Print.ScoreValid,MaxGrade);
Grade = TstPrn_ComputeGrade (Print.NumQsts.Valid,Print.Score.Valid,MaxGrade);
TstPrn_ShowGrade (Grade,MaxGrade);
TotalGrade += Grade;
}
@ -1052,14 +1043,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
}
/***** Write totals for this user *****/
// ExaRes_ShowResultsSummaryRow (NumResults,
// NumTotalQsts,NumTotalQstsNotBlank,
// TotalScoreOfAllResults,
// TotalGrade);
ExaRes_ShowResultsSummaryRow (NumResults,
NumTotalQsts,NumTotalQstsValid,NumTotalQstsNotBlank,
TotalScoreValidOfAllResults,
TotalGrade);
ExaRes_ShowResultsSummaryRow (NumResults,&NumTotalQsts,&TotalScore,TotalGrade);
}
else
{
@ -1074,14 +1058,12 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
}
/*****************************************************************************/
/************** Show row with summary of user's sessions results **************/
/**************** Show row with summary of user's exam results ***************/
/*****************************************************************************/
static void ExaRes_ShowResultsSummaryRow (unsigned NumResults,
unsigned NumTotalQsts,
unsigned NumTotalQstsValid,
unsigned NumTotalQstsNotBlank,
double TotalScoreOfAllResults,
const struct ExaPrn_NumQuestions *NumTotalQsts,
const struct ExaPrn_Score *TotalScore,
double TotalGrade)
{
extern const char *Txt_Sessions;
@ -1098,31 +1080,27 @@ static void ExaRes_ShowResultsSummaryRow (unsigned NumResults,
/***** Write total number of questions *****/
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
if (NumResults)
HTM_Unsigned (NumTotalQsts);
HTM_TD_End ();
/***** Write total number of questions valid *****/
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
if (NumResults)
HTM_Unsigned (NumTotalQstsValid);
ExaRes_ShowNumQsts (NumTotalQsts);
HTM_TD_End ();
/***** Write total number of questions not blank *****/
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
if (NumResults)
HTM_Unsigned (NumTotalQstsNotBlank);
HTM_Unsigned (NumTotalQsts->NotBlank);
HTM_TD_End ();
/***** Write total score *****/
/***** Write total valid score *****/
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
HTM_Double2Decimals (TotalScoreOfAllResults);
HTM_Double2Decimals (TotalScore->Valid);
HTM_Txt ("/");
HTM_Unsigned (NumTotalQsts->Valid);
HTM_TD_End ();
/***** Write average score per question *****/
/***** Write average valid score per valid question *****/
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
HTM_Double2Decimals (NumTotalQsts ? TotalScoreOfAllResults /
(double) NumTotalQsts :
0.0);
HTM_Double2Decimals (NumTotalQsts->Valid ? TotalScore->Valid /
(double) NumTotalQsts->Valid :
0.0);
HTM_TD_End ();
/***** Write total grade *****/
@ -1142,6 +1120,39 @@ static void ExaRes_ShowResultsSummaryRow (unsigned NumResults,
/*************************** 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)
{
struct Exa_Exams Exams;
@ -1214,9 +1225,13 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
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_Questions;
extern const char *Txt_non_blank_QUESTIONS;
extern const char *Txt_QUESTIONS_valid;
extern const char *Txt_QUESTIONS_invalid;
extern const char *Txt_QUESTIONS_non_blank;
extern const char *Txt_Score;
extern const char *Txt_valid_score;
extern const char *Txt_Grade;
extern const char *Txt_valid_grade;
bool ShowPhoto;
char PhotoURL[PATH_MAX + 1];
Dat_StartEndTime_t StartEndTime;
@ -1257,7 +1272,7 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
/***** Compute score taking into account only valid questions *****/
if (ICanView.Score)
ExaRes_ComputeScoreValid (Print);
ExaRes_ComputeValidPrintScore (Print);
/***** Begin box *****/
Box_BoxBegin (NULL,Session->Title,
@ -1271,8 +1286,8 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
/***** Begin table *****/
HTM_TABLE_BeginWideMarginPadding (10);
/***** Header row *****/
/* Get data of the user who answer the session */
/***** User *****/
/* Get data of the user who answered the exam print */
if (!Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (UsrDat,Usr_DONT_GET_PREFS))
Lay_ShowErrorAndExit (Txt_The_user_does_not_exist);
if (!Usr_CheckIfICanViewTstExaMchResult (UsrDat))
@ -1282,7 +1297,7 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",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_Begin ("class=\"DAT LT\"");
@ -1301,7 +1316,7 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
HTM_TR_End ();
/* Start/end time (for user in this session) */
/***** Start/end time (for user in this exam print) *****/
for (StartEndTime = (Dat_StartEndTime_t) 0;
StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
StartEndTime++)
@ -1309,7 +1324,7 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",Txt_START_END_TIME[StartEndTime]);
HTM_TxtColon (Txt_START_END_TIME[StartEndTime]);
HTM_TD_End ();
if (asprintf (&Id,"match_%u",(unsigned) StartEndTime) < 0)
@ -1324,23 +1339,38 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
HTM_TR_End ();
}
/* Number of questions */
/***** Number of questions *****/
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",Txt_Questions);
HTM_TxtColon (Txt_Questions);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LT\"");
if (ICanView.Result)
{
HTM_TxtF ("%u",Print->NumQsts);
if (Print->NumQsts != Print->NumQstsValid)
HTM_TxtF (" (%s: %u, %s: %u)",
"v&aacute;lidas",Print->NumQstsValid, // TODO: Need translation!!!
"anuladas",Print->NumQsts - Print->NumQstsValid); // TODO: Need translation!!!
HTM_TxtF ("; %s: %u",
Txt_non_blank_QUESTIONS,Print->NumQstsNotBlank);
HTM_TxtF ("%u",Print->NumQsts.All);
if (Print->NumQsts.All != Print->NumQsts.Valid)
{
HTM_Txt (" (");
/* Valid questions */
HTM_SPAN_Begin ("class=\"DAT_GREEN\"");
HTM_TxtColonNBSP (Txt_QUESTIONS_valid);
HTM_Unsigned (Print->NumQsts.Valid);
HTM_SPAN_End ();
HTM_TxtF (", ");
/* Invalid questions */
HTM_SPAN_Begin ("class=\"DAT_RED\"");
HTM_TxtColonNBSP (Txt_QUESTIONS_invalid);
HTM_Unsigned (Print->NumQsts.All - Print->NumQsts.Valid);
HTM_SPAN_End ();
HTM_Txt (")");
}
HTM_TxtF ("; %s: %u",Txt_QUESTIONS_non_blank,Print->NumQsts.NotBlank);
}
else
Ico_PutIconNotVisible ();
@ -1348,23 +1378,35 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
HTM_TR_End ();
/* Score */
/***** Score *****/
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",Txt_Score);
HTM_TxtColon (Txt_Score);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LT\"");
if (ICanView.Score)
{
HTM_Double2Decimals (Print->Score);
if (Print->NumQsts != Print->NumQstsValid)
/* Score counting all questions */
if (Print->NumQsts.All == Print->NumQsts.Valid)
HTM_STRONG_Begin ();
HTM_Double2Decimals (Print->Score.All);
HTM_Txt ("/");
HTM_Unsigned (Print->NumQsts.All);
if (Print->NumQsts.All == Print->NumQsts.Valid)
HTM_STRONG_End ();
/* Scoure counting only valid questions */
if (Print->NumQsts.All != Print->NumQsts.Valid)
{
HTM_Txt (" (");
HTM_TxtColonNBSP ("Puntuaci&oacute;n v&aacute;lida"); // TODO: Need translation!!!!
HTM_Double2Decimals (Print->ScoreValid);
HTM_Txt (")");
HTM_Txt ("; ");
HTM_TxtColonNBSP (Txt_valid_score);
HTM_STRONG_Begin ();
HTM_Double2Decimals (Print->Score.Valid);
HTM_Txt ("/");
HTM_Unsigned (Print->NumQsts.Valid);
HTM_STRONG_End ();
}
}
else
@ -1373,25 +1415,31 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
HTM_TR_End ();
/* Grade */
/***** Grade *****/
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",Txt_Grade);
HTM_TxtColon (Txt_Grade);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LT\"");
if (ICanView.Score)
{
TstPrn_ComputeAndShowGrade (Print->NumQsts,Print->Score,
Exam->MaxGrade);
if (Print->NumQsts != Print->NumQstsValid)
/* Grade counting all questions */
if (Print->NumQsts.All == Print->NumQsts.Valid)
HTM_STRONG_Begin ();
TstPrn_ComputeAndShowGrade (Print->NumQsts.All,Print->Score.All,Exam->MaxGrade);
if (Print->NumQsts.All == Print->NumQsts.Valid)
HTM_STRONG_End ();
/* Grade counting only valid questions */
if (Print->NumQsts.All != Print->NumQsts.Valid)
{
HTM_Txt (" (");
HTM_TxtColonNBSP ("Nota v&aacute;lida"); // TODO: Need translation!!!!
TstPrn_ComputeAndShowGrade (Print->NumQstsValid,Print->ScoreValid,
Exam->MaxGrade);
HTM_Txt (")");
HTM_Txt ("; ");
HTM_TxtColonNBSP (Txt_valid_grade);
HTM_STRONG_Begin ();
TstPrn_ComputeAndShowGrade (Print->NumQsts.Valid,Print->Score.Valid,Exam->MaxGrade);
HTM_STRONG_End ();
}
}
else
@ -1407,38 +1455,6 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
/***** End table *****/
HTM_TABLE_End ();
/***** Write total mark of session result *****/
if (ICanView.Score)
{
HTM_DIV_Begin ("class=\"DAT_N_BOLD CM\"");
/* Score */
HTM_TxtColonNBSP (Txt_Score);
HTM_Double2Decimals (Print->Score);
if (Print->NumQsts != Print->NumQstsValid)
{
HTM_Txt (" / ");
HTM_TxtColonNBSP ("Puntuaci&oacute;n v&aacute;lida"); // TODO: Need translation!!!!
HTM_Double2Decimals (Print->ScoreValid);
}
HTM_BR ();
/* Grade */
HTM_TxtColonNBSP (Txt_Grade);
TstPrn_ComputeAndShowGrade (Print->NumQsts,Print->Score,
Exam->MaxGrade);
if (Print->NumQsts != Print->NumQstsValid)
{
HTM_Txt (" / ");
HTM_TxtColonNBSP ("Nota v&aacute;lida"); // TODO: Need translation!!!!
TstPrn_ComputeAndShowGrade (Print->NumQstsValid,Print->ScoreValid,
Exam->MaxGrade);
}
HTM_DIV_End ();
}
/***** End box *****/
Box_BoxEnd ();
}
@ -1501,10 +1517,10 @@ static bool ExaRes_CheckIfICanViewScore (bool ICanViewResult,unsigned Visibility
}
/*****************************************************************************/
/******* Compute total score taking into account only valid questions ********/
/****** Compute total score of exam print counting only valid questions ******/
/*****************************************************************************/
static void ExaRes_ComputeScoreValid (struct ExaPrn_Print *Print)
static void ExaRes_ComputeValidPrintScore (struct ExaPrn_Print *Print)
{
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -1513,11 +1529,11 @@ static void ExaRes_ComputeScoreValid (struct ExaPrn_Print *Print)
bool QuestionExists;
/***** Initialize score valid *****/
Print->NumQstsValid = 0;
Print->ScoreValid = 0.0;
Print->NumQsts.Valid = 0;
Print->Score.Valid = 0.0;
for (NumQst = 0;
NumQst < Print->NumQsts;
NumQst < Print->NumQsts.All;
NumQst++)
{
/***** Copy question code *****/
@ -1550,8 +1566,8 @@ static void ExaRes_ComputeScoreValid (struct ExaPrn_Print *Print)
if (Question.Validity == Tst_VALID_QUESTION)
{
ExaPrn_ComputeAnswerScore (&Print->PrintedQuestions[NumQst],&Question);
Print->NumQstsValid++;
Print->ScoreValid += Print->PrintedQuestions[NumQst].Score;
Print->NumQsts.Valid++;
Print->Score.Valid += Print->PrintedQuestions[NumQst].Score;
}
}
}
@ -1568,7 +1584,7 @@ static void ExaRes_ShowExamAnswers (struct UsrData *UsrDat,
struct Tst_Question Question;
for (NumQst = 0;
NumQst < Print->NumQsts;
NumQst < Print->NumQsts.All;
NumQst++)
{
Gbl.RowEvenOdd = NumQst % 2;
@ -1599,6 +1615,7 @@ static void ExaRes_WriteQstAndAnsExam (struct UsrData *UsrDat,
unsigned Visibility)
{
extern const char *Txt_Score;
extern const char *Txt_Invalid_question;
bool ICanView[TstVis_NUM_ITEMS_VISIBILITY];
static char *ClassNumQst[Tst_NUM_VALIDITIES] =
{
@ -1690,7 +1707,7 @@ static void ExaRes_WriteQstAndAnsExam (struct UsrData *UsrDat,
"ANS_0"); // Blank answer
HTM_Double2Decimals (Print->PrintedQuestions[NumQst].Score);
if (Question->Validity == Tst_INVALID_QUESTION)
HTM_TxtF (" (%s)","Pregunta anulada"); // TODO: Need translation!!!!
HTM_TxtF (" (%s)",Txt_Invalid_question);
HTM_SPAN_End ();
HTM_DIV_End ();
}

View File

@ -1349,7 +1349,7 @@ static void ExaSes_ShowLstGrpsToCreateSession (long SesCod)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Groups);
HTM_TxtColon (Txt_Groups);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LT\"");

View File

@ -1273,6 +1273,8 @@ static void ExaSet_ListOneOrMoreQuestionsForEdition (struct Exa_Exams *Exams,
MYSQL_RES *mysql_res,
bool ICanEditQuestions)
{
extern const char *Txt_Invalid_question;
extern const char *Txt_Valid_question;
extern const char *Txt_Questions;
extern const char *Txt_No_INDEX;
extern const char *Txt_Question;
@ -1290,10 +1292,10 @@ static void ExaSet_ListOneOrMoreQuestionsForEdition (struct Exa_Exams *Exams,
[Tst_INVALID_QUESTION] = "times-red.svg",
[Tst_VALID_QUESTION ] = "check-green.svg",
};
static const char *Title[Tst_NUM_VALIDITIES] =
const char *Title[Tst_NUM_VALIDITIES] =
{
[Tst_INVALID_QUESTION] = "Pregunta anulada", // TODO: Need translation!!!!
[Tst_VALID_QUESTION ] = "Pregunta v&aacute;lida", // TODO: Need translation!!!!
[Tst_INVALID_QUESTION] = Txt_Invalid_question,
[Tst_VALID_QUESTION ] = Txt_Valid_question,
};
/***** Write the heading *****/

View File

@ -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_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_score_BR_per_question_BR_from_0_to_1;
extern const char *Txt_Average_BR_score_BR_per_question_BR_less_than_or_equal_to_1;
extern const char *Txt_TST_STR_ANSWER_TYPES[Tst_NUM_ANS_TYPES];
extern const char *Txt_Total;
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_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_score_BR_per_question_BR_from_0_to_1);
HTM_TH (1,1,"RM",Txt_Average_BR_score_BR_per_question_BR_less_than_or_equal_to_1);
HTM_TR_End ();

View File

@ -9556,7 +9556,7 @@ void Brw_ShowFileMetadata (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Filename);
HTM_TxtColon (Txt_Filename);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LB\"");
@ -9569,7 +9569,7 @@ void Brw_ShowFileMetadata (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Uploaded_by);
HTM_TxtColon (Txt_Uploaded_by);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LB\"");
@ -9601,7 +9601,7 @@ void Brw_ShowFileMetadata (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_File_size);
HTM_TxtColon (Txt_File_size);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LB\"");
@ -9614,7 +9614,7 @@ void Brw_ShowFileMetadata (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Date_of_creation);
HTM_TxtColon (Txt_Date_of_creation);
HTM_TD_End ();
HTM_TD_Begin ("id=\"filedate\" class=\"DAT LB\"");
@ -9687,7 +9687,7 @@ void Brw_ShowFileMetadata (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_My_views);
HTM_TxtColon (Txt_My_views);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LB\"");
@ -9701,7 +9701,7 @@ void Brw_ShowFileMetadata (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Identified_views);
HTM_TxtColon (Txt_Identified_views);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LB\"");
@ -9718,7 +9718,7 @@ void Brw_ShowFileMetadata (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Public_views);
HTM_TxtColon (Txt_Public_views);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LB\"");

View File

@ -324,7 +324,7 @@ void Frm_LabelColumn (const char *TDClass,const char *Id,const char *Label)
}
else
HTM_LABEL_Begin ("class=\"DAT\"");
HTM_TxtF ("%s:",Label);
HTM_TxtColon (Label);
HTM_LABEL_End ();
/***** Column/cell end *****/

View File

@ -1433,7 +1433,7 @@ static void Gam_PutFormsEditionGame (struct Gam_Games *Games,
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RM\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Maximum_grade);
HTM_TxtColon (Txt_Maximum_grade);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LM\"");
@ -1447,7 +1447,7 @@ static void Gam_PutFormsEditionGame (struct Gam_Games *Games,
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Result_visibility);
HTM_TxtColon (Txt_Result_visibility);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LB\"");

View File

@ -266,7 +266,7 @@ static void Hlp_ShowRowHelpWhatWouldYouLikeToDo (const char *Description,
/***** Description *****/
HTM_TD_Begin ("class=\"DAT RM\"");
HTM_TxtF ("%s:",Description);
HTM_TxtColon (Description);
HTM_TD_End ();
/***** Button *****/

View File

@ -188,7 +188,7 @@ void Ind_ReqIndicatorsCourses (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"RT %s\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Number_of_indicators);
HTM_TxtColon (Txt_Number_of_indicators);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LT\"");

View File

@ -1410,7 +1410,7 @@ static void Mch_ShowLstGrpsToCreateMatch (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Groups);
HTM_TxtColon (Txt_Groups);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LT\"");

View File

@ -735,7 +735,7 @@ static void MchRes_ShowHeaderMchResults (Usr_MeOrOther_t MeOrOther)
extern const char *Txt_Questions;
extern const char *Txt_Non_blank_BR_questions;
extern const char *Txt_Score;
extern const char *Txt_Average_BR_score_BR_per_question_BR_from_0_to_1;
extern const char *Txt_Average_BR_score_BR_per_question_BR_less_than_or_equal_to_1;
extern const char *Txt_Grade;
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_Non_blank_BR_questions);
HTM_TH (1,1,"RT",Txt_Score);
HTM_TH (1,1,"RT",Txt_Average_BR_score_BR_per_question_BR_from_0_to_1);
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_Grade);
HTM_TH_Empty (1);
@ -989,7 +989,11 @@ static void MchRes_ShowMchResults (struct Gam_Games *Games,
/* Write score */
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
if (ICanViewScore)
{
HTM_Double2Decimals (ScoreInThisResult);
HTM_Txt ("/");
HTM_Unsigned (NumQstsInThisResult);
}
else
Ico_PutIconNotVisible ();
HTM_TD_End ();
@ -1046,9 +1050,9 @@ static void MchRes_ShowMchResults (struct Gam_Games *Games,
/***** Write totals for this user *****/
MchRes_ShowMchResultsSummaryRow (NumResults,
NumTotalQsts,NumTotalQstsNotBlank,
TotalScoreOfAllResults,
TotalGrade);
NumTotalQsts,NumTotalQstsNotBlank,
TotalScoreOfAllResults,
TotalGrade);
}
else
{
@ -1098,6 +1102,8 @@ static void MchRes_ShowMchResultsSummaryRow (unsigned NumResults,
/***** Write total score *****/
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
HTM_Double2Decimals (TotalScoreOfAllResults);
HTM_Txt ("/");
HTM_Unsigned (NumTotalQsts);
HTM_TD_End ();
/***** Write average score per question *****/
@ -1131,7 +1137,7 @@ void MchRes_ShowOneMchResult (void)
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_Questions;
extern const char *Txt_non_blank_QUESTIONS;
extern const char *Txt_QUESTIONS_non_blank;
extern const char *Txt_Score;
extern const char *Txt_Grade;
extern const char *Txt_Tags;
@ -1222,7 +1228,7 @@ void MchRes_ShowOneMchResult (void)
/***** Begin table *****/
HTM_TABLE_BeginWideMarginPadding (10);
/***** Header row *****/
/***** User *****/
/* Get data of the user who answer the match */
if (!Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (UsrDat,Usr_DONT_GET_PREFS))
Lay_ShowErrorAndExit (Txt_The_user_does_not_exist);
@ -1233,7 +1239,7 @@ void MchRes_ShowOneMchResult (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",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_Begin ("class=\"DAT LT\"");
@ -1252,7 +1258,7 @@ void MchRes_ShowOneMchResult (void)
HTM_TR_End ();
/* Start/end time (for user in this match) */
/***** Start/end time (for user in this match) *****/
for (StartEndTime = (Dat_StartEndTime_t) 0;
StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
StartEndTime++)
@ -1260,7 +1266,7 @@ void MchRes_ShowOneMchResult (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",Txt_START_END_TIME[StartEndTime]);
HTM_TxtColon (Txt_START_END_TIME[StartEndTime]);
HTM_TD_End ();
if (asprintf (&Id,"match_%u",(unsigned) StartEndTime) < 0)
@ -1275,59 +1281,67 @@ void MchRes_ShowOneMchResult (void)
HTM_TR_End ();
}
/* Number of questions */
/***** Number of questions *****/
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",Txt_Questions);
HTM_TxtColon (Txt_Questions);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LT\"");
HTM_TxtF ("%u (%u %s)",
Print.NumQsts,
Print.NumQstsNotBlank,Txt_non_blank_QUESTIONS);
HTM_TxtF ("%u; %s: %u",
Print.NumQsts,Txt_QUESTIONS_non_blank,Print.NumQstsNotBlank);
HTM_TD_End ();
HTM_TR_End ();
/* Score */
/***** Score *****/
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",Txt_Score);
HTM_TxtColon (Txt_Score);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LT\"");
if (ICanViewScore)
{
HTM_STRONG_Begin ();
HTM_Double2Decimals (Print.Score);
HTM_Txt ("/");
HTM_Unsigned (Print.NumQsts);
HTM_STRONG_End ();
}
else
Ico_PutIconNotVisible ();
HTM_TD_End ();
HTM_TR_End ();
/* Grade */
/***** Grade *****/
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",Txt_Grade);
HTM_TxtColon (Txt_Grade);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LT\"");
if (ICanViewScore)
TstPrn_ComputeAndShowGrade (Print.NumQsts,Print.Score,
Game.MaxGrade);
{
HTM_STRONG_Begin ();
TstPrn_ComputeAndShowGrade (Print.NumQsts,Print.Score,Game.MaxGrade);
HTM_STRONG_End ();
}
else
Ico_PutIconNotVisible ();
HTM_TD_End ();
HTM_TR_End ();
/* Tags present in this result */
/***** Tags present in this result *****/
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",Txt_Tags);
HTM_TxtColon (Txt_Tags);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LT\"");
@ -1342,19 +1356,6 @@ void MchRes_ShowOneMchResult (void)
/***** End table *****/
HTM_TABLE_End ();
/***** Write total grade of match result *****/
if (ICanViewScore)
{
HTM_DIV_Begin ("class=\"DAT_N_BOLD CM\"");
HTM_TxtColonNBSP (Txt_Score);
HTM_Double2Decimals (Print.Score);
HTM_BR ();
HTM_TxtColonNBSP (Txt_Grade);
TstPrn_ComputeAndShowGrade (Print.NumQsts,Print.Score,
Game.MaxGrade);
HTM_DIV_End ();
}
/***** End box *****/
Box_BoxEnd ();
}

View File

@ -355,7 +355,7 @@ static void Msg_PutFormMsgUsrs (struct Msg_Messages *Messages,
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_MSG_To);
HTM_TxtColon (Txt_MSG_To);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LT\"");
@ -551,8 +551,8 @@ static void Msg_WriteFormUsrsIDsOrNicksOtherRecipients (void)
HTM_TH_Begin (1,ColSpan,"LM LIGHT_BLUE");
HTM_LABEL_Begin ("for=\"OtherRecipients\"");
HTM_TxtF ("%s:",StdsAndTchsWritten ? Txt_Other_recipients :
Txt_Recipients);
HTM_TxtColon (StdsAndTchsWritten ? Txt_Other_recipients :
Txt_Recipients);
HTM_LABEL_End ();
HTM_TH_End ();

View File

@ -333,7 +333,7 @@ void Net_ShowFormMyWebsAndSocialNets (void)
StrName,The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_IMG (Cfg_URL_ICON_PUBLIC,Net_WebsAndSocialNetworksIcons[NumURL],Net_WebsAndSocialNetworksTitle[NumURL],
"class=\"CONTEXT_ICO_16x16\" style=\"margin-right:6px;\"");
HTM_TxtF ("%s:",Net_WebsAndSocialNetworksTitle[NumURL]);
HTM_TxtColon (Net_WebsAndSocialNetworksTitle[NumURL]);
HTM_LABEL_End ();
HTM_TD_End ();

View File

@ -1942,7 +1942,7 @@ void Ntf_PutFormChangeNotifSentByEMail (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RM\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_NOTIFY_EVENTS_PLURAL[NotifyEvent]);
HTM_TxtColon (Txt_NOTIFY_EVENTS_PLURAL[NotifyEvent]);
HTM_TD_End ();
HTM_TD_Begin ("class=\"CM\"");

View File

@ -160,7 +160,7 @@ static void Pri_PutFormVisibility (const char *TxtLabel,
/***** Select visibility *****/
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",TxtLabel);
HTM_TxtColon (TxtLabel);
HTM_TD_End ();
/***** Form with list of options *****/

View File

@ -1388,7 +1388,7 @@ static void Prj_ShowOneProject (struct Prj_Projects *Projects,
ClassLabel);
break;
}
HTM_TxtF ("%s:",Txt_Assigned_QUESTION);
HTM_TxtColon (Txt_Assigned_QUESTION);
HTM_TD_End ();
switch (ProjectView)
@ -1428,7 +1428,7 @@ static void Prj_ShowOneProject (struct Prj_Projects *Projects,
ClassLabel);
break;
}
HTM_TxtF ("%s:",Txt_Number_of_students);
HTM_TxtColon (Txt_Number_of_students);
HTM_TD_End ();
switch (ProjectView)
@ -1502,7 +1502,7 @@ static void Prj_ShowOneProject (struct Prj_Projects *Projects,
HTM_TD_Begin ("colspan=\"2\" class=\"RT %s\"",ClassLabel);
break;
}
HTM_TxtF ("%s:",Txt_Proposal);
HTM_TxtColon (Txt_Proposal);
HTM_TD_End ();
switch (ProjectView)
@ -1862,7 +1862,7 @@ static void Prj_ShowOneProjectTxtField (struct Prj_Project *Prj,
// Not applicable
break;
}
HTM_TxtF ("%s:",Label);
HTM_TxtColon (Label);
HTM_TD_End ();
/***** Change text format *****/
@ -1957,7 +1957,7 @@ static void Prj_ShowOneProjectURL (const struct Prj_Project *Prj,
// Not applicable
break;
}
HTM_TxtF ("%s:",Txt_URL);
HTM_TxtColon (Txt_URL);
HTM_TD_End ();
switch (ProjectView)
@ -2073,22 +2073,22 @@ static void Prj_ShowOneProjectMembersWithARole (struct Prj_Projects *Projects,
case Prj_LIST_PROJECTS:
HTM_TD_Begin ("colspan=\"4\" class=\"RT %s COLOR%u\"",
ClassLabel,Gbl.RowEvenOdd);
HTM_TxtF ("%s:",NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInProject] :
Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]);
HTM_TxtColon (NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInProject] :
Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]);
break;
case Prj_FILE_BROWSER_PROJECT:
HTM_TD_Begin ("colspan=\"3\" class=\"RT %s\"",ClassLabel);
HTM_TxtF ("%s:",NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInProject] :
Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]);
HTM_TxtColon (NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInProject] :
Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]);
break;
case Prj_PRINT_ONE_PROJECT:
HTM_TD_Begin ("colspan=\"2\" class=\"RT %s\"",ClassLabel);
HTM_TxtF ("%s:",NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInProject] :
Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]);
HTM_TxtColon (NumUsrs == 1 ? Txt_PROJECT_ROLES_SINGUL_Abc[RoleInProject] :
Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]);
break;
case Prj_EDIT_ONE_PROJECT:
HTM_TD_Begin ("class=\"RT ASG_LABEL\"");
HTM_TxtF ("%s:",Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]);
HTM_TxtColon (Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject]);
break;
}
HTM_TD_End ();
@ -3702,7 +3702,7 @@ static void Prj_PutFormProject (struct Prj_Projects *Projects,
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RM\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Assigned_QUESTION);
HTM_TxtColon (Txt_Assigned_QUESTION);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LM\"");
@ -3721,7 +3721,7 @@ static void Prj_PutFormProject (struct Prj_Projects *Projects,
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RM\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Number_of_students);
HTM_TxtColon (Txt_Number_of_students);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LM\"");
@ -3736,7 +3736,7 @@ static void Prj_PutFormProject (struct Prj_Projects *Projects,
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RM\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Proposal);
HTM_TxtColon (Txt_Proposal);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LM\"");

View File

@ -1786,7 +1786,7 @@ static void Rec_ShowCrsRecord (Rec_CourseRecordViewType_t TypeOfView,
ICanEditThisField ? The_ClassFormInBox[Gbl.Prefs.Theme] :
"REC_DAT_SMALL",
Gbl.RowEvenOdd);
HTM_TxtF ("%s:",Gbl.Crs.Records.LstFields.Lst[NumField].Name);
HTM_TxtColon (Gbl.Crs.Records.LstFields.Lst[NumField].Name);
if (TypeOfView == Rec_CRS_LIST_ONE_RECORD ||
TypeOfView == Rec_CRS_LIST_SEVERAL_RECORDS)
{

View File

@ -316,7 +316,7 @@ static void Sta_PutFormCrsHits (struct Sta_Stats *Stats)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"RT %s\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Users);
HTM_TxtColon (Txt_Users);
HTM_TD_End ();
HTM_TD_Begin ("class=\"%s LT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
@ -349,7 +349,7 @@ static void Sta_PutFormCrsHits (struct Sta_Stats *Stats)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"RM %s\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Show);
HTM_TxtColon (Txt_Show);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LM\"");

View File

@ -676,7 +676,7 @@ static void Svy_ShowOneSurvey (struct Svy_Surveys *Surveys,
/* Users' roles who can answer the survey */
HTM_DIV_Begin ("class=\"%s\"",Svy.Status.Visible ? "ASG_GRP" :
"ASG_GRP_LIGHT");
HTM_TxtF ("%s:",Txt_Users);
HTM_TxtColon (Txt_Users);
HTM_BR ();
Rol_WriteSelectorRoles (1 << Rol_STD |
1 << Rol_NET |
@ -2007,7 +2007,7 @@ void Svy_RequestCreatOrEditSvy (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"RT %s\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Users);
HTM_TxtColon (Txt_Users);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LM\"");
@ -2139,7 +2139,7 @@ static void Svy_ShowLstGrpsToEditSurvey (long SvyCod)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Groups);
HTM_TxtColon (Txt_Groups);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LT\"");
@ -2783,7 +2783,7 @@ static void Svy_ShowFormEditOneQst (struct Svy_Surveys *Surveys,
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Type);
HTM_TxtColon (Txt_Type);
HTM_TD_End ();
HTM_TD_Begin ("class=\"%s LT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);

View File

@ -461,7 +461,7 @@ void Tag_ShowFormSelTags (const struct Tag_Tags *Tags,
/***** Label *****/
HTM_TD_Begin ("class=\"RT %s\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Tags);
HTM_TxtColon (Txt_Tags);
HTM_TD_End ();
/***** Select all tags *****/

View File

@ -550,9 +550,7 @@ void Tst_AssessTest (void)
HTM_Double2Decimals (Print.Score);
HTM_BR ();
HTM_TxtColonNBSP (Txt_Grade);
TstPrn_ComputeAndShowGrade (Print.NumQsts,
Print.Score,
Tst_SCORE_MAX);
TstPrn_ComputeAndShowGrade (Print.NumQsts,Print.Score,Tst_SCORE_MAX);
HTM_DIV_End ();
}
@ -1434,7 +1432,7 @@ static void Tst_ShowFormConfigTst (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Plugins);
HTM_TxtColon (Txt_Plugins);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LB\"");
@ -1460,7 +1458,7 @@ static void Tst_ShowFormConfigTst (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Number_of_questions);
HTM_TxtColon (Txt_Number_of_questions);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LB\"");
@ -1499,7 +1497,7 @@ static void Tst_ShowFormConfigTst (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Result_visibility);
HTM_TxtColon (Txt_Result_visibility);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LB\"");
@ -1571,7 +1569,7 @@ static void Tst_ShowFormAnswerTypes (const struct Tst_AnswerTypes *AnswerTypes)
/***** Label *****/
HTM_TD_Begin ("class=\"RT %s\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Types_of_answers);
HTM_TxtColon (Txt_Types_of_answers);
HTM_TD_End ();
/***** Select all types of answers *****/
@ -3315,7 +3313,7 @@ static void Tst_PutFormEditOneQst (struct Tst_Question *Question)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"RT %s\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Tags);
HTM_TxtColon (Txt_Tags);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LT\"");
@ -3423,7 +3421,7 @@ static void Tst_PutFormEditOneQst (struct Tst_Question *Question)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"RT %s\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Type);
HTM_TxtColon (Txt_Type);
HTM_TD_End ();
HTM_TD_Begin ("class=\"%s LT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
@ -3450,7 +3448,7 @@ static void Tst_PutFormEditOneQst (struct Tst_Question *Question)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"RT %s\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Answers);
HTM_TxtColon (Txt_Answers);
HTM_TD_End ();
HTM_TD_Begin ("class=\"LT\"");

View File

@ -1925,7 +1925,7 @@ static void TstPrn_ShowHeaderPrints (void)
extern const char *Txt_Questions;
extern const char *Txt_Non_blank_BR_questions;
extern const char *Txt_Score;
extern const char *Txt_Average_BR_score_BR_per_question_BR_from_0_to_1;
extern const char *Txt_Average_BR_score_BR_per_question_BR_less_than_or_equal_to_1;
extern const char *Txt_Grade;
HTM_TR_Begin (NULL);
@ -1936,7 +1936,7 @@ static void TstPrn_ShowHeaderPrints (void)
HTM_TH (1,1,"RT",Txt_Questions);
HTM_TH (1,1,"RT",Txt_Non_blank_BR_questions);
HTM_TH (1,1,"RT",Txt_Score);
HTM_TH (1,1,"RT",Txt_Average_BR_score_BR_per_question_BR_from_0_to_1);
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_Grade);
HTM_TH_Empty (1);
@ -2110,7 +2110,11 @@ static void TstPrn_ShowUsrPrints (struct UsrData *UsrDat)
/* Write score */
HTM_TD_Begin ("class=\"%s RT COLOR%u\"",ClassDat,Gbl.RowEvenOdd);
if (ICanView.Score)
{
HTM_Double2Decimals (Print.Score);
HTM_Txt ("/");
HTM_Unsigned (Print.NumQsts);
}
HTM_TD_End ();
/* Write average score per question */
@ -2124,8 +2128,7 @@ static void TstPrn_ShowUsrPrints (struct UsrData *UsrDat)
/* Write grade */
HTM_TD_Begin ("class=\"%s RT COLOR%u\"",ClassDat,Gbl.RowEvenOdd);
if (ICanView.Score)
TstPrn_ComputeAndShowGrade (Print.NumQsts,Print.Score,
Tst_SCORE_MAX);
TstPrn_ComputeAndShowGrade (Print.NumQsts,Print.Score,Tst_SCORE_MAX);
HTM_TD_End ();
/* Link to show this test exam */
@ -2240,21 +2243,24 @@ static void TstPrn_ShowPrintsSummaryRow (bool ItsMe,
/***** Write total score *****/
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
if (ICanViewTotalScore)
{
HTM_Double2Decimals (TotalScoreOfAllTests);
HTM_Txt ("/");
HTM_Unsigned (NumTotalQsts);
}
HTM_TD_End ();
/***** Write average score per question *****/
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
if (ICanViewTotalScore)
HTM_Double2Decimals (NumTotalQsts ? TotalScoreOfAllTests / (double) NumTotalQsts :
0.0);
0.0);
HTM_TD_End ();
/***** Write score over Tst_SCORE_MAX *****/
HTM_TD_Begin ("class=\"DAT_N_LINE_TOP RM COLOR%u\"",Gbl.RowEvenOdd);
if (ICanViewTotalScore)
TstPrn_ComputeAndShowGrade (NumTotalQsts,TotalScoreOfAllTests,
Tst_SCORE_MAX);
TstPrn_ComputeAndShowGrade (NumTotalQsts,TotalScoreOfAllTests,Tst_SCORE_MAX);
HTM_TD_End ();
/***** Last cell *****/
@ -2277,7 +2283,7 @@ void TstPrn_ShowOnePrint (void)
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_Questions;
extern const char *Txt_non_blank_QUESTIONS;
extern const char *Txt_QUESTIONS_non_blank;
extern const char *Txt_Score;
extern const char *Txt_Grade;
extern const char *Txt_Tags;
@ -2361,7 +2367,7 @@ void TstPrn_ShowOnePrint (void)
/***** Begin table *****/
HTM_TABLE_BeginWideMarginPadding (10);
/***** Header row *****/
/***** User *****/
/* Get data of the user who made the test */
if (!Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,Usr_DONT_GET_PREFS))
Lay_ShowErrorAndExit (Txt_The_user_does_not_exist);
@ -2372,7 +2378,7 @@ void TstPrn_ShowOnePrint (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",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_Begin ("class=\"DAT LT\"");
@ -2391,7 +2397,7 @@ void TstPrn_ShowOnePrint (void)
HTM_TR_End ();
/* Test date */
/***** Start/end time (for user in this test print) *****/
for (StartEndTime = (Dat_StartEndTime_t) 0;
StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
StartEndTime++)
@ -2402,7 +2408,7 @@ void TstPrn_ShowOnePrint (void)
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",Txt_START_END_TIME[StartEndTime]);
HTM_TxtColon (Txt_START_END_TIME[StartEndTime]);
HTM_TD_End ();
HTM_TD_Begin ("id=\"%s\" class=\"DAT LT\"",Id);
@ -2416,57 +2422,65 @@ void TstPrn_ShowOnePrint (void)
free (Id);
}
/* Number of questions */
/***** Number of questions *****/
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",Txt_Questions);
HTM_TxtColon (Txt_Questions);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LT\"");
HTM_TxtF ("%u (%u %s)",
Print.NumQsts,
Print.NumQstsNotBlank,Txt_non_blank_QUESTIONS);
HTM_TxtF ("%u; %s: %u",
Print.NumQsts,Txt_QUESTIONS_non_blank,Print.NumQstsNotBlank);
HTM_TD_End ();
HTM_TR_End ();
/* Score */
/***** Score *****/
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",Txt_Score);
HTM_TxtColon (Txt_Score);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LT\"");
if (ICanViewScore)
{
HTM_STRONG_Begin ();
HTM_Double2Decimals (Print.Score);
HTM_Txt ("/");
HTM_Unsigned (Print.NumQsts);
HTM_STRONG_End ();
}
else
Ico_PutIconNotVisible ();
HTM_TD_End ();
/* Grade */
/***** Grade *****/
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",Txt_Grade);
HTM_TxtColon (Txt_Grade);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LT\"");
if (ICanViewScore)
TstPrn_ComputeAndShowGrade (Print.NumQsts,Print.Score,
Tst_SCORE_MAX);
{
HTM_STRONG_Begin ();
TstPrn_ComputeAndShowGrade (Print.NumQsts,Print.Score,Tst_SCORE_MAX);
HTM_STRONG_End ();
}
else
Ico_PutIconNotVisible ();
HTM_TD_End ();
HTM_TR_End ();
/* Tags present in this test */
/***** Tags present in this test *****/
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"DAT_N RT\"");
HTM_TxtF ("%s:",Txt_Tags);
HTM_TxtColon (Txt_Tags);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LT\"");
@ -2482,19 +2496,6 @@ void TstPrn_ShowOnePrint (void)
/***** End table *****/
HTM_TABLE_End ();
/***** Write total grade of test *****/
if (ICanViewScore)
{
HTM_DIV_Begin ("class=\"DAT_N_BOLD CM\"");
HTM_TxtColonNBSP (Txt_Score);
HTM_Double2Decimals (Print.Score);
HTM_BR ();
HTM_TxtColonNBSP (Txt_Grade);
TstPrn_ComputeAndShowGrade (Print.NumQsts,Print.Score,
Tst_SCORE_MAX);
HTM_DIV_End ();
}
/***** End box *****/
Box_BoxEnd ();
}

View File

@ -2819,25 +2819,25 @@ const char *Txt_AVERAGE_PHOTO_TYPES[Pho_NUM_AVERAGE_PHOTO_TYPES] =
#endif
};
const char *Txt_Average_BR_score_BR_per_question_BR_from_0_to_1 =
const char *Txt_Average_BR_score_BR_per_question_BR_less_than_or_equal_to_1 =
#if L==1 // ca
"Puntuaci&oacute;n<br />media<br />por pregunta<br />(de 0 a 1)"; // Necessita traduccio
"Puntuaci&oacute;<br />mitjana<br />per pregunta<br />(&le;1)";
#elif L==2 // de
"Average<br />score<br />per question<br />(from 0 to 1)"; // Need Übersetzung
"Durchschnittliche<br />Punktzahl<br />pro Frage<br />(&le;1)";
#elif L==3 // en
"Average<br />score<br />per question<br />(from 0 to 1)";
"Average<br />score<br />per question<br />(&le;1)";
#elif L==4 // es
"Puntuaci&oacute;n<br />media<br />por pregunta<br />(de 0 a 1)";
"Puntuaci&oacute;n<br />media<br />por pregunta<br />(&le;1)";
#elif L==5 // fr
"Average<br />score<br />per question<br />(from 0 to 1)"; // Besoin de traduction
"Score<br />moyen<br />par question<br />(&le;1)";
#elif L==6 // gn
"Puntuaci&oacute;n<br />media<br />por pregunta<br />(de 0 a 1)"; // Okoteve traducción
"Puntuaci&oacute;n<br />media<br />por pregunta<br />(&le;1)"; // Okoteve traducción
#elif L==7 // it
"Average<br />score<br />per question<br />(from 0 to 1)"; // Bisogno di traduzione
"Punteggio<br />medio<br />per domanda<br />(&le;1)";
#elif L==8 // pl
"Average<br />score<br />per question<br />(from 0 to 1)"; // Potrzebujesz tlumaczenie
"&Sacute;rednia<br />ocena<br />za pytanie<br />(&le;1)";
#elif L==9 // pt
"Pontua&ccedil;&atilde;o<br />m&eacute;dia por<br />pergunta<br />(de 0 a 1)";
"Pontua&ccedil;&atilde;o<br />m&eacute;dia por<br />pergunta<br />(&le;1)";
#endif
const char *Txt_Average_type =
@ -17850,6 +17850,27 @@ const char *Txt_Internationalization =
"Internacionaliza&ccedil;&atilde;o";
#endif
const char *Txt_Invalid_question =
#if L==1 // ca
"Pregunta anul&middot;lada";
#elif L==2 // de
"Frage storniert";
#elif L==3 // en
"Invalid question";
#elif L==4 // es
"Pregunta anulada";
#elif L==5 // fr
"Question annul&eacute;e";
#elif L==6 // gn
"Pregunta anulada"; // Okoteve traducción
#elif L==7 // it
"Domanda annullata";
#elif L==8 // pl
"Pytanie anulowane";
#elif L==9 // pt
"Pergunta cancelada";
#endif
const char *Txt_IP = // Internet Protocol address
#if L==1 // ca
"IP";
@ -27165,27 +27186,6 @@ const char *Txt_nobody_else_can_access_this_content =
"ningu&eacute;m mais pode acessar este conte&uacute;do";
#endif
const char *Txt_non_blank_QUESTIONS =
#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_Non_blank_BR_questions =
#if L==1 // ca
"Preguntes<br />contestades";
@ -32846,48 +32846,6 @@ const char *Txt_Publish_announcement_OF_EXAM =
"Publicar chamada";
#endif
const char *Txt_question =
#if L==1 // ca
"pregunta";
#elif L==2 // de
"Frage";
#elif L==3 // en
"question";
#elif L==4 // es
"pregunta";
#elif L==5 // fr
"question";
#elif L==6 // gn
"pregunta"; // Okoteve traducción
#elif L==7 // it
"domande";
#elif L==8 // pl
"pytanie";
#elif L==9 // pt
"pergunta";
#endif
const char *Txt_questions =
#if L==1 // ca
"preguntes";
#elif L==2 // de
"Fragen";
#elif L==3 // en
"questions";
#elif L==4 // es
"preguntas";
#elif L==5 // fr
"questions";
#elif L==6 // gn
"preguntas"; // Okoteve traducción
#elif L==7 // it
"domande";
#elif L==8 // pl
"pytania";
#elif L==9 // pt
"perguntas";
#endif
const char *Txt_QR_code =
#if L==1 // ca
"Codi QR";
@ -32909,6 +32867,27 @@ const char *Txt_QR_code =
"C&oacute;digo QR";
#endif
const char *Txt_question =
#if L==1 // ca
"pregunta";
#elif L==2 // de
"Frage";
#elif L==3 // en
"question";
#elif L==4 // es
"pregunta";
#elif L==5 // fr
"question";
#elif L==6 // gn
"pregunta"; // Okoteve traducción
#elif L==7 // it
"domande";
#elif L==8 // pl
"pytanie";
#elif L==9 // pt
"pergunta";
#endif
const char *Txt_Question =
#if L==1 // ca
"Pregunta"; // Necessita traduccio
@ -33014,6 +32993,27 @@ const char *Txt_Question_removed =
"Pergunta removida.";
#endif
const char *Txt_questions =
#if L==1 // ca
"preguntes";
#elif L==2 // de
"Fragen";
#elif L==3 // en
"questions";
#elif L==4 // es
"preguntas";
#elif L==5 // fr
"questions";
#elif L==6 // gn
"preguntas"; // Okoteve traducción
#elif L==7 // it
"domande";
#elif L==8 // pl
"pytania";
#elif L==9 // pt
"perguntas";
#endif
const char *Txt_Questions =
#if L==1 // ca
"Preguntes";
@ -33056,6 +33056,48 @@ const char *Txt_Questions_and_problems =
"Perguntas e problemas";
#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 =
#if L==1 // ca
"anul&middot;lades";
#elif L==2 // de
"storniert";
#elif L==3 // en
"invalid";
#elif L==4 // es
"anuladas";
#elif L==5 // fr
"annul&eacute;es";
#elif L==6 // gn
"anuladas"; // Okoteve traducción
#elif L==7 // it
"cancellate";
#elif L==8 // pl
"anulowane";
#elif L==9 // pt
"canceladas";
#endif
const char *Txt_Questions_removed_X = // Warning: it is very important to include %u in the following sentences
#if L==1 // ca
"Preguntas eliminadas: %u.";
@ -33077,6 +33119,27 @@ const char *Txt_Questions_removed_X = // Warning: it is very important to includ
"Perguntas removidas: %u.";
#endif
const char *Txt_QUESTIONS_valid =
#if L==1 // ca
"v&agrave;lides";
#elif L==2 // de
"g&uuml;ltige";
#elif L==3 // en
"valid";
#elif L==4 // es
"v&aacute;lidas";
#elif L==5 // fr
"valides";
#elif L==6 // gn
"v&aacute;lidas"; // Okoteve traducción
#elif L==7 // it
"valide";
#elif L==8 // pl
"wa&zdot;ne";
#elif L==9 // pt
"v&aacute;lidas";
#endif
const char *Txt_Quota_exceeded =
#if L==1 // ca
"&iexcl;Cuota excedida!"; // Necessita traduccio
@ -55945,6 +56008,69 @@ const char *Txt_Vacants =
"Desocupados";
#endif
const char *Txt_valid_grade =
#if L==1 // ca
"nota v&agrave;lida";
#elif L==2 // de
"G&uuml;ltige Note";
#elif L==3 // en
"valid grade";
#elif L==4 // es
"nota v&aacute;lida";
#elif L==5 // fr
"note valide";
#elif L==6 // gn
"nota v&aacute;lida"; // Okoteve traducción
#elif L==7 // it
"voto valido";
#elif L==8 // pl
"ocena wynik";
#elif L==9 // pt
"nota v&aacute;lida";
#endif
const char *Txt_Valid_question =
#if L==1 // ca
"Pregunta v&agrave;lida";
#elif L==2 // de
"G&uuml;ltige Frage";
#elif L==3 // en
"Valid question";
#elif L==4 // es
"Pregunta v&aacute;lida";
#elif L==5 // fr
"Question valide";
#elif L==6 // gn
"Pregunta v&aacute;lida"; // Okoteve traducción
#elif L==7 // it
"Domanda valida";
#elif L==8 // pl
"Wa&zdot;ne pytanie";
#elif L==9 // pt
"Pergunta v&aacute;lida";
#endif
const char *Txt_valid_score =
#if L==1 // ca
"puntuaci&oacute; v&agrave;lida";
#elif L==2 // de
"G&uuml;ltige Ergebnis";
#elif L==3 // en
"valid score";
#elif L==4 // es
"puntuaci&oacute;n v&aacute;lida";
#elif L==5 // fr
"note valide";
#elif L==6 // gn
"puntuaci&oacute;n v&aacute;lida"; // Okoteve traducción
#elif L==7 // it
"punteggio valido";
#elif L==8 // pl
"prawid&lstrok;owy wynik";
#elif L==9 // pt
"pontua&ccedil;&atilde;o v&aacute;lida";
#endif
const char *Txt_View =
#if L==1 // ca
"Veure";

View File

@ -6357,7 +6357,7 @@ void Usr_PutFormToSelectUsrsToGoToAct (struct SelectedUsrs *SelectedUsrs,
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Users);
HTM_TxtColon (Txt_Users);
HTM_TD_End ();
HTM_TD_Begin ("class=\"%s LT\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
@ -6482,8 +6482,8 @@ static void Usr_PutCheckboxToSelectAllUsers (Rol_Role_t Role,
else
Rol_WrongRoleExit ();
Sex = Usr_GetSexOfUsrsLst (Role);
HTM_TxtF ("%s:",Gbl.Usrs.LstUsrs[Role].NumUsrs == 1 ? Txt_ROLES_SINGUL_Abc[Role][Sex] :
Txt_ROLES_PLURAL_Abc[Role][Sex]);
HTM_TxtColon (Gbl.Usrs.LstUsrs[Role].NumUsrs == 1 ? Txt_ROLES_SINGUL_Abc[Role][Sex] :
Txt_ROLES_PLURAL_Abc[Role][Sex]);
HTM_LABEL_End ();
HTM_TH_End ();

View File

@ -585,7 +585,7 @@ static void ZIP_ShowLinkToDownloadZIP (const char *FileName,const char *URL,
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RM\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_Filename);
HTM_TxtColon (Txt_Filename);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LM\"");
@ -602,7 +602,7 @@ static void ZIP_ShowLinkToDownloadZIP (const char *FileName,const char *URL,
HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"%s RM\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s:",Txt_File_size);
HTM_TxtColon (Txt_File_size);
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT LM\"");