Version19.31.17

This commit is contained in:
Antonio Cañas Vargas 2019-10-07 21:15:14 +02:00
parent 291920e560
commit 3cfb2c0753
9 changed files with 463 additions and 301 deletions

View File

@ -487,7 +487,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD: En OpenSWAD:
ps2pdf source.ps destination.pdf ps2pdf source.ps destination.pdf
*/ */
#define Log_PLATFORM_VERSION "SWAD 19.31.16 (2019-10-07)" #define Log_PLATFORM_VERSION "SWAD 19.31.17 (2019-10-07)"
#define CSS_FILE "swad19.29.css" #define CSS_FILE "swad19.29.css"
#define JS_FILE "swad19.30.js" #define JS_FILE "swad19.30.js"
/* /*
@ -495,6 +495,7 @@ ps2pdf source.ps destination.pdf
// TODO: Un TFG preasignado sin estudiante tiene que salir un triángulo amarillo // TODO: Un TFG preasignado sin estudiante tiene que salir un triángulo amarillo
// TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.) // TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.)
Version 19.31.17: Oct 07, 2019 Code refactoring in HTML tables. (247221 lines)
Version 19.31.16: Oct 07, 2019 Code refactoring in HTML tables. (247185 lines) Version 19.31.16: Oct 07, 2019 Code refactoring in HTML tables. (247185 lines)
Version 19.31.15: Oct 07, 2019 Code refactoring in HTML tables. (247153 lines) Version 19.31.15: Oct 07, 2019 Code refactoring in HTML tables. (247153 lines)
Version 19.31.14: Oct 07, 2019 Code refactoring in HTML tables. (247138 lines) Version 19.31.14: Oct 07, 2019 Code refactoring in HTML tables. (247138 lines)

View File

@ -3714,7 +3714,7 @@ static void Sta_ShowNumHitsPerCentre (unsigned long NumRows,
Sta_DrawBarNumHits ('o', // orange background Sta_DrawBarNumHits ('o', // orange background
Hits.Num,Hits.Max,Hits.Total,375); Hits.Num,Hits.Max,Hits.Total,375);
Tbl_StartRow (); Tbl_EndRow ();
} }
} }
@ -3802,8 +3802,8 @@ static void Sta_ShowNumHitsPerDegree (unsigned long NumRows,
fprintf (Gbl.F.Out,"<td class=\"LOG RIGHT_TOP\">"); fprintf (Gbl.F.Out,"<td class=\"LOG RIGHT_TOP\">");
if (DegCod > 0) if (DegCod > 0)
fprintf (Gbl.F.Out,"%lu",++Ranking); fprintf (Gbl.F.Out,"%lu",++Ranking);
fprintf (Gbl.F.Out,"&nbsp;" fprintf (Gbl.F.Out,"&nbsp;");
"</td>"); Tbl_EndCell ();
/* Write degree */ /* Write degree */
Sta_WriteDegree (DegCod); Sta_WriteDegree (DegCod);
@ -3813,7 +3813,7 @@ static void Sta_ShowNumHitsPerDegree (unsigned long NumRows,
Sta_DrawBarNumHits ('o', // orange background Sta_DrawBarNumHits ('o', // orange background
Hits.Num,Hits.Max,Hits.Total,375); Hits.Num,Hits.Max,Hits.Total,375);
Tbl_StartRow (); Tbl_EndRow ();
} }
} }
@ -3958,7 +3958,7 @@ static void Sta_ShowNumHitsPerCourse (unsigned long NumRows,
Sta_DrawBarNumHits ('o', // orange background Sta_DrawBarNumHits ('o', // orange background
Hits.Num,Hits.Max,Hits.Total,375); Hits.Num,Hits.Max,Hits.Total,375);
Tbl_StartRow (); Tbl_EndRow ();
} }
} }
@ -4032,6 +4032,7 @@ static void Sta_DrawBarNumHits (char Color,
fprintf (Gbl.F.Out,"0&nbsp;(0"); fprintf (Gbl.F.Out,"0&nbsp;(0");
fprintf (Gbl.F.Out,"%%)&nbsp;"); fprintf (Gbl.F.Out,"%%)&nbsp;");
Tbl_EndCell (); Tbl_EndCell ();
} }

View File

