Version19.82.3

This commit is contained in:
Antonio Cañas Vargas 2019-12-04 01:19:31 +01:00
parent 2294375c69
commit af7a7a3749
4 changed files with 170 additions and 108 deletions

View File

@ -1485,7 +1485,7 @@ a:hover /* Default ==> underlined */
background-image:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0.2));
}
.BT_LINK
.BT_LINK, .BT_LINK_OFF
{
background:none;
border:none;
@ -1718,6 +1718,9 @@ a:hover /* Default ==> underlined */
.BANNER {width:150px; height:50px;}
.BANNER_SMALL {width:75px; height:25px;}
.ICO_BLACK {color:#404040;}
.ICO_RED {color:#660000;}
/****** Contextual links with small icons and text to go to some action ******/
.CONTEXT_MENU
{
@ -2308,9 +2311,9 @@ a:hover img.CENTRE_PHOTO_SHOW
.DAT_SMALL_NOBR_N {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:black; font-size:12pt; white-space:nowrap;}
.DAT_SMALL_GREY {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#707070; font-size:12pt;}
.DAT_SMALL_RED {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:red; font-size:12pt;}
.DAT_SMALL_RED {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#660000; font-size:12pt;}
.DAT_SMALL_PURPLE {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#707070; font-size:12pt;}
.DAT_SMALL_GREEN {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#008000; font-size:12pt;}
.DAT_SMALL_GREEN {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#246600; font-size:12pt;}
.DAT_SMALL_BLUE {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#0080FF; font-size:12pt;}
.DAT_SMALL_YELLOW {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#C0C000; font-size:12pt;}
.DAT_SMALL_PINK {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#707070; font-size:12pt;}
@ -2655,7 +2658,7 @@ a:hover img.CENTRE_PHOTO_SHOW
{
box-sizing:border-box;
float:left;
width:20%;
width:25%;
white-space:nowrap;
overflow:hidden;
text-overflow:ellipsis;
@ -2665,7 +2668,7 @@ a:hover img.CENTRE_PHOTO_SHOW
box-sizing:border-box;
display:table;
float:left;
width:80%;
width:75%;
}
.MCH_TOP
{
@ -2696,7 +2699,7 @@ a:hover img.CENTRE_PHOTO_SHOW
.MCH_NUM_QST
{
color:#808080;
font-size:24pt;
font-size:28pt;
font-weight:bold;
text-align:center;
vertical-align:top;
@ -2713,7 +2716,6 @@ a:hover img.CENTRE_PHOTO_SHOW
{
text-align:center;
padding:16pt 0;
font-size:13pt;
}
.MCH_NUM_ANSWERERS
{
@ -2732,39 +2734,39 @@ a:hover img.CENTRE_PHOTO_SHOW
}
.MCH_BUTTON_LEFT_CONTAINER
{
display:table-cell;
display:table;
box-sizing:border-box;
float:left;
width:35%;
text-align:center;
}
.MCH_BUTTON_CENTER_CONTAINER
{
display:table-cell;
display:table;
box-sizing:border-box;
float:left;
width:30%;
text-align:center;
}
.MCH_BUTTON_RIGHT_CONTAINER
{
display:table-cell;
display:table;
box-sizing:border-box;
float:left;
width:35%;
text-align:center;
}
.MCH_BUTTON_CONTAINER
{
box-sizing:border-box;
display:table;
display:table-cell;
width:100%;
height:64px;
font-size:28pt;
padding:2px;
}
.MCH_BUTTON_CONTAINER a
{
text-decoration:none;
color:#404040;
text-align:center;
vertical-align:middle;
}
.MCH_BUTTON_ON
{
@ -2885,7 +2887,7 @@ a:hover img.CENTRE_PHOTO_SHOW
.MCH_STD_BUTTON
{
box-sizing:border-box;
width:75%;
width:100%;
margin:10px auto;
padding:20px;
border-radius:4px;

View File

@ -490,14 +490,16 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 19.82.2 (2019-12-03)"
#define CSS_FILE "swad19.82.css"
#define Log_PLATFORM_VERSION "SWAD 19.82.3 (2019-12-04)"
#define CSS_FILE "swad19.82.3.css"
#define JS_FILE "swad19.70.js"
/*
// TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.)
// TODO: Impedir la creación y edición de proyectos si no son editables.
// TODO: En cada juego, poder listar los resultados en una tabla como la de resultados globales
Version 19.82.3: Dec 04, 2019 Code refactoring in matches.
Some messages translated. (247840 lines)
Version 19.82.2: Dec 03, 2019 Some messages translated. (247781 lines)
Version 19.82.1: Dec 03, 2019 Fixed bug in surveys.
Fixed bug in statistics.

View File

@ -2236,14 +2236,18 @@ static void Mch_ShowLeftColumnStd (struct Match *Match,
/***** Write number of question *****/
Mch_ShowNumQstInMatch (Match);
/***** Write if question is answered *****/
Mch_PutIfAnswered (Match,Answered);
if (Match->Status.QstInd > 0 &&
Match->Status.QstInd < Mch_AFTER_LAST_QUESTION)
{
/***** Write whether question is answered or not *****/
Mch_PutIfAnswered (Match,Answered);
if (Match->Status.Playing && // Match is being played
Match->Status.Showing == Mch_ANSWERS && // Teacher's screen is showing question answers
Answered) // I have answered this question
/***** Put icon to view *****/
Mch_PutIconToRemoveMyAnswer (Match);
if (Match->Status.Playing && // Match is being played
Match->Status.Showing == Mch_ANSWERS && // Teacher's screen is showing question answers
Answered) // I have answered this question
/***** Put icon to remove my answet *****/
Mch_PutIconToRemoveMyAnswer (Match);
}
/***** End left container *****/
HTM_DIV_End ();
@ -2274,8 +2278,11 @@ static void Mch_ShowRightColumnStd (struct Match *Match,
/***** Update players ******/
if (Mch_RegisterMeAsPlayerInMatch (Match))
/* Show current question and possible answers */
Mch_ShowQuestionAndAnswersStd (Match,UsrAnswer,Update);
{
if (Match->Status.Showing == Mch_ANSWERS) // Teacher's screen is showing question answers
/* Show current question and possible answers */
Mch_ShowQuestionAndAnswersStd (Match,UsrAnswer,Update);
}
else
Ale_ShowAlert (Ale_ERROR,"You can not join this match.");
@ -2446,17 +2453,12 @@ static void Mch_PutCheckboxResult (struct Match *Match)
Mch_PutParamMchCod (Match->MchCod); // Current match being played
/***** Put icon with link *****/
HTM_DIV_Begin ("class=\"CONTEXT_OPT\"");
HTM_A_Begin ("href=\"\" class=\"ICO_HIGHLIGHT\" title=\"%s\" "
" onclick=\"document.getElementById('%s').submit();return false;\"",
Txt_View_results,
Gbl.Form.Id);
HTM_BUTTON_SUBMIT_Begin (Txt_View_results,"BT_LINK DAT ICO_HIGHLIGHT",NULL);
HTM_TxtF ("<i class=\"%s\"></i>",
Match->Status.ShowQstResults ? "fas fa-toggle-on" :
"fas fa-toggle-off");
HTM_TxtF ("&nbsp;%s",Txt_View_results);
HTM_A_End ();
HTM_DIV_End ();
HTM_BUTTON_End ();
/***** End form *****/
Frm_EndForm ();
@ -2472,22 +2474,24 @@ static void Mch_PutCheckboxResult (struct Match *Match)
static void Mch_PutIfAnswered (const struct Match *Match,bool Answered)
{
extern const char *Txt_View_my_answer;
extern const char *Txt_MATCH_QUESTION_Answered;
extern const char *Txt_MATCH_QUESTION_Unanswered;
/***** Start container *****/
HTM_DIV_Begin ("class=\"MCH_SHOW_RESULTS\"");
/***** Put icon with link *****/
if (Match->Status.Showing == Mch_ANSWERS &&
Answered)
if (Match->Status.Playing && // Match is being played
Match->Status.Showing == Mch_ANSWERS && // Teacher's screen is showing question answers
Answered) // I have answered this question
{
/* Start form */
Frm_StartForm (ActSeeMchAnsQstStd);
Mch_PutParamMchCod (Match->MchCod); // Current match being played
HTM_BUTTON_OnMouseDown_Begin (Txt_View_my_answer,"BT_LINK DAT_SMALL");
HTM_BUTTON_OnMouseDown_Begin (Txt_View_my_answer,"BT_LINK DAT_SMALL_GREEN");
HTM_TxtF ("<i class=\"%s\"></i>","fas fa-check-circle");
HTM_TxtF ("&nbsp;%s","Respondida"); // TODO: Need translation!!!!
HTM_TxtF ("&nbsp;%s",Txt_MATCH_QUESTION_Answered);
HTM_BUTTON_End ();
/* End form */
@ -2495,14 +2499,15 @@ static void Mch_PutIfAnswered (const struct Match *Match,bool Answered)
}
else
{
HTM_DIV_Begin ("class=\"DAT_SMALL\"");
HTM_DIV_Begin ("class=\"%s\"",Answered ? "DAT_SMALL_GREEN" :
"DAT_SMALL_RED");
HTM_TxtF ("<i class=\"%s\" title=\"%s\"></i>",
Answered ? "fas fa-check-circle" :
"fas fa-exclamation-circle",
Answered ? "Respondida" :
"No respondida"); // TODO: Need translation!!!!
HTM_TxtF ("&nbsp;%s",Answered ? "Respondida" :
"No respondida"); // TODO: Need translation!!!!
Answered ? Txt_MATCH_QUESTION_Answered :
Txt_MATCH_QUESTION_Unanswered);
HTM_TxtF ("&nbsp;%s",Answered ? Txt_MATCH_QUESTION_Answered :
Txt_MATCH_QUESTION_Unanswered);
HTM_DIV_End ();
}
@ -2516,7 +2521,7 @@ static void Mch_PutIfAnswered (const struct Match *Match,bool Answered)
static void Mch_PutIconToRemoveMyAnswer (struct Match *Match)
{
extern const char *Txt_View_results;
extern const char *Txt_Delete_my_answer;
/***** Start container *****/
HTM_DIV_Begin ("class=\"MCH_SHOW_RESULTS\"");
@ -2528,12 +2533,9 @@ static void Mch_PutIconToRemoveMyAnswer (struct Match *Match)
/***** Put icon with link *****/
HTM_DIV_Begin ("class=\"MCH_BUTTON_CONTAINER\"");
HTM_A_Begin ("href=\"\" class=\"MCH_BUTTON_ON\" title=\"%s\" "
" onclick=\"document.getElementById('%s').submit();return false;\"",
"Eliminar mi respuesta", // TODO: Need translation!!!!
Gbl.Form.Id);
HTM_Txt ("<i class=\"fas fa-trash\" style=\"color:#660000;\"></i>");
HTM_A_End ();
HTM_BUTTON_OnMouseDown_Begin (Txt_Delete_my_answer,"BT_LINK MCH_BUTTON_ON ICO_RED");
HTM_Txt ("<i class=\"fas fa-trash\"></i>");
HTM_BUTTON_End ();
HTM_DIV_End ();
/***** End form *****/
@ -2659,63 +2661,59 @@ static void Mch_ShowQuestionAndAnswersStd (struct Match *Match,
char *Class;
/***** Show question *****/
/* Write buttons for answers? */
if (Match->Status.Showing == Mch_ANSWERS)
if (Tst_CheckIfQuestionIsValidForGame (Match->Status.QstCod))
{
if (Tst_CheckIfQuestionIsValidForGame (Match->Status.QstCod))
/***** Get number of options in this question *****/
NumOptions = Tst_GetNumAnswersQst (Match->Status.QstCod);
/***** Begin table *****/
HTM_TABLE_BeginWidePadding (8);
for (NumOpt = 0;
NumOpt < NumOptions;
NumOpt++)
{
/***** Get number of options in this question *****/
NumOptions = Tst_GetNumAnswersQst (Match->Status.QstCod);
/***** Start row *****/
HTM_TR_Begin (NULL);
/***** Begin table *****/
HTM_TABLE_BeginWidePadding (8);
/***** Write letter for this option *****/
/* Begin table cell */
HTM_TD_Begin ("class=\"MCH_STD_CELL\"");
for (NumOpt = 0;
NumOpt < NumOptions;
NumOpt++)
{
/***** Start row *****/
HTM_TR_Begin (NULL);
/* Form with button.
Sumitting onmousedown instead of default onclick
is necessary in order to be fast
and not lose clicks due to refresh */
Frm_StartForm (ActAnsMchQstStd);
Mch_PutParamMchCod (Match->MchCod); // Current match being played
Gam_PutParamQstInd (Match->Status.QstInd); // Current question index shown
Mch_PutParamNumOpt (NumOpt); // Number of button
/***** Write letter for this option *****/
/* Begin table cell */
HTM_TD_Begin ("class=\"MCH_STD_CELL\"");
if (asprintf (&Class,"MCH_STD_BUTTON%s BT_%c",
UsrAnswer->NumOpt == (int) NumOpt && // Student's answer
Update == Mch_CHANGE_STATUS_BY_STUDENT ? " MCH_STD_ANSWER_SELECTED" :
"",
'A' + (char) NumOpt) < 0)
Lay_NotEnoughMemoryExit ();
HTM_BUTTON_OnMouseDown_Begin (NULL,Class);
HTM_TxtF ("%c",'a' + (char) NumOpt);
HTM_BUTTON_End ();
free (Class);
/* Form with button.
Sumitting onmousedown instead of default onclick
is necessary in order to be fast
and not lose clicks due to refresh */
Frm_StartForm (ActAnsMchQstStd);
Mch_PutParamMchCod (Match->MchCod); // Current match being played
Gam_PutParamQstInd (Match->Status.QstInd); // Current question index shown
Mch_PutParamNumOpt (NumOpt); // Number of button
Frm_EndForm ();
if (asprintf (&Class,"MCH_STD_BUTTON%s BT_%c",
UsrAnswer->NumOpt == (int) NumOpt && // Student's answer
Update == Mch_CHANGE_STATUS_BY_STUDENT ? " MCH_STD_ANSWER_SELECTED" :
"",
'A' + (char) NumOpt) < 0)
Lay_NotEnoughMemoryExit ();
HTM_BUTTON_OnMouseDown_Begin (NULL,Class);
HTM_TxtF ("%c",'a' + (char) NumOpt);
HTM_BUTTON_End ();
free (Class);
/* End table cell */
HTM_TD_End ();
Frm_EndForm ();
/* End table cell */
HTM_TD_End ();
/***** End row *****/
HTM_TR_End ();
}
/***** End table *****/
HTM_TABLE_End ();
/***** End row *****/
HTM_TR_End ();
}
else
Ale_ShowAlert (Ale_ERROR,"Type of answer not valid in a game.");
/***** End table *****/
HTM_TABLE_End ();
}
else
Ale_ShowAlert (Ale_ERROR,"Type of answer not valid in a game.");
}
/*****************************************************************************/
@ -2979,11 +2977,9 @@ static void Mch_PutBigButton (Act_Action_t NextAction,const char *Id,
/***** Put icon with link *****/
HTM_DIV_Begin ("class=\"MCH_BUTTON_CONTAINER\"");
HTM_A_Begin ("href=\"\" class=\"MCH_BUTTON_ON\" title=\"%s\" "
" onclick=\"document.getElementById('%s').submit();return false;\"",
Txt,Id);
HTM_BUTTON_SUBMIT_Begin (Txt,"BT_LINK MCH_BUTTON_ON ICO_BLACK",NULL);
HTM_TxtF ("<i class=\"%s\"></i>",Icon);
HTM_A_End ();
HTM_BUTTON_End ();
HTM_DIV_End ();
/***** End form *****/
@ -2994,9 +2990,9 @@ static void Mch_PutBigButtonOff (const char *Icon)
{
/***** Put inactive icon *****/
HTM_DIV_Begin ("class=\"MCH_BUTTON_CONTAINER\"");
HTM_DIV_Begin ("class=\"MCH_BUTTON_OFF\"");
HTM_BUTTON_BUTTON_Begin (NULL,"BT_LINK_OFF MCH_BUTTON_OFF ICO_BLACK",NULL);
HTM_TxtF ("<i class=\"%s\"></i>",Icon);
HTM_DIV_End ();
HTM_BUTTON_End ();
HTM_DIV_End ();
}
@ -3006,10 +3002,9 @@ static void Mch_PutBigButtonClose (void)
/***** Put icon with link *****/
HTM_DIV_Begin ("class=\"MCH_BUTTON_CONTAINER\"");
HTM_A_Begin ("href=\"\" class=\"MCH_BUTTON_ON\" title=\"%s\" "
" onclick=\"window.close();return false;\"\"",Txt_Close);
HTM_BUTTON_BUTTON_Begin (Txt_Close,"BT_LINK MCH_BUTTON_ON ICO_BLACK","window.close();");
HTM_TxtF ("<i class=\"%s\"></i>",Mch_ICON_CLOSE);
HTM_A_End ();
HTM_BUTTON_End ();
HTM_DIV_End ();
}

View File

@ -7687,6 +7687,27 @@ const char *Txt_Delete_messages_sent =
"Eliminar mensagens enviadas";
#endif
const char *Txt_Delete_my_answer =
#if L==1 // ca
"Eliminar la meva resposta";
#elif L==2 // de
"L&ouml;sche meine Antwort";
#elif L==3 // en
"Delete my answer";
#elif L==4 // es
"Eliminar mi respuesta";
#elif L==5 // fr
"Supprimer ma r&eacute;ponse";
#elif L==6 // gn
"Eliminar mi respuesta"; // Okoteve traducción
#elif L==7 // it
"Elimina la mia risposta";
#elif L==8 // pl
"Usu&nacute; moj&aogon; odpowied&zacute;";
#elif L==9 // pt
"Excluir minha resposta";
#endif
const char *Txt_Department =
#if L==1 // ca
"Departament";
@ -18056,6 +18077,48 @@ const char *Txt_MATCH_Paused =
"Pausado";
#endif
const char *Txt_MATCH_QUESTION_Answered =
#if L==1 // ca
"Resposta";
#elif L==2 // de
"Beantwortet";
#elif L==3 // en
"Answered";
#elif L==4 // es
"Respondida";
#elif L==5 // fr
"R&eacute;pondue";
#elif L==6 // gn
"Respondida"; // Okoteve traducción
#elif L==7 // it
"Risposta";
#elif L==8 // pl
"Odpowiedziano";
#elif L==9 // pt
"Respondida";
#endif
const char *Txt_MATCH_QUESTION_Unanswered =
#if L==1 // ca
"No resposta";
#elif L==2 // de
"Unbeantwortete";
#elif L==3 // en
"Unanswered";
#elif L==4 // es
"No respondida";
#elif L==5 // fr
"Pas r&eacute;pondue";
#elif L==6 // gn
"No respondida"; // Okoteve traducción
#elif L==7 // it
"Non risposta";
#elif L==8 // pl
"Nie odpowiedziano";
#elif L==9 // pt
"N&atilde;o respondida";
#endif
const char *Txt_MATCH_Start =
#if L==1 // ca
"Inici";