From 88c1e2ee24c0d9dbabbd210229f4d5a1a6b8a8c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Sun, 3 Mar 2019 12:27:29 +0100 Subject: [PATCH] Version 18.63.1 --- swad_changelog.h | 5 +- swad_forum.c | 12 +++-- swad_game.c | 12 ++--- swad_media.c | 48 ++++++++++-------- swad_media.h | 10 ++-- swad_message.c | 16 +++--- swad_social.c | 21 ++++---- swad_test.c | 128 ++++++++++++++++++++++------------------------- swad_text.c | 30 +++++++++++ 9 files changed, 161 insertions(+), 121 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index f6e42bcf0..17395452e 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -411,6 +411,8 @@ Antonio // TODO: Chequear "Imagen no encontrada" en timeline. Mensaje de Víctor González Argudo +// TODO: Comprobar "Error when getting publishing code from session." tras horas de inactividad. + /*****************************************************************************/ /****************************** Public constants *****************************/ /*****************************************************************************/ @@ -430,10 +432,11 @@ En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 18.63 (2019-03-02)" +#define Log_PLATFORM_VERSION "SWAD 18.63.1 (2019-03-03)" #define CSS_FILE "swad18.61.css" #define JS_FILE "swad18.62.js" /* + Version 18.63.1: Mar 02, 2019 Allowing animated GIFs. Not finished. (238162 lines) Version 18.63: Mar 02, 2019 Allowing animated GIFs. Not finished. (238125 lines) Rename the following directory: sudo mv /var/www/swad/img /var/www/swad/med diff --git a/swad_forum.c b/swad_forum.c index dc508d697..29fb530d6 100644 --- a/swad_forum.c +++ b/swad_forum.c @@ -511,13 +511,16 @@ static long For_InsertForumPst (long ThrCod,long UsrCod, DB_QueryINSERTandReturnCode ("can not create a new post in a forum", "INSERT INTO forum_post" " (ThrCod,UsrCod,CreatTime,ModifTime,NumNotif," - "Subject,Content,MediaName,MediaTitle,MediaURL)" + "Subject,Content," + "MediaName,MediaType,MediaTitle,MediaURL)" " VALUES" " (%ld,%ld,NOW(),NOW(),0," - "'%s','%s','%s','%s','%s')", + "'%s','%s'," + "'%s','%s','%s','%s')", ThrCod,UsrCod, Subject,Content, Media->Name, + Med_GetStringTypeForDB (Media->Type), Media->Title ? Media->Title : "", Media->URL ? Media->URL : ""); @@ -1369,9 +1372,8 @@ static void For_GetPstData (long PstCod,long *UsrCod,time_t *CreatTimeUTC, Str_Copy (Content,row[3], Cns_MAX_BYTES_LONG_TEXT); - /****** Get media name (row[4]), type (row[5]), - title (row[6]) and URL (row[7]) *****/ - Med_GetMediaNameTitleAndURLFromRow (row[4],row[5],row[6],row[7],Media); + /****** Get media data (row[4], row[5], row[6], row[7]) *****/ + Med_GetMediaDataFromRow (row[4],row[5],row[6],row[7],Media); /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); diff --git a/swad_game.c b/swad_game.c index b628a6db4..3771613ae 100644 --- a/swad_game.c +++ b/swad_game.c @@ -2923,13 +2923,12 @@ static void Gam_ListOneOrMoreQuestionsForEdition (struct Game *Game, Tst_GetAndWriteTagsQst (Gbl.Test.QstCod); fprintf (Gbl.F.Out,""); - /* Write the stem (row[2]), the image (row[4], row[5], row[6], row[7]), - the feedback (row[3]) and the answers */ + /* Write stem (row[2]), media data (row[4], row[5], row[6], row[7]), + feedback (row[3]) and answers */ fprintf (Gbl.F.Out,"", Gbl.RowEvenOdd); Tst_WriteQstStem (row[2],"TEST_EDI"); - Med_GetMediaNameTitleAndURLFromRow (row[4],row[5],row[6],row[7], - &Gbl.Test.Media); + Med_GetMediaDataFromRow (row[4],row[5],row[6],row[7],&Gbl.Test.Media); Med_ShowMedia (&Gbl.Test.Media, "TEST_IMG_EDIT_LIST_STEM_CONTAINER", "TEST_IMG_EDIT_LIST_STEM"); @@ -3554,10 +3553,9 @@ static void Gam_PlayGameShowQuestionAndAnswers (bool ShowAnswers) fprintf (Gbl.F.Out,"
"); - /* Write the stem (row[2]) and the image (row[3], row[4], row[5], row[6]) */ + /* Write stem (row[2]) and media data (row[3], row[4], row[5], row[6]) */ Tst_WriteQstStem (row[2],"GAM_PLAY_QST"); - Med_GetMediaNameTitleAndURLFromRow (row[3],row[4],row[5],row[6], - &Gbl.Test.Media); + Med_GetMediaDataFromRow (row[3],row[4],row[5],row[6],&Gbl.Test.Media); Med_ShowMedia (&Gbl.Test.Media, "TEST_IMG_EDIT_LIST_STEM_CONTAINER", "TEST_IMG_EDIT_LIST_STEM"); diff --git a/swad_media.c b/swad_media.c index dccdbb959..d9ad900ba 100644 --- a/swad_media.c +++ b/swad_media.c @@ -56,6 +56,8 @@ const char *Med_StringsTypeDB[Med_NUM_TYPES] = "gif", // Med_GIF }; +#define Med_MAX_SIZE_GIF (5UL * 1024UL * 1024UL) // 5 MiB + /*****************************************************************************/ /****************************** Internal types *******************************/ /*****************************************************************************/ @@ -78,7 +80,7 @@ static Med_Action_t Med_GetMediaActionFromForm (const char *ParamAction); static void Med_GetAndProcessFileFromForm (struct Media *Media, const char *ParamFile); -static int Med_ProcessMedia (struct Media *Media, +static int Med_ConvertImage (struct Media *Media, const char *FileNameOriginal, const char *FileNameProcessed); @@ -152,11 +154,11 @@ void Med_FreeMediaURL (struct Media *Media) /**** Get media name, title and URL from a query result and copy to struct ***/ /*****************************************************************************/ -void Med_GetMediaNameTitleAndURLFromRow (const char *Name, - const char *TypeStr, - const char *Title, - const char *URL, - struct Media *Media) +void Med_GetMediaDataFromRow (const char *Name, + const char *TypeStr, + const char *Title, + const char *URL, + struct Media *Media) { size_t Length; @@ -421,6 +423,7 @@ static void Med_GetAndProcessFileFromForm (struct Media *Media, const char *ParamFile) { extern const char *Txt_The_image_could_not_be_processed_successfully; + extern const char *Txt_The_size_of_the_gif_file_exceeds_the_maximum_allowed_X; struct Param *Param; char FileNameImgSrc[PATH_MAX + 1]; char *PtrExtension; @@ -430,6 +433,7 @@ static void Med_GetAndProcessFileFromForm (struct Media *Media, char FileNameOrig[PATH_MAX + 1]; // Full name of original uploaded file char FileNameTmp[PATH_MAX + 1]; // Full name of temporary processed file struct stat FileStatus; + char FileSizeStr[Fil_MAX_BYTES_FILE_SIZE_STRING + 1]; bool WrongType = false; /***** Set media file status *****/ @@ -502,18 +506,18 @@ static void Med_GetAndProcessFileFromForm (struct Media *Media, switch (Media->Type) { case Med_JPG: - /***** Convert original media to temporary JPEG processed file + /***** Convert original media to temporary JPG processed file by calling to program that makes the conversion *****/ snprintf (FileNameTmp,sizeof (FileNameTmp), "%s/%s/%s/%s.jpg", Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_MEDIA,Cfg_FOLDER_IMG_TMP, Media->Name); - if (Med_ProcessMedia (Media,FileNameOrig,FileNameTmp) == 0) // Return 0 on success + if (Med_ConvertImage (Media,FileNameOrig,FileNameTmp) == 0) // On success ==> 0 is returned /* Success */ Media->Status = Med_FILE_PROCESSED; else // Error processing media { - /* Error ==> remove temporary destination media file */ + /* Remove temporary destination media file */ if (Fil_CheckIfPathExists (FileNameTmp)) unlink (FileNameTmp); @@ -526,15 +530,10 @@ static void Med_GetAndProcessFileFromForm (struct Media *Media, break; case Med_GIF: /***** Check size of media file *****/ - if (lstat (FileNameOrig,&FileStatus)) // On success ==> 0 is returned + if (lstat (FileNameOrig,&FileStatus) == 0) // On success ==> 0 is returned { - // Error on lstat - /* Show error alert */ - Ale_ShowAlert (Ale_ERROR,"Can not check gif file."); - } - else - { - if (FileStatus.st_size <= 5*1024*1024) + /* Success */ + if (FileStatus.st_size <= (__off_t) Med_MAX_SIZE_GIF) { /***** Move original file to temporary file *****/ snprintf (FileNameTmp,sizeof (FileNameTmp), @@ -542,13 +541,20 @@ static void Med_GetAndProcessFileFromForm (struct Media *Media, Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_MEDIA,Cfg_FOLDER_IMG_TMP, Media->Name); if (rename (FileNameOrig,FileNameTmp)) // Fail - Ale_ShowAlert (Ale_ERROR,"No se puede cambiar el nombre..."); // TODO: Need translation!!!! + Ale_ShowAlert (Ale_ERROR,"Can not change file name."); else // Success Media->Status = Med_FILE_PROCESSED; } - else - Ale_ShowAlert (Ale_WARNING,"El tamaño del archivo excede el límite..."); // TODO: Need translation!!!! + else // Size exceeded + { + Fil_WriteFileSizeBrief ((double) Med_MAX_SIZE_GIF,FileSizeStr); + Ale_ShowAlert (Ale_WARNING,Txt_The_size_of_the_gif_file_exceeds_the_maximum_allowed_X, + FileSizeStr); + } } + else // Error getting file data + /* Show error alert */ + Ale_ShowAlert (Ale_ERROR,"Can not get file size."); /***** Remove temporary original file *****/ unlink (FileNameOrig); @@ -565,7 +571,7 @@ static void Med_GetAndProcessFileFromForm (struct Media *Media, // Return 0 on success // Return != 0 on error -static int Med_ProcessMedia (struct Media *Media, +static int Med_ConvertImage (struct Media *Media, const char *FileNameOriginal, const char *FileNameProcessed) { diff --git a/swad_media.h b/swad_media.h index 9eb383968..307f4ddb5 100644 --- a/swad_media.h +++ b/swad_media.h @@ -133,11 +133,11 @@ void Med_MediaDestructor (struct Media *Media); void Med_FreeMediaTitle (struct Media *Media); void Med_FreeMediaURL (struct Media *Media); -void Med_GetMediaNameTitleAndURLFromRow (const char *Name, - const char *TypeStr, - const char *Title, - const char *URL, - struct Media *Media); +void Med_GetMediaDataFromRow (const char *Name, + const char *TypeStr, + const char *Title, + const char *URL, + struct Media *Media); void Med_PutMediaUploader (int NumMediaInForm,const char *ClassMediaTitURL); void Med_GetMediaFromForm (int NumMediaInForm,struct Media *Media, diff --git a/swad_message.c b/swad_message.c index 37c1716f5..d3f636f10 100644 --- a/swad_message.c +++ b/swad_message.c @@ -1291,9 +1291,11 @@ static long Msg_InsertNewMsg (const char *Subject,const char *Content, MsgCod = DB_QueryINSERTandReturnCode ("can not create message", "INSERT INTO msg_content" - " (Subject,Content,MediaName,MediaType,MediaTitle,MediaURL)" + " (Subject,Content," + "MediaName,MediaType,MediaTitle,MediaURL)" " VALUES" - " ('%s','%s','%s','%s','%s','%s')", + " ('%s','%s'," + "'%s','%s','%s','%s')", Subject,Content, Media->Name, Med_GetStringTypeForDB (Media->Type), @@ -1491,8 +1493,10 @@ static void Msg_MoveMsgContentToDeleted (long MsgCod) /* Insert message content into msg_content_deleted */ DB_QueryINSERT ("can not remove the content of a message", "INSERT IGNORE INTO msg_content_deleted" - " (MsgCod,Subject,Content,MediaName,MediaType,MediaTitle,MediaURL)" - " SELECT MsgCod,Subject,Content,MediaName,MediaType,MediaTitle,MediaURL" + " (MsgCod,Subject,Content," + "MediaName,MediaType,MediaTitle,MediaURL)" + " SELECT MsgCod,Subject,Content," + "MediaName,MediaType,MediaTitle,MediaURL" " FROM msg_content WHERE MsgCod=%ld", MsgCod); @@ -2802,8 +2806,8 @@ static void Msg_GetMsgContent (long MsgCod,char Content[Cns_MAX_BYTES_LONG_TEXT Str_Copy (Content,row[0], Cns_MAX_BYTES_LONG_TEXT); - /****** Get image name (row[1]), type (row[2]), title (row[3]) and URL (row[4]) *****/ - Med_GetMediaNameTitleAndURLFromRow (row[1],row[2],row[3],row[4],Media); + /****** Get media data (row[1], row[2], row[3], row[4]) *****/ + Med_GetMediaDataFromRow (row[1],row[2],row[3],row[4],Media); /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); diff --git a/swad_social.c b/swad_social.c index 186d20191..65c95a40f 100644 --- a/swad_social.c +++ b/swad_social.c @@ -1833,8 +1833,8 @@ static void Soc_GetAndWriteSocialPost (long PstCod) Str_Copy (Content,row[0], Cns_MAX_BYTES_LONG_TEXT); - /****** Get image name (row[1]), type (row[2]), title (row[3]) and URL (row[4]) *****/ - Med_GetMediaNameTitleAndURLFromRow (row[1],row[2],row[3],row[4],&Media); + /****** Get media data (row[1], row[2], row[3], row[4]) *****/ + Med_GetMediaDataFromRow (row[1],row[2],row[3],row[4],&Media); } else Content[0] = '\0'; @@ -2470,9 +2470,11 @@ static long Soc_ReceiveSocialPost (void) PstCod = DB_QueryINSERTandReturnCode ("can not create post", "INSERT INTO social_posts" - " (Content,MediaName,MediaType,MediaTitle,MediaURL)" + " (Content," + "MediaName,MediaType,MediaTitle,MediaURL)" " VALUES" - " ('%s','%s','%s','%s','%s')", + " ('%s'," + "'%s','%s','%s','%s')", Content, Media.Name, Med_GetStringTypeForDB (Media.Type), @@ -3201,9 +3203,11 @@ static long Soc_ReceiveComment (void) /* Insert comment content in the database */ DB_QueryINSERT ("can not store comment content", "INSERT INTO social_comments" - " (PubCod,Content,MediaName,MediaType,MediaTitle,MediaURL)" + " (PubCod,Content," + "MediaName,MediaType,MediaTitle,MediaURL)" " VALUES" - " (%ld,'%s','%s','%s','%s','%s')", + " (%ld,'%s'," + "'%s','%s','%s','%s')", SocPub.PubCod, Content, Media.Name, @@ -4826,9 +4830,8 @@ static void Soc_GetDataOfSocialCommentFromRow (MYSQL_ROW row,struct SocialCommen /***** Get number of times this comment has been favourited *****/ Soc_GetNumTimesACommHasBeenFav (SocCom); - /****** Get image name (row[5]), type (row[6]), title (row[7]) and URL (row[8]) *****/ - Med_GetMediaNameTitleAndURLFromRow (row[5],row[6],row[7],row[8], - &SocCom->Media); + /****** Get media data (row[5], row[6], row[7], row[8]) *****/ + Med_GetMediaDataFromRow (row[5],row[6],row[7],row[8],&SocCom->Media); } /*****************************************************************************/ diff --git a/swad_test.c b/swad_test.c index 2a95a8d0c..802931ff8 100644 --- a/swad_test.c +++ b/swad_test.c @@ -1034,13 +1034,12 @@ void Tst_WriteQstAndAnsTest (Tst_ActionToDoWithQuestions_t ActionToDoWithQuestio "", Txt_TST_STR_ANSWER_TYPES[Gbl.Test.AnswerType]); - /***** Write stem (row[4]), media (row[6], row[7], row[8], row[9]), + /***** Write stem (row[4]), media data (row[6], row[7], row[8], row[9]), answers depending on shuffle (row[3]) and feedback (row[5]) *****/ fprintf (Gbl.F.Out,"", Gbl.RowEvenOdd); Tst_WriteQstStem (row[4],"TEST_EXA"); - Med_GetMediaNameTitleAndURLFromRow (row[6],row[7],row[8],row[9], - &Gbl.Test.Media); + Med_GetMediaDataFromRow (row[6],row[7],row[8],row[9],&Gbl.Test.Media); Med_ShowMedia (&Gbl.Test.Media, "TEST_IMG_SHOW_STEM_CONTAINER", "TEST_IMG_SHOW_STEM"); @@ -2987,13 +2986,12 @@ static void Tst_ListOneOrMoreQuestionsForEdition (unsigned long NumRows, } fprintf (Gbl.F.Out,""); - /* Write the stem (row[4]), the media (row[6], row[7], row[8], row[9]), - the feedback (row[5]) and the answers */ + /* Write stem (row[4]), media data (row[6], row[7], row[8], row[9]), + feedback (row[5]) and answers */ fprintf (Gbl.F.Out,"", Gbl.RowEvenOdd); Tst_WriteQstStem (row[4],"TEST_EDI"); - Med_GetMediaNameTitleAndURLFromRow (row[6],row[7],row[8],row[9], - &Gbl.Test.Media); + Med_GetMediaDataFromRow (row[6],row[7],row[8],row[9],&Gbl.Test.Media); Med_ShowMedia (&Gbl.Test.Media, "TEST_IMG_EDIT_LIST_STEM_CONTAINER", "TEST_IMG_EDIT_LIST_STEM"); @@ -3223,13 +3221,12 @@ static void Tst_ListOneOrMoreQuestionsForSelection (long GamCod, fprintf (Gbl.F.Out,""); - /* Write the stem (row[4]), the image (row[6], row[7], row[8], row[9]), - the feedback (row[5]) and the answers */ + /* Write stem (row[4]), media data (row[6], row[7], row[8], row[9]), + feedback (row[5]) and answers */ fprintf (Gbl.F.Out,"", Gbl.RowEvenOdd); Tst_WriteQstStem (row[4],"TEST_EDI"); - Med_GetMediaNameTitleAndURLFromRow (row[6],row[7],row[8],row[9], - &Gbl.Test.Media); + Med_GetMediaDataFromRow (row[6],row[7],row[8],row[9],&Gbl.Test.Media); Med_ShowMedia (&Gbl.Test.Media, "TEST_IMG_EDIT_LIST_STEM_CONTAINER", "TEST_IMG_EDIT_LIST_STEM"); @@ -3320,14 +3317,14 @@ static void Tst_WriteAnswersEdit (long QstCod) Gbl.Test.Answer.NumOptions = Tst_GetAnswersQst (QstCod,&mysql_res,false); /* - row[ 0] AnsInd - row[ 1] Answer - row[ 2] Feedback - row[ 3] MediaName - row[ 4] MediaType - row[ 5] MediaTitle - row[ 6] MediaURL - row[ 7] Correct + row[0] AnsInd + row[1] Answer + row[2] Feedback + row[3] MediaName + row[4] MediaType + row[5] MediaTitle + row[6] MediaURL + row[7] Correct */ /***** Write the answers *****/ switch (Gbl.Test.AnswerType) @@ -3393,9 +3390,9 @@ static void Tst_WriteAnswersEdit (long QstCod) Feedback,LengthFeedback,false); } - /* Copy image */ - Med_GetMediaNameTitleAndURLFromRow (row[3],row[4],row[5],row[6], - &Gbl.Test.Answer.Options[NumOpt].Media); + /* Get media data (row[3], row[4], row[5], row[6]) */ + Med_GetMediaDataFromRow (row[3],row[4],row[5],row[6], + &Gbl.Test.Answer.Options[NumOpt].Media); /* Put an icon that indicates whether the answer is correct or wrong */ fprintf (Gbl.F.Out,"" @@ -3495,14 +3492,14 @@ static void Tst_WriteAnswersTestResult (struct UsrData *UsrDat, /***** Get answers of a question from database *****/ Gbl.Test.Answer.NumOptions = Tst_GetAnswersQst (QstCod,&mysql_res,false); /* - row[ 0] AnsInd - row[ 1] Answer - row[ 2] Feedback - row[ 3] MediaName - row[ 4] MediaType - row[ 5] MediaTitle - row[ 6] MediaURL - row[ 7] Correct + row[0] AnsInd + row[1] Answer + row[2] Feedback + row[3] MediaName + row[4] MediaType + row[5] MediaTitle + row[6] MediaURL + row[7] Correct */ /***** Write answer depending on type *****/ switch (Gbl.Test.AnswerType) @@ -3705,14 +3702,14 @@ static void Tst_WriteChoiceAnsViewTest (unsigned NumQst,long QstCod,bool Shuffle /***** Get answers of a question from database *****/ Gbl.Test.Answer.NumOptions = Tst_GetAnswersQst (QstCod,&mysql_res,Shuffle); /* - row[ 0] AnsInd - row[ 1] Answer - row[ 2] Feedback - row[ 3] MediaName - row[ 4] MediaType - row[ 5] MediaTitle - row[ 6] MediaURL - row[ 7] Correct + row[0] AnsInd + row[1] Answer + row[2] Feedback + row[3] MediaName + row[4] MediaType + row[5] MediaTitle + row[6] MediaURL + row[7] Correct */ /***** Start table *****/ @@ -3749,9 +3746,9 @@ static void Tst_WriteChoiceAnsViewTest (unsigned NumQst,long QstCod,bool Shuffle Gbl.Test.Answer.Options[NumOpt].Text, Tst_MAX_BYTES_ANSWER_OR_FEEDBACK,false); - /***** Copy image *****/ - Med_GetMediaNameTitleAndURLFromRow (row[3],row[4],row[5],row[6], - &Gbl.Test.Answer.Options[NumOpt].Media); + /***** Get media data (row[3], row[4], row[5], row[6]) *****/ + Med_GetMediaDataFromRow (row[3],row[4],row[5],row[6], + &Gbl.Test.Answer.Options[NumOpt].Media); /***** Write selectors and letter of this option *****/ fprintf (Gbl.F.Out,"" @@ -3871,9 +3868,9 @@ static void Tst_WriteChoiceAnsAssessTest (struct UsrData *UsrDat, Tst_MAX_BYTES_ANSWER_OR_FEEDBACK,false); } - /***** Copy image *****/ - Med_GetMediaNameTitleAndURLFromRow (row[3],row[4],row[5],row[6], - &Gbl.Test.Answer.Options[NumOpt].Media); + /***** Get media data (row[3], row[4], row[5], row[6]) *****/ + Med_GetMediaDataFromRow (row[3],row[4],row[5],row[6], + &Gbl.Test.Answer.Options[NumOpt].Media); /***** Assign correctness (row[7]) of this answer (this option) *****/ Gbl.Test.Answer.Options[NumOpt].Correct = (row[7][0] == 'Y'); @@ -4120,9 +4117,9 @@ static void Tst_WriteChoiceAnsViewGame (struct Game *Game, Gbl.Test.Answer.Options[NumOpt].Text, Tst_MAX_BYTES_ANSWER_OR_FEEDBACK,false); - /***** Copy image *****/ - Med_GetMediaNameTitleAndURLFromRow (row[3],row[4],row[5],row[6], - &Gbl.Test.Answer.Options[NumOpt].Media); + /***** Get media data (row[3], row[4], row[5], row[6]) *****/ + Med_GetMediaDataFromRow (row[3],row[4],row[5],row[6], + &Gbl.Test.Answer.Options[NumOpt].Media); /***** Write letter of this option *****/ fprintf (Gbl.F.Out,"" @@ -4193,14 +4190,14 @@ static void Tst_WriteTextAnsAssessTest (struct UsrData *UsrDat, char TextAnsOK[Tst_MAX_BYTES_ANSWERS_ONE_QST + 1]; bool Correct = false; /* - row[ 0] AnsInd - row[ 1] Answer - row[ 2] Feedback - row[ 3] MediaName - row[ 4] MediaType - row[ 5] MediaTitle - row[ 6] MediaURL - row[ 7] Correct + row[0] AnsInd + row[1] Answer + row[2] Feedback + row[3] MediaName + row[4] MediaType + row[5] MediaTitle + row[6] MediaURL + row[7] Correct */ /***** Get text and correctness of answers for this question from database (one row per answer) *****/ for (NumOpt = 0; @@ -5583,10 +5580,8 @@ static void Tst_GetQstDataFromDB (char Stem[Cns_MAX_BYTES_TEXT + 1], Str_Copy (Feedback,row[3], Cns_MAX_BYTES_TEXT); - /* Get the image name, title and URL of the question - from the database (row[4], row[5], row[6], row[7]) */ - Med_GetMediaNameTitleAndURLFromRow (row[4],row[5],row[6],row[7], - &Gbl.Test.Media); + /* Get media data (row[4], row[5], row[6], row[7]) */ + Med_GetMediaDataFromRow (row[4],row[5],row[6],row[7],&Gbl.Test.Media); /* Free structure that stores the query result */ DB_FreeMySQLResult (&mysql_res); @@ -5656,10 +5651,11 @@ static void Tst_GetQstDataFromDB (char Stem[Cns_MAX_BYTES_TEXT + 1], Str_Copy (Gbl.Test.Answer.Options[NumOpt].Feedback,row[2], Tst_MAX_BYTES_ANSWER_OR_FEEDBACK); - /* Copy image */ - Med_GetMediaNameTitleAndURLFromRow (row[3],row[4],row[5],row[6], - &Gbl.Test.Answer.Options[NumOpt].Media); + /* Get media data (row[3], row[4], row[5], row[6]) */ + Med_GetMediaDataFromRow (row[3],row[4],row[5],row[6], + &Gbl.Test.Answer.Options[NumOpt].Media); + /* Get if this option is correct */ Gbl.Test.Answer.Options[NumOpt].Correct = (row[7][0] == 'Y'); break; default: @@ -5705,10 +5701,8 @@ static void Tst_GetMediaFromDB (int NumOpt,struct Media *Media) row = mysql_fetch_row (mysql_res); - /***** Get the image name, type, title and URL - (row[0], row[1], row[2], row[3]) *****/ - Med_GetMediaNameTitleAndURLFromRow (row[0],row[1],row[2],row[3], - Media); + /***** Get media data (row[0], row[1], row[2], row[3]) *****/ + Med_GetMediaDataFromRow (row[0],row[1],row[2],row[3],Media); /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); @@ -6832,7 +6826,7 @@ static void Tst_RemoveImgFileFromAnsOfQst (long CrsCod,long QstCod,unsigned AnsI "SELECT tst_answers.MediaName," // row[0] "tst_answers.MediaType" // row[1] " FROM tst_questions,tst_answers" - " WHERE tst_questions.CrsCod=%ld" // Extra check + " WHERE tst_questions.CrsCod=%ld"// Extra check " AND tst_questions.QstCod=%ld" // Extra check " AND tst_questions.QstCod=tst_answers.QstCod" " AND tst_answers.QstCod=%ld" diff --git a/swad_text.c b/swad_text.c index 69c9782da..40821d6f5 100644 --- a/swad_text.c +++ b/swad_text.c @@ -46871,6 +46871,36 @@ const char *Txt_The_session_has_expired = "A sessão expirou."; #endif +const char *Txt_The_size_of_the_gif_file_exceeds_the_maximum_allowed_X = // Warning: it is very important to include %s in the following sentences +#if L==1 // ca + "La mida del fitxer GIF" + " supera el màxim permès (%s)."; +#elif L==2 // de + "Die Größe der GIF-Datei" + " überschreitet den zulässigen Höchstwert (%s)."; +#elif L==3 // en + "The size of the GIF file" + " exceeds the maximum allowed (%s)."; +#elif L==4 // es + "El tamaño del archivo GIF" + " excede el máximo permitido (%s)."; +#elif L==5 // fr + "La taille du fichier GIF" + " dépasse le maximum autorisé (%s)."; +#elif L==6 // gn + "El tamaño del archivo GIF" + " excede el máximo permitido (%s)."; // Okoteve traducción +#elif L==7 // it + "La dimensione del file GIF" + " supera il massimo consentito (%s)."; +#elif L==8 // pl + "Rozmiar pliku GIF" + " przekracza maksymalne dozwolone (%s)."; +#elif L==9 // pt + "O tamanho do arquivo GIF" + " excede o máximo permitido (%s)."; +#endif + const char *Txt_The_status_of_the_centre_X_has_changed = // Warning: it is very important to include %s in the following sentences #if L==1 // ca "El estado del centro %s ha cambiado."; // Necessita traduccio