@ -483,10 +483,10 @@ static void Svy_ShowOneSurvey (long SvyCod,struct SurveyQuestion *SvyQst,
"<script type=\"text/javascript\">" "<script type=\"text/javascript\">"
"writeLocalDateHMSFromUTC('svy_date_start_%u',%ld," "writeLocalDateHMSFromUTC('svy_date_start_%u',%ld,"
"%u,'<br />','%s',true,true,0x7);" "%u,'<br />','%s',true,true,0x7);"
"</script>" "</script>",
"</td>",
UniqueId,Svy.TimeUTC[Svy_START_TIME], UniqueId,Svy.TimeUTC[Svy_START_TIME],
(unsigned) Gbl.Prefs.DateFormat,Txt_Today); (unsigned) Gbl.Prefs.DateFormat,Txt_Today);
Tbl_EndCell ();
/* End date/time */ /* End date/time */
fprintf (Gbl.F.Out,"<td id=\"svy_date_end_%u\" class=\"%s LEFT_TOP", fprintf (Gbl.F.Out,"<td id=\"svy_date_end_%u\" class=\"%s LEFT_TOP",
@ -501,10 +501,10 @@ static void Svy_ShowOneSurvey (long SvyCod,struct SurveyQuestion *SvyQst,
"<script type=\"text/javascript\">" "<script type=\"text/javascript\">"
"writeLocalDateHMSFromUTC('svy_date_end_%u',%ld," "writeLocalDateHMSFromUTC('svy_date_end_%u',%ld,"
"%u,'<br />','%s',false,true,0x7);" "%u,'<br />','%s',false,true,0x7);"
"</script>" "</script>",
"</td>",
UniqueId,Svy.TimeUTC[Svy_END_TIME], UniqueId,Svy.TimeUTC[Svy_END_TIME],
(unsigned) Gbl.Prefs.DateFormat,Txt_Today); (unsigned) Gbl.Prefs.DateFormat,Txt_Today);
Tbl_EndCell ();
/* Survey title */ /* Survey title */
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP"); fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP");
@ -526,14 +526,14 @@ static void Svy_ShowOneSurvey (long SvyCod,struct SurveyQuestion *SvyQst,
Lay_EndArticle (); Lay_EndArticle ();
/* Number of questions and number of distinct users who have already answered this survey */ /* Number of questions and number of distinct users who have already answered this survey */
fprintf (Gbl.F.Out,"<div class=\"%s\">%s: %u; %s: %u</div>" fprintf (Gbl.F.Out,"<div class=\"%s\">%s: %u; %s: %u</div>",
"</td>",
Svy.Status.Visible ? "ASG_GRP" : Svy.Status.Visible ? "ASG_GRP" :
"ASG_GRP_LIGHT", "ASG_GRP_LIGHT",
Txt_No_of_questions, Txt_No_of_questions,
Svy.NumQsts, Svy.NumQsts,
Txt_No_of_users, Txt_No_of_users,
Svy.NumUsrs); Svy.NumUsrs);
Tbl_EndCell ();
/* Status of the survey */ /* Status of the survey */
fprintf (Gbl.F.Out,"<td rowspan=\"2\" class=\"LEFT_TOP"); fprintf (Gbl.F.Out,"<td rowspan=\"2\" class=\"LEFT_TOP");
@ -581,6 +581,7 @@ static void Svy_ShowOneSurvey (long SvyCod,struct SurveyQuestion *SvyQst,
/***** Write second row of data of this survey *****/ /***** Write second row of data of this survey *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td colspan=\"2\" class=\"LEFT_TOP"); fprintf (Gbl.F.Out,"<td colspan=\"2\" class=\"LEFT_TOP");
if (!ShowOnlyThisSvyComplete) if (!ShowOnlyThisSvyComplete)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd); fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
@ -589,11 +590,13 @@ static void Svy_ShowOneSurvey (long SvyCod,struct SurveyQuestion *SvyQst,
/* Author of the survey */ /* Author of the survey */
Svy_WriteAuthor (&Svy); Svy_WriteAuthor (&Svy);
fprintf (Gbl.F.Out,"</td>" Tbl_EndCell ();
"<td class=\"LEFT_TOP");
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP");
if (!ShowOnlyThisSvyComplete) if (!ShowOnlyThisSvyComplete)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd); fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"\">"); fprintf (Gbl.F.Out,"\">");
Tbl_EndCell ();
/* Scope of the survey */ /* Scope of the survey */
fprintf (Gbl.F.Out,"<div class=\"%s\">%s: ", fprintf (Gbl.F.Out,"<div class=\"%s\">%s: ",
@ -654,11 +657,12 @@ static void Svy_ShowOneSurvey (long SvyCod,struct SurveyQuestion *SvyQst,
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML, Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
Txt,Cns_MAX_BYTES_TEXT,false); // Convert from HTML to rigorous HTML Txt,Cns_MAX_BYTES_TEXT,false); // Convert from HTML to rigorous HTML
Str_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links Str_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links
fprintf (Gbl.F.Out,"<div class=\"PAR %s\">%s</div>" fprintf (Gbl.F.Out,"<div class=\"PAR %s\">%s</div>",
"</td>",
Svy.Status.Visible ? "DAT" : Svy.Status.Visible ? "DAT" :
"DAT_LIGHT", "DAT_LIGHT",
Txt); Txt);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Write questions of this survey *****/ /***** Write questions of this survey *****/
@ -1858,31 +1862,37 @@ void Svy_RequestCreatOrEditSvy (void)
/***** Scope of the survey *****/ /***** Scope of the survey *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"RIGHT_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_MIDDLE\">"
"<label for=\"ScopeSvy\" class=\"%s\">%s:</label>" "<label for=\"ScopeSvy\" class=\"%s\">%s:</label>",
"</td>"
"<td class=\"LEFT_MIDDLE\">",
The_ClassFormInBox[Gbl.Prefs.Theme], The_ClassFormInBox[Gbl.Prefs.Theme],
Txt_Scope); Txt_Scope);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">");
Svy_SetDefaultAndAllowedScope (&Svy); Svy_SetDefaultAndAllowedScope (&Svy);
Sco_GetScope ("ScopeSvy"); Sco_GetScope ("ScopeSvy");
Sco_PutSelectorScope ("ScopeSvy",false); Sco_PutSelectorScope ("ScopeSvy",false);
Tbl_EndCell (); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Survey title *****/ /***** Survey title *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"RIGHT_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_MIDDLE\">"
"<label for=\"Title\" class=\"%s\">%s:</label>" "<label for=\"Title\" class=\"%s\">%s:</label>",
"</td>" The_ClassFormInBox[Gbl.Prefs.Theme],
"<td class=\"LEFT_MIDDLE\">" Txt_Title);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">"
"<input type=\"text\" id=\"Title\" name=\"Title\"" "<input type=\"text\" id=\"Title\" name=\"Title\""
" size=\"45\" maxlength=\"%u\" value=\"%s\"" " size=\"45\" maxlength=\"%u\" value=\"%s\""
" required=\"required\" />" " required=\"required\" />",
"</td>",
The_ClassFormInBox[Gbl.Prefs.Theme],
Txt_Title,
Svy_MAX_CHARS_SURVEY_TITLE,Svy.Title); Svy_MAX_CHARS_SURVEY_TITLE,Svy.Title);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Survey start and end dates *****/ /***** Survey start and end dates *****/
@ -1890,33 +1900,39 @@ void Svy_RequestCreatOrEditSvy (void)
/***** Survey text *****/ /***** Survey text *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP\">"
"<label for=\"Txt\" class=\"%s\">%s:</label>" "<label for=\"Txt\" class=\"%s\">%s:</label>",
"</td>"
"<td class=\"LEFT_TOP\">"
"<textarea id=\"Txt\" name=\"Txt\""
" cols=\"60\" rows=\"10\">",
The_ClassFormInBox[Gbl.Prefs.Theme], The_ClassFormInBox[Gbl.Prefs.Theme],
Txt_Description); Txt_Description);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">"
"<textarea id=\"Txt\" name=\"Txt\""
" cols=\"60\" rows=\"10\">");
if (!ItsANewSurvey) if (!ItsANewSurvey)
fprintf (Gbl.F.Out,"%s",Txt); fprintf (Gbl.F.Out,"%s",Txt);
fprintf (Gbl.F.Out,"</textarea>" fprintf (Gbl.F.Out,"</textarea>");
"</td>"); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Users' roles who can answer the survey *****/ /***** Users' roles who can answer the survey *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP %s\">%s:"
"</td>" fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP %s\">%s:",
"<td class=\"DAT LEFT_MIDDLE\">",
The_ClassFormInBox[Gbl.Prefs.Theme], The_ClassFormInBox[Gbl.Prefs.Theme],
Txt_Users); Txt_Users);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_MIDDLE\">");
Rol_WriteSelectorRoles (1 << Rol_STD | Rol_WriteSelectorRoles (1 << Rol_STD |
1 << Rol_NET | 1 << Rol_NET |
1 << Rol_TCH, 1 << Rol_TCH,
Svy.Roles, Svy.Roles,
false,false); false,false);
Tbl_EndCell (); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Groups *****/ /***** Groups *****/
@ -2036,17 +2052,20 @@ static void Svy_ShowLstGrpsToEditSurvey (long SvyCod)
{ {
/***** Start box and table *****/ /***** Start box and table *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_TOP\">"
"%s:" "%s:",
"</td>"
"<td class=\"LEFT_TOP\">",
The_ClassFormInBox[Gbl.Prefs.Theme], The_ClassFormInBox[Gbl.Prefs.Theme],
Txt_Groups); Txt_Groups);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">");
Box_StartBoxTable ("95%",NULL,NULL, Box_StartBoxTable ("95%",NULL,NULL,
NULL,Box_NOT_CLOSABLE,0); NULL,Box_NOT_CLOSABLE,0);
/***** First row: checkbox to select the whole course *****/ /***** First row: checkbox to select the whole course *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td colspan=\"7\" class=\"DAT LEFT_MIDDLE\">" fprintf (Gbl.F.Out,"<td colspan=\"7\" class=\"DAT LEFT_MIDDLE\">"
"<label>" "<label>"
"<input type=\"checkbox\"" "<input type=\"checkbox\""
@ -2055,9 +2074,10 @@ static void Svy_ShowLstGrpsToEditSurvey (long SvyCod)
fprintf (Gbl.F.Out," checked=\"checked\""); fprintf (Gbl.F.Out," checked=\"checked\"");
fprintf (Gbl.F.Out," onclick=\"uncheckChildren(this,'GrpCods')\" />" fprintf (Gbl.F.Out," onclick=\"uncheckChildren(this,'GrpCods')\" />"
"%s %s" "%s %s"
"</label>" "</label>",
"</td>",
Txt_The_whole_course,Gbl.Hierarchy.Crs.ShrtName); Txt_The_whole_course,Gbl.Hierarchy.Crs.ShrtName);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** List the groups for each group type *****/ /***** List the groups for each group type *****/
@ -2679,27 +2699,32 @@ static void Svy_ShowFormEditOneQst (long SvyCod,struct SurveyQuestion *SvyQst,
/***** Stem *****/ /***** Stem *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP\">"
"<label for=\"Txt\" class=\"%s\">%s:</label>" "<label for=\"Txt\" class=\"%s\">%s:</label>",
"</td>" The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Wording);
"<td class=\"LEFT_TOP\">" Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">"
"<textarea id=\"Txt\" name=\"Txt\"" "<textarea id=\"Txt\" name=\"Txt\""
" cols=\"60\" rows=\"4\">" " cols=\"60\" rows=\"4\">"
"%s" "%s"
"</textarea>" "</textarea>",
"</td>",
The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Wording,
Txt); Txt);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Type of answer *****/ /***** Type of answer *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_TOP\">"
"%s:" "%s:",
"</td>"
"<td class=\"%s LEFT_TOP\">",
The_ClassFormInBox[Gbl.Prefs.Theme], The_ClassFormInBox[Gbl.Prefs.Theme],
Txt_Type, Txt_Type);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"%s LEFT_TOP\">",
The_ClassFormInBox[Gbl.Prefs.Theme]); The_ClassFormInBox[Gbl.Prefs.Theme]);
for (AnsType = (Svy_AnswerType_t) 0; for (AnsType = (Svy_AnswerType_t) 0;
AnsType < Svy_NUM_ANS_TYPES; AnsType < Svy_NUM_ANS_TYPES;
@ -2717,6 +2742,7 @@ static void Svy_ShowFormEditOneQst (long SvyCod,struct SurveyQuestion *SvyQst,
Txt_SURVEY_STR_ANSWER_TYPES[AnsType]); Txt_SURVEY_STR_ANSWER_TYPES[AnsType]);
} }
Tbl_EndCell (); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Answers *****/ /***** Answers *****/
@ -2731,12 +2757,13 @@ static void Svy_ShowFormEditOneQst (long SvyCod,struct SurveyQuestion *SvyQst,
NumAns < Svy_MAX_ANSWERS_PER_QUESTION; NumAns < Svy_MAX_ANSWERS_PER_QUESTION;
NumAns++) NumAns++)
{ {
/* Label with the number of the answer */
Tbl_StartRow (); Tbl_StartRow ();
/* Label with the number of the answer */
fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP\">"
"<label for=\"AnsStr%u\" class=\"%s\">%u)</label>" "<label for=\"AnsStr%u\" class=\"%s\">%u)</label>",
"</td>",
NumAns,The_ClassFormInBox[Gbl.Prefs.Theme],NumAns + 1); NumAns,The_ClassFormInBox[Gbl.Prefs.Theme],NumAns + 1);
Tbl_EndCell ();
/* Answer text */ /* Answer text */
fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP\">"
@ -2745,8 +2772,9 @@ static void Svy_ShowFormEditOneQst (long SvyCod,struct SurveyQuestion *SvyQst,
NumAns,NumAns); NumAns,NumAns);
if (SvyQst->AnsChoice[NumAns].Text) if (SvyQst->AnsChoice[NumAns].Text)
fprintf (Gbl.F.Out,"%s",SvyQst->AnsChoice[NumAns].Text); fprintf (Gbl.F.Out,"%s",SvyQst->AnsChoice[NumAns].Text);
fprintf (Gbl.F.Out,"</textarea>" fprintf (Gbl.F.Out,"</textarea>");
"</td>"); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
} }
Tbl_EndTable (); Tbl_EndTable ();
@ -3247,17 +3275,17 @@ static void Svy_ListSvyQuestions (struct Survey *Svy,
if (sscanf (row[1],"%u",&(SvyQst->QstInd)) != 1) if (sscanf (row[1],"%u",&(SvyQst->QstInd)) != 1)
Lay_ShowErrorAndExit ("Error: wrong question index."); Lay_ShowErrorAndExit ("Error: wrong question index.");
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">"
"%u" "%u",
"</td>",
Gbl.RowEvenOdd,SvyQst->QstInd + 1); Gbl.RowEvenOdd,SvyQst->QstInd + 1);
Tbl_EndCell ();
/* Write the question type (row[2]) */ /* Write the question type (row[2]) */
SvyQst->AnswerType = Svy_ConvertFromStrAnsTypDBToAnsTyp (row[2]); SvyQst->AnswerType = Svy_ConvertFromStrAnsTypDBToAnsTyp (row[2]);
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">"
"%s" "%s",
"</td>",
Gbl.RowEvenOdd, Gbl.RowEvenOdd,
Txt_SURVEY_STR_ANSWER_TYPES[SvyQst->AnswerType]); Txt_SURVEY_STR_ANSWER_TYPES[SvyQst->AnswerType]);
Tbl_EndCell ();
/* Write the stem (row[3]) and the answers of this question */ /* Write the stem (row[3]) and the answers of this question */
fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_TOP COLOR%u\">", fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_TOP COLOR%u\">",
@ -3418,26 +3446,26 @@ static void Svy_WriteAnswersOfAQst (struct Survey *Svy,
else // SvyQst->AnswerType == Svy_ANS_MULTIPLE_CHOICE else // SvyQst->AnswerType == Svy_ANS_MULTIPLE_CHOICE
fprintf (Gbl.F.Out,"checkbox\""); fprintf (Gbl.F.Out,"checkbox\"");
fprintf (Gbl.F.Out," id=\"Ans%010u_%010u\" name=\"Ans%010u\"" fprintf (Gbl.F.Out," id=\"Ans%010u_%010u\" name=\"Ans%010u\""
" value=\"%u\" />" " value=\"%u\" />",
"</td>",
(unsigned) SvyQst->QstCod,NumAns,(unsigned) SvyQst->QstCod, (unsigned) SvyQst->QstCod,NumAns,(unsigned) SvyQst->QstCod,
NumAns); NumAns);
Tbl_EndCell ();
} }
/* Write the number of option */ /* Write the number of option */
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\" style=\"width:50px;\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\" style=\"width:50px;\">"
"<label for=\"Ans%010u_%010u\" class=\"DAT\">" "<label for=\"Ans%010u_%010u\" class=\"DAT\">"
"%u)" "%u)"
"</label>" "</label>",
"</td>",
(unsigned) SvyQst->QstCod,NumAns,NumAns + 1); (unsigned) SvyQst->QstCod,NumAns,NumAns + 1);
Tbl_EndCell ();
/* Write the text of the answer */ /* Write the text of the answer */
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">"
"<label for=\"Ans%010u_%010u\" class=\"DAT\">%s</label>" "<label for=\"Ans%010u_%010u\" class=\"DAT\">%s</label>",
"</td>",
(unsigned) SvyQst->QstCod,NumAns, (unsigned) SvyQst->QstCod,NumAns,
SvyQst->AnsChoice[NumAns].Text); SvyQst->AnsChoice[NumAns].Text);
Tbl_EndCell ();
/* Show stats of this answer */ /* Show stats of this answer */
if (Svy->Status.ICanViewResults) if (Svy->Status.ICanViewResults)
@ -3497,8 +3525,10 @@ static void Svy_DrawBarNumUsrs (unsigned NumUsrs,unsigned MaxUsrs)
BarWidth); BarWidth);
/***** Write the number of users *****/ /***** Write the number of users *****/
fprintf (Gbl.F.Out,"%s</td>", fprintf (Gbl.F.Out,"%s",
Gbl.Title); Gbl.Title);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
} }

View File

