mirror of https://github.com/acanas/swad-core.git
Version 18.63.1
This commit is contained in:
parent
5758e3c7f6
commit
88c1e2ee24
|
@ -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
|
||||
|
|
12
swad_forum.c
12
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);
|
||||
|
|
12
swad_game.c
12
swad_game.c
|
@ -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");
|
||||
|
|
48
swad_media.c
48
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)
|
||||
{
|
||||
|
|
10
swad_media.h
10
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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
128
swad_test.c
128
swad_test.c
|
@ -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"
|
||||
|
|
30
swad_text.c
30
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 <em>GIF</em>"
|
||||
" supera el màxim permès (%s).";
|
||||
#elif L==2 // de
|
||||
"Die Größe der <em>GIF</em>-Datei"
|
||||
" überschreitet den zulässigen Hö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ño del archivo <em>GIF</em>"
|
||||
" excede el máximo permitido (%s).";
|
||||
#elif L==5 // fr
|
||||
"La taille du fichier <em>GIF</em>"
|
||||
" dépasse le maximum autorisé (%s).";
|
||||
#elif L==6 // gn
|
||||
"El tamaño del archivo <em>GIF</em>"
|
||||
" excede el má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á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
|
||||
|
|
Loading…
Reference in New Issue