From 033766858f0b7684a892f3a7129179bcb35f600c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Tue, 19 Mar 2019 11:20:29 +0100 Subject: [PATCH] Version18.81.4 --- swad_changelog.h | 3 +- swad_forum.c | 14 +---- swad_media.c | 44 +++++++++++++ swad_media.h | 1 + swad_message.c | 14 +---- swad_test.c | 158 +++++++++++------------------------------------ swad_timeline.c | 28 ++------- 7 files changed, 91 insertions(+), 171 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index 6682fead7..2a320d137 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -459,10 +459,11 @@ En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 18.81.3 (2019-03-19)" +#define Log_PLATFORM_VERSION "SWAD 18.81.4 (2019-03-19)" #define CSS_FILE "swad18.80.css" #define JS_FILE "swad18.80.js" /* + Version 18.81.4: Mar 19, 2019 Code refactoring related to media. (240586 lines) 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; diff --git a/swad_forum.c b/swad_forum.c index 4986554d3..57ecd497f 100644 --- a/swad_forum.c +++ b/swad_forum.c @@ -500,18 +500,8 @@ static long For_InsertForumPst (long ThrCod,long UsrCod, { long PstCod; - /***** Check if image is received and processed *****/ - Media->MedCod = -1L; - if (Media->Action == Med_ACTION_NEW_MEDIA && // New media - Media->Status == Med_PROCESSED) // The new media received has been processed - { - /* Move processed media to definitive directory */ - Med_MoveMediaToDefinitiveDir (Media); - - /* Store media in database */ - if (Media->Status == Med_MOVED) - Med_StoreMediaInDB (Media); // Set Media->MedCod - } + /***** Store media in filesystem and database *****/ + Med_RemoveKeepOrStoreMedia (-1L,Media); /***** Insert forum post in the database *****/ PstCod = diff --git a/swad_media.c b/swad_media.c index 03996d903..17ecc71bb 100644 --- a/swad_media.c +++ b/swad_media.c @@ -1137,6 +1137,50 @@ static void Med_GetAndProcessEmbedFromForm (const char *ParamURL, } } +/*****************************************************************************/ +/**** Remove media, keep media or store media, depending on media action *****/ +/*****************************************************************************/ + +void Med_RemoveKeepOrStoreMedia (long CurrentMedCodInDB,struct Media *Media) + { + switch (Media->Action) + { + case Med_ACTION_NO_MEDIA: + /* Remove possible current media */ + Med_RemoveMedia (Media->MedCod); + + /* Reset media data */ + Med_ResetMedia (Media); + break; + case Med_ACTION_KEEP_MEDIA: + /* Keep current media */ + Media->MedCod = CurrentMedCodInDB; + Med_GetMediaDataByCod (Media); + break; + case Med_ACTION_NEW_MEDIA: + /* Remove possible current media */ + Med_RemoveMedia (Media->MedCod); + + /* New media received and processed sucessfully? */ + if (Media->Status == Med_PROCESSED) // The new media received has been processed + { + /* Move processed media to definitive directory */ + Med_MoveMediaToDefinitiveDir (Media); + + if (Media->Status == Med_MOVED) + /* Store media in database */ + Med_StoreMediaInDB (Media); // Set Media->MedCod + else + /* Reset media data */ + Med_ResetMedia (Media); + } + else + /* Reset media data */ + Med_ResetMedia (Media); + break; + } + } + /*****************************************************************************/ /**** Move temporary processed media file to definitive private directory ****/ /*****************************************************************************/ diff --git a/swad_media.h b/swad_media.h index 7fd81eae0..a4c890802 100644 --- a/swad_media.h +++ b/swad_media.h @@ -145,6 +145,7 @@ void Med_GetMediaFromForm (int NumMediaInForm,struct Media *Media, const char *SectionForAlerts); void Med_SetParamNames (struct ParamUploadMedia *ParamUploadMedia,int NumMediaInForm); +void Med_RemoveKeepOrStoreMedia (long CurrentMedCodInDB,struct Media *Media); void Med_MoveMediaToDefinitiveDir (struct Media *Media); void Med_StoreMediaInDB (struct Media *Media); diff --git a/swad_message.c b/swad_message.c index 13f08d7b1..14fa29813 100644 --- a/swad_message.c +++ b/swad_message.c @@ -1281,18 +1281,8 @@ static long Msg_InsertNewMsg (const char *Subject,const char *Content, { long MsgCod; - /***** Check if image is received and processed *****/ - Media->MedCod = -1L; - if (Media->Action == Med_ACTION_NEW_MEDIA && // New media - Media->Status == Med_PROCESSED) // The new media received has been processed - { - /* Move processed image to definitive directory */ - Med_MoveMediaToDefinitiveDir (Media); - - /* Store media in database */ - if (Media->Status == Med_MOVED) - Med_StoreMediaInDB (Media); // Set Media->MedCod - } + /***** Store media in filesystem and database *****/ + Med_RemoveKeepOrStoreMedia (-1L,Media); /***** Insert message subject and content in the database *****/ MsgCod = diff --git a/swad_test.c b/swad_test.c index b41f1c308..6a415e908 100644 --- a/swad_test.c +++ b/swad_test.c @@ -257,6 +257,7 @@ static void Tst_FreeMediaOfQuestion (void); static void Tst_GetQstDataFromDB (char Stem[Cns_MAX_BYTES_TEXT + 1], char Feedback[Cns_MAX_BYTES_TEXT + 1]); +static long Tst_GetMedCodFromDB (int NumOpt); static void Tst_GetMediaFromDB (int NumOpt,struct Media *Media); static Tst_AnswerType_t Tst_ConvertFromUnsignedStrToAnsTyp (const char *UnsignedStr); @@ -281,10 +282,8 @@ static void Tst_RemAnsFromQst (void); static void Tst_RemTagsFromQst (void); static void Tst_RemoveUnusedTagsFromCurrentCrs (void); -static void Tst_RemoveMediaFromStemOfQst (long CrsCod,long QstCod); static void Tst_RemoveAllMedFilesFromStemOfAllQstsInCrs (long CrsCod); -static void Tst_RemoveMediaFromAnsOfQst (long CrsCod,long QstCod,unsigned AnsInd); -static void Tst_RemoveAllMedFilesFromAnsOfQst (long CrsCod,long QstCod); +static void Tst_RemoveMediaFromAllAnsOfQst (long CrsCod,long QstCod); static void Tst_RemoveAllMedFilesFromAnsOfAllQstsInCrs (long CrsCod); static unsigned Tst_GetNumTstQuestions (Sco_Scope_t Scope,Tst_AnswerType_t AnsType,struct Tst_Stats *Stats); @@ -5635,15 +5634,16 @@ static void Tst_GetQstDataFromDB (char Stem[Cns_MAX_BYTES_TEXT + 1], } /*****************************************************************************/ -/***** Get possible media associated with a test question from database ******/ +/******* Get media code associated with a test question from database ********/ /*****************************************************************************/ // NumOpt < 0 ==> media associated to stem // NumOpt >= 0 ==> media associated to answer -static void Tst_GetMediaFromDB (int NumOpt,struct Media *Media) +static long Tst_GetMedCodFromDB (int NumOpt) { MYSQL_RES *mysql_res; MYSQL_ROW row; + long MedCod; /***** Query depending on NumOpt *****/ if (NumOpt < 0) @@ -5663,12 +5663,26 @@ static void Tst_GetMediaFromDB (int NumOpt,struct Media *Media) row = mysql_fetch_row (mysql_res); - /***** Get media (row[0]) *****/ - Media->MedCod = Str_ConvertStrCodToLongCod (row[0]); - Med_GetMediaDataByCod (Media); + /***** Get media code (row[0]) *****/ + MedCod = Str_ConvertStrCodToLongCod (row[0]); /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); + + return MedCod; + } + +/*****************************************************************************/ +/***** Get possible media associated with a test question from database ******/ +/*****************************************************************************/ +// NumOpt < 0 ==> media associated to stem +// NumOpt >= 0 ==> media associated to an answer option + +static void Tst_GetMediaFromDB (int NumOpt,struct Media *Media) + { + /***** Get media *****/ + Media->MedCod = Tst_GetMedCodFromDB (NumOpt); + Med_GetMediaDataByCod (Media); } /*****************************************************************************/ @@ -6134,37 +6148,11 @@ bool Tst_CheckIfQstFormatIsCorrectAndCountNumOptions (void) static void Tst_MoveMediaToDefinitiveDirectories (void) { unsigned NumOpt; + long CurrentMedCodInDB; /***** Media associated to question stem *****/ - Gbl.Test.Media.MedCod = -1L; // By default, no media is associated to question stem - switch (Gbl.Test.Media.Action) - { - 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); - - /* 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; - } + CurrentMedCodInDB = Tst_GetMedCodFromDB (-1L); // Get current media code associated to stem + Med_RemoveKeepOrStoreMedia (CurrentMedCodInDB,&Gbl.Test.Media); /****** Move media associated to answers *****/ if (Gbl.Test.AnswerType == Tst_ANS_UNIQUE_CHOICE || @@ -6173,35 +6161,8 @@ static void Tst_MoveMediaToDefinitiveDirectories (void) NumOpt < Gbl.Test.Answer.NumOptions; NumOpt++) { - 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) - { - 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); - - /* 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; - } + CurrentMedCodInDB = Tst_GetMedCodFromDB (NumOpt); // Get current media code associated to this option + Med_RemoveKeepOrStoreMedia (CurrentMedCodInDB,&Gbl.Test.Answer.Options[NumOpt].Media); } } @@ -6402,6 +6363,7 @@ void Tst_RemoveQst (void) { extern const char *Txt_Question_removed; bool EditingOnlyThisQst; + long MedCod; /***** Get the question code *****/ Gbl.Test.QstCod = Tst_GetQstCod (); @@ -6412,9 +6374,13 @@ void Tst_RemoveQst (void) to continue listing the rest of questions ******/ EditingOnlyThisQst = Par_GetParToBool ("OnlyThisQst"); - /***** Remove images associated to question *****/ - Tst_RemoveAllMedFilesFromAnsOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod); - Tst_RemoveMediaFromStemOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod); + /***** Remove media associated to question *****/ + /* Remove media associated to answers */ + Tst_RemoveMediaFromAllAnsOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod); + + /* Remove media associated to stem */ + MedCod = Tst_GetMedCodFromDB (-1L); + Med_RemoveMedia (MedCod); /***** Remove the question from all the tables *****/ /* Remove answers and tags from this test question */ @@ -6720,30 +6686,6 @@ static void Tst_RemoveUnusedTagsFromCurrentCrs (void) Gbl.CurrentCrs.Crs.CrsCod); } -/*****************************************************************************/ -/********** Remove media associated to one stem of one test question *********/ -/*****************************************************************************/ - -static void Tst_RemoveMediaFromStemOfQst (long CrsCod,long QstCod) - { - MYSQL_RES *mysql_res; - unsigned NumMedia; - - /***** Get media codes associated to stem of a test question from database *****/ - NumMedia = - (unsigned) DB_QuerySELECT (&mysql_res,"can not get media", - "SELECT MedCod" // row[0] - " FROM tst_questions" - " WHERE QstCod=%ld AND CrsCod=%ld", - QstCod,CrsCod); - - /***** Remove media *****/ - Med_RemoveMediaFromAllRows (NumMedia,mysql_res); - - /***** Free structure that stores the query result *****/ - DB_FreeMySQLResult (&mysql_res); - } - /*****************************************************************************/ /** Remove all media associated to stems of all test questions in a course ***/ /*****************************************************************************/ @@ -6768,39 +6710,11 @@ static void Tst_RemoveAllMedFilesFromStemOfAllQstsInCrs (long CrsCod) DB_FreeMySQLResult (&mysql_res); } -/*****************************************************************************/ -/********* Remove media associated to one answer of a test question **********/ -/*****************************************************************************/ - -static void Tst_RemoveMediaFromAnsOfQst (long CrsCod,long QstCod,unsigned AnsInd) - { - MYSQL_RES *mysql_res; - unsigned NumMedia; - - /***** Get media codes associated to an answer of a test question from database *****/ - NumMedia = - (unsigned) DB_QuerySELECT (&mysql_res,"can not get media", - "SELECT tst_answers.MedCod" // row[0] - " FROM tst_questions,tst_answers" - " 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" - " AND tst_answers.AnsInd=%u", - CrsCod,QstCod,QstCod,AnsInd); - - /***** Go over result removing media files *****/ - Med_RemoveMediaFromAllRows (NumMedia,mysql_res); - - /***** Free structure that stores the query result *****/ - DB_FreeMySQLResult (&mysql_res); - } - /*****************************************************************************/ /******* Remove all media associated to all answers of a test question *******/ /*****************************************************************************/ -static void Tst_RemoveAllMedFilesFromAnsOfQst (long CrsCod,long QstCod) +static void Tst_RemoveMediaFromAllAnsOfQst (long CrsCod,long QstCod) { MYSQL_RES *mysql_res; unsigned NumMedia; diff --git a/swad_timeline.c b/swad_timeline.c index ce4a2c7ee..e7a99192d 100644 --- a/swad_timeline.c +++ b/swad_timeline.c @@ -2472,18 +2472,8 @@ static long TL_ReceivePost (void) if (Content[0] || // Text not empty Media.Status == Med_PROCESSED) // A media is attached { - /***** Check if media is received and processed *****/ - Media.MedCod = -1L; - if (Media.Action == Med_ACTION_NEW_MEDIA && // New media - Media.Status == Med_PROCESSED) // The new media received has been processed - { - /* Move processed image to definitive directory */ - Med_MoveMediaToDefinitiveDir (&Media); - - /* Store media in database */ - if (Media.Status == Med_MOVED) - Med_StoreMediaInDB (&Media); // Set Media.MedCod - } + /***** Store media in filesystem and database *****/ + Med_RemoveKeepOrStoreMedia (-1L,&Media); /***** Publish *****/ /* Insert post content in the database */ @@ -3198,18 +3188,8 @@ static long TL_ReceiveComment (void) if (Content[0] || // Text not empty Media.Status == Med_PROCESSED) // A media is attached { - /***** Check if media is received and processed *****/ - Media.MedCod = -1L; - if (Media.Action == Med_ACTION_NEW_MEDIA && // New media - Media.Status == Med_PROCESSED) // The new media received has been processed - { - /* Move processed image to definitive directory */ - Med_MoveMediaToDefinitiveDir (&Media); - - /* Store media in database */ - if (Media.Status == Med_MOVED) - Med_StoreMediaInDB (&Media); // Set Media.MedCod - } + /***** Store media in filesystem and database *****/ + Med_RemoveKeepOrStoreMedia (-1L,&Media); /***** Publish *****/ /* Insert into publications */