Version 18.64.3

This commit is contained in:
Antonio Cañas Vargas 2019-03-04 14:36:29 +01:00
parent 36f6647379
commit 1bdc46a541
12 changed files with 249 additions and 159 deletions

View File

@ -2707,12 +2707,7 @@ a:hover img.CENTRE_PHOTO_SHOW
{
position:relative;
}
/*
.MED_PLAY:hover .MED_PLAY_ICO
{
opacity:0;
}
*/
/* The icon inside the overlay is positioned in the middle vertically and horizontally */
.MED_PLAY_ICO
{
@ -2720,7 +2715,7 @@ a:hover img.CENTRE_PHOTO_SHOW
left:50%;
top:50%;
transform:translate(-50%,-50%);
font-size:24pt;
font-size:20pt;
font-weight:bold;
color:white;
text-shadow: 0 0 8px black;

View File

@ -12616,3 +12616,27 @@ SELECT CAST(~0 AS UNSIGNED);
SELECT last_logs.LogCod,last_logs.ActCod,last_logs.Dif,last_logs.Role,last_logs.CtyCod,last_logs.InsCod,last_logs.CtrCod,last_logs.DegCod,actions.Txt FROM (SELECT LogCod,ActCod,UNIX_TIMESTAMP()-UNIX_TIMESTAMP(ClickTime) AS Dif,Role,CtyCod,InsCod,CtrCod,DegCod FROM log_recent ORDER BY LogCod DESC LIMIT 20) AS last_logs LEFT JOIN actions ON last_logs.ActCod=actions.ActCod WHERE actions.Language='es';
ALTER TABLE forum_post CHANGE COLUMN MediaType MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none';
ALTER TABLE msg_content CHANGE COLUMN MediaType MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none';
ALTER TABLE msg_content_deleted CHANGE COLUMN MediaType MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none';
ALTER TABLE social_comments CHANGE COLUMN MediaType MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none';
ALTER TABLE social_posts CHANGE COLUMN MediaType MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none';
ALTER TABLE tst_answers CHANGE COLUMN MediaType MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none';
ALTER TABLE tst_questions CHANGE COLUMN MediaType MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none';
UPDATE forum_post SET MediaType='none' WHERE MediaName='';
UPDATE msg_content SET MediaType='none' WHERE MediaName='';
UPDATE msg_content_deleted SET MediaType='none' WHERE MediaName='';
UPDATE social_comments SET MediaType='none' WHERE MediaName='';
UPDATE social_posts SET MediaType='none' WHERE MediaName='';
UPDATE tst_answers SET MediaType='none' WHERE MediaName='';
UPDATE tst_questions SET MediaType='none' WHERE MediaName='';
UPDATE forum_post SET MediaType='jpg' WHERE MediaType<>'gif' AND MediaName<>'';
UPDATE msg_content SET MediaType='jpg' WHERE MediaType<>'gif' AND MediaName<>'';
UPDATE msg_content_deleted SET MediaType='jpg' WHERE MediaType<>'gif' AND MediaName<>'';
UPDATE social_comments SET MediaType='jpg' WHERE MediaType<>'gif' AND MediaName<>'';
UPDATE social_posts SET MediaType='jpg' WHERE MediaType<>'gif' AND MediaName<>'';
UPDATE tst_answers SET MediaType='jpg' WHERE MediaType<>'gif' AND MediaName<>'';
UPDATE tst_questions SET MediaType='jpg' WHERE MediaType<>'gif' AND MediaName<>'';

View File

@ -411,8 +411,6 @@ 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 *****************************/
/*****************************************************************************/
@ -432,10 +430,12 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 18.64.1 (2019-03-04)"
#define Log_PLATFORM_VERSION "SWAD 18.64.3 (2019-03-04)"
#define CSS_FILE "swad18.64.css"
#define JS_FILE "swad18.64.js"
/*
Version 18.64.3: Mar 04, 2019 Fixed bugs in media. (238467 lines)
Version 18.64.2: Mar 04, 2019 Detect if a GIF image is animated. (238451 lines)
Version 18.64.1: Mar 04, 2019 Code refactoring in media. (238408 lines)
Version 18.64: Mar 04, 2019 Allowing animated GIFs. Not finished. (238378 lines)
Version 18.63.1: Mar 02, 2019 Allowing animated GIFs. Not finished. (238162 lines)
@ -443,7 +443,7 @@ ps2pdf source.ps destination.pdf
Rename the following directory:
sudo mv /var/www/swad/img /var/www/swad/med
28 changes necessary in database:
42 changes necessary in database:
ALTER TABLE forum_post CHANGE COLUMN ImageName MediaName VARCHAR(43) NOT NULL DEFAULT '';
ALTER TABLE games CHANGE COLUMN ImageName MediaName VARCHAR(43) NOT NULL DEFAULT '';
ALTER TABLE msg_content CHANGE COLUMN ImageName MediaName VARCHAR(43) NOT NULL DEFAULT '';
@ -453,13 +453,13 @@ ALTER TABLE social_posts CHANGE COLUMN ImageName MediaName VARCHAR(43) NOT NULL
ALTER TABLE tst_answers CHANGE COLUMN ImageName MediaName VARCHAR(43) NOT NULL DEFAULT '';
ALTER TABLE tst_questions CHANGE COLUMN ImageName MediaName VARCHAR(43) NOT NULL DEFAULT '';
ALTER TABLE forum_post ADD COLUMN MediaType ENUM('jpg','gif') NOT NULL DEFAULT 'jpg' AFTER MediaName;
ALTER TABLE msg_content ADD COLUMN MediaType ENUM('jpg','gif') NOT NULL DEFAULT 'jpg' AFTER MediaName;
ALTER TABLE msg_content_deleted ADD COLUMN MediaType ENUM('jpg','gif') NOT NULL DEFAULT 'jpg' AFTER MediaName;
ALTER TABLE social_comments ADD COLUMN MediaType ENUM('jpg','gif') NOT NULL DEFAULT 'jpg' AFTER MediaName;
ALTER TABLE social_posts ADD COLUMN MediaType ENUM('jpg','gif') NOT NULL DEFAULT 'jpg' AFTER MediaName;
ALTER TABLE tst_answers ADD COLUMN MediaType ENUM('jpg','gif') NOT NULL DEFAULT 'jpg' AFTER MediaName;
ALTER TABLE tst_questions ADD COLUMN MediaType ENUM('jpg','gif') NOT NULL DEFAULT 'jpg' AFTER MediaName;
ALTER TABLE forum_post ADD COLUMN MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none' AFTER MediaName;
ALTER TABLE msg_content ADD COLUMN MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none' AFTER MediaName;
ALTER TABLE msg_content_deleted ADD COLUMN MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none' AFTER MediaName;
ALTER TABLE social_comments ADD COLUMN MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none' AFTER MediaName;
ALTER TABLE social_posts ADD COLUMN MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none' AFTER MediaName;
ALTER TABLE tst_answers ADD COLUMN MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none' AFTER MediaName;
ALTER TABLE tst_questions ADD COLUMN MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none' AFTER MediaName;
ALTER TABLE forum_post CHANGE COLUMN ImageTitle MediaTitle VARCHAR(2047) NOT NULL DEFAULT '';
ALTER TABLE msg_content CHANGE COLUMN ImageTitle MediaTitle VARCHAR(2047) NOT NULL DEFAULT '';
@ -477,6 +477,22 @@ ALTER TABLE social_posts CHANGE COLUMN ImageURL MediaURL VARCHAR(255) NOT NULL D
ALTER TABLE tst_answers CHANGE COLUMN ImageURL MediaURL VARCHAR(255) NOT NULL DEFAULT '';
ALTER TABLE tst_questions CHANGE COLUMN ImageURL MediaURL VARCHAR(255) NOT NULL DEFAULT '';
UPDATE forum_post SET MediaType='none' WHERE MediaName='';
UPDATE msg_content SET MediaType='none' WHERE MediaName='';
UPDATE msg_content_deleted SET MediaType='none' WHERE MediaName='';
UPDATE social_comments SET MediaType='none' WHERE MediaName='';
UPDATE social_posts SET MediaType='none' WHERE MediaName='';
UPDATE tst_answers SET MediaType='none' WHERE MediaName='';
UPDATE tst_questions SET MediaType='none' WHERE MediaName='';
UPDATE forum_post SET MediaType='jpg' WHERE MediaType<>'gif' AND MediaName<>'';
UPDATE msg_content SET MediaType='jpg' WHERE MediaType<>'gif' AND MediaName<>'';
UPDATE msg_content_deleted SET MediaType='jpg' WHERE MediaType<>'gif' AND MediaName<>'';
UPDATE social_comments SET MediaType='jpg' WHERE MediaType<>'gif' AND MediaName<>'';
UPDATE social_posts SET MediaType='jpg' WHERE MediaType<>'gif' AND MediaName<>'';
UPDATE tst_answers SET MediaType='jpg' WHERE MediaType<>'gif' AND MediaName<>'';
UPDATE tst_questions SET MediaType='jpg' WHERE MediaType<>'gif' AND MediaName<>'';
Version 18.62: Feb 27, 2019 By default show only the last comments in a social publishing. (237901 lines)
Version 18.61: Feb 27, 2019 Hide/show comments in a social publishing. (237855 lines)
Version 18.60.5: Feb 26, 2019 Changes in CSS for responsive design in timeline. (237788 lines)

View File

@ -1207,23 +1207,23 @@ mysql> DESCRIBE forum_disabled_post;
/***** Table forum_post *****/
/*
mysql> DESCRIBE forum_post;
+------------+-------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------------+------+-----+---------+----------------+
| PstCod | int(11) | NO | PRI | NULL | auto_increment |
| ThrCod | int(11) | NO | MUL | NULL | |
| UsrCod | int(11) | NO | MUL | NULL | |
| CreatTime | datetime | NO | MUL | NULL | |
| ModifTime | datetime | NO | MUL | NULL | |
| NumNotif | int(11) | NO | | 0 | |
| Subject | text | NO | | NULL | |
| Content | longtext | NO | | NULL | |
| MediaName | varchar(43) | NO | | | |
| MediaType | enum('jpg','gif') | NO | | jpg | |
| MediaTitle | varchar(2047) | NO | | | |
| MediaURL | varchar(255) | NO | | | |
+------------+-------------------+------+-----+---------+----------------+
12 rows in set (0.00 sec)
+------------+--------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------------------+------+-----+---------+----------------+
| PstCod | int(11) | NO | PRI | NULL | auto_increment |
| ThrCod | int(11) | NO | MUL | NULL | |
| UsrCod | int(11) | NO | MUL | NULL | |
| CreatTime | datetime | NO | MUL | NULL | |
| ModifTime | datetime | NO | MUL | NULL | |
| NumNotif | int(11) | NO | | 0 | |
| Subject | text | NO | | NULL | |
| Content | longtext | NO | | NULL | |
| MediaName | varchar(43) | NO | | | |
| MediaType | enum('none','jpg','gif') | NO | | none | |
| MediaTitle | varchar(2047) | NO | | | |
| MediaURL | varchar(255) | NO | | | |
+------------+--------------------------+------+-----+---------+----------------+
12 rows in set (0.01 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS forum_post ("
"PstCod INT NOT NULL AUTO_INCREMENT,"
@ -1235,7 +1235,7 @@ mysql> DESCRIBE forum_post;
"Subject TEXT NOT NULL," // Cns_MAX_BYTES_SUBJECT
"Content LONGTEXT NOT NULL," // Cns_MAX_BYTES_LONG_TEXT
"MediaName VARCHAR(43) NOT NULL DEFAULT ''," // Med_BYTES_NAME
"MediaType ENUM('jpg','gif') NOT NULL DEFAULT 'jpg',"
"MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none',"
"MediaTitle VARCHAR(2047) NOT NULL DEFAULT ''," // Med_MAX_BYTES_TITLE
"MediaURL VARCHAR(255) NOT NULL DEFAULT ''," // Cns_MAX_BYTES_WWW
"UNIQUE INDEX(PstCod),"
@ -1733,17 +1733,17 @@ mysql> DESCRIBE msg_banned;
/***** Table msg_content *****/
/*
mysql> DESCRIBE msg_content;
+------------+-------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------------+------+-----+---------+----------------+
| MsgCod | int(11) | NO | PRI | NULL | auto_increment |
| Subject | text | NO | MUL | NULL | |
| Content | longtext | NO | | NULL | |
| MediaName | varchar(43) | NO | | | |
| MediaType | enum('jpg','gif') | NO | | jpg | |
| MediaTitle | varchar(2047) | NO | | | |
| MediaURL | varchar(255) | NO | | | |
+------------+-------------------+------+-----+---------+----------------+
+------------+--------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------------------+------+-----+---------+----------------+
| MsgCod | int(11) | NO | PRI | NULL | auto_increment |
| Subject | text | NO | MUL | NULL | |
| Content | longtext | NO | | NULL | |
| MediaName | varchar(43) | NO | | | |
| MediaType | enum('none','jpg','gif') | NO | | none | |
| MediaTitle | varchar(2047) | NO | | | |
| MediaURL | varchar(255) | NO | | | |
+------------+--------------------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS msg_content ("
@ -1751,7 +1751,7 @@ mysql> DESCRIBE msg_content;
"Subject TEXT NOT NULL,"
"Content LONGTEXT NOT NULL,"
"MediaName VARCHAR(43) NOT NULL DEFAULT ''," // Med_BYTES_NAME
"MediaType ENUM('jpg','gif') NOT NULL DEFAULT 'jpg',"
"MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none',"
"MediaTitle VARCHAR(2047) NOT NULL DEFAULT ''," // Med_MAX_BYTES_TITLE
"MediaURL VARCHAR(255) NOT NULL DEFAULT ''," // Cns_MAX_BYTES_WWW
"UNIQUE INDEX(MsgCod),"
@ -1760,17 +1760,17 @@ mysql> DESCRIBE msg_content;
/***** Table msg_content_deleted *****/
/*
mysql> DESCRIBE msg_content_deleted;
+------------+-------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------------+------+-----+---------+-------+
| MsgCod | int(11) | NO | PRI | NULL | |
| Subject | text | NO | MUL | NULL | |
| Content | longtext | NO | | NULL | |
| MediaName | varchar(43) | NO | | | |
| MediaType | enum('jpg','gif') | NO | | jpg | |
| MediaTitle | varchar(2047) | NO | | | |
| MediaURL | varchar(255) | NO | | | |
+------------+-------------------+------+-----+---------+-------+
+------------+--------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------------------+------+-----+---------+-------+
| MsgCod | int(11) | NO | PRI | NULL | |
| Subject | text | NO | MUL | NULL | |
| Content | longtext | NO | | NULL | |
| MediaName | varchar(43) | NO | | | |
| MediaType | enum('none','jpg','gif') | NO | | none | |
| MediaTitle | varchar(2047) | NO | | | |
| MediaURL | varchar(255) | NO | | | |
+------------+--------------------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS msg_content_deleted ("
@ -1778,7 +1778,7 @@ mysql> DESCRIBE msg_content_deleted;
"Subject TEXT NOT NULL,"
"Content LONGTEXT NOT NULL,"
"MediaName VARCHAR(43) NOT NULL DEFAULT ''," // Med_BYTES_NAME
"MediaType ENUM('jpg','gif') NOT NULL DEFAULT 'jpg',"
"MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none',"
"MediaTitle VARCHAR(2047) NOT NULL DEFAULT ''," // Med_MAX_BYTES_TITLE
"MediaURL VARCHAR(255) NOT NULL DEFAULT ''," // Cns_MAX_BYTES_WWW
"UNIQUE INDEX(MsgCod),"
@ -2176,23 +2176,23 @@ mysql> DESCRIBE sessions;
/***** Table social_comments *****/
/*
mysql> DESCRIBE social_comments;
+------------+-------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------------+------+-----+---------+-------+
| PubCod | bigint(20) | NO | PRI | NULL | |
| Content | longtext | NO | MUL | NULL | |
| MediaName | varchar(43) | NO | | | |
| MediaType | enum('jpg','gif') | NO | | jpg | |
| MediaTitle | varchar(2047) | NO | | | |
| MediaURL | varchar(255) | NO | | | |
+------------+-------------------+------+-----+---------+-------+
+------------+--------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------------------+------+-----+---------+-------+
| PubCod | bigint(20) | NO | PRI | NULL | |
| Content | longtext | NO | MUL | NULL | |
| MediaName | varchar(43) | NO | | | |
| MediaType | enum('none','jpg','gif') | NO | | none | |
| MediaTitle | varchar(2047) | NO | | | |
| MediaURL | varchar(255) | NO | | | |
+------------+--------------------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS social_comments ("
"PubCod BIGINT NOT NULL,"
"Content LONGTEXT NOT NULL,"
"MediaName VARCHAR(43) NOT NULL DEFAULT ''," // Med_BYTES_NAME
"MediaType ENUM('jpg','gif') NOT NULL DEFAULT 'jpg',"
"MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none',"
"MediaTitle VARCHAR(2047) NOT NULL DEFAULT ''," // Med_MAX_BYTES_TITLE
"MediaURL VARCHAR(255) NOT NULL DEFAULT ''," // Cns_MAX_BYTES_WWW
"UNIQUE INDEX(PubCod),"
@ -2274,23 +2274,23 @@ mysql> DESCRIBE social_notes_fav;
/***** Table social_posts *****/
/*
mysql> DESCRIBE social_posts;
+------------+-------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------------+------+-----+---------+----------------+
| PstCod | int(11) | NO | PRI | NULL | auto_increment |
| Content | longtext | NO | MUL | NULL | |
| MediaName | varchar(43) | NO | | | |
| MediaType | enum('jpg','gif') | NO | | jpg | |
| MediaTitle | varchar(2047) | NO | | | |
| MediaURL | varchar(255) | NO | | | |
+------------+-------------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
+------------+--------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------------------+------+-----+---------+----------------+
| PstCod | int(11) | NO | PRI | NULL | auto_increment |
| Content | longtext | NO | MUL | NULL | |
| MediaName | varchar(43) | NO | | | |
| MediaType | enum('none','jpg','gif') | NO | | none | |
| MediaTitle | varchar(2047) | NO | | | |
| MediaURL | varchar(255) | NO | | | |
+------------+--------------------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS social_posts ("
"PubCod INT NOT NULL AUTO_INCREMENT,"
"Content LONGTEXT NOT NULL,"
"MediaName VARCHAR(43) NOT NULL DEFAULT ''," // Med_BYTES_NAME
"MediaType ENUM('jpg','gif') NOT NULL DEFAULT 'jpg',"
"MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none',"
"MediaTitle VARCHAR(2047) NOT NULL DEFAULT ''," // Med_MAX_BYTES_TITLE
"MediaURL VARCHAR(255) NOT NULL DEFAULT ''," // Cns_MAX_BYTES_WWW
"UNIQUE INDEX(PubCod),"
@ -2547,19 +2547,19 @@ mysql> DESCRIBE timetable_tut;
/***** Table tst_answers *****/
/*
mysql> DESCRIBE tst_answers;
+------------+-------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------------+------+-----+---------+-------+
| QstCod | int(11) | NO | MUL | NULL | |
| AnsInd | tinyint(4) | NO | | NULL | |
| Answer | text | NO | | NULL | |
| Feedback | text | NO | | NULL | |
| MediaName | varchar(43) | NO | | | |
| MediaType | enum('jpg','gif') | NO | | jpg | |
| MediaTitle | varchar(2047) | NO | | | |
| MediaURL | varchar(255) | NO | | | |
| Correct | enum('N','Y') | NO | | NULL | |
+------------+-------------------+------+-----+---------+-------+
+------------+--------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------------------+------+-----+---------+-------+
| QstCod | int(11) | NO | MUL | NULL | |
| AnsInd | tinyint(4) | NO | | NULL | |
| Answer | text | NO | | NULL | |
| Feedback | text | NO | | NULL | |
| MediaName | varchar(43) | NO | | | |
| MediaType | enum('none','jpg','gif') | NO | | none | |
| MediaTitle | varchar(2047) | NO | | | |
| MediaURL | varchar(255) | NO | | | |
| Correct | enum('N','Y') | NO | | NULL | |
+------------+--------------------------+------+-----+---------+-------+
9 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS tst_answers ("
@ -2568,7 +2568,7 @@ mysql> DESCRIBE tst_answers;
"Answer TEXT NOT NULL," // Tst_MAX_BYTES_ANSWER_OR_FEEDBACK
"Feedback TEXT NOT NULL," // Tst_MAX_BYTES_ANSWER_OR_FEEDBACK
"MediaName VARCHAR(43) NOT NULL DEFAULT ''," // Med_BYTES_NAME
"MediaType ENUM('jpg','gif') NOT NULL DEFAULT 'jpg',"
"MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none',"
"MediaTitle VARCHAR(2047) NOT NULL DEFAULT ''," // Med_MAX_BYTES_TITLE
"MediaURL VARCHAR(255) NOT NULL DEFAULT ''," // Cns_MAX_BYTES_WWW
"Correct ENUM('N','Y') NOT NULL,"
@ -2685,7 +2685,7 @@ mysql> DESCRIBE tst_questions;
| Stem | text | NO | | NULL | |
| Feedback | text | NO | | NULL | |
| MediaName | varchar(43) | NO | | | |
| MediaType | enum('jpg','gif') | NO | | jpg | |
| MediaType | enum('none','jpg','gif') | NO | | none | |
| MediaTitle | varchar(2047) | NO | | | |
| MediaURL | varchar(255) | NO | | | |
| NumHits | int(11) | NO | | 0 | |
@ -2703,7 +2703,7 @@ mysql> DESCRIBE tst_questions;
"Stem TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
"Feedback TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
"MediaName VARCHAR(43) NOT NULL DEFAULT ''," // Med_BYTES_NAME
"MediaType ENUM('jpg','gif') NOT NULL DEFAULT 'jpg',"
"MediaType ENUM('none','jpg','gif') NOT NULL DEFAULT 'none',"
"MediaTitle VARCHAR(2047) NOT NULL DEFAULT ''," // Med_MAX_BYTES_TITLE
"MediaURL VARCHAR(255) NOT NULL DEFAULT ''," // Cns_MAX_BYTES_WWW
"NumHits INT NOT NULL DEFAULT 0,"

View File

@ -538,7 +538,7 @@ static bool For_RemoveForumPst (long PstCod,struct Media *Media)
bool ThreadDeleted = false;
/***** Remove media file attached to forum post *****/
Med_RemoveMediaFile (Media->Name,Media->Type);
Med_RemoveMediaFiles (Media->Name,Media->Type);
/***** If the post is the only one in its thread, delete that thread *****/
if (For_NumPstsInThrWithPstCod (PstCod,&ThrCod) < 2)

View File

@ -3737,7 +3737,7 @@ static void Gam_IncreaseAnswerInDB (long QstCod,unsigned AnsInd)
{
/***** Increase number of users who have selected
the answer AnsInd in the question QstCod *****/
DB_QueryINSERT ("can not register your answer to the game",
DB_QueryUPDATE ("can not register your answer to the game",
"UPDATE gam_answers SET NumUsrs=NumUsrs+1"
" WHERE QstCod=%ld AND AnsInd=%u",
QstCod,AnsInd);

View File

@ -51,7 +51,7 @@
const char *Med_StringsTypeDB[Med_NUM_TYPES] =
{
"", // Med_UNKNOWN
"none", // Med_NONE
"jpg", // Med_JPG
"gif", // Med_GIF
};
@ -79,6 +79,9 @@ extern struct Globals Gbl;
static Med_Action_t Med_GetMediaActionFromForm (const char *ParamAction);
static void Med_GetAndProcessFileFromForm (struct Media *Media,
const char *ParamFile);
static bool Med_DetectIfAnimated (struct Media *Media,
const char PathMedPrivTmp[PATH_MAX + 1],
const char PathFileOrg[PATH_MAX + 1]);
static void Med_ProcessJPG (struct Media *Media,
const char PathMedPrivTmp[PATH_MAX + 1],
@ -129,7 +132,7 @@ void Med_ResetMediaExceptTitleAndURL (struct Media *Media)
Media->Action = Med_ACTION_NO_MEDIA;
Media->Status = Med_FILE_NONE;
Media->Name[0] = '\0';
Media->Type = Med_UNKNOWN;
Media->Type = Med_NONE;
}
/*****************************************************************************/
@ -190,9 +193,10 @@ void Med_GetMediaDataFromRow (const char *Name,
/***** Convert type string to type *****/
Media->Type = Med_GetTypeFromStrInDB (TypeStr);
/***** Set status of image file *****/
Media->Status = Media->Name[0] ? Med_NAME_STORED_IN_DB :
Med_FILE_NONE;
/***** Set status of media file *****/
Media->Status = (Media->Name[0] &&
Media->Type != Med_NONE) ? Med_NAME_STORED_IN_DB :
Med_FILE_NONE;
/***** Copy image title to struct *****/
// Media->Title can be empty or filled with previous value
@ -314,7 +318,7 @@ void Med_GetMediaFromForm (int NumMediaInForm,struct Media *Media,
Media->Action = Med_GetMediaActionFromForm (ParamUploadMedia.Action);
Media->Status = Med_FILE_NONE;
Media->Name[0] = '\0';
Media->Type = Med_UNKNOWN;
Media->Type = Med_NONE;
/***** Secondly, get the media (image/video) name and the file *****/
switch (Media->Action)
@ -327,12 +331,12 @@ void Med_GetMediaFromForm (int NumMediaInForm,struct Media *Media,
case Med_FILE_NONE: // No new image/video received
Media->Action = Med_ACTION_NO_MEDIA;
Media->Name[0] = '\0';
Media->Type = Med_UNKNOWN;
Media->Type = Med_NONE;
break;
case Med_FILE_RECEIVED: // New image/video received, but not processed
Media->Status = Med_FILE_NONE;
Media->Name[0] = '\0';
Media->Type = Med_UNKNOWN;
Media->Type = Med_NONE;
break;
default:
break;
@ -476,7 +480,7 @@ static void Med_GetAndProcessFileFromForm (struct Media *Media,
/* Check extension */
Media->Type = Med_GetTypeFromExtension (PtrExtension);
if (Media->Type == Med_UNKNOWN)
if (Media->Type == Med_NONE)
return;
/* Check if the file type is image/ or application/octet-stream */
@ -518,6 +522,11 @@ static void Med_GetAndProcessFileFromForm (struct Media *Media,
{
Media->Status = Med_FILE_RECEIVED;
/***** Detect if amnimated gif *****/
if (Media->Type == Med_GIF)
if (!Med_DetectIfAnimated (Media,PathMedPrivTmp,PathFileOrg))
Media->Type = Med_JPG;
/***** Process media depending on the media file extension *****/
switch (Media->Type)
{
@ -537,6 +546,51 @@ static void Med_GetAndProcessFileFromForm (struct Media *Media,
unlink (PathFileOrg);
}
/*****************************************************************************/
/********************* Detect if a GIF image is animated *********************/
/*****************************************************************************/
// Return true if animated
// Return false if static or error
static bool Med_DetectIfAnimated (struct Media *Media,
const char PathMedPrivTmp[PATH_MAX + 1],
const char PathFileOrg[PATH_MAX + 1])
{
char PathFileTxtTmp[PATH_MAX + 1];
char Command[128 + PATH_MAX * 2];
int ReturnCode;
FILE *FileTxtTmp; // Temporary file with the output of the command
int NumFrames = 0;
/***** Build path to temporary text file *****/
snprintf (PathFileTxtTmp,sizeof (PathFileTxtTmp),
"%s/%s.txt",
PathMedPrivTmp,Media->Name);
/***** Execute system command to get number of frames in GIF *****/
snprintf (Command,sizeof (Command),
"identify -format '%%n\n' %s | head -1 > %s",
PathFileOrg,PathFileTxtTmp);
ReturnCode = system (Command);
if (ReturnCode == -1)
return false; // Error
ReturnCode = WEXITSTATUS(ReturnCode);
if (ReturnCode != 0)
return false; // Error
/***** Read temporary file *****/
if ((FileTxtTmp = fopen (PathFileTxtTmp,"rb")) == NULL)
return false; // Error
if (fscanf (FileTxtTmp,"%d",&NumFrames) != 1)
return false; // Error
fclose (FileTxtTmp);
/***** Remove temporary file *****/
unlink (PathFileTxtTmp);
return (NumFrames > 1); // NumFrames > 1 ==> Animated
}
/*****************************************************************************/
/************* Process original image generating processed JPG ***************/
/*****************************************************************************/
@ -576,7 +630,7 @@ static void Med_ProcessGIF (struct Media *Media,
const char PathFileOrg[PATH_MAX + 1])
{
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;
extern const char *Txt_The_size_of_the_GIF_file_exceeds_the_maximum_allowed_X;
struct stat FileStatus;
char PathFilePNGTmp[PATH_MAX + 1]; // Full name of temporary processed file
char PathFileGIFTmp[PATH_MAX + 1]; // Full name of temporary processed file
@ -627,7 +681,7 @@ static void Med_ProcessGIF (struct Media *Media,
{
/* Show warning alert */
Fil_WriteFileSizeBrief ((double) Med_MAX_SIZE_GIF,FileSizeStr);
Ale_ShowAlert (Ale_WARNING,Txt_The_size_of_the_gif_file_exceeds_the_maximum_allowed_X,
Ale_ShowAlert (Ale_WARNING,Txt_The_size_of_the_GIF_file_exceeds_the_maximum_allowed_X,
FileSizeStr);
}
}
@ -785,7 +839,7 @@ void Med_ShowMedia (struct Media *Media,
return;
if (!Media->Name[0])
return;
if (Media->Type == Med_UNKNOWN)
if (Media->Type == Med_NONE)
return;
if (Media->Status != Med_NAME_STORED_IN_DB)
return;
@ -976,7 +1030,7 @@ static void Med_ShowGIF (struct Media *Media,
}
/*****************************************************************************/
/**** Remove private file with an image/video, given the image/video name ****/
/*** Remove private files with an image/video, given the image/video name ****/
/*****************************************************************************/
void Med_RemoveMediaFilesFromAllRows (unsigned NumMedia,MYSQL_RES *mysql_res)
@ -987,10 +1041,10 @@ void Med_RemoveMediaFilesFromAllRows (unsigned NumMedia,MYSQL_RES *mysql_res)
for (NumMed = 0;
NumMed < NumMedia;
NumMed++)
Med_RemoveMediaFileFromRow (mysql_res);
Med_RemoveMediaFilesFromRow (mysql_res);
}
void Med_RemoveMediaFileFromRow (MYSQL_RES *mysql_res)
void Med_RemoveMediaFilesFromRow (MYSQL_RES *mysql_res)
{
MYSQL_ROW row;
@ -998,10 +1052,10 @@ void Med_RemoveMediaFileFromRow (MYSQL_RES *mysql_res)
row = mysql_fetch_row (mysql_res);
/***** Remove image file *****/
Med_RemoveMediaFile (row[0],Med_GetTypeFromStrInDB (row[1]));
Med_RemoveMediaFiles (row[0],Med_GetTypeFromStrInDB (row[1]));
}
void Med_RemoveMediaFile (const char *Name,Med_Type_t Type)
void Med_RemoveMediaFiles (const char *Name,Med_Type_t Type)
{
char PathMedPriv[PATH_MAX + 1];
char FullPathMediaPriv[PATH_MAX + 1];
@ -1018,34 +1072,28 @@ void Med_RemoveMediaFile (const char *Name,Med_Type_t Type)
switch (Type)
{
case Med_JPG:
/***** Build path to private file *****/
/***** Remove private JPG file *****/
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
"%s/%s.jpg",
PathMedPriv,Name);
/***** Remove private file *****/
unlink (FullPathMediaPriv);
break;
case Med_GIF:
/***** Build path to private GIF file *****/
/***** Remove private GIF file *****/
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
"%s/%s.gif",
PathMedPriv,Name);
/***** Remove private file *****/
unlink (FullPathMediaPriv);
/***** Build path to private PNG file *****/
/***** Remove private PNG file *****/
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
"%s//%s.png",
PathMedPriv,Name);
/***** Remove private file *****/
unlink (FullPathMediaPriv);
break;
case Med_UNKNOWN:
case Med_NONE:
Lay_ShowErrorAndExit ("Wrong media type.");
break;
}
@ -1062,13 +1110,13 @@ Med_Type_t Med_GetTypeFromStrInDB (const char *Str)
{
Med_Type_t Type;
for (Type = (Med_Type_t) 1; // Skip unknown type
for (Type = (Med_Type_t) 0;
Type < Med_NUM_TYPES;
Type++)
if (!strcasecmp (Str,Med_StringsTypeDB[Type]))
return Type;
return Med_UNKNOWN;
return Med_NONE;
}
/*****************************************************************************/
@ -1089,7 +1137,7 @@ static Med_Type_t Med_GetTypeFromExtension (const char *Extension)
if (!strcasecmp (Extension,"gif"))
return Med_GIF;
return Med_UNKNOWN;
return Med_NONE;
}
/*****************************************************************************/
@ -1099,9 +1147,8 @@ static Med_Type_t Med_GetTypeFromExtension (const char *Extension)
const char *Med_GetStringTypeForDB (Med_Type_t Type)
{
/***** Check if type is out of valid range *****/
if (Type < (Med_Type_t) 1 ||
Type > (Med_Type_t) (Med_NUM_TYPES - 1))
return Med_StringsTypeDB[Med_UNKNOWN];
if (Type > (Med_Type_t) (Med_NUM_TYPES - 1))
return Med_StringsTypeDB[Med_NONE];
/***** Get string from type *****/
return Med_StringsTypeDB[Type];

View File

@ -91,7 +91,7 @@ typedef enum
#define Med_NUM_TYPES 3
typedef enum
{
Med_UNKNOWN,
Med_NONE,
Med_JPG,
Med_GIF,
} Med_Type_t;
@ -149,8 +149,8 @@ void Med_ShowMedia (struct Media *Media,
const char *ClassContainer,const char *ClassMedia);
void Med_RemoveMediaFilesFromAllRows (unsigned NumMedia,MYSQL_RES *mysql_res);
void Med_RemoveMediaFileFromRow (MYSQL_RES *mysql_res);
void Med_RemoveMediaFile (const char *Name,Med_Type_t Type);
void Med_RemoveMediaFilesFromRow (MYSQL_RES *mysql_res);
void Med_RemoveMediaFiles (const char *Name,Med_Type_t Type);
Med_Type_t Med_GetTypeFromStrInDB (const char *Str);
const char *Med_GetStringTypeForDB (Med_Type_t Type);

View File

@ -862,6 +862,7 @@ static void Soc_BuildQueryToGetTimeline (char **Query,
static long Soc_GetPubCodFromSession (const char *FieldName)
{
extern const char *Txt_The_session_has_expired;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long PubCod;
@ -870,7 +871,7 @@ static long Soc_GetPubCodFromSession (const char *FieldName)
if (DB_QuerySELECT (&mysql_res,"can not get publishing code from session",
"SELECT %s FROM sessions WHERE SessionId='%s'",
FieldName,Gbl.Session.Id) != 1)
Lay_ShowErrorAndExit ("Error when getting publishing code from session.");
Lay_ShowErrorAndExit (Txt_The_session_has_expired);
/***** Get last publishing code *****/
row = mysql_fetch_row (mysql_res);
@ -2456,12 +2457,12 @@ static long Soc_ReceiveSocialPost (void)
Media.Quality = Soc_IMAGE_SAVED_QUALITY;
Med_GetMediaFromForm (-1,&Media,NULL);
if (Content[0] || // Text not empty
Media.Name[0]) // An image is attached
if (Content[0] || // Text not empty
(Media.Name[0] && Media.Type != Med_NONE)) // A media is attached
{
/***** Check if image is received and processed *****/
if (Media.Action == Med_ACTION_NEW_MEDIA && // Upload new image
Media.Status == Med_FILE_PROCESSED) // The new image received has been processed
Media.Status == Med_FILE_PROCESSED) // The new image received has been processed
/* Move processed image to definitive directory */
Med_MoveMediaToDefinitiveDir (&Media);
@ -3184,8 +3185,8 @@ static long Soc_ReceiveComment (void)
Media.Quality = Soc_IMAGE_SAVED_QUALITY;
Med_GetMediaFromForm (-1,&Media,NULL);
if (Content[0] || // Text not empty
Media.Name[0]) // An image is attached
if (Content[0] || // Text not empty
(Media.Name[0] && Media.Type != Med_NONE)) // A media is attached
{
/***** Check if image is received and processed *****/
if (Media.Action == Med_ACTION_NEW_MEDIA && // Upload new image
@ -3878,7 +3879,7 @@ static void Soc_RemoveImgFileFromSocialPost (long PstCod)
" WHERE PstCod=%ld",
PstCod))
/***** Remove media file *****/
Med_RemoveMediaFileFromRow (mysql_res);
Med_RemoveMediaFilesFromRow (mysql_res);
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
@ -4217,7 +4218,7 @@ static void Soc_RemoveImgFileFromSocialComment (long PubCod)
" WHERE PubCod=%ld",
PubCod))
/***** Remove media file *****/
Med_RemoveMediaFileFromRow (mysql_res);
Med_RemoveMediaFilesFromRow (mysql_res);
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);

View File

@ -6559,7 +6559,8 @@ static void Tst_InsertOrUpdateQstIntoDB (void)
Gbl.Test.Media.URL ? Gbl.Test.Media.URL : "");
/* Update image status */
if (Gbl.Test.Media.Name[0])
if (Gbl.Test.Media.Name[0] &&
Gbl.Test.Media.Type != Med_NONE)
Gbl.Test.Media.Status = Med_NAME_STORED_IN_DB;
}
else // It's an existing question
@ -6584,7 +6585,8 @@ static void Tst_InsertOrUpdateQstIntoDB (void)
Gbl.Test.QstCod,Gbl.CurrentCrs.Crs.CrsCod);
/* Update image status */
if (Gbl.Test.Media.Name[0])
if (Gbl.Test.Media.Name[0] &&
Gbl.Test.Media.Type != Med_NONE)
Gbl.Test.Media.Status = Med_NAME_STORED_IN_DB;
/* Remove answers and tags from this test question */
@ -6654,9 +6656,10 @@ static void Tst_InsertAnswersIntoDB (void)
"MediaName,MediaType,MediaTitle,MediaURL,Correct)"
" VALUES"
" (%ld,0,%ld,'',"
"'','','','','Y')",
"'','%s','','','Y')",
Gbl.Test.QstCod,
Gbl.Test.Answer.Integer);
Gbl.Test.Answer.Integer,
Med_GetStringTypeForDB (Med_NONE));
break;
case Tst_ANS_FLOAT:
Str_SetDecimalPointToUS (); // To print the floating point as a dot
@ -6669,9 +6672,10 @@ static void Tst_InsertAnswersIntoDB (void)
"MediaName,MediaType,MediaTitle,MediaURL,Correct)"
" VALUES"
" (%ld,%u,'%lg','',"
"'','','','','Y')",
"'','%s','','','Y')",
Gbl.Test.QstCod,i,
Gbl.Test.Answer.FloatingPoint[i]);
Gbl.Test.Answer.FloatingPoint[i],
Med_GetStringTypeForDB (Med_NONE));
Str_SetDecimalPointToLocal (); // Return to local system
break;
case Tst_ANS_TRUE_FALSE:
@ -6681,9 +6685,10 @@ static void Tst_InsertAnswersIntoDB (void)
"MediaName,Mediatype,MediaTitle,MediaURL,Correct)"
" VALUES"
" (%ld,0,'%c','',"
"'','','','','Y')",
"'','%s','','','Y')",
Gbl.Test.QstCod,
Gbl.Test.Answer.TF);
Gbl.Test.Answer.TF,
Med_GetStringTypeForDB (Med_NONE));
break;
case Tst_ANS_UNIQUE_CHOICE:
case Tst_ANS_MULTIPLE_CHOICE:
@ -6711,7 +6716,8 @@ static void Tst_InsertAnswersIntoDB (void)
'N');
/* Update image status */
if (Gbl.Test.Answer.Options[NumOpt].Media.Name[0])
if (Gbl.Test.Answer.Options[NumOpt].Media.Name[0] &&
Gbl.Test.Answer.Options[NumOpt].Media.Type != Med_NONE)
Gbl.Test.Answer.Options[NumOpt].Media.Status = Med_NAME_STORED_IN_DB;
}
break;
@ -6781,7 +6787,7 @@ static void Tst_RemoveImgFileFromStemOfQst (long CrsCod,long QstCod)
" WHERE QstCod=%ld AND CrsCod=%ld",
QstCod,CrsCod))
/***** Remove media file *****/
Med_RemoveMediaFileFromRow (mysql_res);
Med_RemoveMediaFilesFromRow (mysql_res);
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
@ -6833,7 +6839,7 @@ static void Tst_RemoveImgFileFromAnsOfQst (long CrsCod,long QstCod,unsigned AnsI
" AND tst_answers.AnsInd=%u",
CrsCod,QstCod,QstCod,AnsInd))
/***** Remove media file *****/
Med_RemoveMediaFileFromRow (mysql_res);
Med_RemoveMediaFilesFromRow (mysql_res);
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);

View File

@ -46871,7 +46871,7 @@ 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
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).";

View File

@ -3450,8 +3450,9 @@ static int Svc_SendMessageToUsr (long OriginalMsgCod,
"MediaName,MediaType,MediaTitle,MediaURL)"
" VALUES"
" ('%s','%s',"
"'','','','')",
Subject,Content);
"'','%s','','')",
Subject,Content,
Med_GetStringTypeForDB (Med_NONE));
/* Insert message in sent messages */
DB_QueryINSERT ("can not create message",