diff --git a/swad_changelog.h b/swad_changelog.h index dd69a9420..23723fe9b 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -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) diff --git a/swad_global.h b/swad_global.h index 09d536ecc..ad0d7f942 100644 --- a/swad_global.h +++ b/swad_global.h @@ -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]; diff --git a/swad_image.c b/swad_image.c index 93f6077cf..41fa4fb66 100644 --- a/swad_image.c +++ b/swad_image.c @@ -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) diff --git a/swad_image.h b/swad_image.h index 1cbe841e2..1070bdadc 100644 --- a/swad_image.h +++ b/swad_image.h @@ -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); diff --git a/swad_test.c b/swad_test.c index a26d9d182..0f8aa9c1e 100644 --- a/swad_test.c +++ b/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_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,"" "" @@ -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,"" + fprintf (Gbl.F.Out,"" "" "%s" "", - 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,"", - Img_ACTION_CHANGE_IMAGE); + UniqueId++; + fprintf (Gbl.F.Out,"", + UniqueId,ParamRadio,Img_ACTION_CHANGE_IMAGE); fprintf (Gbl.F.Out,"" "%s: " "", 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,"", - 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,"" "" "" @@ -4329,26 +4338,14 @@ static void Tst_PutFormEditOneQst (char *Stem,char *Feedback) "" "" "%s" - "" - "" - "", + "", The_ClassForm[Gbl.Prefs.Theme], Txt_Stem, Stem); - - /***** Image *****/ - fprintf (Gbl.F.Out,"" - "" - "" - "%s:" - "" - "" - "", - 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,"" - ""); + ""); /***** Feedback *****/ fprintf (Gbl.F.Out,"" @@ -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,"" - "" + "" "" "" ""); + + /* Image */ + fprintf (Gbl.F.Out,"" + ""); + 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,"" + ""); } fprintf (Gbl.F.Out,"" "" @@ -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)