mirror of
https://github.com/acanas/swad-core.git
synced 2024-05-29 04:53:26 +02:00
Version 15.175.11
This commit is contained in:
parent
05e595c639
commit
4354030acb
|
@ -139,13 +139,15 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 15.175.10 (2016-04-04)"
|
#define Log_PLATFORM_VERSION "SWAD 15.175.11 (2016-04-04)"
|
||||||
#define CSS_FILE "swad15.175.10.css"
|
#define CSS_FILE "swad15.175.10.css"
|
||||||
#define JS_FILE "swad15.131.3.js"
|
#define JS_FILE "swad15.131.3.js"
|
||||||
|
|
||||||
// Number of lines (includes comments but not blank lines) has been got with the following command:
|
// 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
|
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
|
||||||
/*
|
/*
|
||||||
|
Version 15.175.11:Apr 04, 2016 Code refactoring related to image associated to a test question.
|
||||||
|
Forms to edit image in every unique/multiple answer. (197968 lines)
|
||||||
Version 15.175.10:Apr 04, 2016 Changes in CSS. (197955 lines)
|
Version 15.175.10:Apr 04, 2016 Changes in CSS. (197955 lines)
|
||||||
Version 15.175.9: Apr 04, 2016 Fixed bug in edition of a test question. (197953 lines)
|
Version 15.175.9: Apr 04, 2016 Fixed bug in edition of a test question. (197953 lines)
|
||||||
Version 15.175.8: Apr 04, 2016 Code refactoring related to receiving and processing image file. (197945 lines)
|
Version 15.175.8: Apr 04, 2016 Code refactoring related to receiving and processing image file. (197945 lines)
|
||||||
|
|
|
@ -670,6 +670,7 @@ struct Globals
|
||||||
bool Correct;
|
bool Correct;
|
||||||
char *Text;
|
char *Text;
|
||||||
char *Feedback;
|
char *Feedback;
|
||||||
|
char Image[Cry_LENGTH_ENCRYPTED_STR_SHA256_BASE64+1];
|
||||||
} Options[Tst_MAX_OPTIONS_PER_QUESTION];
|
} Options[Tst_MAX_OPTIONS_PER_QUESTION];
|
||||||
long Integer;
|
long Integer;
|
||||||
double FloatingPoint[2];
|
double FloatingPoint[2];
|
||||||
|
|
|
@ -71,12 +71,12 @@ static void Img_ProcessImage (const char *FileNameImgOriginal,
|
||||||
/************************* Get image action from form ************************/
|
/************************* Get image action from form ************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
Img_Action_t Img_GetImageActionFromForm (void)
|
Img_Action_t Img_GetImageActionFromForm (const char *ParamRadio)
|
||||||
{
|
{
|
||||||
char UnsignedStr[10+1];
|
char UnsignedStr[10+1];
|
||||||
unsigned UnsignedNum;
|
unsigned UnsignedNum;
|
||||||
|
|
||||||
Par_GetParToText ("ImgAct",UnsignedStr,10);
|
Par_GetParToText (ParamRadio,UnsignedStr,10);
|
||||||
if (sscanf (UnsignedStr,"%u",&UnsignedNum) != 1)
|
if (sscanf (UnsignedStr,"%u",&UnsignedNum) != 1)
|
||||||
Lay_ShowErrorAndExit ("Wrong action to perform on image.");
|
Lay_ShowErrorAndExit ("Wrong action to perform on image.");
|
||||||
if (UnsignedNum >= Img_NUM_ACTIONS)
|
if (UnsignedNum >= Img_NUM_ACTIONS)
|
||||||
|
|
|
@ -80,7 +80,7 @@ typedef enum
|
||||||
/***************************** Public prototypes *****************************/
|
/***************************** Public prototypes *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
Img_Action_t Img_GetImageActionFromForm (void);
|
Img_Action_t Img_GetImageActionFromForm (const char *ParamRadio);
|
||||||
void Img_GetAndProcessImageFromForm (unsigned Width,unsigned Height,unsigned Quality);
|
void Img_GetAndProcessImageFromForm (unsigned Width,unsigned Height,unsigned Quality);
|
||||||
|
|
||||||
void Img_MoveImageToDefinitiveDirectory (void);
|
void Img_MoveImageToDefinitiveDirectory (void);
|
||||||
|
|
84
swad_test.c
84
swad_test.c
|
@ -155,7 +155,9 @@ static void Tst_ShowTestQuestionsWhenSeeing (MYSQL_RES *mysql_res);
|
||||||
static void Tst_ShowTstResultAfterAssess (long TstCod,unsigned *NumQstsNotBlank,double *TotalScore);
|
static void Tst_ShowTstResultAfterAssess (long TstCod,unsigned *NumQstsNotBlank,double *TotalScore);
|
||||||
static void Tst_WriteQstAndAnsExam (unsigned NumQst,long QstCod,MYSQL_ROW row,
|
static void Tst_WriteQstAndAnsExam (unsigned NumQst,long QstCod,MYSQL_ROW row,
|
||||||
double *ScoreThisQst,bool *AnswerIsNotBlank);
|
double *ScoreThisQst,bool *AnswerIsNotBlank);
|
||||||
static void Tst_PutFormToEditQstImage (void);
|
static void Tst_PutFormToEditQstImage (const char *ImageName,
|
||||||
|
const char *ParamRadio,
|
||||||
|
const char *ParamFile);
|
||||||
static void Tst_UpdateScoreQst (long QstCod,float ScoreThisQst,bool AnswerIsNotBlank);
|
static void Tst_UpdateScoreQst (long QstCod,float ScoreThisQst,bool AnswerIsNotBlank);
|
||||||
static void Tst_UpdateMyNumAccessTst (unsigned NumAccessesTst);
|
static void Tst_UpdateMyNumAccessTst (unsigned NumAccessesTst);
|
||||||
static void Tst_UpdateLastAccTst (void);
|
static void Tst_UpdateLastAccTst (void);
|
||||||
|
@ -1027,18 +1029,21 @@ void Tst_WriteQstStem (const char *Stem,const char *ClassStem)
|
||||||
/************* Put form to upload a new image for a test question ************/
|
/************* Put form to upload a new image for a test question ************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Tst_PutFormToEditQstImage (void)
|
static void Tst_PutFormToEditQstImage (const char *ImageName,
|
||||||
|
const char *ParamRadio,
|
||||||
|
const char *ParamFile)
|
||||||
{
|
{
|
||||||
extern const char *The_ClassForm[The_NUM_THEMES];
|
extern const char *The_ClassForm[The_NUM_THEMES];
|
||||||
extern const char *Txt_No_image;
|
extern const char *Txt_No_image;
|
||||||
extern const char *Txt_Current_image;
|
extern const char *Txt_Current_image;
|
||||||
extern const char *Txt_Change_image;
|
extern const char *Txt_Change_image;
|
||||||
extern const char *Txt_New_image;
|
extern const char *Txt_New_image;
|
||||||
|
static unsigned UniqueId = 0;
|
||||||
|
|
||||||
/***** No image *****/
|
/***** No image *****/
|
||||||
fprintf (Gbl.F.Out,"<input type=\"radio\" name=\"ImgAct\" value=\"%u\"",
|
fprintf (Gbl.F.Out,"<input type=\"radio\" name=\"%s\" value=\"%u\"",
|
||||||
Img_ACTION_NO_IMAGE);
|
ParamRadio,Img_ACTION_NO_IMAGE);
|
||||||
if (!Gbl.Test.Image[0])
|
if (!ImageName[0])
|
||||||
fprintf (Gbl.F.Out," checked=\"checked\"");
|
fprintf (Gbl.F.Out," checked=\"checked\"");
|
||||||
fprintf (Gbl.F.Out," />"
|
fprintf (Gbl.F.Out," />"
|
||||||
"<label class=\"%s\">"
|
"<label class=\"%s\">"
|
||||||
|
@ -1048,31 +1053,34 @@ static void Tst_PutFormToEditQstImage (void)
|
||||||
Txt_No_image);
|
Txt_No_image);
|
||||||
|
|
||||||
/***** Current image *****/
|
/***** Current image *****/
|
||||||
if (Gbl.Test.Image[0])
|
if (ImageName[0])
|
||||||
{
|
{
|
||||||
fprintf (Gbl.F.Out,"<input type=\"radio\" name=\"ImgAct\" value=\"%u\" checked=\"checked\" />"
|
fprintf (Gbl.F.Out,"<input type=\"radio\" name=\"%s\" value=\"%u\" checked=\"checked\" />"
|
||||||
"<label class=\"%s\">"
|
"<label class=\"%s\">"
|
||||||
"%s"
|
"%s"
|
||||||
"</label><br />",
|
"</label><br />",
|
||||||
Img_ACTION_KEEP_IMAGE,
|
ParamRadio,Img_ACTION_KEEP_IMAGE,
|
||||||
The_ClassForm[Gbl.Prefs.Theme],
|
The_ClassForm[Gbl.Prefs.Theme],
|
||||||
Txt_Current_image);
|
Txt_Current_image);
|
||||||
Img_ShowImage (Gbl.Test.Image,"TEST_IMG_EDIT_ONE");
|
Img_ShowImage (ImageName,"TEST_IMG_EDIT_ONE");
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** New image *****/
|
/***** New image *****/
|
||||||
fprintf (Gbl.F.Out,"<input id=\"change_image\" type=\"radio\" name=\"ImgAct\" value=\"%u\">",
|
UniqueId++;
|
||||||
Img_ACTION_CHANGE_IMAGE);
|
fprintf (Gbl.F.Out,"<input type=\"radio\" id=\"chg_img_%u\" name=\"%s\""
|
||||||
|
" value=\"%u\">",
|
||||||
|
UniqueId,ParamRadio,Img_ACTION_CHANGE_IMAGE);
|
||||||
fprintf (Gbl.F.Out,"<label class=\"%s\">"
|
fprintf (Gbl.F.Out,"<label class=\"%s\">"
|
||||||
"%s: "
|
"%s: "
|
||||||
"</label>",
|
"</label>",
|
||||||
The_ClassForm[Gbl.Prefs.Theme],
|
The_ClassForm[Gbl.Prefs.Theme],
|
||||||
Gbl.Test.Image[0] ? Txt_Change_image :
|
ImageName[0] ? Txt_Change_image :
|
||||||
Txt_New_image);
|
Txt_New_image);
|
||||||
fprintf (Gbl.F.Out,"<input type=\"file\" name=\"%s\""
|
fprintf (Gbl.F.Out,"<input type=\"file\" name=\"%s\""
|
||||||
" size=\"40\" maxlength=\"100\" value=\"\""
|
" size=\"40\" maxlength=\"100\" value=\"\""
|
||||||
" onchange=\"document.getElementById('change_image').checked = true;\" />",
|
" onchange=\"document.getElementById('chg_img_%u').checked = true;\" />",
|
||||||
Fil_NAME_OF_PARAM_FILENAME_ORG);
|
ParamFile,
|
||||||
|
UniqueId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -4199,7 +4207,6 @@ static void Tst_PutFormEditOneQst (char *Stem,char *Feedback)
|
||||||
extern const char *Txt_Tags;
|
extern const char *Txt_Tags;
|
||||||
extern const char *Txt_new_tag;
|
extern const char *Txt_new_tag;
|
||||||
extern const char *Txt_Stem;
|
extern const char *Txt_Stem;
|
||||||
extern const char *Txt_Image;
|
|
||||||
extern const char *Txt_Feedback;
|
extern const char *Txt_Feedback;
|
||||||
extern const char *Txt_Type;
|
extern const char *Txt_Type;
|
||||||
extern const char *Txt_TST_STR_ANSWER_TYPES[Tst_NUM_ANS_TYPES];
|
extern const char *Txt_TST_STR_ANSWER_TYPES[Tst_NUM_ANS_TYPES];
|
||||||
|
@ -4222,6 +4229,8 @@ static void Tst_PutFormEditOneQst (char *Stem,char *Feedback)
|
||||||
unsigned NumTag;
|
unsigned NumTag;
|
||||||
bool TagNotFound;
|
bool TagNotFound;
|
||||||
bool OptionsDisabled;
|
bool OptionsDisabled;
|
||||||
|
char ParamRadio[32];
|
||||||
|
char ParamFile[32];
|
||||||
|
|
||||||
/***** If no receiving the question, but editing a new or existing question
|
/***** If no receiving the question, but editing a new or existing question
|
||||||
==> init or edit data of question *****/
|
==> init or edit data of question *****/
|
||||||
|
@ -4319,7 +4328,7 @@ static void Tst_PutFormEditOneQst (char *Stem,char *Feedback)
|
||||||
/* Free structure that stores the query result */
|
/* Free structure that stores the query result */
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
DB_FreeMySQLResult (&mysql_res);
|
||||||
|
|
||||||
/***** Stem *****/
|
/***** Stem and image *****/
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
"<td class=\"RIGHT_TOP\">"
|
"<td class=\"RIGHT_TOP\">"
|
||||||
"<label class=\"%s\">"
|
"<label class=\"%s\">"
|
||||||
|
@ -4329,26 +4338,14 @@ static void Tst_PutFormEditOneQst (char *Stem,char *Feedback)
|
||||||
"<td class=\"LEFT_TOP\">"
|
"<td class=\"LEFT_TOP\">"
|
||||||
"<textarea name=\"Stem\" class=\"STEM\" rows=\"5\">"
|
"<textarea name=\"Stem\" class=\"STEM\" rows=\"5\">"
|
||||||
"%s"
|
"%s"
|
||||||
"</textarea>"
|
"</textarea><br />",
|
||||||
"</td>"
|
|
||||||
"</tr>",
|
|
||||||
The_ClassForm[Gbl.Prefs.Theme],
|
The_ClassForm[Gbl.Prefs.Theme],
|
||||||
Txt_Stem,
|
Txt_Stem,
|
||||||
Stem);
|
Stem);
|
||||||
|
Tst_PutFormToEditQstImage (Gbl.Test.Image,
|
||||||
/***** Image *****/
|
"ImgAct",Fil_NAME_OF_PARAM_FILENAME_ORG);
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
|
||||||
"<td class=\"RIGHT_TOP\">"
|
|
||||||
"<label class=\"%s\">"
|
|
||||||
"%s:"
|
|
||||||
"</label>"
|
|
||||||
"</td>"
|
|
||||||
"<td class=\"LEFT_TOP\">",
|
|
||||||
The_ClassForm[Gbl.Prefs.Theme],
|
|
||||||
Txt_Image);
|
|
||||||
Tst_PutFormToEditQstImage ();
|
|
||||||
fprintf (Gbl.F.Out,"</td>"
|
fprintf (Gbl.F.Out,"</td>"
|
||||||
"</tr>");
|
"</tr>");
|
||||||
|
|
||||||
/***** Feedback *****/
|
/***** Feedback *****/
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
|
@ -4500,7 +4497,7 @@ static void Tst_PutFormEditOneQst (char *Stem,char *Feedback)
|
||||||
{
|
{
|
||||||
/* Selectors and label with the letter of the answer */
|
/* Selectors and label with the letter of the answer */
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
"<td class=\"%s LEFT_TOP\">"
|
"<td rowspan=\"2\" class=\"%s LEFT_TOP\">"
|
||||||
"<input type=\"radio\" name=\"AnsUni\" value=\"%u\"",
|
"<input type=\"radio\" name=\"AnsUni\" value=\"%u\"",
|
||||||
The_ClassForm[Gbl.Prefs.Theme],
|
The_ClassForm[Gbl.Prefs.Theme],
|
||||||
NumOpt);
|
NumOpt);
|
||||||
|
@ -4543,6 +4540,17 @@ static void Tst_PutFormEditOneQst (char *Stem,char *Feedback)
|
||||||
fprintf (Gbl.F.Out,"</textarea>"
|
fprintf (Gbl.F.Out,"</textarea>"
|
||||||
"</td>"
|
"</td>"
|
||||||
"</tr>");
|
"</tr>");
|
||||||
|
|
||||||
|
/* Image */
|
||||||
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
|
"<td colspan=\"2\" class=\"LEFT_TOP\">");
|
||||||
|
sprintf (ParamRadio,"ImgAct%u",NumOpt);
|
||||||
|
sprintf (ParamFile,"FileImg%u",NumOpt);
|
||||||
|
Tst_PutFormToEditQstImage (Gbl.Test.Answer.Options[NumOpt].Image,ParamRadio,ParamFile);
|
||||||
|
// if (OptionsDisabled)
|
||||||
|
// fprintf (Gbl.F.Out," disabled=\"disabled\"");
|
||||||
|
fprintf (Gbl.F.Out,"</td>"
|
||||||
|
"</tr>");
|
||||||
}
|
}
|
||||||
fprintf (Gbl.F.Out,"</table>"
|
fprintf (Gbl.F.Out,"</table>"
|
||||||
"</td>"
|
"</td>"
|
||||||
|
@ -4590,8 +4598,10 @@ void Tst_InitQst (void)
|
||||||
NumOpt < Tst_MAX_OPTIONS_PER_QUESTION;
|
NumOpt < Tst_MAX_OPTIONS_PER_QUESTION;
|
||||||
NumOpt++)
|
NumOpt++)
|
||||||
{
|
{
|
||||||
Gbl.Test.Answer.Options[NumOpt].Correct = false;
|
Gbl.Test.Answer.Options[NumOpt].Correct = false;
|
||||||
Gbl.Test.Answer.Options[NumOpt].Text = NULL;
|
Gbl.Test.Answer.Options[NumOpt].Text = NULL;
|
||||||
|
Gbl.Test.Answer.Options[NumOpt].Feedback = NULL;
|
||||||
|
Gbl.Test.Answer.Options[NumOpt].Image[0] = '\0';
|
||||||
}
|
}
|
||||||
Gbl.Test.Answer.Integer = 0;
|
Gbl.Test.Answer.Integer = 0;
|
||||||
Gbl.Test.Answer.FloatingPoint[0] =
|
Gbl.Test.Answer.FloatingPoint[0] =
|
||||||
|
@ -4893,7 +4903,7 @@ static void Tst_GetQstFromForm (char *Stem,char *Feedback)
|
||||||
Par_GetParToHTML ("Feedback",Feedback,Cns_MAX_BYTES_TEXT);
|
Par_GetParToHTML ("Feedback",Feedback,Cns_MAX_BYTES_TEXT);
|
||||||
|
|
||||||
/***** Get type of image *****/
|
/***** Get type of image *****/
|
||||||
Gbl.Image.Action = Img_GetImageActionFromForm ();
|
Gbl.Image.Action = Img_GetImageActionFromForm ("ImgAct");
|
||||||
switch (Gbl.Image.Action)
|
switch (Gbl.Image.Action)
|
||||||
{
|
{
|
||||||
case Img_ACTION_NO_IMAGE: // Do not use image (remove current image if exists)
|
case Img_ACTION_NO_IMAGE: // Do not use image (remove current image if exists)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user