mirror of https://github.com/acanas/swad-core.git
Version 15.165.7
This commit is contained in:
parent
27423df1d0
commit
a4894ce39a
|
@ -1143,6 +1143,7 @@ CREATE TABLE IF NOT EXISTS tst_questions (
|
|||
AnsType ENUM ('int','float','true_false','unique_choice','multiple_choice','text') NOT NULL,
|
||||
Shuffle ENUM('N','Y') NOT NULL,
|
||||
Stem TEXT NOT NULL,
|
||||
Image CHAR(43) NOT NULL,
|
||||
Feedback TEXT NOT NULL,
|
||||
NumHits INT NOT NULL DEFAULT 0,
|
||||
NumHitsNotBlank INT NOT NULL DEFAULT 0,
|
||||
|
|
|
@ -135,13 +135,17 @@
|
|||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.165.6 (2016-03-29)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.165.7 (2016-03-29)"
|
||||
#define CSS_FILE "swad15.165.5.css"
|
||||
#define JS_FILE "swad15.131.3.js"
|
||||
|
||||
// Number of lines (includes comments but not blank lines) has been got with the following command:
|
||||
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
|
||||
/*
|
||||
Version 15.165.7: Mar 29, 2016 New field for image in database table of test questions. (196879 lines)
|
||||
1 change necessary in database:
|
||||
ALTER TABLE tst_questions ADD COLUMN Image CHAR(43) NOT NULL AFTER Stem;
|
||||
|
||||
Version 15.165.6: Mar 29, 2016 Changes in temporary directories for images. (196846 lines)
|
||||
Version 15.165.5: Mar 29, 2016 Changes in form to edit a test question. (196843 lines)
|
||||
Version 15.165.4: Mar 29, 2016 Changes in form to upload XML file to import questions. (196813 lines)
|
||||
|
|
|
@ -2418,12 +2418,13 @@ mysql> DESCRIBE tst_questions;
|
|||
| AnsType | enum('int','float','true_false','unique_choice','multiple_choice','text') | NO | | NULL | |
|
||||
| Shuffle | enum('N','Y') | NO | | NULL | |
|
||||
| Stem | text | NO | | NULL | |
|
||||
| Image | char(43) | NO | | NULL | |
|
||||
| Feedback | text | NO | | NULL | |
|
||||
| NumHits | int(11) | NO | | 0 | |
|
||||
| NumHitsNotBlank | int(11) | NO | | 0 | |
|
||||
| Score | double | NO | | 0 | |
|
||||
+-----------------+---------------------------------------------------------------------------+------+-----+---------+----------------+
|
||||
10 rows in set (0.01 sec)
|
||||
11 rows in set (0.01 sec)
|
||||
*/
|
||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS tst_questions ("
|
||||
"QstCod INT NOT NULL AUTO_INCREMENT,"
|
||||
|
@ -2432,6 +2433,7 @@ mysql> DESCRIBE tst_questions;
|
|||
"AnsType ENUM ('int','float','true_false','unique_choice','multiple_choice','text') NOT NULL,"
|
||||
"Shuffle ENUM('N','Y') NOT NULL,"
|
||||
"Stem TEXT NOT NULL,"
|
||||
"Image CHAR(43) NOT NULL,"
|
||||
"Feedback TEXT NOT NULL,"
|
||||
"NumHits INT NOT NULL DEFAULT 0,"
|
||||
"NumHitsNotBlank INT NOT NULL DEFAULT 0,"
|
||||
|
|
108
swad_test.c
108
swad_test.c
|
@ -875,10 +875,11 @@ static void Tst_ShowTstResultAfterAssess (long TstCod,unsigned *NumQstsNotBlank,
|
|||
row[2] AnsType
|
||||
row[3] Shuffle
|
||||
row[4] Stem
|
||||
row[5] Feedback
|
||||
row[6] NumHits
|
||||
row[7] NumHitsNotBlank
|
||||
row[8] Score
|
||||
row[5] Image
|
||||
row[6] Feedback
|
||||
row[7] NumHits
|
||||
row[8] NumHitsNotBlank
|
||||
row[9] Score
|
||||
*/
|
||||
|
||||
/***** Get the code of question (row[0]) *****/
|
||||
|
@ -938,10 +939,11 @@ static void Tst_WriteQstAndAnsExam (unsigned NumQst,long QstCod,MYSQL_ROW row,
|
|||
row[2] AnsType
|
||||
row[3] Shuffle
|
||||
row[4] Stem
|
||||
row[5] Feedback
|
||||
row[6] NumHits
|
||||
row[7] NumHitsNotBlank
|
||||
row[8] Score
|
||||
row[5] Image
|
||||
row[6] Feedback
|
||||
row[7] NumHits
|
||||
row[8] NumHitsNotBlank
|
||||
row[9] Score
|
||||
*/
|
||||
|
||||
/***** Write number of question *****/
|
||||
|
@ -960,7 +962,7 @@ static void Tst_WriteQstAndAnsExam (unsigned NumQst,long QstCod,MYSQL_ROW row,
|
|||
Gbl.RowEvenOdd,
|
||||
Txt_TST_STR_ANSWER_TYPES[Gbl.Test.AnswerType]);
|
||||
|
||||
/***** Write stem (row[4]), answers depending on shuffle (row[3]) and feedback (row[5]) *****/
|
||||
/***** Write stem (row[4]), answers depending on shuffle (row[3]) and feedback (row[6]) *****/
|
||||
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u\">",
|
||||
Gbl.RowEvenOdd);
|
||||
Tst_WriteQstStem (row[4],"TEST_EXA");
|
||||
|
@ -970,7 +972,7 @@ static void Tst_WriteQstAndAnsExam (unsigned NumQst,long QstCod,MYSQL_ROW row,
|
|||
{
|
||||
Tst_WriteAnswersOfAQstAssessExam (NumQst,QstCod,ScoreThisQst,AnswerIsNotBlank);
|
||||
if (Gbl.Test.Config.FeedbackType == Tst_FEEDBACK_FULL_FEEDBACK)
|
||||
Tst_WriteQstFeedback (row[5],"TEST_EXA_LIGHT");
|
||||
Tst_WriteQstFeedback (row[6],"TEST_EXA_LIGHT");
|
||||
}
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"</tr>");
|
||||
|
@ -2160,14 +2162,19 @@ static unsigned long Tst_GetQuestionsForEdit (MYSQL_RES **mysql_res)
|
|||
row[2] AnsType
|
||||
row[3] Shuffle
|
||||
row[4] Stem
|
||||
row[5] Feedback
|
||||
row[6] NumHits
|
||||
row[7] NumHitsNotBlank
|
||||
row[8] Score
|
||||
row[5] Image
|
||||
row[6] Feedback
|
||||
row[7] NumHits
|
||||
row[8] NumHitsNotBlank
|
||||
row[9] Score
|
||||
*/
|
||||
sprintf (Query,"SELECT tst_questions.QstCod,UNIX_TIMESTAMP(tst_questions.EditTime) AS F,"
|
||||
"tst_questions.AnsType,tst_questions.Shuffle,tst_questions.Stem,tst_questions.Feedback,"
|
||||
"tst_questions.NumHits,tst_questions.NumHitsNotBlank,tst_questions.Score"
|
||||
sprintf (Query,"SELECT tst_questions.QstCod,"
|
||||
"UNIX_TIMESTAMP(tst_questions.EditTime) AS F,"
|
||||
"tst_questions.AnsType,tst_questions.Shuffle,"
|
||||
"tst_questions.Stem,tst_questions.Image,"
|
||||
"tst_questions.Feedback,"
|
||||
"tst_questions.NumHits,tst_questions.NumHitsNotBlank,"
|
||||
"tst_questions.Score"
|
||||
" FROM tst_questions");
|
||||
if (!Gbl.Test.AllTags)
|
||||
strcat (Query,",tst_question_tags,tst_tags");
|
||||
|
@ -2292,10 +2299,11 @@ static unsigned long Tst_GetQuestionsForExam (MYSQL_RES **mysql_res)
|
|||
row[2] AnsType
|
||||
row[3] Shuffle
|
||||
row[4] Stem
|
||||
row[5] Feedback
|
||||
row[6] NumHits
|
||||
row[7] NumHitsNotBlank
|
||||
row[8] Score
|
||||
row[5] Image
|
||||
row[6] Feedback
|
||||
row[7] NumHits
|
||||
row[8] NumHitsNotBlank
|
||||
row[9] Score
|
||||
*/
|
||||
/* Start query */
|
||||
// Reject questions with any tag hidden
|
||||
|
@ -2304,7 +2312,8 @@ static unsigned long Tst_GetQuestionsForExam (MYSQL_RES **mysql_res)
|
|||
sprintf (Query,"SELECT DISTINCTROW tst_questions.QstCod,"
|
||||
"UNIX_TIMESTAMP(tst_questions.EditTime),"
|
||||
"tst_questions.AnsType,tst_questions.Shuffle,"
|
||||
"tst_questions.Stem,tst_questions.Feedback,"
|
||||
"tst_questions.Stem,tst_questions.Image,"
|
||||
"tst_questions.Feedback,"
|
||||
"tst_questions.NumHits,tst_questions.NumHitsNotBlank,"
|
||||
"tst_questions.Score"
|
||||
" FROM tst_questions,tst_question_tags,tst_tags"
|
||||
|
@ -2407,19 +2416,20 @@ static bool Tst_GetOneQuestionByCod (long QstCod,MYSQL_RES **mysql_res)
|
|||
char Query[512];
|
||||
|
||||
/***** Get data of a question from database *****/
|
||||
/*
|
||||
/*
|
||||
row[0] QstCod
|
||||
row[1] UNIX_TIMESTAMP(EditTime)
|
||||
row[2] AnsType
|
||||
row[3] Shuffle
|
||||
row[4] Stem
|
||||
row[5] Feedback
|
||||
row[6] NumHits
|
||||
row[7] NumHitsNotBlank
|
||||
row[8] Score
|
||||
row[5] Image
|
||||
row[6] Feedback
|
||||
row[7] NumHits
|
||||
row[8] NumHitsNotBlank
|
||||
row[9] Score
|
||||
*/
|
||||
sprintf (Query,"SELECT QstCod,UNIX_TIMESTAMP(EditTime),"
|
||||
"AnsType,Shuffle,Stem,Feedback,"
|
||||
"AnsType,Shuffle,Stem,Image,Feedback,"
|
||||
"NumHits,NumHitsNotBlank,Score"
|
||||
" FROM tst_questions"
|
||||
" WHERE QstCod='%ld'",
|
||||
|
@ -2527,7 +2537,18 @@ static void Tst_ListOneOrMoreQuestionsToEdit (unsigned long NumRows,MYSQL_RES *m
|
|||
Gbl.RowEvenOdd = NumRow % 2;
|
||||
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
||||
/*
|
||||
row[0] QstCod
|
||||
row[1] UNIX_TIMESTAMP(EditTime)
|
||||
row[2] AnsType
|
||||
row[3] Shuffle
|
||||
row[4] Stem
|
||||
row[5] Image
|
||||
row[6] Feedback
|
||||
row[7] NumHits
|
||||
row[8] NumHitsNotBlank
|
||||
row[9] Score
|
||||
*/
|
||||
/* row[0] holds the code of the question */
|
||||
if ((QstCod = Str_ConvertStrCodToLongCod (row[0])) < 0)
|
||||
Lay_ShowErrorAndExit ("Wrong code of question.");
|
||||
|
@ -2619,25 +2640,29 @@ static void Tst_ListOneOrMoreQuestionsToEdit (unsigned long NumRows,MYSQL_RES *m
|
|||
}
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
|
||||
/* Write the stem (row[4]), the feedback (row[5]) and the answers */
|
||||
/* Write the stem (row[4]), the feedback (row[6]) and the answers */
|
||||
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u\">",
|
||||
Gbl.RowEvenOdd);
|
||||
Tst_WriteQstStem (row[4],"TEST_EDI");
|
||||
Tst_WriteQstFeedback (row[5],"TEST_EDI_LIGHT");
|
||||
Tst_WriteQstFeedback (row[6],"TEST_EDI_LIGHT");
|
||||
Tst_WriteAnswersOfAQstEdit (QstCod);
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
|
||||
/* Get number of hits (number of times that the question has been answered, including blank answers) (row[6]) */
|
||||
if (sscanf (row[6],"%lu",&NumHitsThisQst) != 1)
|
||||
/* Get number of hits
|
||||
(number of times that the question has been answered,
|
||||
including blank answers) (row[7]) */
|
||||
if (sscanf (row[7],"%lu",&NumHitsThisQst) != 1)
|
||||
Lay_ShowErrorAndExit ("Wrong number of hits to a question.");
|
||||
|
||||
/* Get number of hits not blank (number of times that the question has been answered with a not blank answer) (row[7]) */
|
||||
if (sscanf (row[7],"%lu",&NumHitsNotBlankThisQst) != 1)
|
||||
/* Get number of hits not blank
|
||||
(number of times that the question has been answered
|
||||
with a not blank answer) (row[8]) */
|
||||
if (sscanf (row[8],"%lu",&NumHitsNotBlankThisQst) != 1)
|
||||
Lay_ShowErrorAndExit ("Wrong number of hits not blank to a question.");
|
||||
|
||||
/* Get the acumulated score of the question (row[8]) */
|
||||
/* Get the acumulated score of the question (row[9]) */
|
||||
setlocale (LC_NUMERIC,"en_US.utf8"); // To get decimal point
|
||||
if (sscanf (row[8],"%lf",&TotalScoreThisQst) != 1)
|
||||
if (sscanf (row[9],"%lf",&TotalScoreThisQst) != 1)
|
||||
Lay_ShowErrorAndExit ("Wrong score of a question.");
|
||||
setlocale (LC_NUMERIC,"es_ES.utf8"); // Return to spanish system (TODO: this should be internationalized!!!!!!!)
|
||||
|
||||
|
@ -6770,10 +6795,11 @@ static void Tst_ShowExamTstResult (time_t TstTimeUTC)
|
|||
row[2] AnsType
|
||||
row[3] Shuffle
|
||||
row[4] Stem
|
||||
row[5] Feedback
|
||||
row[6] NumHits
|
||||
row[7] NumHitsNotBlank
|
||||
row[8] Score
|
||||
row[5] Image
|
||||
row[6] Feedback
|
||||
row[7] NumHits
|
||||
row[8] NumHitsNotBlank
|
||||
row[9] Score
|
||||
*/
|
||||
/***** If this question has been edited later than test exam time ==> don't show question ****/
|
||||
EditTimeUTC = Dat_GetUNIXTimeFromStr (row[1]);
|
||||
|
|
Loading…
Reference in New Issue