@ -600,9 +600,11 @@ static void Syl_ShowRowSyllabus (unsigned NumItem,
if (Gbl.Syllabus.EditionIsActive) if (Gbl.Syllabus.EditionIsActive)
{ {
if (NewItem) if (NewItem)
fprintf (Gbl.F.Out,"<td colspan=\"5\" class=\"COLOR%u\">" {
"</td>", fprintf (Gbl.F.Out,"<td colspan=\"5\" class=\"COLOR%u\">",
Gbl.RowEvenOdd); Gbl.RowEvenOdd);
Tbl_EndCell ();
}
else else
{ {
/***** Icon to remove the row *****/ /***** Icon to remove the row *****/
@ -702,9 +704,11 @@ static void Syl_ShowRowSyllabus (unsigned NumItem,
{ {
/***** Indent depending on the level *****/ /***** Indent depending on the level *****/
if (Level > 1) if (Level > 1)
fprintf (Gbl.F.Out,"<td colspan=\"%d\" class=\"COLOR%u\">" {
"</td>", fprintf (Gbl.F.Out,"<td colspan=\"%d\" class=\"COLOR%u\">",
Level - 1,Gbl.RowEvenOdd); Level - 1,Gbl.RowEvenOdd);
Tbl_EndCell ();
}
/***** Code of the item *****/ /***** Code of the item *****/
fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_TOP COLOR%u\"" fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_TOP COLOR%u\""
@ -713,16 +717,17 @@ static void Syl_ShowRowSyllabus (unsigned NumItem,
Level * Syl_WIDTH_NUM_SYLLABUS); Level * Syl_WIDTH_NUM_SYLLABUS);
if (Level == 1) if (Level == 1)
fprintf (Gbl.F.Out,"&nbsp;"); fprintf (Gbl.F.Out,"&nbsp;");
fprintf (Gbl.F.Out,"%s&nbsp;</td>",StrItemCod); fprintf (Gbl.F.Out,"%s&nbsp;",StrItemCod);
Tbl_EndCell ();
/***** Text of the item *****/ /***** Text of the item *****/
fprintf (Gbl.F.Out,"<td colspan=\"%d\" class=\"%s LEFT_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td colspan=\"%d\" class=\"%s LEFT_TOP COLOR%u\">"
"%s" "%s",
"</td>",
LstItemsSyllabus.NumLevels - Level + 1, LstItemsSyllabus.NumLevels - Level + 1,
StyleSyllabus[Level], StyleSyllabus[Level],
Gbl.RowEvenOdd, Gbl.RowEvenOdd,
Text); Text);
Tbl_EndCell ();
} }
/***** End of the row *****/ /***** End of the row *****/
@ -885,15 +890,19 @@ static void Syl_PutFormItemSyllabus (bool NewItem,unsigned NumItem,int Level,int
/***** Indent depending on the level *****/ /***** Indent depending on the level *****/
if (Level > 1) if (Level > 1)
fprintf (Gbl.F.Out,"<td colspan=\"%d\" class=\"COLOR%u\">" {
"</td>", fprintf (Gbl.F.Out,"<td colspan=\"%d\" class=\"COLOR%u\">",
Level - 1,Gbl.RowEvenOdd); Level - 1,Gbl.RowEvenOdd);
Tbl_EndCell ();
}
/***** Write the code of the item *****/ /***** Write the code of the item *****/
if (NewItem) // If the item is new (not stored in the file) ==> it has not a number if (NewItem) // If the item is new (not stored in the file) ==> it has not a number
fprintf (Gbl.F.Out,"<td class=\"COLOR%u\" style=\"width:%dpx;\">" {
"</td>", fprintf (Gbl.F.Out,"<td class=\"COLOR%u\" style=\"width:%dpx;\">",
Gbl.RowEvenOdd,Level * Syl_WIDTH_NUM_SYLLABUS); Gbl.RowEvenOdd,Level * Syl_WIDTH_NUM_SYLLABUS);
Tbl_EndCell ();
}
else else
{ {
fprintf (Gbl.F.Out,"<td class=\"%s LEFT_MIDDLE COLOR%u\"" fprintf (Gbl.F.Out,"<td class=\"%s LEFT_MIDDLE COLOR%u\""
@ -903,7 +912,8 @@ static void Syl_PutFormItemSyllabus (bool NewItem,unsigned NumItem,int Level,int
if (Level == 1) if (Level == 1)
fprintf (Gbl.F.Out,"&nbsp;"); fprintf (Gbl.F.Out,"&nbsp;");
Syl_WriteNumItem (NULL,Gbl.F.Out,Level,CodItem); Syl_WriteNumItem (NULL,Gbl.F.Out,Level,CodItem);
fprintf (Gbl.F.Out,"&nbsp;</td>"); fprintf (Gbl.F.Out,"&nbsp;");
Tbl_EndCell ();
} }
/***** Text of the item *****/ /***** Text of the item *****/

View File

@ -354,23 +354,26 @@ void Tst_ShowFormAskTst (void)
/***** Number of questions to generate ****/ /***** Number of questions to generate ****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"RIGHT_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_MIDDLE\">"
"<label for=\"NumQst\" class=\"%s\">" "<label for=\"NumQst\" class=\"%s\">"
"%s:" "%s:"
"</label>" "</label>",
"</td>" The_ClassFormInBox[Gbl.Prefs.Theme],Txt_No_of_questions);
"<td class=\"LEFT_MIDDLE\">" Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">"
"<input type=\"number\"" "<input type=\"number\""
" id=\"NumQst\" name=\"NumQst\"" " id=\"NumQst\" name=\"NumQst\""
" min=\"%u\" max=\"%u\" value=\"%u\"", " min=\"%u\" max=\"%u\" value=\"%u\"",
The_ClassFormInBox[Gbl.Prefs.Theme],Txt_No_of_questions,
Gbl.Test.Config.Min, Gbl.Test.Config.Min,
Gbl.Test.Config.Max, Gbl.Test.Config.Max,
Gbl.Test.Config.Def); Gbl.Test.Config.Def);
if (Gbl.Test.Config.Min == Gbl.Test.Config.Max) if (Gbl.Test.Config.Min == Gbl.Test.Config.Max)
fprintf (Gbl.F.Out," disabled=\"disabled\""); fprintf (Gbl.F.Out," disabled=\"disabled\"");
fprintf (Gbl.F.Out," />" fprintf (Gbl.F.Out," />");
"</td>"); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
Tbl_EndTable (); Tbl_EndTable ();
@ -993,14 +996,17 @@ static void Tst_ShowTestResultAfterAssess (long TstCod,unsigned *NumQstsNotBlank
{ {
/***** Question does not exists *****/ /***** Question does not exists *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"BIG_INDEX RIGHT_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"BIG_INDEX RIGHT_TOP COLOR%u\">"
"%u" "%u",
"</td>" Gbl.RowEvenOdd,NumQst + 1);
"<td class=\"DAT_LIGHT LEFT_TOP COLOR%u\">" Tbl_EndCell ();
"%s"
"</td>", fprintf (Gbl.F.Out,"<td class=\"DAT_LIGHT LEFT_TOP COLOR%u\">"
Gbl.RowEvenOdd,NumQst + 1, "%s",
Gbl.RowEvenOdd,Txt_Question_removed); Gbl.RowEvenOdd,Txt_Question_removed);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
} }
@ -1036,8 +1042,9 @@ static void Tst_WriteQstAndAnsTest (Tst_ActionToDoWithQuestions_t ActionToDoWith
Tst_QstConstructor (); Tst_QstConstructor ();
Gbl.Test.QstCod = QstCod; Gbl.Test.QstCod = QstCod;
/***** Write number of question *****/
Tbl_StartRow (); Tbl_StartRow ();
/***** Write number of question *****/
fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP COLOR%u\">"
"<div class=\"BIG_INDEX\">%u</div>", "<div class=\"BIG_INDEX\">%u</div>",
Gbl.RowEvenOdd, Gbl.RowEvenOdd,
@ -1045,9 +1052,9 @@ static void Tst_WriteQstAndAnsTest (Tst_ActionToDoWithQuestions_t ActionToDoWith
/***** Write answer type (row[2]) *****/ /***** Write answer type (row[2]) *****/
Gbl.Test.AnswerType = Tst_ConvertFromStrAnsTypDBToAnsTyp (row[2]); Gbl.Test.AnswerType = Tst_ConvertFromStrAnsTypDBToAnsTyp (row[2]);
fprintf (Gbl.F.Out,"<div class=\"DAT_SMALL\">%s</div>" fprintf (Gbl.F.Out,"<div class=\"DAT_SMALL\">%s</div>",
"</td>",
Txt_TST_STR_ANSWER_TYPES[Gbl.Test.AnswerType]); Txt_TST_STR_ANSWER_TYPES[Gbl.Test.AnswerType]);
Tbl_EndCell ();
/***** Write stem (row[4]) *****/ /***** Write stem (row[4]) *****/
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u\">", fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u\">",
@ -1693,13 +1700,13 @@ static void Tst_ShowFormSelTags (unsigned long NumRows,MYSQL_RES *mysql_res,
row[1] TagTxt row[1] TagTxt
row[2] TagHidden row[2] TagHidden
*/ */
Tbl_StartRow ();
/***** Label *****/ /***** Label *****/
Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP %s\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP %s\">"
"%s:" "%s:",
"</td>",
The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Tags); The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Tags);
Tbl_EndCell ();
/***** Select all tags *****/ /***** Select all tags *****/
fprintf (Gbl.F.Out,"<td"); fprintf (Gbl.F.Out,"<td");
@ -1710,6 +1717,7 @@ static void Tst_ShowFormSelTags (unsigned long NumRows,MYSQL_RES *mysql_res,
Tbl_StartRow (); Tbl_StartRow ();
if (!ShowOnlyEnabledTags) if (!ShowOnlyEnabledTags)
Tbl_PutEmptyCells (1); Tbl_PutEmptyCells (1);
fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">"
"<label class=\"%s\">" "<label class=\"%s\">"
"<input type=\"checkbox\" name=\"AllTags\" value=\"Y\"", "<input type=\"checkbox\" name=\"AllTags\" value=\"Y\"",
@ -1718,9 +1726,10 @@ static void Tst_ShowFormSelTags (unsigned long NumRows,MYSQL_RES *mysql_res,
fprintf (Gbl.F.Out," checked=\"checked\""); fprintf (Gbl.F.Out," checked=\"checked\"");
fprintf (Gbl.F.Out," onclick=\"togglecheckChildren(this,'ChkTag');\" />" fprintf (Gbl.F.Out," onclick=\"togglecheckChildren(this,'ChkTag');\" />"
"&nbsp;%s" "&nbsp;%s"
"</label>" "</label>",
"</td>",
Txt_All_tags); Txt_All_tags);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Select tags one by one *****/ /***** Select tags one by one *****/
@ -1744,8 +1753,8 @@ static void Tst_ShowFormSelTags (unsigned long NumRows,MYSQL_RES *mysql_res,
fprintf (Gbl.F.Out,"eye.svg\" alt=\"%s\" title=\"%s", fprintf (Gbl.F.Out,"eye.svg\" alt=\"%s\" title=\"%s",
Txt_Tag_allowed, Txt_Tag_allowed,
Txt_Tag_allowed); Txt_Tag_allowed);
fprintf (Gbl.F.Out,"\" class=\"ICO_HIDDEN ICO16x16\" />" fprintf (Gbl.F.Out,"\" class=\"ICO_HIDDEN ICO16x16\" />");
"</td>"); Tbl_EndCell ();
} }
fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">"
"<label class=\"DAT\">" "<label class=\"DAT\">"
@ -1763,9 +1772,10 @@ static void Tst_ShowFormSelTags (unsigned long NumRows,MYSQL_RES *mysql_res,
} }
fprintf (Gbl.F.Out," onclick=\"checkParent(this,'AllTags');\" />" fprintf (Gbl.F.Out," onclick=\"checkParent(this,'AllTags');\" />"
"&nbsp;%s" "&nbsp;%s"
"</label>" "</label>",
"</td>",
row[1]); row[1]);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
} }
@ -1913,12 +1923,14 @@ static void Tst_ShowFormConfigTst (void)
/***** Tests are visible from plugins? *****/ /***** Tests are visible from plugins? *****/
Tbl_StartTablePadding (2); Tbl_StartTablePadding (2);
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_TOP\">"
"%s:" "%s:",
"</td>"
"<td class=\"LEFT_BOTTOM\">",
The_ClassFormInBox[Gbl.Prefs.Theme], The_ClassFormInBox[Gbl.Prefs.Theme],
Txt_Plugins); Txt_Plugins);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_BOTTOM\">");
for (Pluggable = Tst_PLUGGABLE_NO; for (Pluggable = Tst_PLUGGABLE_NO;
Pluggable <= Tst_PLUGGABLE_YES; Pluggable <= Tst_PLUGGABLE_YES;
Pluggable++) Pluggable++)
@ -1934,16 +1946,19 @@ static void Tst_ShowFormConfigTst (void)
Txt_TST_PLUGGABLE[Pluggable]); Txt_TST_PLUGGABLE[Pluggable]);
} }
Tbl_EndCell (); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Number of questions *****/ /***** Number of questions *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_TOP\">"
"%s:" "%s:",
"</td>"
"<td class=\"LEFT_BOTTOM\">",
The_ClassFormInBox[Gbl.Prefs.Theme], The_ClassFormInBox[Gbl.Prefs.Theme],
Txt_No_of_questions); Txt_No_of_questions);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_BOTTOM\">");
Tbl_StartTablePadding (2); Tbl_StartTablePadding (2);
Tst_PutInputFieldNumQst ("NumQstMin",Txt_minimum, Tst_PutInputFieldNumQst ("NumQstMin",Txt_minimum,
Gbl.Test.Config.Min); // Minimum number of questions Gbl.Test.Config.Min); // Minimum number of questions
@ -1953,33 +1968,39 @@ static void Tst_ShowFormConfigTst (void)
Gbl.Test.Config.Max); // Maximum number of questions Gbl.Test.Config.Max); // Maximum number of questions
Tbl_EndTable (); Tbl_EndTable ();
Tbl_EndCell (); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Minimum time between consecutive tests, per question *****/ /***** Minimum time between consecutive tests, per question *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP\">"
"<label for=\"MinTimeNxtTstPerQst\" class=\"%s\">" "<label for=\"MinTimeNxtTstPerQst\" class=\"%s\">"
"%s:" "%s:"
"</label>" "</label>",
"</td>" The_ClassFormInBox[Gbl.Prefs.Theme],
"<td class=\"LEFT_BOTTOM\">" Txt_Minimum_time_seconds_per_question_between_two_tests);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_BOTTOM\">"
"<input type=\"text\"" "<input type=\"text\""
" id=\"MinTimeNxtTstPerQst\" name=\"MinTimeNxtTstPerQst\"" " id=\"MinTimeNxtTstPerQst\" name=\"MinTimeNxtTstPerQst\""
" size=\"7\" maxlength=\"7\" value=\"%lu\"" " size=\"7\" maxlength=\"7\" value=\"%lu\""
" required=\"required\" />" " required=\"required\" />",
"</td>",
The_ClassFormInBox[Gbl.Prefs.Theme],
Txt_Minimum_time_seconds_per_question_between_two_tests,
Gbl.Test.Config.MinTimeNxtTstPerQst); Gbl.Test.Config.MinTimeNxtTstPerQst);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Feedback to students *****/ /***** Feedback to students *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_TOP\">"
"%s:" "%s:",
"</td>"
"<td class=\"LEFT_BOTTOM\">",
The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Feedback_to_students); The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Feedback_to_students);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_BOTTOM\">");
for (Feedback = (Tst_Feedback_t) 0; for (Feedback = (Tst_Feedback_t) 0;
Feedback < Tst_NUM_TYPES_FEEDBACK; Feedback < Tst_NUM_TYPES_FEEDBACK;
Feedback++) Feedback++)
@ -1995,6 +2016,7 @@ static void Tst_ShowFormConfigTst (void)
Txt_TST_STR_FEEDBACK[Feedback]); Txt_TST_STR_FEEDBACK[Feedback]);
} }
Tbl_EndCell (); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
Tbl_EndTable (); Tbl_EndTable ();
@ -2016,18 +2038,21 @@ static void Tst_PutInputFieldNumQst (const char *Field,const char *Label,
unsigned Value) unsigned Value)
{ {
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"RIGHT_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_MIDDLE\">"
"<label for=\"%s\" class=\"DAT\">%s</label>" "<label for=\"%s\" class=\"DAT\">%s</label>",
"</td>" Field,Label);
"<td class=\"LEFT_MIDDLE\">" Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">"
"<input type=\"text\"" "<input type=\"text\""
" id=\"%s\" name=\"%s\"" " id=\"%s\" name=\"%s\""
" size=\"3\" maxlength=\"3\" value=\"%u\"" " size=\"3\" maxlength=\"3\" value=\"%u\""
" required=\"required\" />" " required=\"required\" />",
"</td>",
Field,Label,
Field,Field, Field,Field,
Value); Value);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
} }
@ -2313,12 +2338,13 @@ static void Tst_ShowFormAnswerTypes (unsigned NumCols)
char UnsignedStr[10 + 1]; char UnsignedStr[10 + 1];
const char *Ptr; const char *Ptr;
/***** Label *****/
Tbl_StartRow (); Tbl_StartRow ();
/***** Label *****/
fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP %s\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP %s\">"
"%s:" "%s:",
"</td>",
The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Types_of_answers); The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Types_of_answers);
Tbl_EndCell ();
/***** Select all types of answers *****/ /***** Select all types of answers *****/
fprintf (Gbl.F.Out,"<td"); fprintf (Gbl.F.Out,"<td");
@ -2326,7 +2352,9 @@ static void Tst_ShowFormAnswerTypes (unsigned NumCols)
fprintf (Gbl.F.Out," colspan=\"%u\"",NumCols); fprintf (Gbl.F.Out," colspan=\"%u\"",NumCols);
fprintf (Gbl.F.Out," class=\"LEFT_TOP\">"); fprintf (Gbl.F.Out," class=\"LEFT_TOP\">");
Tbl_StartTablePadding (2); Tbl_StartTablePadding (2);
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">"
"<label class=\"%s\">" "<label class=\"%s\">"
"<input type=\"checkbox\" name=\"AllAnsTypes\" value=\"Y\"", "<input type=\"checkbox\" name=\"AllAnsTypes\" value=\"Y\"",
@ -2335,9 +2363,10 @@ static void Tst_ShowFormAnswerTypes (unsigned NumCols)
fprintf (Gbl.F.Out," checked=\"checked\""); fprintf (Gbl.F.Out," checked=\"checked\"");
fprintf (Gbl.F.Out," onclick=\"togglecheckChildren(this,'AnswerType');\" />" fprintf (Gbl.F.Out," onclick=\"togglecheckChildren(this,'AnswerType');\" />"
"&nbsp;%s" "&nbsp;%s"
"</label>" "</label>",
"</td>",
Txt_All_types_of_answers); Txt_All_types_of_answers);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Type of answer *****/ /***** Type of answer *****/
@ -2346,6 +2375,7 @@ static void Tst_ShowFormAnswerTypes (unsigned NumCols)
AnsType++) AnsType++)
{ {
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">"
"<label class=\"DAT\">" "<label class=\"DAT\">"
"<input type=\"checkbox\" name=\"AnswerType\" value=\"%u\"", "<input type=\"checkbox\" name=\"AnswerType\" value=\"%u\"",
@ -2359,9 +2389,10 @@ static void Tst_ShowFormAnswerTypes (unsigned NumCols)
} }
fprintf (Gbl.F.Out," onclick=\"checkParent(this,'AllAnsTypes');\" />" fprintf (Gbl.F.Out," onclick=\"checkParent(this,'AllAnsTypes');\" />"
"&nbsp;%s" "&nbsp;%s"
"</label>" "</label>",
"</td>",
Txt_TST_STR_ANSWER_TYPES[AnsType]); Txt_TST_STR_ANSWER_TYPES[AnsType]);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
} }
@ -2913,15 +2944,15 @@ static void Tst_ListOneOrMoreQuestionsForEdition (unsigned long NumRows,
/* Write answer type (row[2]) */ /* Write answer type (row[2]) */
Gbl.Test.AnswerType = Tst_ConvertFromStrAnsTypDBToAnsTyp (row[2]); Gbl.Test.AnswerType = Tst_ConvertFromStrAnsTypDBToAnsTyp (row[2]);
fprintf (Gbl.F.Out,"<div class=\"DAT_SMALL\">%s</div>" fprintf (Gbl.F.Out,"<div class=\"DAT_SMALL\">%s</div>",
"</td>",
Txt_TST_STR_ANSWER_TYPES[Gbl.Test.AnswerType]); Txt_TST_STR_ANSWER_TYPES[Gbl.Test.AnswerType]);
Tbl_EndCell ();
/* Write question code */ /* Write question code */
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">"
"%ld&nbsp;" "%ld&nbsp;",
"</td>",
Gbl.RowEvenOdd,Gbl.Test.QstCod); Gbl.RowEvenOdd,Gbl.Test.QstCod);
Tbl_EndCell ();
/* Write the date (row[1] has the UTC date-time) */ /* Write the date (row[1] has the UTC date-time) */
TimeUTC = Dat_GetUNIXTimeFromStr (row[1]); TimeUTC = Dat_GetUNIXTimeFromStr (row[1]);
@ -2930,11 +2961,11 @@ static void Tst_ListOneOrMoreQuestionsForEdition (unsigned long NumRows,
"<script type=\"text/javascript\">" "<script type=\"text/javascript\">"
"writeLocalDateHMSFromUTC('tst_date_%u',%ld," "writeLocalDateHMSFromUTC('tst_date_%u',%ld,"
"%u,'<br />','%s',true,false,0x7);" "%u,'<br />','%s',true,false,0x7);"
"</script>" "</script>",
"</td>",
UniqueId,Gbl.RowEvenOdd, UniqueId,Gbl.RowEvenOdd,
UniqueId,(long) TimeUTC, UniqueId,(long) TimeUTC,
(unsigned) Gbl.Prefs.DateFormat,Txt_Today); (unsigned) Gbl.Prefs.DateFormat,Txt_Today);
Tbl_EndCell ();
/* Write the question tags */ /* Write the question tags */
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u\">", fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u\">",
@ -3001,9 +3032,9 @@ static void Tst_ListOneOrMoreQuestionsForEdition (unsigned long NumRows,
/* Write number of times this question has been answered */ /* Write number of times this question has been answered */
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">"
"%lu" "%lu",
"</td>",
Gbl.RowEvenOdd,NumHitsThisQst); Gbl.RowEvenOdd,NumHitsThisQst);
Tbl_EndCell ();
/* Write average score */ /* Write average score */
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">", fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">",
@ -3017,10 +3048,10 @@ static void Tst_ListOneOrMoreQuestionsForEdition (unsigned long NumRows,
/* Write number of times this question has been answered (not blank) */ /* Write number of times this question has been answered (not blank) */
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">"
"%lu" "%lu",
"</td>",
Gbl.RowEvenOdd, Gbl.RowEvenOdd,
NumHitsNotBlankThisQst); NumHitsNotBlankThisQst);
Tbl_EndCell ();
/* Write average score (not blank) */ /* Write average score (not blank) */
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">", fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">",
@ -3151,15 +3182,15 @@ static void Tst_ListOneOrMoreQuestionsForSelection (unsigned long NumRows,
/* Write number of question */ /* Write number of question */
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">"
"%lu&nbsp;" "%lu&nbsp;",
"</td>",
Gbl.RowEvenOdd,NumRow + 1); Gbl.RowEvenOdd,NumRow + 1);
Tbl_EndCell ();
/* Write question code */ /* Write question code */
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">"
"%ld&nbsp;" "%ld&nbsp;",
"</td>",
Gbl.RowEvenOdd,Gbl.Test.QstCod); Gbl.RowEvenOdd,Gbl.Test.QstCod);
Tbl_EndCell ();
/* Write the date (row[1] has the UTC date-time) */ /* Write the date (row[1] has the UTC date-time) */
TimeUTC = Dat_GetUNIXTimeFromStr (row[1]); TimeUTC = Dat_GetUNIXTimeFromStr (row[1]);
@ -3168,11 +3199,11 @@ static void Tst_ListOneOrMoreQuestionsForSelection (unsigned long NumRows,
"<script type=\"text/javascript\">" "<script type=\"text/javascript\">"
"writeLocalDateHMSFromUTC('tst_date_%u',%ld," "writeLocalDateHMSFromUTC('tst_date_%u',%ld,"
"%u,'<br />','%s',true,false,0x7);" "%u,'<br />','%s',true,false,0x7);"
"</script>" "</script>",
"</td>",
UniqueId,Gbl.RowEvenOdd, UniqueId,Gbl.RowEvenOdd,
UniqueId,(long) TimeUTC, UniqueId,(long) TimeUTC,
(unsigned) Gbl.Prefs.DateFormat,Txt_Today); (unsigned) Gbl.Prefs.DateFormat,Txt_Today);
Tbl_EndCell ();
/* Write the question tags */ /* Write the question tags */
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u\">", fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u\">",
@ -3183,10 +3214,10 @@ static void Tst_ListOneOrMoreQuestionsForSelection (unsigned long NumRows,
/* Write the question type (row[2]) */ /* Write the question type (row[2]) */
Gbl.Test.AnswerType = Tst_ConvertFromStrAnsTypDBToAnsTyp (row[2]); Gbl.Test.AnswerType = Tst_ConvertFromStrAnsTypDBToAnsTyp (row[2]);
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">"
"%s&nbsp;" "%s&nbsp;",
"</td>",
Gbl.RowEvenOdd, Gbl.RowEvenOdd,
Txt_TST_STR_ANSWER_TYPES[Gbl.Test.AnswerType]); Txt_TST_STR_ANSWER_TYPES[Gbl.Test.AnswerType]);
Tbl_EndCell ();
/* Write if shuffle is enabled (row[3]) */ /* Write if shuffle is enabled (row[3]) */
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">", fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_TOP COLOR%u\">",
@ -3428,9 +3459,9 @@ void Tst_WriteAnswersEdit (long QstCod)
/* Write the number of option */ /* Write the number of option */
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL LEFT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL LEFT_TOP\">"
"%c)&nbsp;" "%c)&nbsp;",
"</td>",
'a' + (char) NumOpt); 'a' + (char) NumOpt);
Tbl_EndCell ();
/* Write the text of the answer and the image */ /* Write the text of the answer and the image */
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">"
@ -3446,8 +3477,9 @@ void Tst_WriteAnswersEdit (long QstCod)
fprintf (Gbl.F.Out,"<div class=\"TEST_EDI_LIGHT\">"); fprintf (Gbl.F.Out,"<div class=\"TEST_EDI_LIGHT\">");
if (LengthFeedback) if (LengthFeedback)
fprintf (Gbl.F.Out,"%s",Feedback); fprintf (Gbl.F.Out,"%s",Feedback);
fprintf (Gbl.F.Out,"</div>" fprintf (Gbl.F.Out,"</div>");
"</td>"); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/* Free memory allocated for the answer and the feedback */ /* Free memory allocated for the answer and the feedback */
@ -3763,6 +3795,7 @@ static void Tst_WriteChoiceAnsViewTest (unsigned NumQst,long QstCod,bool Shuffle
/***** Write selectors and letter of this option *****/ /***** Write selectors and letter of this option *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">"); fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">");
snprintf (ParamName,sizeof (ParamName), snprintf (ParamName,sizeof (ParamName),
"Ind%06u", "Ind%06u",
@ -3775,17 +3808,18 @@ static void Tst_WriteChoiceAnsViewTest (unsigned NumQst,long QstCod,bool Shuffle
NumQst,Gbl.Test.Answer.NumOptions); NumQst,Gbl.Test.Answer.NumOptions);
else // Gbl.Test.AnswerType == Tst_ANS_MULTIPLE_CHOICE else // Gbl.Test.AnswerType == Tst_ANS_MULTIPLE_CHOICE
fprintf (Gbl.F.Out,"checkbox\""); fprintf (Gbl.F.Out,"checkbox\"");
fprintf (Gbl.F.Out," id=\"Ans%06u_%u\" name=\"Ans%06u\" value=\"%u\" />" fprintf (Gbl.F.Out," id=\"Ans%06u_%u\" name=\"Ans%06u\" value=\"%u\" />",
"</td>",
NumQst,NumOpt, NumQst,NumOpt,
NumQst,Index); NumQst,Index);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">"
"<label for=\"Ans%06u_%u\" class=\"ANS_TXT\">" "<label for=\"Ans%06u_%u\" class=\"ANS_TXT\">"
"%c)&nbsp;" "%c)&nbsp;"
"</label>" "</label>",
"</td>",
NumQst,NumOpt, NumQst,NumOpt,
'a' + (char) NumOpt); 'a' + (char) NumOpt);
Tbl_EndCell ();
/***** Write the option text *****/ /***** Write the option text *****/
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">"
@ -3876,8 +3910,9 @@ static void Tst_WriteChoiceAnsAssessTest (struct UsrData *UsrDat,
Ans.Class = "ANS_0"; Ans.Class = "ANS_0";
Ans.Str = "&bull;"; Ans.Str = "&bull;";
} }
fprintf (Gbl.F.Out,"<td class=\"%s CENTER_TOP\" title=\"%s\">%s</td>", fprintf (Gbl.F.Out,"<td class=\"%s CENTER_TOP\" title=\"%s\">%s",
Ans.Class,Txt_TST_Answer_given_by_the_user,Ans.Str); Ans.Class,Txt_TST_Answer_given_by_the_user,Ans.Str);
Tbl_EndCell ();
} }
else // This answer has NOT been selected by the user else // This answer has NOT been selected by the user
Tbl_PutEmptyCells (1); Tbl_PutEmptyCells (1);
@ -3887,19 +3922,25 @@ static void Tst_WriteChoiceAnsAssessTest (struct UsrData *UsrDat,
Gbl.Test.Config.Feedback == Tst_FEEDBACK_FULL_FEEDBACK) Gbl.Test.Config.Feedback == Tst_FEEDBACK_FULL_FEEDBACK)
{ {
if (Gbl.Test.Answer.Options[Indexes[NumOpt]].Correct) if (Gbl.Test.Answer.Options[Indexes[NumOpt]].Correct)
fprintf (Gbl.F.Out,"<td class=\"ANS_0 CENTER_TOP\" title=\"%s\">&bull;</td>", {
fprintf (Gbl.F.Out,"<td class=\"ANS_0 CENTER_TOP\" title=\"%s\">&bull;",
Txt_TST_Answer_given_by_the_teachers); Txt_TST_Answer_given_by_the_teachers);
Tbl_EndCell ();
}
else else
Tbl_PutEmptyCells (1); Tbl_PutEmptyCells (1);
} }
else else
fprintf (Gbl.F.Out,"<td class=\"ANS_0 CENTER_TOP\">?</td>"); {
fprintf (Gbl.F.Out,"<td class=\"ANS_0 CENTER_TOP\">?");
Tbl_EndCell ();
}
/* Answer letter (a, b, c,...) */ /* Answer letter (a, b, c,...) */
fprintf (Gbl.F.Out,"<td class=\"ANS_TXT LEFT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"ANS_TXT LEFT_TOP\">"
"%c)&nbsp;" "%c)&nbsp;",
"</td>",
'a' + (char) NumOpt); 'a' + (char) NumOpt);
Tbl_EndCell ();
/* Answer text and feedback */ /* Answer text and feedback */
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">"
@ -4211,10 +4252,10 @@ static void Tst_WriteChoiceAnsViewMatch (long MchCod,unsigned QstInd,long QstCod
fprintf (Gbl.F.Out,"<td class=\"MATCH_TCH_BUTTON_TD\">" fprintf (Gbl.F.Out,"<td class=\"MATCH_TCH_BUTTON_TD\">"
"<div class=\"MATCH_TCH_BUTTON BT_%c\">" "<div class=\"MATCH_TCH_BUTTON BT_%c\">"
"%c" "%c"
"</div>" "</div>",
"</td>",
'A' + (char) NumOpt, 'A' + (char) NumOpt,
'a' + (char) NumOpt); 'a' + (char) NumOpt);
Tbl_EndCell ();
/***** Write the option text and the result *****/ /***** Write the option text and the result *****/
fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">"
@ -4377,9 +4418,9 @@ static void Tst_WriteTextAnsAssessTest (struct UsrData *UsrDat,
{ {
/* Answer letter (a, b, c,...) */ /* Answer letter (a, b, c,...) */
fprintf (Gbl.F.Out,"<td class=\"ANS_0 LEFT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"ANS_0 LEFT_TOP\">"
"%c)&nbsp;" "%c)&nbsp;",
"</td>",
'a' + (char) NumOpt); 'a' + (char) NumOpt);
Tbl_EndCell ();
/* Answer text and feedback */ /* Answer text and feedback */
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">"
@ -4686,13 +4727,14 @@ static void Tst_WriteHeadUserCorrect (struct UsrData *UsrDat)
extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_MIDDLE\">"
"%s" "%s",
"</td>" Txt_User[UsrDat->Sex]);
"<td class=\"DAT_SMALL CENTER_MIDDLE\">" Tbl_EndCell ();
"%s"
"</td>", fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL CENTER_MIDDLE\">"
Txt_User[UsrDat->Sex], "%s",
Txt_ROLES_PLURAL_Abc[Rol_TCH][Usr_SEX_UNKNOWN]); Txt_ROLES_PLURAL_Abc[Rol_TCH][Usr_SEX_UNKNOWN]);
Tbl_EndCell ();
} }
/*****************************************************************************/ /*****************************************************************************/
@ -4711,8 +4753,8 @@ static void Tst_WriteScoreStart (unsigned ColSpan)
static void Tst_WriteScoreEnd (void) static void Tst_WriteScoreEnd (void)
{ {
fprintf (Gbl.F.Out,"</span>" fprintf (Gbl.F.Out,"</span>");
"</td>"); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
} }
@ -5082,11 +5124,13 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1],
/***** Write the tags *****/ /***** Write the tags *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP %s\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP %s\">"
"%s:" "%s:",
"</td>"
"<td class=\"LEFT_TOP\">",
The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Tags); The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Tags);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">");
Tbl_StartTablePadding (2); // Table for tags Tbl_StartTablePadding (2); // Table for tags
for (NumTag = 0; for (NumTag = 0;
@ -5126,23 +5170,24 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1],
fprintf (Gbl.F.Out,"<option value=\"%s\" selected=\"selected\">%s</option>", fprintf (Gbl.F.Out,"<option value=\"%s\" selected=\"selected\">%s</option>",
Gbl.Test.Tags.Txt[NumTag],Gbl.Test.Tags.Txt[NumTag]); Gbl.Test.Tags.Txt[NumTag],Gbl.Test.Tags.Txt[NumTag]);
fprintf (Gbl.F.Out,"<option value=\"\">[%s]</option>" fprintf (Gbl.F.Out,"<option value=\"\">[%s]</option>"
"</select>" "</select>",
"</td>",
Txt_new_tag); Txt_new_tag);
Tbl_EndCell ();
/***** Input of a new tag *****/ /***** Input of a new tag *****/
fprintf (Gbl.F.Out,"<td class=\"RIGHT_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_MIDDLE\">"
"<input type=\"text\" id=\"TagTxt%u\" name=\"TagTxt%u\"" "<input type=\"text\" id=\"TagTxt%u\" name=\"TagTxt%u\""
" class=\"TAG_TXT\" maxlength=\"%u\" value=\"%s\"" " class=\"TAG_TXT\" maxlength=\"%u\" value=\"%s\""
" onchange=\"changeSelTag('%u')\" />" " onchange=\"changeSelTag('%u')\" />",
"</td>",
NumTag,NumTag,Tst_MAX_CHARS_TAG,Gbl.Test.Tags.Txt[NumTag],NumTag); NumTag,NumTag,Tst_MAX_CHARS_TAG,Gbl.Test.Tags.Txt[NumTag],NumTag);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
} }
Tbl_EndTable (); // Table for tags Tbl_EndTable (); // Table for tags
Tbl_EndCell (); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/* Free structure that stores the query result */ /* Free structure that stores the query result */
@ -5150,16 +5195,18 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1],
/***** Stem and image *****/ /***** Stem and image *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP\">"
"<label for=\"Stem\" class=\"%s\">%s:</label>" "<label for=\"Stem\" class=\"%s\">%s:</label>",
"</td>" The_ClassFormInBox[Gbl.Prefs.Theme],
"<td class=\"LEFT_TOP\">" Txt_Wording);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">"
"<textarea id=\"Stem\" name=\"Stem\"" "<textarea id=\"Stem\" name=\"Stem\""
" class=\"STEM_TEXTAREA\" rows=\"5\" required=\"required\">" " class=\"STEM_TEXTAREA\" rows=\"5\" required=\"required\">"
"%s" "%s"
"</textarea><br />", "</textarea><br />",
The_ClassFormInBox[Gbl.Prefs.Theme],
Txt_Wording,
Stem); Stem);
Tst_PutFormToEditQstMedia (&Gbl.Test.Media,-1, Tst_PutFormToEditQstMedia (&Gbl.Test.Media,-1,
false); false);
@ -5175,18 +5222,21 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1],
if (Feedback[0]) if (Feedback[0])
fprintf (Gbl.F.Out,"%s",Feedback); fprintf (Gbl.F.Out,"%s",Feedback);
fprintf (Gbl.F.Out,"</textarea>" fprintf (Gbl.F.Out,"</textarea>"
"</label>" "</label>");
"</td>"); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Type of answer *****/ /***** Type of answer *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP %s\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP %s\">"
"%s:" "%s:",
"</td>"
"<td class=\"%s LEFT_TOP\">",
The_ClassFormInBox[Gbl.Prefs.Theme], The_ClassFormInBox[Gbl.Prefs.Theme],
Txt_Type, Txt_Type);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"%s LEFT_TOP\">",
The_ClassFormInBox[Gbl.Prefs.Theme]); The_ClassFormInBox[Gbl.Prefs.Theme]);
for (AnsType = (Tst_AnswerType_t) 0; for (AnsType = (Tst_AnswerType_t) 0;
AnsType < Tst_NUM_ANS_TYPES; AnsType < Tst_NUM_ANS_TYPES;
@ -5203,27 +5253,31 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1],
Txt_TST_STR_ANSWER_TYPES[AnsType]); Txt_TST_STR_ANSWER_TYPES[AnsType]);
} }
Tbl_EndCell (); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Answers *****/ /***** Answers *****/
/* Integer answer */ /* Integer answer */
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP %s\">" fprintf (Gbl.F.Out,"<td class=\"RIGHT_TOP %s\">"
"%s:" "%s:",
"</td>" The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Answers);
"<td class=\"LEFT_TOP\">" Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">"
"<label class=\"%s\">" "<label class=\"%s\">"
"%s:&nbsp;" "%s:&nbsp;"
"<input type=\"text\" name=\"AnsInt\"" "<input type=\"text\" name=\"AnsInt\""
" size=\"11\" maxlength=\"11\" value=\"%ld\"", " size=\"11\" maxlength=\"11\" value=\"%ld\"",
The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Answers,
The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Integer_number, The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Integer_number,
Gbl.Test.Answer.Integer); Gbl.Test.Answer.Integer);
if (Gbl.Test.AnswerType != Tst_ANS_INT) if (Gbl.Test.AnswerType != Tst_ANS_INT)
fprintf (Gbl.F.Out," disabled=\"disabled\""); fprintf (Gbl.F.Out," disabled=\"disabled\"");
fprintf (Gbl.F.Out," required=\"required\" />" fprintf (Gbl.F.Out," required=\"required\" />"
"</label>" "</label>");
"</td>"); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/* Floating point answer */ /* Floating point answer */
@ -5248,7 +5302,9 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1],
/* Questions can be shuffled? */ /* Questions can be shuffled? */
Tbl_StartRow (); Tbl_StartRow ();
Tbl_PutEmptyCells (1); Tbl_PutEmptyCells (1);
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">"
"<label class=\"%s\">" "<label class=\"%s\">"
"<input type=\"checkbox\" name=\"Shuffle\" value=\"Y\"", "<input type=\"checkbox\" name=\"Shuffle\" value=\"Y\"",
@ -5260,9 +5316,10 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1],
fprintf (Gbl.F.Out," disabled=\"disabled\""); fprintf (Gbl.F.Out," disabled=\"disabled\"");
fprintf (Gbl.F.Out," />" fprintf (Gbl.F.Out," />"
"%s" "%s"
"</label>" "</label>",
"</td>",
Txt_Shuffle); Txt_Shuffle);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/* Simple or multiple choice answers */ /* Simple or multiple choice answers */
@ -5288,8 +5345,9 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1],
DisplayRightColumn = NumOpt < 2 || // Display at least the two first options DisplayRightColumn = NumOpt < 2 || // Display at least the two first options
AnswerHasContent; AnswerHasContent;
/***** Left column: selectors *****/
Tbl_StartRow (); Tbl_StartRow ();
/***** Left column: selectors *****/
fprintf (Gbl.F.Out,"<td class=\"TEST_EDI_ANS_LEFT_COL COLOR%u\">", fprintf (Gbl.F.Out,"<td class=\"TEST_EDI_ANS_LEFT_COL COLOR%u\">",
Gbl.RowEvenOdd); Gbl.RowEvenOdd);
@ -5392,8 +5450,9 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1],
"</label>"); "</label>");
/* End of right column */ /* End of right column */
fprintf (Gbl.F.Out,"</div>" fprintf (Gbl.F.Out,"</div>");
"</td>"); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
} }
Tbl_EndTable (); // Table with choice answers Tbl_EndTable (); // Table with choice answers
@ -7453,12 +7512,15 @@ void Tst_SelUsrsToViewUsrsTstResults (void)
/***** Put list of users to select some of them *****/ /***** Put list of users to select some of them *****/
Tbl_StartTableCenterPadding (2); Tbl_StartTableCenterPadding (2);
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_TOP\">"
"%s:" "%s:",
"</td>" The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Users);
"<td colspan=\"2\" class=\"%s LEFT_TOP\">", Tbl_EndCell ();
The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Users,
fprintf (Gbl.F.Out,"<td colspan=\"2\" class=\"%s LEFT_TOP\">",
The_ClassFormInBox[Gbl.Prefs.Theme]); The_ClassFormInBox[Gbl.Prefs.Theme]);
Tbl_StartTablePadding (2); Tbl_StartTablePadding (2);
Usr_ListUsersToSelect (Rol_TCH); Usr_ListUsersToSelect (Rol_TCH);
@ -7466,6 +7528,7 @@ void Tst_SelUsrsToViewUsrsTstResults (void)
Usr_ListUsersToSelect (Rol_STD); Usr_ListUsersToSelect (Rol_STD);
Tbl_EndTable (); Tbl_EndTable ();
Tbl_EndCell (); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Starting and ending dates in the search *****/ /***** Starting and ending dates in the search *****/
@ -7799,11 +7862,11 @@ static void Tst_ShowTstResults (struct UsrData *UsrDat)
"<script type=\"text/javascript\">" "<script type=\"text/javascript\">"
"writeLocalDateHMSFromUTC('tst_date_%u',%ld," "writeLocalDateHMSFromUTC('tst_date_%u',%ld,"
"%u,',&nbsp;','%s',true,false,0x7);" "%u,',&nbsp;','%s',true,false,0x7);"
"</script>" "</script>",
"</td>",
UniqueId,ClassDat,Gbl.RowEvenOdd, UniqueId,ClassDat,Gbl.RowEvenOdd,
UniqueId,(long) TimeUTC, UniqueId,(long) TimeUTC,
(unsigned) Gbl.Prefs.DateFormat,Txt_Today); (unsigned) Gbl.Prefs.DateFormat,Txt_Today);
Tbl_EndCell ();
/* Get number of questions (row[3]) */ /* Get number of questions (row[3]) */
if (sscanf (row[3],"%u",&NumQstsInThisTest) != 1) if (sscanf (row[3],"%u",&NumQstsInThisTest) != 1)
@ -7958,10 +8021,10 @@ static void Tst_ShowTestResultsSummaryRow (bool ItsMe,
/***** Row title *****/ /***** Row title *****/
fprintf (Gbl.F.Out,"<td class=\"DAT_N_LINE_TOP RIGHT_MIDDLE COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"DAT_N_LINE_TOP RIGHT_MIDDLE COLOR%u\">"
"%s: %u" "%s: %u",
"</td>",
Gbl.RowEvenOdd, Gbl.RowEvenOdd,
Txt_Visible_tests,NumExams); Txt_Visible_tests,NumExams);
Tbl_EndCell ();
/***** Write total number of questions *****/ /***** Write total number of questions *****/
fprintf (Gbl.F.Out,"<td class=\"DAT_N_LINE_TOP RIGHT_MIDDLE COLOR%u\">", fprintf (Gbl.F.Out,"<td class=\"DAT_N_LINE_TOP RIGHT_MIDDLE COLOR%u\">",
@ -8004,8 +8067,9 @@ static void Tst_ShowTestResultsSummaryRow (bool ItsMe,
Tbl_EndCell (); Tbl_EndCell ();
/***** Last cell *****/ /***** Last cell *****/
fprintf (Gbl.F.Out,"<td class=\"DAT_N_LINE_TOP COLOR%u\"></td>", fprintf (Gbl.F.Out,"<td class=\"DAT_N_LINE_TOP COLOR%u\">",
Gbl.RowEvenOdd); Gbl.RowEvenOdd);
Tbl_EndCell ();
/***** End row *****/ /***** End row *****/
Tbl_EndRow (); Tbl_EndRow ();
@ -8117,11 +8181,13 @@ void Tst_ShowOneTstResult (void)
/* User */ /* User */
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"DAT_N RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"DAT_N RIGHT_TOP\">"
"%s:" "%s:",
"</td>"
"<td class=\"DAT LEFT_TOP\">",
Txt_ROLES_SINGUL_Abc[Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs.Role][Gbl.Usrs.Other.UsrDat.Sex]); Txt_ROLES_SINGUL_Abc[Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs.Role][Gbl.Usrs.Other.UsrDat.Sex]);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_TOP\">");
ID_WriteUsrIDs (&Gbl.Usrs.Other.UsrDat,NULL); ID_WriteUsrIDs (&Gbl.Usrs.Other.UsrDat,NULL);
fprintf (Gbl.F.Out," %s", fprintf (Gbl.F.Out," %s",
Gbl.Usrs.Other.UsrDat.Surname1); Gbl.Usrs.Other.UsrDat.Surname1);
@ -8137,42 +8203,52 @@ void Tst_ShowOneTstResult (void)
NULL, NULL,
"PHOTO45x60",Pho_ZOOM,false); "PHOTO45x60",Pho_ZOOM,false);
Tbl_EndCell (); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/* Test date */ /* Test date */
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"DAT_N RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"DAT_N RIGHT_TOP\">"
"%s:" "%s:",
"</td>" Txt_Date);
"<td id=\"test\" class=\"DAT LEFT_TOP\">" Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td id=\"test\" class=\"DAT LEFT_TOP\">"
"<script type=\"text/javascript\">" "<script type=\"text/javascript\">"
"writeLocalDateHMSFromUTC('test',%ld," "writeLocalDateHMSFromUTC('test',%ld,"
"%u,',&nbsp;','%s',true,true,0x7);" "%u,',&nbsp;','%s',true,true,0x7);"
"</script>" "</script>",
"</td>", TstTimeUTC,
Txt_Date,TstTimeUTC,
(unsigned) Gbl.Prefs.DateFormat,Txt_Today); (unsigned) Gbl.Prefs.DateFormat,Txt_Today);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/* Number of questions */ /* Number of questions */
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"DAT_N RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"DAT_N RIGHT_TOP\">"
"%s:" "%s:",
"</td>" Txt_Questions);
"<td class=\"DAT LEFT_TOP\">" Tbl_EndCell ();
"%u (%u %s)"
"</td>", fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_TOP\">"
Txt_Questions, "%u (%u %s)",
Gbl.Test.NumQsts,NumQstsNotBlank,Txt_non_blank_QUESTIONS); Gbl.Test.NumQsts,NumQstsNotBlank,Txt_non_blank_QUESTIONS);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/* Score */ /* Score */
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"DAT_N RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"DAT_N RIGHT_TOP\">"
"%s:" "%s:",
"</td>"
"<td class=\"DAT LEFT_TOP\">",
Txt_Score); Txt_Score);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_TOP\">");
if (ICanViewScore) if (ICanViewScore)
fprintf (Gbl.F.Out,"%.2lf (%.2lf", fprintf (Gbl.F.Out,"%.2lf (%.2lf",
TotalScore, TotalScore,
@ -8180,19 +8256,24 @@ void Tst_ShowOneTstResult (void)
0.0); 0.0);
else else
fprintf (Gbl.F.Out,"? (?"); // No feedback fprintf (Gbl.F.Out,"? (?"); // No feedback
fprintf (Gbl.F.Out," %s %u)</td>", fprintf (Gbl.F.Out," %s %u)",
Txt_out_of_PART_OF_A_SCORE,Tst_SCORE_MAX); Txt_out_of_PART_OF_A_SCORE,Tst_SCORE_MAX);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/* Tags present in this test */ /* Tags present in this test */
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"DAT_N RIGHT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"DAT_N RIGHT_TOP\">"
"%s:" "%s:",
"</td>"
"<td class=\"DAT LEFT_TOP\">",
Txt_Tags); Txt_Tags);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_TOP\">");
Tst_ShowTstTagsPresentInATestResult (TstCod); Tst_ShowTstTagsPresentInATestResult (TstCod);
Tbl_EndCell (); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Write answers and solutions *****/ /***** Write answers and solutions *****/
@ -8265,14 +8346,17 @@ void Tst_ShowTestResult (struct UsrData *UsrDat,
{ {
/***** Question has been edited *****/ /***** Question has been edited *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"BIG_INDEX RIGHT_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"BIG_INDEX RIGHT_TOP COLOR%u\">"
"%u" "%u",
"</td>" Gbl.RowEvenOdd,NumQst + 1);
"<td class=\"DAT_LIGHT LEFT_TOP COLOR%u\">" Tbl_EndCell ();
"%s"
"</td>", fprintf (Gbl.F.Out,"<td class=\"DAT_LIGHT LEFT_TOP COLOR%u\">"
Gbl.RowEvenOdd,NumQst + 1, "%s",
Gbl.RowEvenOdd,Txt_Question_modified); Gbl.RowEvenOdd,Txt_Question_modified);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
} }
else else
@ -8293,14 +8377,17 @@ void Tst_ShowTestResult (struct UsrData *UsrDat,
{ {
/***** Question does not exists *****/ /***** Question does not exists *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"BIG_INDEX RIGHT_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"BIG_INDEX RIGHT_TOP COLOR%u\">"
"%u" "%u",
"</td>" Gbl.RowEvenOdd,NumQst + 1);
"<td class=\"DAT_LIGHT LEFT_TOP COLOR%u\">" Tbl_EndCell ();
"%s"
"</td>", fprintf (Gbl.F.Out,"<td class=\"DAT_LIGHT LEFT_TOP COLOR%u\">"
Gbl.RowEvenOdd,NumQst + 1, "%s",
Gbl.RowEvenOdd,Txt_Question_removed); Gbl.RowEvenOdd,Txt_Question_removed);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
} }

View File

@ -1021,8 +1021,7 @@ static void TsI_WriteRowImportedQst (struct XMLElement *StemElem,
fprintf (Gbl.F.Out,"<td class=\"BT%u CENTER_TOP\">" fprintf (Gbl.F.Out,"<td class=\"BT%u CENTER_TOP\">"
"<img src=\"%s/%s\"" "<img src=\"%s/%s\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"CONTEXT_ICO_16x16\" />" " class=\"CONTEXT_ICO_16x16\" />",
"</td>",
Gbl.RowEvenOdd, Gbl.RowEvenOdd,
Cfg_URL_ICON_PUBLIC, Cfg_URL_ICON_PUBLIC,
QuestionExists ? "tr16x16.gif" : QuestionExists ? "tr16x16.gif" :
@ -1031,6 +1030,7 @@ static void TsI_WriteRowImportedQst (struct XMLElement *StemElem,
Txt_New_question, Txt_New_question,
QuestionExists ? Txt_Existing_question : QuestionExists ? Txt_Existing_question :
Txt_New_question); Txt_New_question);
Tbl_EndCell ();
/***** Write number of question *****/ /***** Write number of question *****/
fprintf (Gbl.F.Out,"<td class=\"%s CENTER_TOP COLOR%u\">", fprintf (Gbl.F.Out,"<td class=\"%s CENTER_TOP COLOR%u\">",
@ -1051,14 +1051,17 @@ static void TsI_WriteRowImportedQst (struct XMLElement *StemElem,
NumTag++) NumTag++)
{ {
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"%s LEFT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"%s LEFT_TOP\">"
"&nbsp;&#8226;&nbsp;" "&nbsp;&#8226;&nbsp;",
"</td>" ClassData);
"<td class=\"%s LEFT_TOP\">" Tbl_EndCell ();
"%s"
"</td>", fprintf (Gbl.F.Out,"<td class=\"%s LEFT_TOP\">"
ClassData, "%s",
ClassData,Gbl.Test.Tags.Txt[NumTag]); ClassData,Gbl.Test.Tags.Txt[NumTag]);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
} }
Tbl_EndTable (); Tbl_EndTable ();
@ -1071,10 +1074,10 @@ static void TsI_WriteRowImportedQst (struct XMLElement *StemElem,
/***** Write the question type *****/ /***** Write the question type *****/
fprintf (Gbl.F.Out,"<td class=\"%s CENTER_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"%s CENTER_TOP COLOR%u\">"
"%s&nbsp;" "%s&nbsp;",
"</td>",
ClassData,Gbl.RowEvenOdd, ClassData,Gbl.RowEvenOdd,
Txt_TST_STR_ANSWER_TYPES[Gbl.Test.AnswerType]); Txt_TST_STR_ANSWER_TYPES[Gbl.Test.AnswerType]);
Tbl_EndCell ();
/***** Write if shuffle is enabled *****/ /***** Write if shuffle is enabled *****/
fprintf (Gbl.F.Out,"<td class=\"CENTER_TOP COLOR%u\">", fprintf (Gbl.F.Out,"<td class=\"CENTER_TOP COLOR%u\">",
@ -1165,9 +1168,9 @@ static void TsI_WriteRowImportedQst (struct XMLElement *StemElem,
/* Write the number of option */ /* Write the number of option */
fprintf (Gbl.F.Out,"<td class=\"%s LEFT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"%s LEFT_TOP\">"
"%c)&nbsp;" "%c)&nbsp;",
"</td>",
ClassData,'a' + (char) NumOpt); ClassData,'a' + (char) NumOpt);
Tbl_EndCell ();
/* Write the text and the feedback of the answer */ /* Write the text and the feedback of the answer */
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\">"

View File

@ -1133,21 +1133,25 @@ static void TT_DrawTimeTable (void)
/***** Row with day names *****/ /***** Row with day names *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td rowspan=\"2\" class=\"TT_HOUR_BIG RIGHT_MIDDLE\"" fprintf (Gbl.F.Out,"<td rowspan=\"2\" class=\"TT_HOUR_BIG RIGHT_MIDDLE\""
" style=\"width:%u%%;\">" " style=\"width:%u%%;\">"
"%02u:00" "%02u:00",
"</td>",
TT_PERCENT_WIDTH_OF_AN_HOUR_COLUMN, TT_PERCENT_WIDTH_OF_AN_HOUR_COLUMN,
Gbl.TimeTable.Config.Range.Hours.Start); Gbl.TimeTable.Config.Range.Hours.Start);
Tbl_EndCell ();
TT_DrawCellAlignTimeTable (); TT_DrawCellAlignTimeTable ();
TT_TimeTableDrawDaysCells (); TT_TimeTableDrawDaysCells ();
TT_DrawCellAlignTimeTable (); TT_DrawCellAlignTimeTable ();
fprintf (Gbl.F.Out,"<td rowspan=\"2\" class=\"TT_HOUR_BIG LEFT_MIDDLE\"" fprintf (Gbl.F.Out,"<td rowspan=\"2\" class=\"TT_HOUR_BIG LEFT_MIDDLE\""
" style=\"width:%u%%;\">" " style=\"width:%u%%;\">"
"%02u:00" "%02u:00",
"</td>",
TT_PERCENT_WIDTH_OF_AN_HOUR_COLUMN, TT_PERCENT_WIDTH_OF_AN_HOUR_COLUMN,
Gbl.TimeTable.Config.Range.Hours.Start); Gbl.TimeTable.Config.Range.Hours.Start);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Get list of groups types and groups in this course *****/ /***** Get list of groups types and groups in this course *****/
@ -1273,7 +1277,10 @@ static void TT_TimeTableDrawAdjustRow (void)
unsigned Minicolumn; unsigned Minicolumn;
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"TT_HOURCOL\"></td>");
fprintf (Gbl.F.Out,"<td class=\"TT_HOURCOL\">");
Tbl_EndCell ();
TT_DrawCellAlignTimeTable (); TT_DrawCellAlignTimeTable ();
for (Weekday = 0; for (Weekday = 0;
Weekday < TT_DAYS_PER_WEEK; Weekday < TT_DAYS_PER_WEEK;
@ -1281,9 +1288,15 @@ static void TT_TimeTableDrawAdjustRow (void)
for (Minicolumn = 0; for (Minicolumn = 0;
Minicolumn < TT_NUM_MINICOLUMNS_PER_DAY; Minicolumn < TT_NUM_MINICOLUMNS_PER_DAY;
Minicolumn++) Minicolumn++)
fprintf (Gbl.F.Out,"<td class=\"TT_MINICOL\"></td>"); {
fprintf (Gbl.F.Out,"<td class=\"TT_MINICOL\">");
Tbl_EndCell ();
}
TT_DrawCellAlignTimeTable (); TT_DrawCellAlignTimeTable ();
fprintf (Gbl.F.Out,"<td class=\"TT_HOURCOL\"></td>");
fprintf (Gbl.F.Out,"<td class=\"TT_HOURCOL\">");
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
} }
@ -1305,13 +1318,13 @@ static void TT_TimeTableDrawDaysCells (void)
fprintf (Gbl.F.Out,"<td colspan=\"%u\"" fprintf (Gbl.F.Out,"<td colspan=\"%u\""
" class=\"%s CENTER_MIDDLE\"" " class=\"%s CENTER_MIDDLE\""
" style=\"width:%u%%;\">" " style=\"width:%u%%;\">"
"%s" "%s",
"</td>",
TT_NUM_MINICOLUMNS_PER_DAY, TT_NUM_MINICOLUMNS_PER_DAY,
Weekday == 6 ? "TT_SUNDAY" : // Sunday drawn in red Weekday == 6 ? "TT_SUNDAY" : // Sunday drawn in red
"TT_DAY", // Monday to Saturday "TT_DAY", // Monday to Saturday
TT_PERCENT_WIDTH_OF_A_DAY, TT_PERCENT_WIDTH_OF_A_DAY,
Txt_DAYS_CAPS[Weekday]); Txt_DAYS_CAPS[Weekday]);
Tbl_EndCell ();
} }
} }
@ -1322,12 +1335,12 @@ static void TT_TimeTableDrawDaysCells (void)
static void TT_TimeTableDrawHourCell (unsigned Hour,unsigned Min,const char *Align) static void TT_TimeTableDrawHourCell (unsigned Hour,unsigned Min,const char *Align)
{ {
fprintf (Gbl.F.Out,"<td rowspan=\"2\" class=\"TT_HOUR %s %s\">" fprintf (Gbl.F.Out,"<td rowspan=\"2\" class=\"TT_HOUR %s %s\">"
"%02u:%02u" "%02u:%02u",
"</td>",
Min ? "TT_HOUR_SMALL" : Min ? "TT_HOUR_SMALL" :
"TT_HOUR_BIG", "TT_HOUR_BIG",
Align, Align,
Hour,Min); Hour,Min);
Tbl_EndCell ();
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1412,7 +1425,8 @@ static unsigned TT_CalculateColsToDrawInCell (bool TopCall,
static void TT_DrawCellAlignTimeTable (void) static void TT_DrawCellAlignTimeTable (void)
{ {
fprintf (Gbl.F.Out,"<td class=\"TT_ALIGN\"></td>"); fprintf (Gbl.F.Out,"<td class=\"TT_ALIGN\">");
Tbl_EndCell ();
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -3657,23 +3657,23 @@ void Usr_WriteRowUsrMainData (unsigned NumUsr,struct UsrData *UsrDat,
else else
fprintf (Gbl.F.Out,"BM%u",Gbl.RowEvenOdd); fprintf (Gbl.F.Out,"BM%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out," %s\" title=\"%s\">" fprintf (Gbl.F.Out," %s\" title=\"%s\">"
"%s" "%s",
"</td>",
UsrDat->Accepted ? "USR_LIST_NUM_N" : UsrDat->Accepted ? "USR_LIST_NUM_N" :
"USR_LIST_NUM", "USR_LIST_NUM",
UsrDat->Accepted ? Txt_Enrolment_confirmed : UsrDat->Accepted ? Txt_Enrolment_confirmed :
Txt_Enrolment_not_confirmed, Txt_Enrolment_not_confirmed,
UsrDat->Accepted ? "&check;" : UsrDat->Accepted ? "&check;" :
"&cross;"); "&cross;");
Tbl_EndCell ();
/***** Write number of user in the list *****/ /***** Write number of user in the list *****/
fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_MIDDLE %s\">" fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_MIDDLE %s\">"
"%u" "%u",
"</td>",
UsrDat->Accepted ? "USR_LIST_NUM_N" : UsrDat->Accepted ? "USR_LIST_NUM_N" :
"USR_LIST_NUM", "USR_LIST_NUM",
BgColor, BgColor,
NumUsr); NumUsr);
Tbl_EndCell ();
if (Gbl.Usrs.Listing.WithPhotos) if (Gbl.Usrs.Listing.WithPhotos)
{ {
@ -3737,7 +3737,8 @@ static void Usr_WriteRowGstAllData (struct UsrData *UsrDat)
fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL LEFT_MIDDLE COLOR%u\">", fprintf (Gbl.F.Out,"<td class=\"DAT_SMALL LEFT_MIDDLE COLOR%u\">",
Gbl.RowEvenOdd); Gbl.RowEvenOdd);
ID_WriteUsrIDs (UsrDat,NULL); ID_WriteUsrIDs (UsrDat,NULL);
fprintf (Gbl.F.Out,"&nbsp;</td>"); fprintf (Gbl.F.Out,"&nbsp;");
Tbl_EndCell ();
/***** Write rest of guest's main data *****/ /***** Write rest of guest's main data *****/
Ins.InsCod = UsrDat->InsCod; Ins.InsCod = UsrDat->InsCod;
@ -3841,7 +3842,8 @@ static void Usr_WriteRowStdAllData (struct UsrData *UsrDat,char *GroupNames)
"DAT_SMALL", "DAT_SMALL",
Gbl.RowEvenOdd); Gbl.RowEvenOdd);
ID_WriteUsrIDs (UsrDat,NULL); ID_WriteUsrIDs (UsrDat,NULL);
fprintf (Gbl.F.Out,"&nbsp;</td>"); fprintf (Gbl.F.Out,"&nbsp;");
Tbl_EndCell ();
/***** Write rest of main student's data *****/ /***** Write rest of main student's data *****/
Ins.InsCod = UsrDat->InsCod; Ins.InsCod = UsrDat->InsCod;
@ -3960,7 +3962,8 @@ static void Usr_WriteRowTchAllData (struct UsrData *UsrDat)
"DAT_SMALL", "DAT_SMALL",
Gbl.RowEvenOdd); Gbl.RowEvenOdd);
ID_WriteUsrIDs (UsrDat,NULL); ID_WriteUsrIDs (UsrDat,NULL);
fprintf (Gbl.F.Out,"&nbsp;</td>"); fprintf (Gbl.F.Out,"&nbsp;");
Tbl_EndCell ();
/***** Write rest of main teacher's data *****/ /***** Write rest of main teacher's data *****/
Ins.InsCod = UsrDat->InsCod; Ins.InsCod = UsrDat->InsCod;
@ -4017,9 +4020,9 @@ static void Usr_WriteRowAdmData (unsigned NumUsr,struct UsrData *UsrDat)
/***** Write number of user *****/ /***** Write number of user *****/
fprintf (Gbl.F.Out,"<td class=\"USR_LIST_NUM_N CENTER_MIDDLE COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"USR_LIST_NUM_N CENTER_MIDDLE COLOR%u\">"
"%u" "%u",
"</td>",
Gbl.RowEvenOdd,NumUsr); Gbl.RowEvenOdd,NumUsr);
Tbl_EndCell ();
if (Gbl.Usrs.Listing.WithPhotos) if (Gbl.Usrs.Listing.WithPhotos)
{ {
@ -4039,7 +4042,8 @@ static void Usr_WriteRowAdmData (unsigned NumUsr,struct UsrData *UsrDat)
"DAT_SMALL", "DAT_SMALL",
Gbl.RowEvenOdd); Gbl.RowEvenOdd);
ID_WriteUsrIDs (UsrDat,NULL); ID_WriteUsrIDs (UsrDat,NULL);
fprintf (Gbl.F.Out,"&nbsp;</td>"); fprintf (Gbl.F.Out,"&nbsp;");
Tbl_EndCell ();
/***** Write rest of main administrator's data *****/ /***** Write rest of main administrator's data *****/
Ins.InsCod = UsrDat->InsCod; Ins.InsCod = UsrDat->InsCod;
@ -4141,8 +4145,8 @@ static void Usr_WriteUsrData (const char *BgColor,
fprintf (Gbl.F.Out,"</a>"); fprintf (Gbl.F.Out,"</a>");
/***** End container and table cell *****/ /***** End container and table cell *****/
fprintf (Gbl.F.Out,"</div>" fprintf (Gbl.F.Out,"</div>");
"</td>"); Tbl_EndCell ();
} }
/*****************************************************************************/ /*****************************************************************************/
@ -6937,8 +6941,10 @@ void Usr_ListAllDataStds (void)
NumCol < NumColumnsCardAndGroups; NumCol < NumColumnsCardAndGroups;
NumCol++) NumCol++)
if (NumCol != 1 || Gbl.Usrs.Listing.WithPhotos) // Skip photo column if I don't want it in listing if (NumCol != 1 || Gbl.Usrs.Listing.WithPhotos) // Skip photo column if I don't want it in listing
fprintf (Gbl.F.Out,"<td class=\"VERY_LIGHT_BLUE\">" {
"</td>"); fprintf (Gbl.F.Out,"<td class=\"VERY_LIGHT_BLUE\">");
Tbl_EndCell ();
}
for (NumField = 0; for (NumField = 0;
NumField < Gbl.Crs.Records.LstFields.Num; NumField < Gbl.Crs.Records.LstFields.Num;
NumField++) NumField++)
@ -7238,9 +7244,12 @@ unsigned Usr_ListUsrsFound (Rol_Role_t Role,
Gbl.Usrs.Me.Role.Logged >= Rol_DEG_ADM) // Only admins can view the courses Gbl.Usrs.Me.Role.Logged >= Rol_DEG_ADM) // Only admins can view the courses
{ {
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td colspan=\"2\" class=\"COLOR%u\"></td>"
"<td colspan=\"%u\" class=\"COLOR%u\">", fprintf (Gbl.F.Out,"<td colspan=\"2\" class=\"COLOR%u\">",
Gbl.RowEvenOdd, Gbl.RowEvenOdd);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td colspan=\"%u\" class=\"COLOR%u\">",
Usr_NUM_MAIN_FIELDS_DATA_USR-2, Usr_NUM_MAIN_FIELDS_DATA_USR-2,
Gbl.RowEvenOdd); Gbl.RowEvenOdd);
if (Role == Rol_UNK) if (Role == Rol_UNK)
@ -7252,6 +7261,7 @@ unsigned Usr_ListUsrsFound (Rol_Role_t Role,
else else
Crs_GetAndWriteCrssOfAUsr (&UsrDat,Role); Crs_GetAndWriteCrssOfAUsr (&UsrDat,Role);
Tbl_EndCell (); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
} }

