diff --git a/swad_changelog.h b/swad_changelog.h index 8c55a9bf9..868d544eb 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -114,12 +114,13 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.77.2 (2015-12-28)" +#define Log_PLATFORM_VERSION "SWAD 15.77.3 (2015-12-28)" #define CSS_FILE "swad15.77.2.css" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1 /* + Version 15.77.3: Dec 28, 2015 Insert social event when changing file from private to public. (188402 lines) Version 15.77.2: Dec 28, 2015 Changes in CSS related to social activity. (188368 lines) Version 15.77.1: Dec 28, 2015 Insert social event when posting in a global forum. (188342 lines) Version 15.77: Dec 28, 2015 New table in database for social activity. (188287 lines) diff --git a/swad_file_browser.c b/swad_file_browser.c index 95fcd5330..109150adb 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -47,6 +47,7 @@ #include "swad_parameter.h" #include "swad_photo.h" #include "swad_profile.h" +#include "swad_social.h" #include "swad_string.h" #include "swad_zip.h" @@ -9613,7 +9614,8 @@ void Brw_ChgFileMetadata (void) extern const char *Txt_The_properties_of_file_X_have_been_saved; extern const char *Txt_You_dont_have_permission_to_change_the_properties_of_file_X; struct FileMetadata FileMetadata; - bool PublicFile; + bool PublicFileBeforeEdition; + bool PublicFileAfterEdition; Brw_License_t License; /***** Get parameters related to file browser *****/ @@ -9626,6 +9628,9 @@ void Brw_ChgFileMetadata (void) /***** Check if I can change file metadata *****/ if (Brw_CheckIfICanEditFileMetadata (FileMetadata.PublisherUsrCod)) { + /* Check if the file was public before the edition */ + PublicFileBeforeEdition = FileMetadata.IsPublic; + /***** Get the new file privacy and license from form *****/ switch (Gbl.FileBrowser.Type) { @@ -9637,7 +9642,7 @@ void Brw_ChgFileMetadata (void) case Brw_ADMI_SHARE_DEG: case Brw_ADMI_DOCUM_CRS: case Brw_ADMI_SHARE_CRS: - PublicFile = Brw_GetParamPublicFile (); + PublicFileAfterEdition = Brw_GetParamPublicFile (); License = Brw_GetParLicense (); break; case Brw_ADMI_DOCUM_GRP: @@ -9647,11 +9652,11 @@ void Brw_ChgFileMetadata (void) case Brw_ADMI_WORKS_USR: case Brw_ADMI_WORKS_CRS: case Brw_ADMI_BRIEF_USR: - PublicFile = false; // Files in these zones can not be public + PublicFileAfterEdition = false; // Files in these zones can not be public License = Brw_GetParLicense (); break; default: - PublicFile = false; // Files in other zones can not be public + PublicFileAfterEdition = false; // Files in other zones can not be public License = Brw_LICENSE_DEFAULT; break; } @@ -9660,17 +9665,50 @@ void Brw_ChgFileMetadata (void) if (FileMetadata.FilCod > 0) // Entry exists in database Brw_ChangeFilePublicInDB (Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.FileBrowser.Priv.FullPathInTree, - PublicFile,License); + PublicFileAfterEdition,License); else // No entry in database - Brw_AddPathToDB (Gbl.Usrs.Me.UsrDat.UsrCod,FileMetadata.FileType, - Gbl.FileBrowser.Priv.FullPathInTree, - PublicFile,License); + FileMetadata.FilCod = Brw_AddPathToDB (Gbl.Usrs.Me.UsrDat.UsrCod,FileMetadata.FileType, + Gbl.FileBrowser.Priv.FullPathInTree, + PublicFileAfterEdition,License); /***** Remove the affected clipboards *****/ Brw_RemoveAffectedClipboards (Gbl.FileBrowser.Type, Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Other.UsrDat.UsrCod); + /***** Insert file into public social activity *****/ + if (!PublicFileBeforeEdition && + PublicFileAfterEdition) // Only if file has changed from private to public + switch (Gbl.FileBrowser.Type) + { + case Brw_ADMI_DOCUM_INS: + Soc_StoreSocialEvent (Soc_EVENT_INS_DOC_PUB_FILE,FileMetadata.FilCod); + break; + case Brw_ADMI_SHARE_INS: + Soc_StoreSocialEvent (Soc_EVENT_INS_SHA_PUB_FILE,FileMetadata.FilCod); + break; + case Brw_ADMI_DOCUM_CTR: + Soc_StoreSocialEvent (Soc_EVENT_CTR_DOC_PUB_FILE,FileMetadata.FilCod); + break; + case Brw_ADMI_SHARE_CTR: + Soc_StoreSocialEvent (Soc_EVENT_CTR_SHA_PUB_FILE,FileMetadata.FilCod); + break; + case Brw_ADMI_DOCUM_DEG: + Soc_StoreSocialEvent (Soc_EVENT_DEG_DOC_PUB_FILE,FileMetadata.FilCod); + break; + case Brw_ADMI_SHARE_DEG: + Soc_StoreSocialEvent (Soc_EVENT_DEG_SHA_PUB_FILE,FileMetadata.FilCod); + break; + case Brw_ADMI_DOCUM_CRS: + Soc_StoreSocialEvent (Soc_EVENT_CRS_DOC_PUB_FILE,FileMetadata.FilCod); + break; + case Brw_ADMI_SHARE_CRS: + Soc_StoreSocialEvent (Soc_EVENT_CRS_SHA_PUB_FILE,FileMetadata.FilCod); + break; + default: + break; + } + /***** Write message of confirmation *****/ sprintf (Gbl.Message,Txt_The_properties_of_file_X_have_been_saved, Gbl.FileBrowser.FilFolLnkName); @@ -10881,23 +10919,25 @@ void Brw_RemoveUsrWorksInAllCrss (struct UsrData *UsrDat,Cns_QuietOrVerbose_t Qu } /*****************************************************************************/ -/*********** Put a document or a shared file into a notification *************/ +/********** Get summary and content of a document or a shared file ***********/ /*****************************************************************************/ // This function may be called inside a web service, so don't report error -void Brw_GetNotifDocOrSharedFile (char *SummaryStr,char **ContentStr, - long FilCod,unsigned MaxChars,bool GetContent) +void Brw_GetSummaryAndContentOrSharedFile (char *SummaryStr,char **ContentStr, + long FilCod,unsigned MaxChars,bool GetContent) { char Query[256]; MYSQL_RES *mysql_res; MYSQL_ROW row; char FullPathInTreeFromDB[PATH_MAX+1]; char PathUntilFileName[PATH_MAX+1]; + char FileName[NAME_MAX+1]; SummaryStr[0] = '\0'; // Return nothing on error /***** Get subject of message from database *****/ - sprintf (Query,"SELECT Path FROM files WHERE FilCod='%ld'",FilCod); + sprintf (Query,"SELECT Path FROM files WHERE FilCod='%ld'", + FilCod); if (!mysql_query (&Gbl.mysql,Query)) if ((mysql_res = mysql_store_result (&Gbl.mysql)) != NULL) { @@ -10912,7 +10952,8 @@ void Brw_GetNotifDocOrSharedFile (char *SummaryStr,char **ContentStr, FullPathInTreeFromDB[PATH_MAX] = '\0'; Str_SplitFullPathIntoPathAndFileName (FullPathInTreeFromDB, PathUntilFileName, - SummaryStr); + FileName); + strcpy (SummaryStr,FileName); if (MaxChars) Str_LimitLengthHTMLStr (SummaryStr,MaxChars); diff --git a/swad_file_browser.h b/swad_file_browser.h index 2b1d309e1..132ba0b04 100644 --- a/swad_file_browser.h +++ b/swad_file_browser.h @@ -213,8 +213,8 @@ void Brw_RemoveGrpZones (long CrsCod,long GrpCod); void Brw_RemoveUsrWorksInCrs (struct UsrData *UsrDat,struct Course *Crs,Cns_QuietOrVerbose_t QuietOrVerbose); void Brw_RemoveUsrWorksInAllCrss (struct UsrData *UsrDat,Cns_QuietOrVerbose_t QuietOrVerbose); -void Brw_GetNotifDocOrSharedFile (char *SummaryStr,char **ContentStr, - long FilCod,unsigned MaxChars,bool GetContent); +void Brw_GetSummaryAndContentOrSharedFile (char *SummaryStr,char **ContentStr, + long FilCod,unsigned MaxChars,bool GetContent); unsigned Brw_ListDocsFound (const char *Query,const char *Title); diff --git a/swad_notification.c b/swad_notification.c index bbd627c67..bf7c6bb82 100644 --- a/swad_notification.c +++ b/swad_notification.c @@ -736,7 +736,7 @@ void Ntf_GetNotifSummaryAndContent (char *SummaryStr,char **ContentStr,Ntf_Notif break; case Ntf_EVENT_DOCUMENT_FILE: case Ntf_EVENT_SHARED_FILE: - Brw_GetNotifDocOrSharedFile (SummaryStr,ContentStr,Cod,MaxChars,GetContent); + Brw_GetSummaryAndContentOrSharedFile (SummaryStr,ContentStr,Cod,MaxChars,GetContent); break; case Ntf_EVENT_ASSIGNMENT: Asg_GetNotifAssignment (SummaryStr,ContentStr,Cod,MaxChars,GetContent); diff --git a/swad_social.c b/swad_social.c index 0ed3139d6..ee0d358be 100644 --- a/swad_social.c +++ b/swad_social.c @@ -347,20 +347,14 @@ static void Soc_GetEventSummary (Soc_SocialEvent_t SocialEvent,long Cod, case Soc_EVENT_UNKNOWN: break; case Soc_EVENT_INS_DOC_PUB_FILE: - break; case Soc_EVENT_INS_SHA_PUB_FILE: - break; case Soc_EVENT_CTR_DOC_PUB_FILE: - break; case Soc_EVENT_CTR_SHA_PUB_FILE: - break; case Soc_EVENT_DEG_DOC_PUB_FILE: - break; case Soc_EVENT_DEG_SHA_PUB_FILE: - break; case Soc_EVENT_CRS_DOC_PUB_FILE: - break; case Soc_EVENT_CRS_SHA_PUB_FILE: + Brw_GetSummaryAndContentOrSharedFile (SummaryStr,NULL,Cod,MaxChars,false); break; case Soc_EVENT_EXAM_ANNOUNCEMENT: break;