Version 15.175.11

This commit is contained in:
Antonio Cañas Vargas 2016-04-04 10:11:05 +02:00
parent 05e595c639
commit 4354030acb
5 changed files with 54 additions and 41 deletions

View File

@ -139,13 +139,15 @@
/****************************** 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 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.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.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)

View File

@ -670,6 +670,7 @@ struct Globals
bool Correct;
char *Text;
char *Feedback;
char Image[Cry_LENGTH_ENCRYPTED_STR_SHA256_BASE64+1];
} Options[Tst_MAX_OPTIONS_PER_QUESTION];
long Integer;
double FloatingPoint[2];

View File

@ -71,12 +71,12 @@ static void Img_ProcessImage (const char *FileNameImgOriginal,
/************************* Get image action from form ************************/
/*****************************************************************************/
Img_Action_t Img_GetImageActionFromForm (void)
Img_Action_t Img_GetImageActionFromForm (const char *ParamRadio)
{
char UnsignedStr[10+1];
unsigned UnsignedNum;
Par_GetParToText ("ImgAct",UnsignedStr,10);
Par_GetParToText (ParamRadio,UnsignedStr,10);
if (sscanf (UnsignedStr,"%u",&UnsignedNum) != 1)
Lay_ShowErrorAndExit ("Wrong action to perform on image.");
if (UnsignedNum >= Img_NUM_ACTIONS)

View File

@ -80,7 +80,7 @@ typedef enum
/***************************** 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_MoveImageToDefinitiveDirectory (void);

View File

@ -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_WriteQstAndAnsExam (unsigned NumQst,long QstCod,MYSQL_ROW row,
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_UpdateMyNumAccessTst (unsigned NumAccessesTst);
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 ************/
/*****************************************************************************/
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 *Txt_No_image;
extern const char *Txt_Current_image;
extern const char *Txt_Change_image;
extern const char *Txt_New_image;
static unsigned UniqueId = 0;
/***** No image *****/
fprintf (Gbl.F.Out,"<input type=\"radio\" name=\"ImgAct\" value=\"%u\"",
Img_ACTION_NO_IMAGE);
if (!Gbl.Test.Image[0])
fprintf (Gbl.F.Out,"<input type=\"radio\" name=\"%s\" value=\"%u\"",
ParamRadio,Img_ACTION_NO_IMAGE);
if (!ImageName[0])
fprintf (Gbl.F.Out," checked=\"checked\"");
fprintf (Gbl.F.Out," />"
"<label class=\"%s\">"
@ -1048,31 +1053,34 @@ static void Tst_PutFormToEditQstImage (void)
Txt_No_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\">"
"%s"
"</label><br />",
Img_ACTION_KEEP_IMAGE,
ParamRadio,Img_ACTION_KEEP_IMAGE,
The_ClassForm[Gbl.Prefs.Theme],
Txt_Current_image);
Img_ShowImage (Gbl.Test.Image,"TEST_IMG_EDIT_ONE");
Img_ShowImage (ImageName,"TEST_IMG_EDIT_ONE");
}
/***** New image *****/
fprintf (Gbl.F.Out,"<input id=\"change_image\" type=\"radio\" name=\"ImgAct\" value=\"%u\">",
Img_ACTION_CHANGE_IMAGE);
UniqueId++;
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\">"
"%s: "
"</label>",
The_ClassForm[Gbl.Prefs.Theme],
Gbl.Test.Image[0] ? Txt_Change_image :
Txt_New_image);
ImageName[0] ? Txt_Change_image :
Txt_New_image);
fprintf (Gbl.F.Out,"<input type=\"file\" name=\"%s\""
" size=\"40\" maxlength=\"100\" value=\"\""
" onchange=\"document.getElementById('change_image').checked = true;\" />",
Fil_NAME_OF_PARAM_FILENAME_ORG);
" onchange=\"document.getElementById('chg_img_%u').checked = true;\" />",
ParamFile,
UniqueId);
}
/*****************************************************************************/
@ -4199,7 +4207,6 @@ static void Tst_PutFormEditOneQst (char *Stem,char *Feedback)
extern const char *Txt_Tags;
extern const char *Txt_new_tag;
extern const char *Txt_Stem;
extern const char *Txt_Image;
extern const char *Txt_Feedback;
extern const char *Txt_Type;
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;
bool TagNotFound;
bool OptionsDisabled;
char ParamRadio[32];
char ParamFile[32];
/***** If no receiving the question, but editing a new or existing 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 */
DB_FreeMySQLResult (&mysql_res);
/***** Stem *****/
/***** Stem and image *****/
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"RIGHT_TOP\">"
"<label class=\"%s\">"
@ -4329,26 +4338,14 @@ static void Tst_PutFormEditOneQst (char *Stem,char *Feedback)
"<td class=\"LEFT_TOP\">"
"<textarea name=\"Stem\" class=\"STEM\" rows=\"5\">"
"%s"
"</textarea>"
"</td>"
"</tr>",
"</textarea><br />",
The_ClassForm[Gbl.Prefs.Theme],
Txt_Stem,
Stem);
/***** Image *****/
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 ();
Tst_PutFormToEditQstImage (Gbl.Test.Image,
"ImgAct",Fil_NAME_OF_PARAM_FILENAME_ORG);
fprintf (Gbl.F.Out,"</td>"
"</tr>");
"</tr>");
/***** Feedback *****/
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 */
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s LEFT_TOP\">"
"<td rowspan=\"2\" class=\"%s LEFT_TOP\">"
"<input type=\"radio\" name=\"AnsUni\" value=\"%u\"",
The_ClassForm[Gbl.Prefs.Theme],
NumOpt);
@ -4543,6 +4540,17 @@ static void Tst_PutFormEditOneQst (char *Stem,char *Feedback)
fprintf (Gbl.F.Out,"</textarea>"
"</td>"
"</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>"
"</td>"
@ -4590,8 +4598,10 @@ void Tst_InitQst (void)
NumOpt < Tst_MAX_OPTIONS_PER_QUESTION;
NumOpt++)
{
Gbl.Test.Answer.Options[NumOpt].Correct = false;
Gbl.Test.Answer.Options[NumOpt].Text = NULL;
Gbl.Test.Answer.Options[NumOpt].Correct = false;
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.FloatingPoint[0] =
@ -4893,7 +4903,7 @@ static void Tst_GetQstFromForm (char *Stem,char *Feedback)
Par_GetParToHTML ("Feedback",Feedback,Cns_MAX_BYTES_TEXT);
/***** Get type of image *****/
Gbl.Image.Action = Img_GetImageActionFromForm ();
Gbl.Image.Action = Img_GetImageActionFromForm ("ImgAct");
switch (Gbl.Image.Action)
{
case Img_ACTION_NO_IMAGE: // Do not use image (remove current image if exists)