diff --git a/sql/swad.sql b/sql/swad.sql index a0505f4ca..384d95f52 100644 --- a/sql/swad.sql +++ b/sql/swad.sql @@ -559,15 +559,13 @@ CREATE TABLE IF NOT EXISTS forum_post ( NumNotif INT NOT NULL DEFAULT 0, Subject TEXT NOT NULL, Content LONGTEXT NOT NULL, - MediaName VARCHAR(43) NOT NULL DEFAULT '', - MediaType ENUM('none','jpg','gif','mp4','webm','ogg','youtube') NOT NULL DEFAULT 'none', - MediaTitle VARCHAR(2047) NOT NULL DEFAULT '', - MediaURL VARCHAR(255) NOT NULL DEFAULT '', + MedCod INT NOT NULL DEFAULT -1, UNIQUE INDEX(PstCod), INDEX(ThrCod), INDEX(UsrCod), INDEX(CreatTime), - INDEX(ModifTime)); + INDEX(ModifTime), + INDEX(MedCod)); -- -- Table forum_thr_clip: stores the clipboards used to move threads from one forum to another -- @@ -795,6 +793,17 @@ CREATE TABLE IF NOT EXISTS marks_properties ( Footer INT NOT NULL, UNIQUE INDEX(FilCod)); -- +-- Table media: stores information about media (images, videos, YouTube) +-- +CREATE TABLE IF NOT EXISTS media ( + MedCod INT NOT NULL AUTO_INCREMENT, + Type ENUM('none','jpg','gif','mp4','webm','ogg','youtube') NOT NULL DEFAULT 'none', + Name VARCHAR(43) NOT NULL DEFAULT '', + URL VARCHAR(255) NOT NULL DEFAULT '', + Title VARCHAR(2047) NOT NULL DEFAULT '', + UNIQUE INDEX(MedCod), + INDEX(Type)); +-- -- Table msg_banned: stores the users whose messages are banned (FromUsrCod is a recipien banned from ToUsrCod) -- CREATE TABLE IF NOT EXISTS msg_banned ( @@ -808,12 +817,10 @@ CREATE TABLE IF NOT EXISTS msg_content ( MsgCod INT NOT NULL AUTO_INCREMENT, Subject TEXT NOT NULL, Content LONGTEXT NOT NULL, - MediaName VARCHAR(43) NOT NULL DEFAULT '', - MediaType ENUM('none','jpg','gif','mp4','webm','ogg','youtube') NOT NULL DEFAULT 'none', - MediaTitle VARCHAR(2047) NOT NULL DEFAULT '', - MediaURL VARCHAR(255) NOT NULL DEFAULT '', + MedCod INT NOT NULL DEFAULT -1, UNIQUE INDEX(MsgCod), - FULLTEXT(Subject,Content)) ENGINE = MYISAM; + FULLTEXT(Subject,Content), + INDEX(MedCod)) ENGINE = MYISAM; -- -- Table msg_content_deleted: stores the content of the sent messages that have been deleted -- @@ -821,12 +828,10 @@ CREATE TABLE IF NOT EXISTS msg_content_deleted ( MsgCod INT NOT NULL, Subject TEXT NOT NULL, Content LONGTEXT NOT NULL, - MediaName VARCHAR(43) NOT NULL DEFAULT '', - MediaType ENUM('none','jpg','gif','mp4','webm','ogg','youtube') NOT NULL DEFAULT 'none', - MediaTitle VARCHAR(2047) NOT NULL DEFAULT '', - MediaURL VARCHAR(255) NOT NULL DEFAULT '', + MedCod INT NOT NULL DEFAULT -1, UNIQUE INDEX(MsgCod), - FULLTEXT(Subject,Content)) ENGINE = MYISAM; + FULLTEXT(Subject,Content), + INDEX(MedCod)) ENGINE = MYISAM; -- -- Table msg_rcv: stores the received messages -- @@ -1025,12 +1030,10 @@ CREATE TABLE IF NOT EXISTS sessions ( CREATE TABLE IF NOT EXISTS social_comments ( PubCod BIGINT NOT NULL, Content LONGTEXT NOT NULL, - MediaName VARCHAR(43) NOT NULL DEFAULT '', - MediaType ENUM('none','jpg','gif','mp4','webm','ogg','youtube') NOT NULL DEFAULT 'none', - MediaTitle VARCHAR(2047) NOT NULL DEFAULT '', - MediaURL VARCHAR(255) NOT NULL DEFAULT '', + MedCod INT NOT NULL DEFAULT -1, UNIQUE INDEX(PubCod), - FULLTEXT(Content)) ENGINE = MYISAM; + FULLTEXT(Content), + INDEX(MedCod)) ENGINE = MYISAM; -- -- Table social_comments_fav: stores users who marked social comments as favourite -- @@ -1074,12 +1077,10 @@ CREATE TABLE IF NOT EXISTS social_notes_fav ( CREATE TABLE IF NOT EXISTS social_posts ( PstCod INT NOT NULL AUTO_INCREMENT, Content LONGTEXT NOT NULL, - MediaName VARCHAR(43) NOT NULL DEFAULT '', - MediaType ENUM('none','jpg','gif','mp4','webm','ogg','youtube') NOT NULL DEFAULT 'none', - MediaTitle VARCHAR(2047) NOT NULL DEFAULT '', - MediaURL VARCHAR(255) NOT NULL DEFAULT '', + MedCod INT NOT NULL DEFAULT -1, UNIQUE INDEX(PstCod), - FULLTEXT(Content)) ENGINE = MYISAM; + FULLTEXT(Content), + INDEX(MedCod)) ENGINE = MYISAM; -- -- Table social_pubs: stores social publishings (original notes, sharede notes or comments) -- @@ -1203,12 +1204,10 @@ CREATE TABLE IF NOT EXISTS tst_answers ( AnsInd TINYINT NOT NULL, Answer TEXT NOT NULL, Feedback TEXT NOT NULL, - MediaName VARCHAR(43) NOT NULL DEFAULT '', - MediaType ENUM('none','jpg','gif','mp4','webm','ogg','youtube') NOT NULL DEFAULT 'none', - MediaTitle VARCHAR(2047) NOT NULL DEFAULT '', - MediaURL VARCHAR(255) NOT NULL DEFAULT '', + MedCod INT NOT NULL DEFAULT -1, Correct ENUM('N','Y') NOT NULL, - INDEX(QstCod)); + INDEX(QstCod), + INDEX(MedCod)); -- -- Table tst_config: stores the configuration of tests for each course -- @@ -1264,15 +1263,13 @@ CREATE TABLE IF NOT EXISTS tst_questions ( Shuffle ENUM('N','Y') NOT NULL, Stem TEXT NOT NULL, Feedback TEXT NOT NULL, - MediaName VARCHAR(43) NOT NULL DEFAULT '', - MediaType ENUM('none','jpg','gif','mp4','webm','ogg','youtube') NOT NULL DEFAULT 'none', - MediaTitle VARCHAR(2047) NOT NULL DEFAULT '', - MediaURL VARCHAR(255) NOT NULL DEFAULT '', + MedCod INT NOT NULL DEFAULT -1, NumHits INT NOT NULL DEFAULT 0, NumHitsNotBlank INT NOT NULL DEFAULT 0, Score DOUBLE PRECISION NOT NULL DEFAULT 0, UNIQUE INDEX(QstCod), - INDEX(CrsCod,EditTime)); + INDEX(CrsCod,EditTime), + INDEX(MedCod)); -- -- Table tst_status: stores the status of tests for each session -- diff --git a/swad_changelog.h b/swad_changelog.h index 07d9c2fee..6682fead7 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -459,20 +459,22 @@ En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 18.81.1 (2019-03-18)" +#define Log_PLATFORM_VERSION "SWAD 18.81.3 (2019-03-19)" #define CSS_FILE "swad18.80.css" #define JS_FILE "swad18.80.js" /* -TODO: Remove unused fields MediaName,MediaType,MediaTitle,MediaURL,Media from tables: -// ALTER TABLE forum_post DROP COLUMN MediaName,DROP COLUMN MediaType,DROP COLUMN MediaTitle,DROP COLUMN MediaURL; -// ALTER TABLE msg_content DROP COLUMN MediaName,DROP COLUMN MediaType,DROP COLUMN MediaTitle,DROP COLUMN MediaURL; -// ALTER TABLE msg_content_deleted DROP COLUMN MediaName,DROP COLUMN MediaType,DROP COLUMN MediaTitle,DROP COLUMN MediaURL; -// ALTER TABLE social_comments DROP COLUMN MediaName,DROP COLUMN MediaType,DROP COLUMN MediaTitle,DROP COLUMN MediaURL; -// ALTER TABLE social_posts DROP COLUMN MediaName,DROP COLUMN MediaType,DROP COLUMN MediaTitle,DROP COLUMN MediaURL; -// ALTER TABLE tst_answers DROP COLUMN MediaName,DROP COLUMN MediaType,DROP COLUMN MediaTitle,DROP COLUMN MediaURL; -// ALTER TABLE tst_questions DROP COLUMN MediaName,DROP COLUMN MediaType,DROP COLUMN MediaTitle,DROP COLUMN MediaURL; -// ALTER TABLE media DROP COLUMN T,DROP COLUMN Cod; + Version 18.81.3: Mar 19, 2019 Remove unused fields MediaName,MediaType,MediaTitle,MediaURL,Media from tables. (240657 lines) + 8 changes necessary in database: +ALTER TABLE forum_post DROP COLUMN MediaName,DROP COLUMN MediaType,DROP COLUMN MediaTitle,DROP COLUMN MediaURL; +ALTER TABLE msg_content DROP COLUMN MediaName,DROP COLUMN MediaType,DROP COLUMN MediaTitle,DROP COLUMN MediaURL; +ALTER TABLE msg_content_deleted DROP COLUMN MediaName,DROP COLUMN MediaType,DROP COLUMN MediaTitle,DROP COLUMN MediaURL; +ALTER TABLE social_comments DROP COLUMN MediaName,DROP COLUMN MediaType,DROP COLUMN MediaTitle,DROP COLUMN MediaURL; +ALTER TABLE social_posts DROP COLUMN MediaName,DROP COLUMN MediaType,DROP COLUMN MediaTitle,DROP COLUMN MediaURL; +ALTER TABLE tst_answers DROP COLUMN MediaName,DROP COLUMN MediaType,DROP COLUMN MediaTitle,DROP COLUMN MediaURL; +ALTER TABLE tst_questions DROP COLUMN MediaName,DROP COLUMN MediaType,DROP COLUMN MediaTitle,DROP COLUMN MediaURL; +ALTER TABLE media DROP COLUMN T,DROP COLUMN Cod; + Version 18.81.2: Mar 19, 2019 Fixed bugs in tests. (240715 lines) Version 18.81.1: Mar 18, 2019 Code refactoring related to media. (240691 lines) Version 18.81: Mar 18, 2019 New database table media to store images and videos. Fixed bugs in removal of publications in timeline. (240704 lines) diff --git a/swad_database.c b/swad_database.c index ebf3cbc58..2cd04ac1e 100644 --- a/swad_database.c +++ b/swad_database.c @@ -1207,24 +1207,20 @@ 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 | | -| MedCod | int(11) | NO | MUL | -1 | | -| MediaName | varchar(43) | NO | | | | -| MediaType | enum('none','jpg','gif','mp4','webm','ogg','youtube') | NO | | none | | -| MediaTitle | varchar(2047) | NO | | | | -| MediaURL | varchar(255) | NO | | | | -+------------+-------------------------------------------------------+------+-----+---------+----------------+ -13 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 | | +| MedCod | int(11) | NO | MUL | -1 | | ++-----------+----------+------+-----+---------+----------------+ +9 rows in set (0.00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS forum_post (" "PstCod INT NOT NULL AUTO_INCREMENT," @@ -1236,10 +1232,6 @@ mysql> DESCRIBE forum_post; "Subject TEXT NOT NULL," // Cns_MAX_BYTES_SUBJECT "Content LONGTEXT NOT NULL," // Cns_MAX_BYTES_LONG_TEXT "MedCod INT NOT NULL DEFAULT -1," - "MediaName VARCHAR(43) NOT NULL DEFAULT ''," // Med_BYTES_NAME - "MediaType ENUM('none','jpg','gif','mp4','webm','ogg','youtube') 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)," "INDEX(ThrCod)," "INDEX(UsrCod)," @@ -1729,7 +1721,7 @@ mysql> DESCRIBE media; | URL | varchar(255) | NO | | | | | Title | varchar(2047) | NO | | | | +--------+-------------------------------------------------------+------+-----+---------+----------------+ -5 rows in set (0.00 sec) +5 rows in set (0.01 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS media (" "MedCod INT NOT NULL AUTO_INCREMENT," @@ -1759,29 +1751,21 @@ 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 | | -| MedCod | int(11) | NO | MUL | -1 | | -| MediaName | varchar(43) | NO | | | | -| MediaType | enum('none','jpg','gif','mp4','webm','ogg','youtube') | NO | | none | | -| MediaTitle | varchar(2047) | NO | | | | -| MediaURL | varchar(255) | NO | | | | -+------------+-------------------------------------------------------+------+-----+---------+----------------+ -8 rows in set (0.00 sec) ++---------+----------+------+-----+---------+----------------+ +| Field | Type | Null | Key | Default | Extra | ++---------+----------+------+-----+---------+----------------+ +| MsgCod | int(11) | NO | PRI | NULL | auto_increment | +| Subject | text | NO | MUL | NULL | | +| Content | longtext | NO | | NULL | | +| MedCod | int(11) | NO | MUL | -1 | | ++---------+----------+------+-----+---------+----------------+ +4 rows in set (0.00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS msg_content (" "MsgCod INT NOT NULL AUTO_INCREMENT," "Subject TEXT NOT NULL," "Content LONGTEXT NOT NULL," "MedCod INT NOT NULL DEFAULT -1," - "MediaName VARCHAR(43) NOT NULL DEFAULT ''," // Med_BYTES_NAME - "MediaType ENUM('none','jpg','gif','mp4','webm','ogg','youtube') 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)," "FULLTEXT(Subject,Content)," "INDEX(MedCod)) ENGINE = MYISAM;"); @@ -1789,29 +1773,21 @@ 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 | | -| MedCod | int(11) | NO | MUL | -1 | | -| MediaName | varchar(43) | NO | | | | -| MediaType | enum('none','jpg','gif','mp4','webm','ogg','youtube') | NO | | none | | -| MediaTitle | varchar(2047) | NO | | | | -| MediaURL | varchar(255) | NO | | | | -+------------+-------------------------------------------------------+------+-----+---------+-------+ -8 rows in set (0.00 sec) ++---------+----------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++---------+----------+------+-----+---------+-------+ +| MsgCod | int(11) | NO | PRI | NULL | | +| Subject | text | NO | MUL | NULL | | +| Content | longtext | NO | | NULL | | +| MedCod | int(11) | NO | MUL | -1 | | ++---------+----------+------+-----+---------+-------+ +4 rows in set (0.00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS msg_content_deleted (" "MsgCod INT NOT NULL," "Subject TEXT NOT NULL," "Content LONGTEXT NOT NULL," "MedCod INT NOT NULL DEFAULT -1," - "MediaName VARCHAR(43) NOT NULL DEFAULT ''," // Med_BYTES_NAME - "MediaType ENUM('none','jpg','gif','mp4','webm','ogg','youtube') 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)," "FULLTEXT(Subject,Content)," "INDEX(MedCod)) ENGINE = MYISAM;"); @@ -2208,27 +2184,19 @@ 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 | | -| MedCod | int(11) | NO | MUL | -1 | | -| MediaName | varchar(43) | NO | | | | -| MediaType | enum('none','jpg','gif','mp4','webm','ogg','youtube') | NO | | none | | -| MediaTitle | varchar(2047) | NO | | | | -| MediaURL | varchar(255) | NO | | | | -+------------+-------------------------------------------------------+------+-----+---------+-------+ -7 rows in set (0.01 sec) ++---------+------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++---------+------------+------+-----+---------+-------+ +| PubCod | bigint(20) | NO | PRI | NULL | | +| Content | longtext | NO | MUL | NULL | | +| MedCod | int(11) | NO | MUL | -1 | | ++---------+------------+------+-----+---------+-------+ +3 rows in set (0.00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS social_comments (" "PubCod BIGINT NOT NULL," "Content LONGTEXT NOT NULL," "MedCod INT NOT NULL DEFAULT -1," - "MediaName VARCHAR(43) NOT NULL DEFAULT ''," // Med_BYTES_NAME - "MediaType ENUM('none','jpg','gif','mp4','webm','ogg','youtube') 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)," "FULLTEXT(Content)," "INDEX(MedCod)) ENGINE = MYISAM;"); @@ -2309,27 +2277,19 @@ 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 | | -| MedCod | int(11) | NO | MUL | -1 | | -| MediaName | varchar(43) | NO | | | | -| MediaType | enum('none','jpg','gif','mp4','webm','ogg','youtube') | NO | | none | | -| MediaTitle | varchar(2047) | NO | | | | -| MediaURL | varchar(255) | NO | | | | -+------------+-------------------------------------------------------+------+-----+---------+----------------+ -7 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 | | +| MedCod | int(11) | NO | MUL | -1 | | ++---------+----------+------+-----+---------+----------------+ +3 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," "MedCod INT NOT NULL DEFAULT -1," - "MediaName VARCHAR(43) NOT NULL DEFAULT ''," // Med_BYTES_NAME - "MediaType ENUM('none','jpg','gif','mp4','webm','ogg','youtube') 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)," "FULLTEXT(Content)," "INDEX(MedCod)) ENGINE = MYISAM;"); @@ -2585,21 +2545,17 @@ 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 | | -| MedCod | int(11) | NO | MUL | -1 | | -| MediaName | varchar(43) | NO | | | | -| MediaType | enum('none','jpg','gif','mp4','webm','ogg','youtube') | NO | | none | | -| MediaTitle | varchar(2047) | NO | | | | -| MediaURL | varchar(255) | NO | | | | -| Correct | enum('N','Y') | NO | | NULL | | -+------------+-------------------------------------------------------+------+-----+---------+-------+ -10 rows in set (0.00 sec) ++----------+---------------+------+-----+---------+-------+ +| 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 | | +| MedCod | int(11) | NO | MUL | -1 | | +| Correct | enum('N','Y') | NO | | NULL | | ++----------+---------------+------+-----+---------+-------+ +6 rows in set (0.00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS tst_answers (" "QstCod INT NOT NULL," @@ -2607,10 +2563,6 @@ mysql> DESCRIBE tst_answers; "Answer TEXT NOT NULL," // Tst_MAX_BYTES_ANSWER_OR_FEEDBACK "Feedback TEXT NOT NULL," // Tst_MAX_BYTES_ANSWER_OR_FEEDBACK "MedCod INT NOT NULL DEFAULT -1," - "MediaName VARCHAR(43) NOT NULL DEFAULT ''," // Med_BYTES_NAME - "MediaType ENUM('none','jpg','gif','mp4','webm','ogg','youtube') 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," "INDEX(QstCod)," "INDEX(MedCod))"); @@ -2726,15 +2678,11 @@ mysql> DESCRIBE tst_questions; | Stem | text | NO | | NULL | | | Feedback | text | NO | | NULL | | | MedCod | int(11) | NO | MUL | -1 | | -| MediaName | varchar(43) | NO | | | | -| MediaType | enum('none','jpg','gif','mp4','webm','ogg','youtube') | NO | | none | | -| MediaTitle | varchar(2047) | NO | | | | -| MediaURL | varchar(255) | NO | | | | | NumHits | int(11) | NO | | 0 | | | NumHitsNotBlank | int(11) | NO | | 0 | | | Score | double | NO | | 0 | | +-----------------+---------------------------------------------------------------------------+------+-----+---------+----------------+ -15 rows in set (0.00 sec) +11 rows in set (0.00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS tst_questions (" "QstCod INT NOT NULL AUTO_INCREMENT," @@ -2745,10 +2693,6 @@ mysql> DESCRIBE tst_questions; "Stem TEXT NOT NULL," // Cns_MAX_BYTES_TEXT "Feedback TEXT NOT NULL," // Cns_MAX_BYTES_TEXT "MedCod INT NOT NULL DEFAULT -1," - "MediaName VARCHAR(43) NOT NULL DEFAULT ''," // Med_BYTES_NAME - "MediaType ENUM('none','jpg','gif','mp4','webm','ogg','youtube') 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," "NumHitsNotBlank INT NOT NULL DEFAULT 0," "Score DOUBLE PRECISION NOT NULL DEFAULT 0," diff --git a/swad_media.c b/swad_media.c index 4c40aed2d..03996d903 100644 --- a/swad_media.c +++ b/swad_media.c @@ -952,7 +952,6 @@ static int Med_ResizeImage (struct Media *Media, Lay_ShowErrorAndExit ("Error when running command to process media."); ReturnCode = WEXITSTATUS(ReturnCode); - return ReturnCode; } diff --git a/swad_test.c b/swad_test.c index fab124eff..b41f1c308 100644 --- a/swad_test.c +++ b/swad_test.c @@ -5185,7 +5185,8 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1], AnswerHasContent = false; if (Gbl.Test.Answer.Options[NumOpt].Text) - if (Gbl.Test.Answer.Options[NumOpt].Text[0]) + if (Gbl.Test.Answer.Options[NumOpt].Text[0] || // Text + Gbl.Test.Answer.Options[NumOpt].Media.Type != Med_TYPE_NONE) // or media AnswerHasContent = true; DisplayRightColumn = NumOpt < 2 || // Display at least the two first options AnswerHasContent; @@ -5268,8 +5269,6 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1], NumOpt); if (OptionsDisabled) fprintf (Gbl.F.Out," disabled=\"disabled\""); - if (NumOpt == 0) // First textarea required - fprintf (Gbl.F.Out," required=\"required\""); fprintf (Gbl.F.Out,">"); if (AnswerHasContent) fprintf (Gbl.F.Out,"%s",Gbl.Test.Answer.Options[NumOpt].Text); @@ -5638,8 +5637,8 @@ static void Tst_GetQstDataFromDB (char Stem[Cns_MAX_BYTES_TEXT + 1], /*****************************************************************************/ /***** Get possible media associated with a test question from database ******/ /*****************************************************************************/ -// NumOpt < 0 ==> image associated to stem -// NumOpt >= 0 ==> image associated to answer +// NumOpt < 0 ==> media associated to stem +// NumOpt >= 0 ==> media associated to answer static void Tst_GetMediaFromDB (int NumOpt,struct Media *Media) { @@ -5648,14 +5647,14 @@ static void Tst_GetMediaFromDB (int NumOpt,struct Media *Media) /***** Query depending on NumOpt *****/ if (NumOpt < 0) - // Get image associated to stem + // Get media associated to stem DB_QuerySELECT (&mysql_res,"can not get media", "SELECT MedCod" // row[0] " FROM tst_questions" " WHERE QstCod=%ld AND CrsCod=%ld", Gbl.Test.QstCod,Gbl.CurrentCrs.Crs.CrsCod); else - // Get image associated to answer + // Get media associated to answer DB_QuerySELECT (&mysql_res,"can not get media", "SELECT MedCod" // row[0] " FROM tst_answers" @@ -5809,7 +5808,7 @@ static void Tst_GetQstFromForm (char *Stem,char *Feedback) /***** Get question feedback *****/ Par_GetParToHTML ("Feedback",Feedback,Cns_MAX_BYTES_TEXT); - /***** Get image associated to the stem (action, file and title) *****/ + /***** Get media associated to the stem (action, file and title) *****/ Gbl.Test.Media.Width = Tst_IMAGE_SAVED_MAX_WIDTH; Gbl.Test.Media.Height = Tst_IMAGE_SAVED_MAX_HEIGHT; Gbl.Test.Media.Quality = Tst_IMAGE_SAVED_QUALITY; @@ -5882,8 +5881,7 @@ static void Tst_GetQstFromForm (char *Stem,char *Feedback) Par_GetParToHTML (FbStr,Gbl.Test.Answer.Options[NumOpt].Feedback, Tst_MAX_BYTES_ANSWER_OR_FEEDBACK); - /* Get image associated to the answer (action, file and title) */ - + /* Get media associated to the answer (action, file and title) */ if (Gbl.Test.AnswerType == Tst_ANS_UNIQUE_CHOICE || Gbl.Test.AnswerType == Tst_ANS_MULTIPLE_CHOICE) { @@ -6052,7 +6050,8 @@ bool Tst_CheckIfQstFormatIsCorrectAndCountNumOptions (void) NumOpt++) if (Gbl.Test.Answer.Options[NumOpt].Text) { - if (Gbl.Test.Answer.Options[NumOpt].Text[0]) + if (Gbl.Test.Answer.Options[NumOpt].Text[0] || // Text + Gbl.Test.Answer.Options[NumOpt].Media.Type != Med_TYPE_NONE) // or media { if (ThereIsEndOfAnswers) { @@ -6136,50 +6135,72 @@ static void Tst_MoveMediaToDefinitiveDirectories (void) { unsigned NumOpt; - /****** Move image associated to question stem *****/ - if (Gbl.Test.QstCod > 0 && // Question already exists - Gbl.Test.Media.Action != Med_ACTION_KEEP_MEDIA) // Don't keep the current image - /* Remove possible file with the old image - (the new image file is already processed - and moved to the definitive directory) */ - Tst_RemoveMediaFromStemOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod); - - Gbl.Test.Media.MedCod = -1L; - if (Gbl.Test.Media.Action == Med_ACTION_NEW_MEDIA && // New media - Gbl.Test.Media.Status == Med_PROCESSED) // The new media received has been processed + /***** Media associated to question stem *****/ + Gbl.Test.Media.MedCod = -1L; // By default, no media is associated to question stem + switch (Gbl.Test.Media.Action) { - /* Move processed image to definitive directory */ - Med_MoveMediaToDefinitiveDir (&Gbl.Test.Media); + case Med_ACTION_NO_MEDIA: + /* Remove possible files with the old media */ + if (Gbl.Test.QstCod > 0) // Question already exists + Tst_RemoveMediaFromStemOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod); + break; + case Med_ACTION_KEEP_MEDIA: + /* Get current media associated to question */ + Tst_GetMediaFromDB (-1,&Gbl.Test.Media); + break; + case Med_ACTION_NEW_MEDIA: + /* Remove possible files with the old media */ + if (Gbl.Test.QstCod > 0) // Question already exists + Tst_RemoveMediaFromStemOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod); - /* Store media in database */ - if (Gbl.Test.Media.Status == Med_MOVED) - Med_StoreMediaInDB (&Gbl.Test.Media); // Set Gbl.Test.Media.MedCod + /* New media received and processed sucessfully? */ + if (Gbl.Test.Media.Status == Med_PROCESSED) // The new media received has been processed + { + /* Move processed media to definitive directory */ + Med_MoveMediaToDefinitiveDir (&Gbl.Test.Media); + + /* Store media in database */ + if (Gbl.Test.Media.Status == Med_MOVED) + Med_StoreMediaInDB (&Gbl.Test.Media); // Set Gbl.Test.Media.MedCod + } + break; } - /****** Move images associated to answers *****/ + /****** Move media associated to answers *****/ if (Gbl.Test.AnswerType == Tst_ANS_UNIQUE_CHOICE || Gbl.Test.AnswerType == Tst_ANS_MULTIPLE_CHOICE) for (NumOpt = 0; NumOpt < Gbl.Test.Answer.NumOptions; NumOpt++) { - if (Gbl.Test.QstCod > 0 && // Question already exists - Gbl.Test.Answer.Options[NumOpt].Media.Action != Med_ACTION_KEEP_MEDIA) // Don't keep the current image - /* Remove possible file with the old image - (the new image file is already processed - and moved to the definitive directory) */ - Tst_RemoveMediaFromAnsOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod,NumOpt); - - Gbl.Test.Answer.Options[NumOpt].Media.MedCod = -1L; - if (Gbl.Test.Answer.Options[NumOpt].Media.Action == Med_ACTION_NEW_MEDIA && // New media - Gbl.Test.Answer.Options[NumOpt].Media.Status == Med_PROCESSED) // The new media received has been processed + Gbl.Test.Answer.Options[NumOpt].Media.MedCod = -1L; // By default, no media is associated to answer stem + switch (Gbl.Test.Answer.Options[NumOpt].Media.Action) { - /* Move processed media to definitive directory */ - Med_MoveMediaToDefinitiveDir (&Gbl.Test.Answer.Options[NumOpt].Media); + case Med_ACTION_NO_MEDIA: + /* Remove possible files with the old media */ + if (Gbl.Test.QstCod > 0) // Question already exists + Tst_RemoveMediaFromAnsOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod,NumOpt); + break; + case Med_ACTION_KEEP_MEDIA: + /* Get current media associated to question */ + Tst_GetMediaFromDB (NumOpt,&Gbl.Test.Answer.Options[NumOpt].Media); + break; + case Med_ACTION_NEW_MEDIA: + /* Remove possible files with the old media */ + if (Gbl.Test.QstCod > 0) // Question already exists + Tst_RemoveMediaFromAnsOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod,NumOpt); - /* Store media in database */ - if (Gbl.Test.Media.Status == Med_MOVED) - Med_StoreMediaInDB (&Gbl.Test.Answer.Options[NumOpt].Media); // Set Gbl.Test.Answer.Options[NumOpt].Media.MedCod + /* New media received and processed sucessfully? */ + if (Gbl.Test.Answer.Options[NumOpt].Media.Status == Med_PROCESSED) // The new media received has been processed + { + /* Move processed media to definitive directory */ + Med_MoveMediaToDefinitiveDir (&Gbl.Test.Answer.Options[NumOpt].Media); + + /* Store media in database */ + if (Gbl.Test.Answer.Options[NumOpt].Media.Status == Med_MOVED) + Med_StoreMediaInDB (&Gbl.Test.Answer.Options[NumOpt].Media); // Set Gbl.Test.Answer.Options[NumOpt].Media.MedCod + } + break; } } } @@ -6632,7 +6653,8 @@ static void Tst_InsertAnswersIntoDB (void) for (NumOpt = 0; NumOpt < Gbl.Test.Answer.NumOptions; NumOpt++) - if (Gbl.Test.Answer.Options[NumOpt].Text[0]) + if (Gbl.Test.Answer.Options[NumOpt].Text[0] || // Text + Gbl.Test.Answer.Options[NumOpt].Media.Type != Med_TYPE_NONE) // or media { DB_QueryINSERT ("can not create answer", "INSERT INTO tst_answers"