Version 18.63.1

This commit is contained in:
Antonio Cañas Vargas 2019-03-03 12:27:29 +01:00
parent 5758e3c7f6
commit 88c1e2ee24
9 changed files with 161 additions and 121 deletions

View File

@ -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

View File

@ -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);

View File

@ -2923,13 +2923,12 @@ static void Gam_ListOneOrMoreQuestionsForEdition (struct Game *Game,
Tst_GetAndWriteTagsQst (Gbl.Test.QstCod);
fprintf (Gbl.F.Out,"</td>");
/* 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,"<td class=\"LEFT_TOP COLOR%u\">",
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,"<div class=\"GAM_PLAY_QST_CONTAINER\">");
/* 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");

View File

@ -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&ntilde;o del archivo excede el l&iacute;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)
{

View File

@ -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,

View File

@ -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);

View File

@ -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);
}
/*****************************************************************************/

View File

@ -1034,13 +1034,12 @@ void Tst_WriteQstAndAnsTest (Tst_ActionToDoWithQuestions_t ActionToDoWithQuestio
"</td>",
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,"<td class=\"LEFT_TOP COLOR%u\">",
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,"</td>");
/* 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,"<td class=\"LEFT_TOP COLOR%u\">",
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,"</td>");
/* 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,"<td class=\"LEFT_TOP COLOR%u\">",
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,"<tr>"
@ -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,"<tr>"
@ -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,"<tr>"
@ -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"

View File

@ -46871,6 +46871,36 @@ const char *Txt_The_session_has_expired =
"A sess&atilde;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 <em>GIF</em>"
" supera el m&agrave;xim perm&egrave;s (%s).";
#elif L==2 // de
"Die Gr&ouml;&szlig;e der <em>GIF</em>-Datei"
" &uuml;berschreitet den zul&auml;ssigen H&ouml;chstwert (%s).";
#elif L==3 // en
"The size of the <em>GIF</em> file"
" exceeds the maximum allowed (%s).";
#elif L==4 // es
"El tama&ntilde;o del archivo <em>GIF</em>"
" excede el m&aacute;ximo permitido (%s).";
#elif L==5 // fr
"La taille du fichier <em>GIF</em>"
" d&eacute;passe le maximum autoris&eacute; (%s).";
#elif L==6 // gn
"El tama&ntilde;o del archivo <em>GIF</em>"
" excede el m&aacute;ximo permitido (%s)."; // Okoteve traducción
#elif L==7 // it
"La dimensione del file <em>GIF</em>"
" supera il massimo consentito (%s).";
#elif L==8 // pl
"Rozmiar pliku <em>GIF</em>"
" przekracza maksymalne dozwolone (%s).";
#elif L==9 // pt
"O tamanho do arquivo <em>GIF</em>"
" excede o m&aacute;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 <strong>%s</strong> ha cambiado."; // Necessita traduccio