diff --git a/css/swad19.250.css b/css/swad19.250.css index cccd5ea5..95466644 100644 --- a/css/swad19.250.css +++ b/css/swad19.250.css @@ -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;} diff --git a/swad_HTML.c b/swad_HTML.c index b29741e5..6dd8bed8 100644 --- a/swad_HTML.c +++ b/swad_HTML.c @@ -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); diff --git a/swad_HTML.h b/swad_HTML.h index aa7687f2..5f1411c2 100644 --- a/swad_HTML.h +++ b/swad_HTML.h @@ -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); diff --git a/swad_announcement.c b/swad_announcement.c index 02bf0d22..b652b42f 100644 --- a/swad_announcement.c +++ b/swad_announcement.c @@ -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++) diff --git a/swad_assignment.c b/swad_assignment.c index 10f16c60..6717200a 100644 --- a/swad_assignment.c +++ b/swad_assignment.c @@ -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\""); diff --git a/swad_attendance.c b/swad_attendance.c index 578bfec1..a923c1b0 100644 --- a/swad_attendance.c +++ b/swad_attendance.c @@ -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); diff --git a/swad_changelog.h b/swad_changelog.h index 0dd0dc99..9e14e6f0 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -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) diff --git a/swad_country.c b/swad_country.c index 8c90d013..92d5e296 100644 --- a/swad_country.c +++ b/swad_country.c @@ -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 */ diff --git a/swad_course.c b/swad_course.c index d2b9105b..8eb29052 100644 --- a/swad_course.c +++ b/swad_course.c @@ -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 (); diff --git a/swad_exam.c b/swad_exam.c index bf70933d..51555a21 100644 --- a/swad_exam.c +++ b/swad_exam.c @@ -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\""); diff --git a/swad_exam_print.c b/swad_exam_print.c index 77e09ac8..286e263f 100644 --- a/swad_exam_print.c +++ b/swad_exam_print.c @@ -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, diff --git a/swad_exam_print.h b/swad_exam_print.h index 58621121..7ff0a27d 100644 --- a/swad_exam_print.h +++ b/swad_exam_print.h @@ -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]; }; diff --git a/swad_exam_result.c b/swad_exam_result.c index 22f98eb9..dc4e950f 100644 --- a/swad_exam_result.c +++ b/swad_exam_result.c @@ -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á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á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ón vá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á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ón vá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á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 (); } diff --git a/swad_exam_session.c b/swad_exam_session.c index c324db9c..c6e73891 100644 --- a/swad_exam_session.c +++ b/swad_exam_session.c @@ -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\""); diff --git a/swad_exam_set.c b/swad_exam_set.c index b94c0920..15aada6e 100644 --- a/swad_exam_set.c +++ b/swad_exam_set.c @@ -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álida", // TODO: Need translation!!!! + [Tst_INVALID_QUESTION] = Txt_Invalid_question, + [Tst_VALID_QUESTION ] = Txt_Valid_question, }; /***** Write the heading *****/ diff --git a/swad_figure.c b/swad_figure.c index 8e159b55..eebafe90 100644 --- a/swad_figure.c +++ b/swad_figure.c @@ -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 (); diff --git a/swad_file_browser.c b/swad_file_browser.c index a6b07ee5..acce6428 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -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\""); diff --git a/swad_form.c b/swad_form.c index 90033755..e885f643 100644 --- a/swad_form.c +++ b/swad_form.c @@ -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 *****/ diff --git a/swad_game.c b/swad_game.c index b3aa4837..1ff66ac0 100644 --- a/swad_game.c +++ b/swad_game.c @@ -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\""); diff --git a/swad_help.c b/swad_help.c index a5a68d93..b8f3e734 100644 --- a/swad_help.c +++ b/swad_help.c @@ -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 *****/ diff --git a/swad_indicator.c b/swad_indicator.c index 71ccb6c3..5f0a5d86 100644 --- a/swad_indicator.c +++ b/swad_indicator.c @@ -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\""); diff --git a/swad_match.c b/swad_match.c index 03540556..24cd4072 100644 --- a/swad_match.c +++ b/swad_match.c @@ -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\""); diff --git a/swad_match_result.c b/swad_match_result.c index 7026cd2b..72289579 100644 --- a/swad_match_result.c +++ b/swad_match_result.c @@ -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 (); } diff --git a/swad_message.c b/swad_message.c index 02e8f391..9a812fc6 100644 --- a/swad_message.c +++ b/swad_message.c @@ -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 (); diff --git a/swad_network.c b/swad_network.c index a293fcca..1b256e07 100644 --- a/swad_network.c +++ b/swad_network.c @@ -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 (); diff --git a/swad_notification.c b/swad_notification.c index 58916147..8eb50ddc 100644 --- a/swad_notification.c +++ b/swad_notification.c @@ -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\""); diff --git a/swad_privacy.c b/swad_privacy.c index 3acd532a..d5394dd4 100644 --- a/swad_privacy.c +++ b/swad_privacy.c @@ -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 *****/ diff --git a/swad_project.c b/swad_project.c index adbf2817..89615968 100644 --- a/swad_project.c +++ b/swad_project.c @@ -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\""); diff --git a/swad_record.c b/swad_record.c index 6eeaf2c4..e00ac95c 100644 --- a/swad_record.c +++ b/swad_record.c @@ -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) { diff --git a/swad_statistic.c b/swad_statistic.c index e3970490..8df0798d 100644 --- a/swad_statistic.c +++ b/swad_statistic.c @@ -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\""); diff --git a/swad_survey.c b/swad_survey.c index 4f980dc0..41d70b96 100644 --- a/swad_survey.c +++ b/swad_survey.c @@ -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]); diff --git a/swad_tag.c b/swad_tag.c index 23dda9bd..ed060af5 100644 --- a/swad_tag.c +++ b/swad_tag.c @@ -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 *****/ diff --git a/swad_test.c b/swad_test.c index 88da0ad0..2cd86d63 100644 --- a/swad_test.c +++ b/swad_test.c @@ -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\""); diff --git a/swad_test_print.c b/swad_test_print.c index 57ce0b49..c1cc18b7 100644 --- a/swad_test_print.c +++ b/swad_test_print.c @@ -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 (); } diff --git a/swad_text.c b/swad_text.c index f08ac061..45223ca8 100644 --- a/swad_text.c +++ b/swad_text.c @@ -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ón
media
por pregunta
(de 0 a 1)"; // Necessita traduccio + "Puntuació
mitjana
per pregunta
(≤1)"; #elif L==2 // de - "Average
score
per question
(from 0 to 1)"; // Need Übersetzung + "Durchschnittliche
Punktzahl
pro Frage
(≤1)"; #elif L==3 // en - "Average
score
per question
(from 0 to 1)"; + "Average
score
per question
(≤1)"; #elif L==4 // es - "Puntuación
media
por pregunta
(de 0 a 1)"; + "Puntuación
media
por pregunta
(≤1)"; #elif L==5 // fr - "Average
score
per question
(from 0 to 1)"; // Besoin de traduction + "Score
moyen
par question
(≤1)"; #elif L==6 // gn - "Puntuación
media
por pregunta
(de 0 a 1)"; // Okoteve traducción + "Puntuación
media
por pregunta
(≤1)"; // Okoteve traducción #elif L==7 // it - "Average
score
per question
(from 0 to 1)"; // Bisogno di traduzione + "Punteggio
medio
per domanda
(≤1)"; #elif L==8 // pl - "Average
score
per question
(from 0 to 1)"; // Potrzebujesz tlumaczenie + "Średnia
ocena
za pytanie
(≤1)"; #elif L==9 // pt - "Pontuação
média por
pergunta
(de 0 a 1)"; + "Pontuação
média por
pergunta
(≤1)"; #endif const char *Txt_Average_type = @@ -17850,6 +17850,27 @@ const char *Txt_Internationalization = "Internacionalização"; #endif +const char *Txt_Invalid_question = +#if L==1 // ca + "Pregunta anul·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é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ém mais pode acessar este conteú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
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ó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·lades"; +#elif L==2 // de + "storniert"; +#elif L==3 // en + "invalid"; +#elif L==4 // es + "anuladas"; +#elif L==5 // fr + "annulé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àlides"; +#elif L==2 // de + "gültige"; +#elif L==3 // en + "valid"; +#elif L==4 // es + "válidas"; +#elif L==5 // fr + "valides"; +#elif L==6 // gn + "válidas"; // Okoteve traducción +#elif L==7 // it + "valide"; +#elif L==8 // pl + "ważne"; +#elif L==9 // pt + "válidas"; +#endif + const char *Txt_Quota_exceeded = #if L==1 // ca "¡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àlida"; +#elif L==2 // de + "Gültige Note"; +#elif L==3 // en + "valid grade"; +#elif L==4 // es + "nota válida"; +#elif L==5 // fr + "note valide"; +#elif L==6 // gn + "nota válida"; // Okoteve traducción +#elif L==7 // it + "voto valido"; +#elif L==8 // pl + "ocena wynik"; +#elif L==9 // pt + "nota válida"; +#endif + +const char *Txt_Valid_question = +#if L==1 // ca + "Pregunta vàlida"; +#elif L==2 // de + "Gültige Frage"; +#elif L==3 // en + "Valid question"; +#elif L==4 // es + "Pregunta válida"; +#elif L==5 // fr + "Question valide"; +#elif L==6 // gn + "Pregunta válida"; // Okoteve traducción +#elif L==7 // it + "Domanda valida"; +#elif L==8 // pl + "Ważne pytanie"; +#elif L==9 // pt + "Pergunta válida"; +#endif + +const char *Txt_valid_score = +#if L==1 // ca + "puntuació vàlida"; +#elif L==2 // de + "Gültige Ergebnis"; +#elif L==3 // en + "valid score"; +#elif L==4 // es + "puntuación válida"; +#elif L==5 // fr + "note valide"; +#elif L==6 // gn + "puntuación válida"; // Okoteve traducción +#elif L==7 // it + "punteggio valido"; +#elif L==8 // pl + "prawidłowy wynik"; +#elif L==9 // pt + "pontuação válida"; +#endif + const char *Txt_View = #if L==1 // ca "Veure"; diff --git a/swad_user.c b/swad_user.c index 3a01f19a..2444a4a3 100644 --- a/swad_user.c +++ b/swad_user.c @@ -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 (); diff --git a/swad_zip.c b/swad_zip.c index 379d4f80..63dc33a9 100644 --- a/swad_zip.c +++ b/swad_zip.c @@ -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\"");