View File

@ -577,8 +577,7 @@ static void ZIP_ShowLinkToDownloadZIP (const char *FileName,const char *URL,
"<img src=\"%s/download.svg\"" "<img src=\"%s/download.svg\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICO40x40\" />" " class=\"ICO40x40\" />"
"</a>" "</a>",
"</td>",
URL,FileName, URL,FileName,
CfG_URL_ICON_FILEXT_PUBLIC, CfG_URL_ICON_FILEXT_PUBLIC,
Txt_ZIP_file, Txt_ZIP_file,
@ -587,30 +586,36 @@ static void ZIP_ShowLinkToDownloadZIP (const char *FileName,const char *URL,
Cfg_URL_ICON_PUBLIC, Cfg_URL_ICON_PUBLIC,
Txt_Download, Txt_Download,
Txt_Download); Txt_Download);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Filename *****/ /***** Filename *****/
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_MIDDLE\">"
"%s:" "%s:",
"</td>" The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Filename);
"<td class=\"DAT LEFT_MIDDLE\">" Tbl_EndCell ();
"<a href=\"%s\" class=\"DAT\" title=\"%s\" target=\"_blank\">%s</a>"
"</td>", fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_MIDDLE\">"
The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Filename, "<a href=\"%s\" class=\"DAT\" title=\"%s\" target=\"_blank\">%s</a>",
URL,FileName,FileName); URL,FileName,FileName);
Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** Write the file size *****/ /***** Write the file size *****/
Fil_WriteFileSizeFull ((double) FileSize,FileSizeStr); Fil_WriteFileSizeFull ((double) FileSize,FileSizeStr);
Tbl_StartRow (); Tbl_StartRow ();
fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_MIDDLE\">"
"%s:" "%s:",
"</td>"
"<td class=\"DAT LEFT_MIDDLE\">"
"%s",
The_ClassFormInBox[Gbl.Prefs.Theme], The_ClassFormInBox[Gbl.Prefs.Theme],
Txt_File_size, Txt_File_size);
Tbl_EndCell ();
fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_MIDDLE\">"
"%s",
FileSizeStr); FileSizeStr);
if (UncompressedSize) if (UncompressedSize)
{ {
@ -619,6 +624,7 @@ static void ZIP_ShowLinkToDownloadZIP (const char *FileName,const char *URL,
FileSizeStr,Txt_FILE_uncompressed); FileSizeStr,Txt_FILE_uncompressed);
} }
Tbl_EndCell (); Tbl_EndCell ();
Tbl_EndRow (); Tbl_EndRow ();
/***** End table and box *****/ /***** End table and box *****/