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