mirror of https://github.com/acanas/swad-core.git
Version 21.42.2: Oct 25, 2021 Code refactoring in test questions.
This commit is contained in:
parent
9ab6f4c2d5
commit
b097b0eda9
|
@ -4303,10 +4303,10 @@ static int API_GetTstQuestions (struct soap *soap,
|
|||
/* Get answer type (row[1]) */
|
||||
AnswerType = Qst_ConvertFromStrAnsTypDBToAnsTyp (row[1]);
|
||||
getTestsOut->questionsArray.__ptr[NumRow].answerType =
|
||||
soap_malloc (soap,Tst_MAX_BYTES_ANSWER_TYPE + 1);
|
||||
soap_malloc (soap,Qst_MAX_BYTES_ANSWER_TYPE + 1);
|
||||
Str_Copy (getTestsOut->questionsArray.__ptr[NumRow].answerType,
|
||||
Tst_StrAnswerTypesXML[AnswerType],
|
||||
Tst_MAX_BYTES_ANSWER_TYPE);
|
||||
Qst_MAX_BYTES_ANSWER_TYPE);
|
||||
|
||||
/* Get shuffle (row[2]) */
|
||||
getTestsOut->questionsArray.__ptr[NumRow].shuffle = (row[2][0] == 'Y') ? 1 :
|
||||
|
@ -4651,9 +4651,9 @@ int swad__getTrivialQuestion (struct soap *soap,
|
|||
/* Get answer type (row[1]) */
|
||||
AnswerType = Qst_ConvertFromStrAnsTypDBToAnsTyp (row[1]);
|
||||
getTrivialQuestionOut->question.answerType =
|
||||
soap_malloc (soap,Tst_MAX_BYTES_ANSWER_TYPE + 1);
|
||||
soap_malloc (soap,Qst_MAX_BYTES_ANSWER_TYPE + 1);
|
||||
Str_Copy (getTrivialQuestionOut->question.answerType,
|
||||
Tst_StrAnswerTypesXML[AnswerType],Tst_MAX_BYTES_ANSWER_TYPE);
|
||||
Tst_StrAnswerTypesXML[AnswerType],Qst_MAX_BYTES_ANSWER_TYPE);
|
||||
|
||||
/* Get shuffle (row[2]) */
|
||||
getTrivialQuestionOut->question.shuffle = (row[2][0] == 'Y') ? 1 :
|
||||
|
|
|
@ -602,13 +602,14 @@ TODO: FIX BUG, URGENT! En las fechas como par
|
|||
|
||||
TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo.
|
||||
*/
|
||||
#define Log_PLATFORM_VERSION "SWAD 21.42.1 (2021-10-25)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 21.42.2 (2021-10-25)"
|
||||
#define CSS_FILE "swad20.45.css"
|
||||
#define JS_FILE "swad20.69.1.js"
|
||||
/*
|
||||
TODO: Rename CENTRE to CENTER in help wiki.
|
||||
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
|
||||
|
||||
Version 21.42.2: Oct 25, 2021 Code refactoring in test questions. (320795 lines)
|
||||
Version 21.42.1: Oct 25, 2021 Code refactoring in test questions. (320784 lines)
|
||||
Version 21.42: Oct 24, 2021 Code refactoring in test questions. (320782 lines)
|
||||
Version 21.41.2: Oct 24, 2021 Query moved to module swad_setting_database. (320777 lines)
|
||||
|
|
|
@ -1841,6 +1841,9 @@ static void Crs_EmptyCourseCompletely (long CrsCod)
|
|||
/***** Remove all tests in the course *****/
|
||||
Tst_RemoveCrsTests (CrsCod);
|
||||
|
||||
/***** Remove all questions in the course *****/
|
||||
Qst_RemoveCrsQsts (CrsCod);
|
||||
|
||||
/***** Remove groups in the course *****/
|
||||
Grp_DB_RemoveCrsGrps (CrsCod);
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include "swad_exam_print.h"
|
||||
#include "swad_exam_session.h"
|
||||
#include "swad_exam_set.h"
|
||||
#include "swad_test_type.h"
|
||||
#include "swad_question_type.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************* Public types and constants ************************/
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
#include "swad_exam_type.h"
|
||||
#include "swad_test_type.h"
|
||||
#include "swad_question_type.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************** Public types and constants ***********************/
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// swad_test_type.h: definition of types for tests
|
||||
// swad_question_type.h: definition of types for questions
|
||||
|
||||
#ifndef _SWAD_TST_TYP
|
||||
#define _SWAD_TST_TYP
|
||||
#ifndef _SWAD_QST_TYP
|
||||
#define _SWAD_QST_TYP
|
||||
/*
|
||||
SWAD (Shared Workspace At a Distance in Spanish),
|
||||
is a web platform developed at the University of Granada (Spain),
|
||||
|
@ -43,8 +43,6 @@
|
|||
#define Qst_MAX_CHARS_ANSWERS_ONE_QST (128 - 1) // 127
|
||||
#define Qst_MAX_BYTES_ANSWERS_ONE_QST ((Qst_MAX_CHARS_ANSWERS_ONE_QST + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
|
||||
|
||||
#define Tst_SCORE_MAX 10 // Maximum score of a test (10 in Spain). Must be unsigned! // TODO: Make this configurable by teachers
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************* Public types ********************************/
|
||||
/*****************************************************************************/
|
80
swad_test.c
80
swad_test.c
|
@ -66,7 +66,7 @@
|
|||
/***************************** Public constants ******************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
// strings are limited to Tst_MAX_BYTES_ANSWER_TYPE characters
|
||||
// strings are limited to Qst_MAX_BYTES_ANSWER_TYPE characters
|
||||
const char *Tst_StrAnswerTypesXML[Qst_NUM_ANS_TYPES] =
|
||||
{
|
||||
[Qst_ANS_INT ] = "int",
|
||||
|
@ -148,7 +148,7 @@ static void Tst_ShowFormConfigTst (void);
|
|||
static void Tst_PutInputFieldNumQst (const char *Field,const char *Label,
|
||||
unsigned Value);
|
||||
|
||||
static void Tst_ShowFormAnswerTypes (const struct Tst_AnswerTypes *AnswerTypes);
|
||||
static void Tst_ShowFormAnswerTypes (const struct Qst_AnswerTypes *AnswerTypes);
|
||||
static void Qst_GetQuestions (struct Tst_Test *Test,MYSQL_RES **mysql_res);
|
||||
static void Tst_GetQuestionsForNewTestFromDB (struct Tst_Test *Test,
|
||||
struct TstPrn_Print *Print);
|
||||
|
@ -192,7 +192,7 @@ static bool Tst_GetParamsTst (struct Tst_Test *Test,
|
|||
static unsigned Tst_GetParamNumTst (void);
|
||||
static unsigned Tst_GetParamNumQsts (void);
|
||||
static unsigned Tst_CountNumTagsInList (const struct Tag_Tags *Tags);
|
||||
static int Tst_CountNumAnswerTypesInList (const struct Tst_AnswerTypes *AnswerTypes);
|
||||
static int Tst_CountNumAnswerTypesInList (const struct Qst_AnswerTypes *AnswerTypes);
|
||||
|
||||
static void Qst_PutFormEditOneQst (struct Qst_Question *Question);
|
||||
static void Qst_PutFloatInputField (const char *Label,const char *Field,
|
||||
|
@ -266,7 +266,7 @@ static void Tst_Constructor (struct Tst_Test *Test)
|
|||
Test->AnswerTypes.List[0] = '\0';
|
||||
|
||||
/***** Reset selected order *****/
|
||||
Test->SelectedOrder = Tst_DEFAULT_ORDER;
|
||||
Test->SelectedOrder = Qst_DEFAULT_ORDER;
|
||||
|
||||
/***** Question constructor *****/
|
||||
Qst_QstConstructor (&Test->Question);
|
||||
|
@ -990,7 +990,7 @@ static void Qst_ShowFormRequestEditQsts (struct Tst_Test *Test)
|
|||
if ((Test->Tags.Num = Tag_DB_GetAllTagsFromCurrentCrs (&mysql_res)))
|
||||
{
|
||||
Frm_BeginForm (ActLstTstQst);
|
||||
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Tst_DEFAULT_ORDER);
|
||||
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Qst_DEFAULT_ORDER);
|
||||
|
||||
HTM_TABLE_BeginPadding (2);
|
||||
|
||||
|
@ -1533,7 +1533,7 @@ static void Tst_PutInputFieldNumQst (const char *Field,const char *Label,
|
|||
/***************** Show form for select the types of answers *****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Tst_ShowFormAnswerTypes (const struct Tst_AnswerTypes *AnswerTypes)
|
||||
static void Tst_ShowFormAnswerTypes (const struct Qst_AnswerTypes *AnswerTypes)
|
||||
{
|
||||
extern const char *The_ClassFormInBox[The_NUM_THEMES];
|
||||
extern const char *Txt_Types_of_answers;
|
||||
|
@ -1619,7 +1619,7 @@ void Qst_ListQuestionsToEdit (void)
|
|||
Tst_Constructor (&Test);
|
||||
|
||||
/***** Get parameters, query the database and list the questions *****/
|
||||
if (Tst_GetParamsTst (&Test,Tst_EDIT_TEST)) // Get parameters from the form
|
||||
if (Tst_GetParamsTst (&Test,Tst_EDIT_QUESTIONS)) // Get parameters from the form
|
||||
{
|
||||
/***** Get question codes from database *****/
|
||||
Qst_GetQuestions (&Test,&mysql_res); // Query database
|
||||
|
@ -1814,27 +1814,27 @@ static void Qst_GetQuestions (struct Tst_Test *Test,MYSQL_RES **mysql_res)
|
|||
|
||||
switch (Test->SelectedOrder)
|
||||
{
|
||||
case Tst_ORDER_STEM:
|
||||
case Qst_ORDER_STEM:
|
||||
Str_Concat (Query," ORDER BY tst_questions.Stem",
|
||||
Tst_MAX_BYTES_QUERY_TEST);
|
||||
break;
|
||||
case Tst_ORDER_NUM_HITS:
|
||||
case Qst_ORDER_NUM_HITS:
|
||||
Str_Concat (Query," ORDER BY tst_questions.NumHits DESC,"
|
||||
"tst_questions.Stem",
|
||||
Tst_MAX_BYTES_QUERY_TEST);
|
||||
break;
|
||||
case Tst_ORDER_AVERAGE_SCORE:
|
||||
case Qst_ORDER_AVERAGE_SCORE:
|
||||
Str_Concat (Query," ORDER BY tst_questions.Score/tst_questions.NumHits DESC,"
|
||||
"tst_questions.NumHits DESC,"
|
||||
"tst_questions.Stem",
|
||||
Tst_MAX_BYTES_QUERY_TEST);
|
||||
break;
|
||||
case Tst_ORDER_NUM_HITS_NOT_BLANK:
|
||||
case Qst_ORDER_NUM_HITS_NOT_BLANK:
|
||||
Str_Concat (Query," ORDER BY tst_questions.NumHitsNotBlank DESC,"
|
||||
"tst_questions.Stem",
|
||||
Tst_MAX_BYTES_QUERY_TEST);
|
||||
break;
|
||||
case Tst_ORDER_AVERAGE_SCORE_NOT_BLANK:
|
||||
case Qst_ORDER_AVERAGE_SCORE_NOT_BLANK:
|
||||
Str_Concat (Query," ORDER BY tst_questions.Score/tst_questions.NumHitsNotBlank DESC,"
|
||||
"tst_questions.NumHitsNotBlank DESC,"
|
||||
"tst_questions.Stem",
|
||||
|
@ -2182,9 +2182,9 @@ static void Qst_WriteHeadingRowQuestionsForEdition (struct Tst_Test *Test)
|
|||
extern const char *Txt_Date;
|
||||
extern const char *Txt_Tags;
|
||||
extern const char *Txt_Shuffle;
|
||||
extern const char *Txt_TST_STR_ORDER_FULL[Tst_NUM_TYPES_ORDER_QST];
|
||||
extern const char *Txt_TST_STR_ORDER_SHORT[Tst_NUM_TYPES_ORDER_QST];
|
||||
Tst_QuestionsOrder_t Order;
|
||||
extern const char *Txt_TST_STR_ORDER_FULL[Qst_NUM_TYPES_ORDER_QST];
|
||||
extern const char *Txt_TST_STR_ORDER_SHORT[Qst_NUM_TYPES_ORDER_QST];
|
||||
Qst_QuestionsOrder_t Order;
|
||||
|
||||
/***** Begin row *****/
|
||||
HTM_TR_Begin (NULL);
|
||||
|
@ -2201,8 +2201,8 @@ static void Qst_WriteHeadingRowQuestionsForEdition (struct Tst_Test *Test)
|
|||
/* Stem and answers of question */
|
||||
/* Number of times that the question has been answered */
|
||||
/* Average score */
|
||||
for (Order = (Tst_QuestionsOrder_t) 0;
|
||||
Order <= (Tst_QuestionsOrder_t) (Tst_NUM_TYPES_ORDER_QST - 1);
|
||||
for (Order = (Qst_QuestionsOrder_t) 0;
|
||||
Order <= (Qst_QuestionsOrder_t) (Qst_NUM_TYPES_ORDER_QST - 1);
|
||||
Order++)
|
||||
{
|
||||
HTM_TH_Begin (1,1,"LT");
|
||||
|
@ -2926,7 +2926,7 @@ static bool Tst_GetParamsTst (struct Tst_Test *Test,
|
|||
switch (ActionToDoWithQuestions)
|
||||
{
|
||||
case Tst_SHOW_TEST_TO_ANSWER:
|
||||
case Tst_EDIT_TEST:
|
||||
case Tst_EDIT_QUESTIONS:
|
||||
case Tst_SELECT_QUESTIONS_FOR_EXAM:
|
||||
/* Get parameter that indicates if all types of answer are selected */
|
||||
Test->AnswerTypes.All = Par_GetParToBool ("AllAnsTypes");
|
||||
|
@ -2964,18 +2964,18 @@ static bool Tst_GetParamsTst (struct Tst_Test *Test,
|
|||
Error = true;
|
||||
}
|
||||
break;
|
||||
case Tst_EDIT_TEST:
|
||||
case Tst_EDIT_QUESTIONS:
|
||||
/* Get starting and ending dates */
|
||||
Dat_GetIniEndDatesFromForm ();
|
||||
|
||||
/* Get ordering criteria */
|
||||
Par_GetParMultiToText ("Order",UnsignedStr,Cns_MAX_DECIMAL_DIGITS_UINT);
|
||||
if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1)
|
||||
Test->SelectedOrder = (Tst_QuestionsOrder_t)
|
||||
((UnsignedNum < Tst_NUM_TYPES_ORDER_QST) ? UnsignedNum :
|
||||
Test->SelectedOrder = (Qst_QuestionsOrder_t)
|
||||
((UnsignedNum < Qst_NUM_TYPES_ORDER_QST) ? UnsignedNum :
|
||||
0);
|
||||
else
|
||||
Test->SelectedOrder = (Tst_QuestionsOrder_t) 0;
|
||||
Test->SelectedOrder = (Qst_QuestionsOrder_t) 0;
|
||||
break;
|
||||
case Tst_SELECT_QUESTIONS_FOR_EXAM:
|
||||
case Tst_SELECT_QUESTIONS_FOR_GAME:
|
||||
|
@ -2983,7 +2983,7 @@ static bool Tst_GetParamsTst (struct Tst_Test *Test,
|
|||
Dat_GetIniEndDatesFromForm ();
|
||||
|
||||
/* Order question by stem */
|
||||
Test->SelectedOrder = Tst_ORDER_STEM;
|
||||
Test->SelectedOrder = Qst_ORDER_STEM;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -3041,7 +3041,7 @@ static unsigned Tst_CountNumTagsInList (const struct Tag_Tags *Tags)
|
|||
/**** Count the number of types of answers in the list of types of answers ***/
|
||||
/*****************************************************************************/
|
||||
|
||||
static int Tst_CountNumAnswerTypesInList (const struct Tst_AnswerTypes *AnswerTypes)
|
||||
static int Tst_CountNumAnswerTypesInList (const struct Qst_AnswerTypes *AnswerTypes)
|
||||
{
|
||||
const char *Ptr;
|
||||
int NumAnsTypes = 0;
|
||||
|
@ -4593,7 +4593,7 @@ void Qst_RequestRemoveSelectedQsts (void)
|
|||
Tst_Constructor (&Test);
|
||||
|
||||
/***** Get parameters *****/
|
||||
if (Tst_GetParamsTst (&Test,Tst_EDIT_TEST)) // Get parameters from the form
|
||||
if (Tst_GetParamsTst (&Test,Tst_EDIT_QUESTIONS)) // Get parameters from the form
|
||||
{
|
||||
/***** Show question and button to remove question *****/
|
||||
Ale_ShowAlertAndButton (ActRemSevTstQst,NULL,NULL,
|
||||
|
@ -4628,7 +4628,7 @@ void Qst_RemoveSelectedQsts (void)
|
|||
Tst_Constructor (&Test);
|
||||
|
||||
/***** Get parameters *****/
|
||||
if (Tst_GetParamsTst (&Test,Tst_EDIT_TEST)) // Get parameters
|
||||
if (Tst_GetParamsTst (&Test,Tst_EDIT_QUESTIONS)) // Get parameters
|
||||
{
|
||||
/***** Get question codes *****/
|
||||
Qst_GetQuestions (&Test,&mysql_res); // Query database
|
||||
|
@ -4694,7 +4694,7 @@ void Qst_RequestRemoveOneQst (void)
|
|||
|
||||
/* Get other parameters */
|
||||
if (!EditingOnlyThisQst)
|
||||
if (!Tst_GetParamsTst (&Test,Tst_EDIT_TEST))
|
||||
if (!Tst_GetParamsTst (&Test,Tst_EDIT_QUESTIONS))
|
||||
Err_ShowErrorAndExit ("Wrong test parameters.");
|
||||
|
||||
/***** Show question and button to remove question *****/
|
||||
|
@ -5036,7 +5036,7 @@ static void Qst_InsertAnswersIntoDB (struct Qst_Question *Question)
|
|||
/*********************** Update the score of a question **********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Tst_UpdateQstScoreInDB (struct TstPrn_PrintedQuestion *PrintedQuestion)
|
||||
void Qst_UpdateQstScoreInDB (struct TstPrn_PrintedQuestion *PrintedQuestion)
|
||||
{
|
||||
/***** Update number of clicks and score of the question *****/
|
||||
Str_SetDecimalPointToUS (); // To print the floating point as a dot
|
||||
|
@ -5059,7 +5059,7 @@ void Tst_UpdateQstScoreInDB (struct TstPrn_PrintedQuestion *PrintedQuestion)
|
|||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**************** Remove all tests and questions in a course *****************/
|
||||
/************************* Remove all tests in a course **********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Tst_RemoveCrsTests (long CrsCod)
|
||||
|
@ -5072,7 +5072,14 @@ void Tst_RemoveCrsTests (long CrsCod)
|
|||
"DELETE FROM tst_config"
|
||||
" WHERE CrsCod=%ld",
|
||||
CrsCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************* Remove all questions in a course **********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Qst_RemoveCrsQsts (long CrsCod)
|
||||
{
|
||||
/***** Remove associations between test questions
|
||||
and test tags in the course *****/
|
||||
DB_QueryDELETE ("can not remove tags associated"
|
||||
|
@ -5133,13 +5140,14 @@ static void Qst_RemoveMediaFromStemOfQst (long CrsCod,long QstCod)
|
|||
unsigned NumMedia;
|
||||
|
||||
/***** Get media code associated to stem of test question from database *****/
|
||||
NumMedia =
|
||||
(unsigned) DB_QuerySELECT (&mysql_res,"can not get media",
|
||||
"SELECT MedCod"
|
||||
" FROM tst_questions"
|
||||
" WHERE QstCod=%ld"
|
||||
" AND CrsCod=%ld", // Extra check
|
||||
QstCod,CrsCod);
|
||||
NumMedia = (unsigned)
|
||||
DB_QuerySELECT (&mysql_res,"can not get media",
|
||||
"SELECT MedCod"
|
||||
" FROM tst_questions"
|
||||
" WHERE QstCod=%ld"
|
||||
" AND CrsCod=%ld", // Extra check
|
||||
QstCod,
|
||||
CrsCod);
|
||||
|
||||
/***** Go over result removing media *****/
|
||||
Med_RemoveMediaFromAllRows (NumMedia,mysql_res);
|
||||
|
|
33
swad_test.h
33
swad_test.h
|
@ -30,9 +30,9 @@
|
|||
#include "swad_exam.h"
|
||||
#include "swad_game.h"
|
||||
#include "swad_media.h"
|
||||
#include "swad_question_type.h"
|
||||
#include "swad_test_config.h"
|
||||
#include "swad_test_print.h"
|
||||
#include "swad_test_type.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Public constants ******************************/
|
||||
|
@ -41,34 +41,36 @@
|
|||
#define Tst_MAX_CHARS_ANSWER_OR_FEEDBACK (1024 - 1) // 1023
|
||||
#define Tst_MAX_BYTES_ANSWER_OR_FEEDBACK ((Tst_MAX_CHARS_ANSWER_OR_FEEDBACK + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 16383
|
||||
|
||||
#define Tst_MAX_BYTES_ANSWER_TYPE 32
|
||||
#define Qst_MAX_BYTES_ANSWER_TYPE 32
|
||||
|
||||
#define Tst_SCORE_MAX 10 // Maximum score of a test (10 in Spain). Must be unsigned! // TODO: Make this configurable by teachers
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************* Public types ********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
struct Tst_AnswerTypes
|
||||
struct Qst_AnswerTypes
|
||||
{
|
||||
bool All;
|
||||
char List[Qst_MAX_BYTES_LIST_ANSWER_TYPES + 1];
|
||||
};
|
||||
|
||||
#define Tst_NUM_TYPES_ORDER_QST 5
|
||||
#define Qst_NUM_TYPES_ORDER_QST 5
|
||||
typedef enum
|
||||
{
|
||||
Tst_ORDER_STEM = 0,
|
||||
Tst_ORDER_NUM_HITS = 1,
|
||||
Tst_ORDER_AVERAGE_SCORE = 2,
|
||||
Tst_ORDER_NUM_HITS_NOT_BLANK = 3,
|
||||
Tst_ORDER_AVERAGE_SCORE_NOT_BLANK = 4,
|
||||
} Tst_QuestionsOrder_t;
|
||||
#define Tst_DEFAULT_ORDER Tst_ORDER_STEM
|
||||
Qst_ORDER_STEM = 0,
|
||||
Qst_ORDER_NUM_HITS = 1,
|
||||
Qst_ORDER_AVERAGE_SCORE = 2,
|
||||
Qst_ORDER_NUM_HITS_NOT_BLANK = 3,
|
||||
Qst_ORDER_AVERAGE_SCORE_NOT_BLANK = 4,
|
||||
} Qst_QuestionsOrder_t;
|
||||
#define Qst_DEFAULT_ORDER Qst_ORDER_STEM
|
||||
|
||||
struct Tst_Test
|
||||
{
|
||||
struct Tag_Tags Tags; // Selected tags
|
||||
struct Tst_AnswerTypes AnswerTypes; // Selected answer types
|
||||
Tst_QuestionsOrder_t SelectedOrder; // Order for listing questions
|
||||
struct Qst_AnswerTypes AnswerTypes; // Selected answer types
|
||||
Qst_QuestionsOrder_t SelectedOrder; // Order for listing questions
|
||||
unsigned NumQsts; // Number of questions
|
||||
struct Qst_Question Question; // Selected / editing question
|
||||
};
|
||||
|
@ -77,7 +79,7 @@ typedef enum
|
|||
{
|
||||
Tst_SHOW_TEST_TO_ANSWER, // Showing a test to a student
|
||||
Tst_SHOW_TEST_RESULT, // Showing the assessment of a test
|
||||
Tst_EDIT_TEST, // Editing test questions
|
||||
Tst_EDIT_QUESTIONS, // Editing test questions
|
||||
Tst_SELECT_QUESTIONS_FOR_EXAM, // Selecting test questions for a set of questions in an exam
|
||||
Tst_SELECT_QUESTIONS_FOR_GAME, // Selecting test questions for a game
|
||||
} Tst_ActionToDoWithQuestions_t;
|
||||
|
@ -173,9 +175,10 @@ void Qst_PutParamQstCod (void *QstCod);
|
|||
|
||||
void Qst_InsertOrUpdateQstTagsAnsIntoDB (struct Qst_Question *Question);
|
||||
|
||||
void Tst_UpdateQstScoreInDB (struct TstPrn_PrintedQuestion *PrintedQuestion);
|
||||
void Qst_UpdateQstScoreInDB (struct TstPrn_PrintedQuestion *PrintedQuestion);
|
||||
|
||||
void Tst_RemoveCrsTests (long CrsCod);
|
||||
void Qst_RemoveCrsQsts (long CrsCod);
|
||||
|
||||
void Tst_GetTestStats (Qst_AnswerType_t AnsType,struct Tst_Stats *Stats);
|
||||
|
||||
|
|
|
@ -633,7 +633,7 @@ void TstPrn_ShowPrintAfterAssess (struct TstPrn_Print *Print)
|
|||
|
||||
/***** Update the number of accesses and the score of this question *****/
|
||||
if (Gbl.Usrs.Me.Role.Logged == Rol_STD)
|
||||
Tst_UpdateQstScoreInDB (&Print->PrintedQuestions[QstInd]);
|
||||
Qst_UpdateQstScoreInDB (&Print->PrintedQuestions[QstInd]);
|
||||
|
||||
/***** Destroy test question *****/
|
||||
Qst_QstDestructor (&Question);
|
||||
|
@ -795,7 +795,7 @@ void TstPrn_ComputeScoresAndStoreQuestionsOfPrint (struct TstPrn_Print *Print,
|
|||
|
||||
/* Update the number of hits and the score of this question in tests database */
|
||||
if (UpdateQstScore)
|
||||
Tst_UpdateQstScoreInDB (&Print->PrintedQuestions[QstInd]);
|
||||
Qst_UpdateQstScoreInDB (&Print->PrintedQuestions[QstInd]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -27,8 +27,8 @@
|
|||
/********************************* Headers ***********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include "swad_question_type.h"
|
||||
#include "swad_test_config.h"
|
||||
#include "swad_test_type.h"
|
||||
#include "swad_test_visibility.h"
|
||||
#include "swad_user.h"
|
||||
|
||||
|
|
24
swad_text.c
24
swad_text.c
|
@ -53951,9 +53951,9 @@ const char *Txt_TST_STR_ANSWER_TYPES[Qst_NUM_ANS_TYPES] =
|
|||
#endif
|
||||
};
|
||||
|
||||
const char *Txt_TST_STR_ORDER_FULL[Tst_NUM_TYPES_ORDER_QST] =
|
||||
const char *Txt_TST_STR_ORDER_FULL[Qst_NUM_TYPES_ORDER_QST] =
|
||||
{
|
||||
[Tst_ORDER_STEM] =
|
||||
[Qst_ORDER_STEM] =
|
||||
#if L==1 // ca
|
||||
"Ordenar por enunciado de la pregunta" // Necessita traduccio
|
||||
#elif L==2 // de
|
||||
|
@ -53974,7 +53974,7 @@ const char *Txt_TST_STR_ORDER_FULL[Tst_NUM_TYPES_ORDER_QST] =
|
|||
"Classificar por formulação da pergunta"
|
||||
#endif
|
||||
,
|
||||
[Tst_ORDER_NUM_HITS] =
|
||||
[Qst_ORDER_NUM_HITS] =
|
||||
#if L==1 // ca
|
||||
"Ordenar por nº de veces que se ha respondido la pregunta" // Necessita traduccio
|
||||
#elif L==2 // de
|
||||
|
@ -53995,7 +53995,7 @@ const char *Txt_TST_STR_ORDER_FULL[Tst_NUM_TYPES_ORDER_QST] =
|
|||
"Classificar por nº de vezes que a pergunta foi respondida"
|
||||
#endif
|
||||
,
|
||||
[Tst_ORDER_AVERAGE_SCORE] =
|
||||
[Qst_ORDER_AVERAGE_SCORE] =
|
||||
#if L==1 // ca
|
||||
"Ordenar por puntuación media" // Necessita traduccio
|
||||
#elif L==2 // de
|
||||
|
@ -54016,7 +54016,7 @@ const char *Txt_TST_STR_ORDER_FULL[Tst_NUM_TYPES_ORDER_QST] =
|
|||
"Classificar por pontuação média"
|
||||
#endif
|
||||
,
|
||||
[Tst_ORDER_NUM_HITS_NOT_BLANK] =
|
||||
[Qst_ORDER_NUM_HITS_NOT_BLANK] =
|
||||
#if L==1 // ca
|
||||
"Ordenar por nº de veces que se ha respondido"
|
||||
" la pregunta (excluyendo respuestas en blanco)" // Necessita traduccio
|
||||
|
@ -54046,7 +54046,7 @@ const char *Txt_TST_STR_ORDER_FULL[Tst_NUM_TYPES_ORDER_QST] =
|
|||
" que a pergunta foi respondida (não em branco)"
|
||||
#endif
|
||||
,
|
||||
[Tst_ORDER_AVERAGE_SCORE_NOT_BLANK] =
|
||||
[Qst_ORDER_AVERAGE_SCORE_NOT_BLANK] =
|
||||
#if L==1 // ca
|
||||
"Ordenar por puntuación media (excluyendo respuestas en blanco)" // Necessita traduccio
|
||||
#elif L==2 // de
|
||||
|
@ -54068,9 +54068,9 @@ const char *Txt_TST_STR_ORDER_FULL[Tst_NUM_TYPES_ORDER_QST] =
|
|||
#endif
|
||||
};
|
||||
|
||||
const char *Txt_TST_STR_ORDER_SHORT[Tst_NUM_TYPES_ORDER_QST] =
|
||||
const char *Txt_TST_STR_ORDER_SHORT[Qst_NUM_TYPES_ORDER_QST] =
|
||||
{
|
||||
[Tst_ORDER_STEM] =
|
||||
[Qst_ORDER_STEM] =
|
||||
#if L==1 // ca
|
||||
"Pregunta"
|
||||
#elif L==2 // de
|
||||
|
@ -54091,7 +54091,7 @@ const char *Txt_TST_STR_ORDER_SHORT[Tst_NUM_TYPES_ORDER_QST] =
|
|||
"Pergunta"
|
||||
#endif
|
||||
,
|
||||
[Tst_ORDER_NUM_HITS] =
|
||||
[Qst_ORDER_NUM_HITS] =
|
||||
#if L==1 // ca
|
||||
"N.º<br />resp." // Necessita traduccio
|
||||
#elif L==2 // de
|
||||
|
@ -54112,7 +54112,7 @@ const char *Txt_TST_STR_ORDER_SHORT[Tst_NUM_TYPES_ORDER_QST] =
|
|||
"N.º<br />resp."
|
||||
#endif
|
||||
,
|
||||
[Tst_ORDER_AVERAGE_SCORE] =
|
||||
[Qst_ORDER_AVERAGE_SCORE] =
|
||||
#if L==1 // ca
|
||||
"Puntuación<br />media" // Necessita traduccio
|
||||
#elif L==2 // de
|
||||
|
@ -54133,7 +54133,7 @@ const char *Txt_TST_STR_ORDER_SHORT[Tst_NUM_TYPES_ORDER_QST] =
|
|||
"Pontuação<br />média"
|
||||
#endif
|
||||
,
|
||||
[Tst_ORDER_NUM_HITS_NOT_BLANK] =
|
||||
[Qst_ORDER_NUM_HITS_NOT_BLANK] =
|
||||
#if L==1 // ca
|
||||
"N.º<br />resp.<br />no en<br />blanco" // Necessita traduccio
|
||||
#elif L==2 // de
|
||||
|
@ -54154,7 +54154,7 @@ const char *Txt_TST_STR_ORDER_SHORT[Tst_NUM_TYPES_ORDER_QST] =
|
|||
"N.º<br />resp.<br />não em<br />branco"
|
||||
#endif
|
||||
,
|
||||
[Tst_ORDER_AVERAGE_SCORE_NOT_BLANK] =
|
||||
[Qst_ORDER_AVERAGE_SCORE_NOT_BLANK] =
|
||||
#if L==1 // ca
|
||||
"Puntuación<br />media<br />no en<br />blanco" // Necessita traduccio
|
||||
#elif L==2 // de
|
||||
|
|
Loading…
Reference in New Issue