Version19.123

This commit is contained in:
Antonio Cañas Vargas 2020-02-16 13:02:30 +01:00
parent bd015b81f5
commit d6d3567fcb
13 changed files with 1392 additions and 1249 deletions

View File

@ -56,8 +56,8 @@ OBJS = swad_account.o swad_action.o swad_agenda.o swad_alert.o \
swad_scope.o swad_search.o swad_session.o swad_setting.o \ swad_scope.o swad_search.o swad_session.o swad_setting.o \
swad_statistic.o swad_string.o swad_survey.o swad_syllabus.o \ swad_statistic.o swad_string.o swad_survey.o swad_syllabus.o \
swad_system_config.o \ swad_system_config.o \
swad_tab.o swad_test.o swad_test_import.o swad_theme.o swad_timeline.o \ swad_tab.o swad_test.o swad_test_import.o swad_test_result.o \
swad_timetable.o \ swad_theme.o swad_timeline.o swad_timetable.o \
swad_user.o \ swad_user.o \
swad_xml.o \ swad_xml.o \
swad_zip.o swad_zip.o

View File

@ -3627,7 +3627,7 @@ int swad__getTestConfig (struct soap *soap,
char *wsKey,int courseCode, // input char *wsKey,int courseCode, // input
struct swad__getTestConfigOutput *getTestConfigOut) // output struct swad__getTestConfigOutput *getTestConfigOut) // output
{ {
extern const char *Tst_FeedbackXML[Tst_NUM_TYPES_FEEDBACK]; extern const char *TsR_FeedbackXML[TsR_NUM_TYPES_FEEDBACK];
int ReturnCode; int ReturnCode;
/***** Initializations *****/ /***** Initializations *****/
@ -3671,7 +3671,7 @@ int swad__getTestConfig (struct soap *soap,
/***** Set default result to empty *****/ /***** Set default result to empty *****/
getTestConfigOut->numQuestions = getTestConfigOut->minQuestions = getTestConfigOut->defQuestions = getTestConfigOut->maxQuestions = 0; getTestConfigOut->numQuestions = getTestConfigOut->minQuestions = getTestConfigOut->defQuestions = getTestConfigOut->maxQuestions = 0;
getTestConfigOut->feedback = (char *) soap_malloc (Gbl.soap,Tst_MAX_BYTES_FEEDBACK_TYPE + 1); getTestConfigOut->feedback = (char *) soap_malloc (Gbl.soap,TsR_MAX_BYTES_FEEDBACK_TYPE + 1);
getTestConfigOut->feedback[0] = '\0'; getTestConfigOut->feedback[0] = '\0';
/***** Get test configuration *****/ /***** Get test configuration *****/
@ -3683,8 +3683,8 @@ int swad__getTestConfig (struct soap *soap,
getTestConfigOut->defQuestions = (int) Gbl.Test.Config.Def; getTestConfigOut->defQuestions = (int) Gbl.Test.Config.Def;
getTestConfigOut->maxQuestions = (int) Gbl.Test.Config.Max; getTestConfigOut->maxQuestions = (int) Gbl.Test.Config.Max;
Str_Copy (getTestConfigOut->feedback, Str_Copy (getTestConfigOut->feedback,
Tst_FeedbackXML[Gbl.Test.Config.Feedback], TsR_FeedbackXML[Gbl.Test.Config.Feedback],
Tst_MAX_BYTES_FEEDBACK_TYPE); TsR_MAX_BYTES_FEEDBACK_TYPE);
/***** Get number of tests *****/ /***** Get number of tests *****/
if (Gbl.Test.Config.Pluggable == Tst_PLUGGABLE_YES && if (Gbl.Test.Config.Pluggable == Tst_PLUGGABLE_YES &&
@ -3717,7 +3717,7 @@ static int API_GetTstConfig (long CrsCod)
{ {
Gbl.Test.Config.Pluggable = Tst_PLUGGABLE_UNKNOWN; Gbl.Test.Config.Pluggable = Tst_PLUGGABLE_UNKNOWN;
Gbl.Test.Config.Min = Gbl.Test.Config.Def = Gbl.Test.Config.Max = 0; Gbl.Test.Config.Min = Gbl.Test.Config.Def = Gbl.Test.Config.Max = 0;
Gbl.Test.Config.Feedback = Tst_FEEDBACK_DEFAULT; Gbl.Test.Config.Feedback = TsR_FEEDBACK_DEFAULT;
} }
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/

View File

@ -1067,7 +1067,7 @@ void Acc_CompletelyEliminateAccount (struct UsrData *UsrDat,
UsrDat->FullName); UsrDat->FullName);
/***** Remove test results made by user in all courses *****/ /***** Remove test results made by user in all courses *****/
Tst_RemoveTestResultsMadeByUsrInAllCrss (UsrDat->UsrCod); TsR_RemoveTestResultsMadeByUsrInAllCrss (UsrDat->UsrCod);
/***** Remove user's notifications *****/ /***** Remove user's notifications *****/
Ntf_RemoveUsrNtfs (UsrDat->UsrCod); Ntf_RemoveUsrNtfs (UsrDat->UsrCod);

View File

@ -630,12 +630,12 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActRenTag ] = { 143,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_RenameTag ,NULL}, [ActRenTag ] = { 143,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_RenameTag ,NULL},
[ActRcvCfgTst ] = { 454,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ReceiveConfigTst ,NULL}, [ActRcvCfgTst ] = { 454,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ReceiveConfigTst ,NULL},
[ActReqSeeMyTstRes ] = {1083,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,Tst_SelDatesToSeeMyTstResults ,NULL}, [ActReqSeeMyTstRes ] = {1083,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,TsR_SelDatesToSeeMyTstResults ,NULL},
[ActSeeMyTstRes ] = {1084,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ShowMyTstResults ,NULL}, [ActSeeMyTstRes ] = {1084,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TsR_ShowMyTstResults ,NULL},
[ActSeeOneTstResMe ] = {1085,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ShowOneTstResult ,NULL}, [ActSeeOneTstResMe ] = {1085,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TsR_ShowOneTstResult ,NULL},
[ActReqSeeUsrTstRes ] = {1080,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,Tst_SelUsrsToViewUsrsTstResults,NULL}, [ActReqSeeUsrTstRes ] = {1080,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,TsR_SelUsrsToViewUsrsTstResults,NULL},
[ActSeeUsrTstRes ] = {1081,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_GetUsrsAndShowTstResults ,NULL}, [ActSeeUsrTstRes ] = {1081,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TsR_GetUsrsAndShowTstResults ,NULL},
[ActSeeOneTstResOth ] = {1082,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ShowOneTstResult ,NULL}, [ActSeeOneTstResOth ] = {1082,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TsR_ShowOneTstResult ,NULL},
[ActSeeGam ] = {1650,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_SeeOneGame ,NULL}, [ActSeeGam ] = {1650,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_SeeOneGame ,NULL},

View File

@ -497,7 +497,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.122.4 (2020-02-14)" #define Log_PLATFORM_VERSION "SWAD 19.123 (2020-02-16)"
#define CSS_FILE "swad19.118.css" #define CSS_FILE "swad19.118.css"
#define JS_FILE "swad19.91.1.js" #define JS_FILE "swad19.91.1.js"
/* /*
@ -507,6 +507,7 @@ ps2pdf source.ps destination.pdf
// TODO: En la lista de conectados central, poner el logo de la institución a la que pertenece el usuario // TODO: En la lista de conectados central, poner el logo de la institución a la que pertenece el usuario
// TODO: Urgente: Añadir nuevos niveles de realimentación tras sugerencia de Mancia y conversación con Javier. // TODO: Urgente: Añadir nuevos niveles de realimentación tras sugerencia de Mancia y conversación con Javier.
Version 19.123: Feb 16, 2020 New module swad_test_result for test results. (278815 lines)
Version 19.122.4: Feb 14, 2020 Fixed bug refreshing degree average photo. (278699 lines) Version 19.122.4: Feb 14, 2020 Fixed bug refreshing degree average photo. (278699 lines)
Version 19.122.3: Feb 14, 2020 Fixed bug in games, reported by Gustavo Romero López. Version 19.122.3: Feb 14, 2020 Fixed bug in games, reported by Gustavo Romero López.
Fixed bug in listing of departments, reported by Daniel Haro Contreras. (278700 lines) Fixed bug in listing of departments, reported by Daniel Haro Contreras. (278700 lines)

View File

@ -1881,7 +1881,7 @@ static void Crs_EmptyCourseCompletely (long CrsCod)
Svy_RemoveSurveys (Hie_CRS,CrsCod); Svy_RemoveSurveys (Hie_CRS,CrsCod);
/***** Remove all test exams made in the course *****/ /***** Remove all test exams made in the course *****/
Tst_RemoveCrsTestResults (CrsCod); TsR_RemoveCrsTestResults (CrsCod);
/***** Remove all tests questions in the course *****/ /***** Remove all tests questions in the course *****/
Tst_RemoveCrsTests (CrsCod); Tst_RemoveCrsTests (CrsCod);

View File

@ -4099,7 +4099,7 @@ static void Enr_EffectivelyRemUsrFromCrs (struct UsrData *UsrDat,
Brw_RemoveSomeInfoAboutCrsUsrFilesFromDB (UsrDat->UsrCod,Crs->CrsCod); Brw_RemoveSomeInfoAboutCrsUsrFilesFromDB (UsrDat->UsrCod,Crs->CrsCod);
/***** Remove test results made by user in course *****/ /***** Remove test results made by user in course *****/
Tst_RemoveTestResultsMadeByUsrInCrs (UsrDat->UsrCod,Crs->CrsCod); TsR_RemoveTestResultsMadeByUsrInCrs (UsrDat->UsrCod,Crs->CrsCod);
/***** Set all the notifications for this user in this course as removed, /***** Set all the notifications for this user in this course as removed,
except notifications about new messages *****/ except notifications about new messages *****/

View File

@ -1032,7 +1032,7 @@ void McR_ShowOneMchResult (void)
&NumQsts, &NumQsts,
&NumQstsNotBlank, &NumQstsNotBlank,
&TotalScore); &TotalScore);
Gbl.Test.Config.Feedback = Tst_FEEDBACK_FULL_FEEDBACK; // Initialize feedback to maximum Gbl.Test.Config.Feedback = TsR_FEEDBACK_FULL_FEEDBACK; // Initialize feedback to maximum
/***** Check if I can view this match result *****/ /***** Check if I can view this match result *****/
ItsMe = Usr_ItsMe (UsrDat->UsrCod); ItsMe = Usr_ItsMe (UsrDat->UsrCod);
@ -1049,7 +1049,7 @@ void McR_ShowOneMchResult (void)
if (ICanViewResult) if (ICanViewResult)
{ {
Tst_GetConfigTstFromDB (); // To get feedback type Tst_GetConfigTstFromDB (); // To get feedback type
ICanViewScore = Gbl.Test.Config.Feedback != Tst_FEEDBACK_NOTHING; ICanViewScore = Gbl.Test.Config.Feedback != TsR_FEEDBACK_NOTHING;
} }
else else
ICanViewScore = false; ICanViewScore = false;
@ -1220,7 +1220,7 @@ void McR_ShowOneMchResult (void)
HTM_TR_End (); HTM_TR_End ();
/***** Write answers and solutions *****/ /***** Write answers and solutions *****/
Tst_ShowTestResult (UsrDat,NumQsts,TimeUTC[Dat_START_TIME]); TsR_ShowTestResult (UsrDat,NumQsts,TimeUTC[Dat_START_TIME]);
/***** End table *****/ /***** End table *****/
HTM_TABLE_End (); HTM_TABLE_End ();
@ -1383,7 +1383,7 @@ static bool McR_CheckIfICanSeeMatchResult (long MchCod,long UsrCod)
{ {
case Rol_STD: case Rol_STD:
ItsMe = Usr_ItsMe (UsrCod); ItsMe = Usr_ItsMe (UsrCod);
if (ItsMe && Gbl.Test.Config.Feedback != Tst_FEEDBACK_NOTHING) if (ItsMe && Gbl.Test.Config.Feedback != TsR_FEEDBACK_NOTHING)
ShowResultThisMatch = McR_GetVisibilityMchResultFromDB (MchCod); ShowResultThisMatch = McR_GetVisibilityMchResultFromDB (MchCod);
else else
ShowResultThisMatch = false; ShowResultThisMatch = false;

File diff suppressed because it is too large Load Diff

View File

@ -28,13 +28,12 @@
/*****************************************************************************/ /*****************************************************************************/
#include "swad_game.h" #include "swad_game.h"
#include "swad_test_result.h"
/*****************************************************************************/ /*****************************************************************************/
/***************************** Public constants ******************************/ /***************************** Public constants ******************************/
/*****************************************************************************/ /*****************************************************************************/
#define Tst_SCORE_MAX 10 // Maximum score of a test (10 in Spain). Must be unsigned! // TODO: Make this configurable by teachers
#define Tst_MAX_QUESTIONS_PER_TEST 100 // Absolute maximum number of questions in a test #define Tst_MAX_QUESTIONS_PER_TEST 100 // Absolute maximum number of questions in a test
#define Tst_MAX_TAGS_PER_QUESTION 5 #define Tst_MAX_TAGS_PER_QUESTION 5
@ -52,7 +51,7 @@
#define Tst_CONFIG_DEFAULT_DEF_QUESTIONS 20 // Number of questions to be generated by default in a self-assessment test #define Tst_CONFIG_DEFAULT_DEF_QUESTIONS 20 // Number of questions to be generated by default in a self-assessment test
#define Tst_CONFIG_DEFAULT_MAX_QUESTIONS 30 // Maximum number of questions to be generated in a self-assessment test #define Tst_CONFIG_DEFAULT_MAX_QUESTIONS 30 // Maximum number of questions to be generated in a self-assessment test
#define Tst_MAX_BYTES_FEEDBACK_TYPE 32 #define TsR_MAX_BYTES_FEEDBACK_TYPE 32
#define Tst_MAX_BYTES_ANSWER_TYPE 32 #define Tst_MAX_BYTES_ANSWER_TYPE 32
@ -76,17 +75,6 @@ typedef enum
Tst_SELECT_QUESTIONS_FOR_GAME, // Selecting test questions for a game Tst_SELECT_QUESTIONS_FOR_GAME, // Selecting test questions for a game
} Tst_ActionToDoWithQuestions_t; } Tst_ActionToDoWithQuestions_t;
#define Tst_NUM_TYPES_FEEDBACK 5
typedef enum
{
Tst_FEEDBACK_NOTHING = 0,
Tst_FEEDBACK_TOTAL_RESULT = 1,
Tst_FEEDBACK_EACH_RESULT = 2,
Tst_FEEDBACK_EACH_GOOD_BAD = 3,
Tst_FEEDBACK_FULL_FEEDBACK = 4,
} Tst_Feedback_t;
#define Tst_FEEDBACK_DEFAULT Tst_FEEDBACK_FULL_FEEDBACK
struct Tst_Config struct Tst_Config
{ {
Tst_Pluggable_t Pluggable; Tst_Pluggable_t Pluggable;
@ -94,7 +82,7 @@ struct Tst_Config
unsigned Def; // Default number of questions unsigned Def; // Default number of questions
unsigned Max; // Maximum number of questions unsigned Max; // Maximum number of questions
unsigned long MinTimeNxtTstPerQst; unsigned long MinTimeNxtTstPerQst;
Tst_Feedback_t Feedback; TsR_Feedback_t Feedback;
}; };
#define Tst_NUM_ANS_TYPES 6 #define Tst_NUM_ANS_TYPES 6
@ -147,6 +135,10 @@ void Tst_ShowGrade (double Grade,double MaxGrade);
void Tst_ShowTagList (unsigned NumTags,MYSQL_RES *mysql_res); void Tst_ShowTagList (unsigned NumTags,MYSQL_RES *mysql_res);
void Tst_WriteQstAndAnsTest (Tst_ActionToDoWithQuestions_t ActionToDoWithQuestions,
struct UsrData *UsrDat,
unsigned NumQst,long QstCod,MYSQL_ROW row,
double *ScoreThisQst,bool *AnswerIsNotBlank);
void Tst_WriteQstStem (const char *Stem,const char *ClassStem); void Tst_WriteQstStem (const char *Stem,const char *ClassStem);
void Tst_WriteQstFeedback (const char *Feedback,const char *ClassFeedback); void Tst_WriteQstFeedback (const char *Feedback,const char *ClassFeedback);
@ -176,6 +168,7 @@ void Tst_CheckIfNumberOfAnswersIsOne (void);
unsigned long Tst_GetTagsQst (long QstCod,MYSQL_RES **mysql_res); unsigned long Tst_GetTagsQst (long QstCod,MYSQL_RES **mysql_res);
void Tst_GetAndWriteTagsQst (long QstCod); void Tst_GetAndWriteTagsQst (long QstCod);
void Tst_FreeTagsList (void);
void Tst_ShowFormConfig (void); void Tst_ShowFormConfig (void);
void Tst_EnableTag (void); void Tst_EnableTag (void);
@ -209,21 +202,8 @@ void Tst_PutParamQstCod (void);
void Tst_InsertOrUpdateQstTagsAnsIntoDB (void); void Tst_InsertOrUpdateQstTagsAnsIntoDB (void);
void Tst_FreeTagsList (void); void Tst_RemoveCrsTests (long CrsCod);
void Tst_GetTestStats (Tst_AnswerType_t AnsType,struct Tst_Stats *Stats); void Tst_GetTestStats (Tst_AnswerType_t AnsType,struct Tst_Stats *Stats);
void Tst_SelUsrsToViewUsrsTstResults (void);
void Tst_SelDatesToSeeMyTstResults (void);
void Tst_ShowMyTstResults (void);
void Tst_GetUsrsAndShowTstResults (void);
void Tst_ShowOneTstResult (void);
void Tst_ShowTestResult (struct UsrData *UsrDat,
unsigned NumQsts,time_t TstTimeUTC);
void Tst_RemoveTestResultsMadeByUsrInAllCrss (long UsrCod);
void Tst_RemoveTestResultsMadeByUsrInCrs (long UsrCod,long CrsCod);
void Tst_RemoveCrsTestResults (long CrsCod);
void Tst_RemoveCrsTests (long CrsCod);
#endif #endif

1167
swad_test_result.c Normal file

File diff suppressed because it is too large Load Diff

77
swad_test_result.h Normal file
View File

@ -0,0 +1,77 @@
// swad_test_results.h: test results
#ifndef _SWAD_TSR
#define _SWAD_TSR
/*
SWAD (Shared Workspace At a Distance in Spanish),
is a web platform developed at the University of Granada (Spain),
and used to support university teaching.
This file is part of SWAD core.
Copyright (C) 1999-2020 Antonio Cañas Vargas
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*****************************************************************************/
/********************************* Headers ***********************************/
/*****************************************************************************/
// #include "swad_game.h"
#include "swad_user.h"
/*****************************************************************************/
/***************************** Public constants ******************************/
/*****************************************************************************/
#define TsR_SCORE_MAX 10 // Maximum score of a test (10 in Spain). Must be unsigned! // TODO: Make this configurable by teachers
#define TsR_MAX_BYTES_FEEDBACK_TYPE 32
/*****************************************************************************/
/******************************* Public types ********************************/
/*****************************************************************************/
#define TsR_NUM_TYPES_FEEDBACK 5
typedef enum
{
TsR_FEEDBACK_NOTHING = 0,
TsR_FEEDBACK_TOTAL_RESULT = 1,
TsR_FEEDBACK_EACH_RESULT = 2,
TsR_FEEDBACK_EACH_GOOD_BAD = 3,
TsR_FEEDBACK_FULL_FEEDBACK = 4,
} TsR_Feedback_t;
#define TsR_FEEDBACK_DEFAULT TsR_FEEDBACK_FULL_FEEDBACK
/*****************************************************************************/
/***************************** Public prototypes *****************************/
/*****************************************************************************/
void TsR_SelUsrsToViewUsrsTstResults (void);
void TsR_SelDatesToSeeMyTstResults (void);
void TsR_ShowMyTstResults (void);
long TsR_CreateTestResultInDB (void);
void TsR_StoreScoreOfTestResultInDB (long TstCod,
unsigned NumQstsNotBlank,double Score);
void TsR_GetUsrsAndShowTstResults (void);
void TsR_ShowOneTstResult (void);
void TsR_ShowTestResult (struct UsrData *UsrDat,
unsigned NumQsts,time_t TstTimeUTC);
void TsR_StoreOneTestResultQstInDB (long TstCod,long QstCod,unsigned NumQst,double Score);
void TsR_RemoveTestResultsMadeByUsrInAllCrss (long UsrCod);
void TsR_RemoveTestResultsMadeByUsrInCrs (long UsrCod,long CrsCod);
void TsR_RemoveCrsTestResults (long CrsCod);
TsR_Feedback_t TsR_GetFeedbackTypeFromForm (void);
#endif

View File

@ -51241,9 +51241,9 @@ const char *Txt_TST_STR_ANSWER_TYPES[Tst_NUM_ANS_TYPES] =
#endif #endif
}; };
const char *Txt_TST_STR_FEEDBACK[Tst_NUM_TYPES_FEEDBACK] = const char *Txt_TST_STR_FEEDBACK[TsR_NUM_TYPES_FEEDBACK] =
{ {
[Tst_FEEDBACK_NOTHING] = [TsR_FEEDBACK_NOTHING] =
#if L==1 // ca #if L==1 // ca
"Ninguna realimentaci&oacute;n" // Necessita traduccio "Ninguna realimentaci&oacute;n" // Necessita traduccio
#elif L==2 // de #elif L==2 // de
@ -51264,7 +51264,7 @@ const char *Txt_TST_STR_FEEDBACK[Tst_NUM_TYPES_FEEDBACK] =
"Nenhum feedback" "Nenhum feedback"
#endif #endif
, ,
[Tst_FEEDBACK_TOTAL_RESULT] = [TsR_FEEDBACK_TOTAL_RESULT] =
#if L==1 // ca #if L==1 // ca
"Poca: solo puntuaci&oacute;n total" // Necessita traduccio "Poca: solo puntuaci&oacute;n total" // Necessita traduccio
#elif L==2 // de #elif L==2 // de
@ -51285,7 +51285,7 @@ const char *Txt_TST_STR_FEEDBACK[Tst_NUM_TYPES_FEEDBACK] =
"Pouco: apenas a pontua&ccedil;&atilde;o total" "Pouco: apenas a pontua&ccedil;&atilde;o total"
#endif #endif
, ,
[Tst_FEEDBACK_EACH_RESULT] = [TsR_FEEDBACK_EACH_RESULT] =
#if L==1 // ca #if L==1 // ca
"Media: puntuaci&oacute;n de cada pregunta" // Necessita traduccio "Media: puntuaci&oacute;n de cada pregunta" // Necessita traduccio
#elif L==2 // de #elif L==2 // de
@ -51306,7 +51306,7 @@ const char *Txt_TST_STR_FEEDBACK[Tst_NUM_TYPES_FEEDBACK] =
"M&eacute;dio: pontua&ccedil;&atilde;o de cada quest&atilde;o" "M&eacute;dio: pontua&ccedil;&atilde;o de cada quest&atilde;o"
#endif #endif
, ,
[Tst_FEEDBACK_EACH_GOOD_BAD] = [TsR_FEEDBACK_EACH_GOOD_BAD] =
#if L==1 // ca #if L==1 // ca
"Alta: respuesta correcta en cada pregunta" // Necessita traduccio "Alta: respuesta correcta en cada pregunta" // Necessita traduccio
#elif L==2 // de #elif L==2 // de
@ -51327,7 +51327,7 @@ const char *Txt_TST_STR_FEEDBACK[Tst_NUM_TYPES_FEEDBACK] =
"Alto: resposta correta para cada quest&atilde;o" "Alto: resposta correta para cada quest&atilde;o"
#endif #endif
, ,
[Tst_FEEDBACK_FULL_FEEDBACK] = [TsR_FEEDBACK_FULL_FEEDBACK] =
#if L==1 // ca #if L==1 // ca
"M&aacute;xima: mostrar texto de realimentaci&oacute;n" // Necessita traduccio "M&aacute;xima: mostrar texto de realimentaci&oacute;n" // Necessita traduccio
#elif L==2 // de #elif L==2 // de