diff --git a/swad_changelog.h b/swad_changelog.h index 4597ca14..f439425b 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -602,13 +602,15 @@ TODO: FIX BUG, URGENT! En las fechas como par TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo. */ -#define Log_PLATFORM_VERSION "SWAD 21.57.2 (2021-11-14)" +#define Log_PLATFORM_VERSION "SWAD 21.57.4 (2021-11-18)" #define CSS_FILE "swad21.57.css" #define JS_FILE "swad21.57.js" /* TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams + Version 21.57.4: Nov 17, 2021 Code refactoring in timeline. (319235 lines) + Version 21.57.3: Nov 17, 2021 Code refactoring in timeline. (319225 lines) Version 21.57.2: Nov 14, 2021 Code refactoring in timeline. (319257 lines) Version 21.57.1: Nov 12, 2021 Code refactoring in multimedia. (319241 lines) Version 21.57: Nov 11, 2021 Code refactoring in timeline. (319208 lines) diff --git a/swad_follow_database.c b/swad_follow_database.c index a81c2c70..873b7ebe 100644 --- a/swad_follow_database.c +++ b/swad_follow_database.c @@ -693,7 +693,6 @@ void Fol_DB_RemoveUsrFromUsrFollow (long UsrCod) void Fol_DB_CreateTmpTableMeAndUsrsIFollow (void) { - /***** Create temporary table with me and the users I follow *****/ DB_Query ("can not create temporary table", "CREATE TEMPORARY TABLE fol_tmp_me_and_followed " "(UsrCod INT NOT NULL," @@ -710,7 +709,6 @@ void Fol_DB_CreateTmpTableMeAndUsrsIFollow (void) void Fol_DB_DropTmpTableMeAndUsrsIFollow (void) { - /***** Drop temporary table with me and the users I follow *****/ DB_Query ("can not remove temporary table", "DROP TEMPORARY TABLE IF EXISTS fol_tmp_me_and_followed"); } diff --git a/swad_text.c b/swad_text.c index d6f9d963..9c8fbb3a 100644 --- a/swad_text.c +++ b/swad_text.c @@ -52922,27 +52922,6 @@ const char *Txt_TIMELINE_NOTE_TOP_MESSAGES[Tml_NUM_TOP_MESSAGES] = "oznaczone jako ulubiony" #elif L==9 // pt "marcou como favorito" -#endif - , - [Tml_TOP_MESSAGE_UNFAVED] = -#if L==1 // ca - "ha desmarcat com favorit" -#elif L==2 // de - "hat als Favorit unmarkiert" -#elif L==3 // en - "has unmarked as favourite" -#elif L==4 // es - "ha desmarcado como favorito" -#elif L==5 // fr - "a pas marqué en tant que favori" -#elif L==6 // gn - "ha desmarcado como favorito" // Okoteve traducción -#elif L==7 // it - "ha smarcato come preferito" -#elif L==8 // pl - "nieoznaczonych jako ulubiony" -#elif L==9 // pt - "desmarcou como favorito" #endif , [Tml_TOP_MESSAGE_SHARED] = @@ -52964,27 +52943,6 @@ const char *Txt_TIMELINE_NOTE_TOP_MESSAGES[Tml_NUM_TOP_MESSAGES] = "podzielił" #elif L==9 // pt "compartilhou" -#endif - , - [Tml_TOP_MESSAGE_UNSHARED] = -#if L==1 // ca - "ha deixat de compartir" -#elif L==2 // de - "hat Sharing gestoppt" -#elif L==3 // en - "has stopped sharing" -#elif L==4 // es - "ha dejado de compartir" -#elif L==5 // fr - "a cessé de partage" -#elif L==6 // gn - "ha dejado de compartir" // Okoteve traducción -#elif L==7 // it - "ha smesso di condividere" -#elif L==8 // pl - "przestał udostępniania" -#elif L==9 // pt - "parou compartilhar" #endif , [Tml_TOP_MESSAGE_MENTIONED] = diff --git a/swad_timeline.c b/swad_timeline.c index b672ef60..8590c712 100644 --- a/swad_timeline.c +++ b/swad_timeline.c @@ -155,7 +155,7 @@ static void Tml_GetAndShowOldTimeline (struct Tml_Timeline *Timeline); static void Tml_ShowTimeline (struct Tml_Timeline *Timeline, long NotCodToHighlight,const char *Title); static void Tml_PutIconsTimeline (__attribute__((unused)) void *Args); -static unsigned Tml_ListRecentPubs (struct Tml_Timeline *Timeline, +static unsigned Tml_ListRecentPubs (const struct Tml_Timeline *Timeline, long NotCodToHighlight); static void Tml_PutHiddenList (const char *Id); @@ -184,7 +184,7 @@ void Tml_ResetTimeline (struct Tml_Timeline *Timeline) { Timeline->UsrOrGbl = Tml_Usr_TIMELINE_GBL; Timeline->Who = Tml_Who_DEFAULT_WHO; - Timeline->WhatToGet = Tml_GET_RECENT_PUBS; + Timeline->WhatToGet = Tml_GET_REC_PUBS; Timeline->Pubs.Top = Timeline->Pubs.Bottom = NULL, Timeline->NotCod = -1L; @@ -218,21 +218,17 @@ void Tml_ShowNoteAndTimelineGbl (struct Tml_Timeline *Timeline) long PubCod; struct Tml_Not_Note Not; - /***** Initialize note code to -1 ==> no highlighted note *****/ - Not.NotCod = -1L; - /***** Get parameter with the code of a publication *****/ // This parameter is optional. It can be provided by a notification. - // If > 0 ==> the note is shown highlighted above the timeline - PubCod = Tml_Pub_GetParamPubCod (); - - /***** If a note should be highlighted ==> get code of note from database *****/ - if (PubCod > 0) - Not.NotCod = Tml_DB_GetNotCodFromPubCod (PubCod); - - /***** If a note should be highlighted ==> show it above the timeline *****/ - if (Not.NotCod > 0) - Tml_Not_ShowHighlightedNote (Timeline,&Not); + // If > 0 ==> the associated note will be shown highlighted + // get its code from database and show it above the timeline + if ((PubCod = Tml_Pub_GetParamPubCod ()) > 0) + { + if ((Not.NotCod = Tml_DB_GetNotCodFromPubCod (PubCod)) > 0) + Tml_Not_ShowHighlightedNote (Timeline,&Not); + } + else + Not.NotCod = -1L; // ==> no highlighted note /***** Show timeline with possible highlighted note *****/ Tml_ShowTimelineGblHighlighting (Timeline,Not.NotCod); @@ -248,7 +244,7 @@ void Tml_ShowTimelineGblHighlighting (struct Tml_Timeline *Timeline,long NotCod) /***** Get list of pubications to show in timeline *****/ Timeline->UsrOrGbl = Tml_Usr_TIMELINE_GBL; - Timeline->WhatToGet = Tml_GET_RECENT_PUBS; + Timeline->WhatToGet = Tml_GET_REC_PUBS; Tml_Pub_GetListPubsToShowInTimeline (Timeline); /***** Show timeline *****/ @@ -277,7 +273,7 @@ void Tml_ShowTimelineUsrHighlighting (struct Tml_Timeline *Timeline,long NotCod) /***** Get list of pubications to show in timeline *****/ Timeline->UsrOrGbl = Tml_Usr_TIMELINE_USR; - Timeline->WhatToGet = Tml_GET_RECENT_PUBS; + Timeline->WhatToGet = Tml_GET_REC_PUBS; Tml_Pub_GetListPubsToShowInTimeline (Timeline); /***** Show timeline *****/ @@ -411,7 +407,6 @@ static void Tml_ShowTimeline (struct Tml_Timeline *Timeline, { extern const char *Hlp_START_Timeline; bool GlobalTimeline = (Gbl.Usrs.Other.UsrDat.UsrCod <= 0); - unsigned NumNotesShown; /***** Begin box *****/ Box_BoxBegin (NULL,Title, @@ -439,12 +434,10 @@ static void Tml_ShowTimeline (struct Tml_Timeline *Timeline, Tml_PutHiddenList ("new_timeline_list"); } - /***** List recent publications in timeline *****/ - NumNotesShown = Tml_ListRecentPubs (Timeline,NotCodToHighlight); - - /***** If the number of publications shown is the maximum, + /***** List recent publications in timeline. + If the number of publications shown is the maximum, probably there will be more, so show link to get more *****/ - if (NumNotesShown == Tml_Pub_MAX_REC_PUBS_TO_GET_AND_SHOW) + if (Tml_ListRecentPubs (Timeline,NotCodToHighlight) == Tml_Pub_MAX_REC_PUBS_TO_GET_AND_SHOW) { /* Link to view old publications via AJAX */ Tml_Pub_PutLinkToViewOldPubs (); @@ -472,12 +465,12 @@ static void Tml_PutIconsTimeline (__attribute__((unused)) void *Args) /*****************************************************************************/ // Returns number of notes shown -static unsigned Tml_ListRecentPubs (struct Tml_Timeline *Timeline, +static unsigned Tml_ListRecentPubs (const struct Tml_Timeline *Timeline, long NotCodToHighlight) { - unsigned NumNotesShown; - struct Tml_Pub_Publication *Pub; + const struct Tml_Pub_Publication *Pub; struct Tml_Not_Note Not; + unsigned NumNotesShown; /***** Begin list *****/ HTM_UL_Begin ("id=\"timeline_list\" class=\"Tml_LIST\""); diff --git a/swad_timeline.h b/swad_timeline.h index b45a9a02..db796f36 100644 --- a/swad_timeline.h +++ b/swad_timeline.h @@ -54,16 +54,14 @@ /******************************** Public types *******************************/ /*****************************************************************************/ -#define Tml_NUM_TOP_MESSAGES (1 + 6) +#define Tml_NUM_TOP_MESSAGES (1 + 4) typedef enum { - Tml_TOP_MESSAGE_NONE = 0, + Tml_TOP_MESSAGE_NONE = 0, // 0 to avoid need of explicit inicialization Tml_TOP_MESSAGE_COMMENTED = 1, - Tml_TOP_MESSAGE_FAVED = 2, - Tml_TOP_MESSAGE_UNFAVED = 3, - Tml_TOP_MESSAGE_SHARED = 4, - Tml_TOP_MESSAGE_UNSHARED = 5, - Tml_TOP_MESSAGE_MENTIONED = 6, + Tml_TOP_MESSAGE_FAVED = 2, + Tml_TOP_MESSAGE_SHARED = 3, + Tml_TOP_MESSAGE_MENTIONED = 4, } Tml_TopMessage_t; #define Tml_NUM_WHAT_TO_GET 3 @@ -71,7 +69,7 @@ typedef enum { Tml_GET_NEW_PUBS, // New publications are retrieved via AJAX... // automatically from time to time - Tml_GET_RECENT_PUBS, // Recent timeline is shown... + Tml_GET_REC_PUBS, // Recent timeline is shown... // when the user clicks on action menu,... // or after editing timeline Tml_GET_OLD_PUBS, // Old publications are retrieved via AJAX... diff --git a/swad_timeline_database.c b/swad_timeline_database.c index 74ff5ad6..d93ee22e 100644 --- a/swad_timeline_database.c +++ b/swad_timeline_database.c @@ -875,35 +875,36 @@ static long Tml_DB_GetMedCod (const char *Table,const char *Field,long Cod) /******* Create temporary table and subquery with potential publishers *******/ /*****************************************************************************/ -void Tml_DB_CreateSubQueryPublishers (const struct Tml_Timeline *Timeline, - struct Tml_Pub_SubQueries *SubQueries) +void Tml_DB_CreateSubQueryPublishers (Tml_Usr_UsrOrGbl_t UsrOrGbl,Usr_Who_t Who, + char **Table, + char SubQuery[Tml_Pub_MAX_BYTES_SUBQUERY + 1]) { - switch (Timeline->UsrOrGbl) + switch (UsrOrGbl) { - case Tml_Usr_TIMELINE_USR: // Show the timeline of a user - SubQueries->TablePublishers = ""; - sprintf (SubQueries->Publishers,"tml_pubs.PublisherCod=%ld AND ", + case Tml_Usr_TIMELINE_USR: // Show the timeline of a user + *Table = ""; + sprintf (SubQuery,"tml_pubs.PublisherCod=%ld AND ", Gbl.Usrs.Other.UsrDat.UsrCod); break; - case Tml_Usr_TIMELINE_GBL: // Show the global timeline - switch (Timeline->Who) + case Tml_Usr_TIMELINE_GBL: // Show the global timeline + switch (Who) { case Usr_WHO_ME: // Show my timeline - SubQueries->TablePublishers = ""; - snprintf (SubQueries->Publishers,sizeof (SubQueries->Publishers), + *Table = ""; + snprintf (SubQuery,Tml_Pub_MAX_BYTES_SUBQUERY + 1, "tml_pubs.PublisherCod=%ld AND ", Gbl.Usrs.Me.UsrDat.UsrCod); break; case Usr_WHO_FOLLOWED: // Show the timeline of the users I follow Fol_DB_CreateTmpTableMeAndUsrsIFollow (); - SubQueries->TablePublishers = ",fol_tmp_me_and_followed"; - Str_Copy (SubQueries->Publishers, + *Table = ",fol_tmp_me_and_followed"; + Str_Copy (SubQuery, "tml_pubs.PublisherCod=fol_tmp_me_and_followed.UsrCod AND ", - sizeof (SubQueries->Publishers) - 1); + Tml_Pub_MAX_BYTES_SUBQUERY); break; case Usr_WHO_ALL: // Show the timeline of all users - SubQueries->TablePublishers = ""; - SubQueries->Publishers[0] = '\0'; + *Table = ""; + SubQuery[0] = '\0'; break; default: Err_WrongWhoExit (); @@ -917,41 +918,45 @@ void Tml_DB_CreateSubQueryPublishers (const struct Tml_Timeline *Timeline, /********* Create subquery to get only notes not present in timeline *********/ /*****************************************************************************/ -void Tml_DB_CreateSubQueryAlreadyExists (const struct Tml_Timeline *Timeline, - struct Tml_Pub_SubQueries *SubQueries) +void Tml_DB_CreateSubQueryAlreadyExists (Tml_WhatToGet_t WhatToGet, + char AlreadyExists[Tml_Pub_MAX_BYTES_SUBQUERY + 1]) { static const char *Table[Tml_NUM_WHAT_TO_GET] = { - [Tml_GET_NEW_PUBS ] = "tml_tmp_just_retrieved_notes", // Avoid notes just retrieved - [Tml_GET_RECENT_PUBS] = "tml_tmp_just_retrieved_notes", // Avoid notes just retrieved - [Tml_GET_OLD_PUBS ] = "tml_tmp_visible_timeline", // Avoid notes already shown + [Tml_GET_NEW_PUBS] = "tml_tmp_just_retrieved_notes", // Avoid notes just retrieved + [Tml_GET_REC_PUBS] = "tml_tmp_just_retrieved_notes", // Avoid notes just retrieved + [Tml_GET_OLD_PUBS] = "tml_tmp_visible_timeline", // Avoid notes already shown }; - snprintf (SubQueries->AlreadyExists,sizeof (SubQueries->AlreadyExists), + snprintf (AlreadyExists,Tml_Pub_MAX_BYTES_SUBQUERY + 1, " tml_pubs.NotCod NOT IN" " (SELECT NotCod" " FROM %s)", - Table[Timeline->WhatToGet]); + Table[WhatToGet]); } /*****************************************************************************/ /***** Create subqueries with range of publications to get from tml_pubs *****/ /*****************************************************************************/ -void Tml_DB_CreateSubQueryRangeBottom (long Bottom,struct Tml_Pub_SubQueries *SubQueries) +void Tml_DB_CreateSubQueryRangeBottom (long Bottom, + char SubQuery[Tml_Pub_MAX_BYTES_SUBQUERY + 1]) { if (Bottom > 0) - sprintf (SubQueries->RangeBottom,"tml_pubs.PubCod>%ld AND ",Bottom); + snprintf (SubQuery,Tml_Pub_MAX_BYTES_SUBQUERY + 1, + "tml_pubs.PubCod>%ld AND ",Bottom); else - SubQueries->RangeBottom[0] = '\0'; + SubQuery[0] = '\0'; } -void Tml_DB_CreateSubQueryRangeTop (long Top,struct Tml_Pub_SubQueries *SubQueries) +void Tml_DB_CreateSubQueryRangeTop (long Top, + char SubQuery[Tml_Pub_MAX_BYTES_SUBQUERY + 1]) { if (Top > 0) - sprintf (SubQueries->RangeTop,"tml_pubs.PubCod<%ld AND ",Top); + snprintf (SubQuery,Tml_Pub_MAX_BYTES_SUBQUERY + 1, + "tml_pubs.PubCod<%ld AND ",Top); else - SubQueries->RangeTop[0] = '\0'; + SubQuery[0] = '\0'; } /*****************************************************************************/ @@ -959,8 +964,8 @@ void Tml_DB_CreateSubQueryRangeTop (long Top,struct Tml_Pub_SubQueries *SubQueri /*****************************************************************************/ // Returns the number of rows got -unsigned Tml_DB_SelectTheMostRecentPub (const struct Tml_Pub_SubQueries *SubQueries, - MYSQL_RES **mysql_res) +unsigned Tml_DB_SelectTheMostRecentPub (MYSQL_RES **mysql_res, + const struct Tml_Pub_SubQueries *SubQueries) { return (unsigned) DB_QuerySELECT (mysql_res,"can not get publication", @@ -972,10 +977,10 @@ unsigned Tml_DB_SelectTheMostRecentPub (const struct Tml_Pub_SubQueries *SubQuer " WHERE %s%s%s%s" " ORDER BY tml_pubs.PubCod DESC" " LIMIT 1", - SubQueries->TablePublishers, + SubQueries->Publishers.Table, SubQueries->RangeBottom, SubQueries->RangeTop, - SubQueries->Publishers, + SubQueries->Publishers.SubQuery, SubQueries->AlreadyExists); } @@ -1016,14 +1021,16 @@ long Tml_DB_GetNotCodFromPubCod (long PubCod) } /*****************************************************************************/ -/************* Get last/first publication code stored in session *************/ +/************* Get first/last publication code stored in session *************/ /*****************************************************************************/ -// FieldName can be: -// "LastPubCod" -// "FirstPubCod" -long Tml_DB_GetPubCodFromSession (const char *FieldName) +long Tml_DB_GetPubCodFromSession (Tml_Pub_FirstLast_t FirstLast) { + static const char *FieldName[Tml_Pub_NUM_FIRST_LAST] = + { + [Tml_Pub_FIRST] = "FirstPubCod", + [Tml_Pub_LAST ] = "LastPubCod", + }; long PubCod; /***** Get last publication code from database *****/ @@ -1031,7 +1038,7 @@ long Tml_DB_GetPubCodFromSession (const char *FieldName) "SELECT %s" // row[0] " FROM ses_sessions" " WHERE SessionId='%s'", - FieldName, + FieldName[FirstLast], Gbl.Session.Id); if (PubCod < 0) PubCod = 0; diff --git a/swad_timeline_database.h b/swad_timeline_database.h index 7e1997c4..8652be4d 100644 --- a/swad_timeline_database.h +++ b/swad_timeline_database.h @@ -97,17 +97,20 @@ void Tml_DB_RemoveAllCommsInAllNotesOf (long UsrCod); void Tml_DB_RemoveAllCommsMadeBy (long UsrCod); /****************************** Publications *********************************/ -void Tml_DB_CreateSubQueryPublishers (const struct Tml_Timeline *Timeline, - struct Tml_Pub_SubQueries *SubQueries); -void Tml_DB_CreateSubQueryAlreadyExists (const struct Tml_Timeline *Timeline, - struct Tml_Pub_SubQueries *SubQueries); -void Tml_DB_CreateSubQueryRangeBottom (long Bottom,struct Tml_Pub_SubQueries *SubQueries); -void Tml_DB_CreateSubQueryRangeTop (long Top,struct Tml_Pub_SubQueries *SubQueries); -unsigned Tml_DB_SelectTheMostRecentPub (const struct Tml_Pub_SubQueries *SubQueries, - MYSQL_RES **mysql_res); +void Tml_DB_CreateSubQueryPublishers (Tml_Usr_UsrOrGbl_t UsrOrGbl,Usr_Who_t Who, + char **Table, + char SubQuery[Tml_Pub_MAX_BYTES_SUBQUERY + 1]); +void Tml_DB_CreateSubQueryAlreadyExists (Tml_WhatToGet_t WhatToGet, + char AlreadyExists[Tml_Pub_MAX_BYTES_SUBQUERY + 1]); +void Tml_DB_CreateSubQueryRangeBottom (long Bottom, + char SubQuery[Tml_Pub_MAX_BYTES_SUBQUERY + 1]); +void Tml_DB_CreateSubQueryRangeTop (long Top, + char SubQuery[Tml_Pub_MAX_BYTES_SUBQUERY + 1]); +unsigned Tml_DB_SelectTheMostRecentPub (MYSQL_RES **mysql_res, + const struct Tml_Pub_SubQueries *SubQueries); unsigned Tml_DB_GetDataOfPubByCod (long PubCod,MYSQL_RES **mysql_res); long Tml_DB_GetNotCodFromPubCod (long PubCod); -long Tml_DB_GetPubCodFromSession (const char *FieldName); +long Tml_DB_GetPubCodFromSession (Tml_Pub_FirstLast_t FirstLast); unsigned Tml_DB_GetNumPubsUsr (long UsrCod); unsigned Tml_DB_GetPublishersInNoteExceptMe (MYSQL_RES **mysql_res,long PubCod); long Tml_DB_CreateNewPub (const struct Tml_Pub_Publication *Pub); diff --git a/swad_timeline_note.c b/swad_timeline_note.c index fdd46301..e0a8bdbd 100644 --- a/swad_timeline_note.c +++ b/swad_timeline_note.c @@ -129,40 +129,10 @@ void Tml_Not_ShowHighlightedNote (struct Tml_Timeline *Timeline, Ntf_NotifyEvent_t NotifyEvent; static const Tml_TopMessage_t TopMessages[Ntf_NUM_NOTIFY_EVENTS] = { - [Ntf_EVENT_UNKNOWN ] = Tml_TOP_MESSAGE_NONE, - /* Start tab */ - [Ntf_EVENT_TML_COMMENT ] = Tml_TOP_MESSAGE_COMMENTED, - [Ntf_EVENT_TML_FAV ] = Tml_TOP_MESSAGE_FAVED, - [Ntf_EVENT_TML_SHARE ] = Tml_TOP_MESSAGE_SHARED, - [Ntf_EVENT_TML_MENTION ] = Tml_TOP_MESSAGE_MENTIONED, - [Ntf_EVENT_FOLLOWER ] = Tml_TOP_MESSAGE_NONE, - /* System tab */ - /* Country tab */ - /* Institution tab */ - /* Center tab */ - /* Degree tab */ - /* Course tab */ - /* Assessment tab */ - [Ntf_EVENT_ASSIGNMENT ] = Tml_TOP_MESSAGE_NONE, - [Ntf_EVENT_SURVEY ] = Tml_TOP_MESSAGE_NONE, - [Ntf_EVENT_CALL_FOR_EXAM ] = Tml_TOP_MESSAGE_NONE, - /* Files tab */ - [Ntf_EVENT_DOCUMENT_FILE ] = Tml_TOP_MESSAGE_NONE, - [Ntf_EVENT_TEACHERS_FILE ] = Tml_TOP_MESSAGE_NONE, - [Ntf_EVENT_SHARED_FILE ] = Tml_TOP_MESSAGE_NONE, - [Ntf_EVENT_MARKS_FILE ] = Tml_TOP_MESSAGE_NONE, - /* Users tab */ - [Ntf_EVENT_ENROLMENT_STD ] = Tml_TOP_MESSAGE_NONE, - [Ntf_EVENT_ENROLMENT_NET ] = Tml_TOP_MESSAGE_NONE, - [Ntf_EVENT_ENROLMENT_TCH ] = Tml_TOP_MESSAGE_NONE, - [Ntf_EVENT_ENROLMENT_REQUEST] = Tml_TOP_MESSAGE_NONE, - /* Messages tab */ - [Ntf_EVENT_NOTICE ] = Tml_TOP_MESSAGE_NONE, - [Ntf_EVENT_FORUM_POST_COURSE] = Tml_TOP_MESSAGE_NONE, - [Ntf_EVENT_FORUM_REPLY ] = Tml_TOP_MESSAGE_NONE, - [Ntf_EVENT_MESSAGE ] = Tml_TOP_MESSAGE_NONE, - /* Analytics tab */ - /* Profile tab */ + [Ntf_EVENT_TML_COMMENT] = Tml_TOP_MESSAGE_COMMENTED, + [Ntf_EVENT_TML_FAV ] = Tml_TOP_MESSAGE_FAVED, + [Ntf_EVENT_TML_SHARE ] = Tml_TOP_MESSAGE_SHARED, + [Ntf_EVENT_TML_MENTION] = Tml_TOP_MESSAGE_MENTIONED, }; /***** Get other parameters *****/ @@ -1307,7 +1277,7 @@ void Tml_Not_GetDataOfNoteByCod (struct Tml_Not_Note *Not) /***** Trivial check: note code should be > 0 *****/ if (Not->NotCod <= 0) { - /***** Reset fields of note *****/ + /* Reset fields of note */ Tml_Not_ResetNote (Not); return; } @@ -1315,12 +1285,12 @@ void Tml_Not_GetDataOfNoteByCod (struct Tml_Not_Note *Not) /***** Get data of note from database *****/ if (Tml_DB_GetDataOfNoteByCod (Not->NotCod,&mysql_res)) { - /***** Get data of note *****/ + /* Get data of note */ row = mysql_fetch_row (mysql_res); Tml_Not_GetDataOfNoteFromRow (row,Not); } else - /***** Reset fields of note *****/ + /* Reset fields of note */ Tml_Not_ResetNote (Not); /***** Free structure that stores the query result *****/ diff --git a/swad_timeline_publication.c b/swad_timeline_publication.c index 89956d52..b325fda6 100644 --- a/swad_timeline_publication.c +++ b/swad_timeline_publication.c @@ -93,7 +93,7 @@ void Tml_Pub_GetListPubsToShowInTimeline (struct Tml_Timeline *Timeline) Tml_Pub_InitializeRangeOfPubs (Timeline->WhatToGet,&RangePubsToGet); /***** Clear timeline for this session in database *****/ - if (Timeline->WhatToGet == Tml_GET_RECENT_PUBS) + if (Timeline->WhatToGet == Tml_GET_REC_PUBS) Tml_DB_ClearTimelineNotesOfSessionFromDB (); /***** Create temporary tables *****/ @@ -106,14 +106,18 @@ void Tml_Pub_GetListPubsToShowInTimeline (struct Tml_Timeline *Timeline) /***** Create subqueries *****/ /* Create subquery with potential publishers */ - Tml_DB_CreateSubQueryPublishers (Timeline,&SubQueries); + Tml_DB_CreateSubQueryPublishers (Timeline->UsrOrGbl,Timeline->Who, + &SubQueries.Publishers.Table, + SubQueries.Publishers.SubQuery); /* Create subquery to get only notes not present in timeline */ - Tml_DB_CreateSubQueryAlreadyExists (Timeline,&SubQueries); + Tml_DB_CreateSubQueryAlreadyExists (Timeline->WhatToGet, + SubQueries.AlreadyExists); /* Create subquery with bottom range of publications to get from tml_pubs. Bottom pub. code remains unchanged in all iterations of the loop. */ - Tml_DB_CreateSubQueryRangeBottom (RangePubsToGet.Bottom,&SubQueries); + Tml_DB_CreateSubQueryRangeBottom (RangePubsToGet.Bottom, + SubQueries.RangeBottom); /***** Initialize list of publications *****/ /* Chained list of publications: @@ -160,7 +164,7 @@ void Tml_Pub_GetListPubsToShowInTimeline (struct Tml_Timeline *Timeline) { /* Create subquery with top range of publications to get from tml_pubs In each iteration of this loop, top publication code is changed to a lower value */ - Tml_DB_CreateSubQueryRangeTop (RangePubsToGet.Top,&SubQueries); + Tml_DB_CreateSubQueryRangeTop (RangePubsToGet.Top,SubQueries.RangeTop); /* Select the most recent publication from tml_pubs */ Pub = Tml_Pub_SelectTheMostRecentPub (&SubQueries); @@ -211,10 +215,8 @@ void Tml_Pub_GetListPubsToShowInTimeline (struct Tml_Timeline *Timeline) static void Tml_Pub_InitializeRangeOfPubs (Tml_WhatToGet_t WhatToGet, struct Tml_Pub_RangePubsToGet *RangePubsToGet) { - /* Initialize range of pubs: - - tml_pubs - _____ + /* tml_pubs + _____ 0 |_____|11 |_____|10 _|_____| 9 <-- RangePubsToGet.Top @@ -226,33 +228,67 @@ static void Tml_Pub_InitializeRangeOfPubs (Tml_WhatToGet_t WhatToGet, |_____| 3 <-- RangePubsToGet.Bottom |_____| 2 |_____| 1 - 0 - */ - + 0 */ switch (WhatToGet) { case Tml_GET_NEW_PUBS: // Get the publications (without limit) - // newer than LastPubCod - /* This query is made via AJAX automatically from time to time */ - RangePubsToGet->Top = 0; // +Infinite - RangePubsToGet->Bottom = Tml_DB_GetPubCodFromSession ("LastPubCod"); + // newer than last pub. code + /* Via AJAX automatically from time to time */ + RangePubsToGet->Top = 0; + /* _ _____ 0 <-- RangePubsToGet.Top = +infinite + Get / |_____|11 + these < |_____|10 + pubs \_|_____| 9 + / |_____| 8 <-- RangePubsToGet.Bottom = last pub. code + Pubs | |_____| 7 + already < |_____| 6 + shown | |_____| 5 + | |_____| 4 + . |_____| . + . |_____| . + . |_____| . + */ + RangePubsToGet->Bottom = Tml_DB_GetPubCodFromSession (Tml_Pub_LAST); break; - case Tml_GET_RECENT_PUBS: // Get some limited recent publications - /* This is the first query to get initial timeline shown + case Tml_GET_REC_PUBS: // Get some limited recent publications + /* First query to get initial timeline shown ==> no notes yet in current timeline table */ - RangePubsToGet->Top = 0; // +Infinite - RangePubsToGet->Bottom = 0; // -Infinite + RangePubsToGet->Top = 0; + /* _ _____ 0 <-- RangePubsToGet.Top = +infinite + / |_____| 8 + Get | |_____| 7 + pubs < |_____| 6 + from | |_____| 5 + all . |_____| 4 + range . |_____| 3 + . |_____| 2 + |_____| 1 + 0 <-- RangePubsToGet.Bottom = -infinite */ + RangePubsToGet->Bottom = 0; break; case Tml_GET_OLD_PUBS: // Get some limited publications - // older than FirstPubCod - /* This query is made via AJAX - when I click in link to get old publications */ - RangePubsToGet->Top = Tml_DB_GetPubCodFromSession ("FirstPubCod"); - RangePubsToGet->Bottom = 0; // -Infinite + // older than first pub. code + /* Via AJAX when I click in link to get old publications */ + RangePubsToGet->Top = Tml_DB_GetPubCodFromSession (Tml_Pub_FIRST); + /* _____ + . |_____| . + . |_____| . + . |_____| . + Pubs | |_____| 8 + already < |_____| 7 + shown | |_____| 6 + | |_____| 5 + Get \_|_____| 4 <-- RangePubsToGet.Top = first pub. code + pubs / |_____| 3 + from < |_____| 2 + this \_|_____| 1 + rage 0 <-- RangePubsToGet.Bottom = -infinite */ + RangePubsToGet->Bottom = 0; + break; + default: // Not reached + RangePubsToGet->Top = + RangePubsToGet->Bottom = 0; // Initialized to avoid warning break; - default: - RangePubsToGet->Top = 0; // +Infinite - RangePubsToGet->Bottom = 0; // -Infinite } } @@ -264,9 +300,9 @@ static unsigned Tml_Pub_GetMaxPubsToGet (const struct Tml_Timeline *Timeline) { static const unsigned MaxPubsToGet[Tml_NUM_WHAT_TO_GET] = { - [Tml_GET_NEW_PUBS ] = Tml_Pub_MAX_NEW_PUBS_TO_GET_AND_SHOW, - [Tml_GET_RECENT_PUBS] = Tml_Pub_MAX_REC_PUBS_TO_GET_AND_SHOW, - [Tml_GET_OLD_PUBS ] = Tml_Pub_MAX_OLD_PUBS_TO_GET_AND_SHOW, + [Tml_GET_NEW_PUBS] = Tml_Pub_MAX_NEW_PUBS_TO_GET_AND_SHOW, + [Tml_GET_REC_PUBS] = Tml_Pub_MAX_REC_PUBS_TO_GET_AND_SHOW, + [Tml_GET_OLD_PUBS] = Tml_Pub_MAX_OLD_PUBS_TO_GET_AND_SHOW, }; return MaxPubsToGet[Timeline->WhatToGet]; @@ -286,12 +322,12 @@ static void Tml_Pub_UpdateFirstLastPubCodesIntoSession (const struct Tml_Timelin case Tml_GET_NEW_PUBS: // Get only new publications Tml_DB_UpdateLastPubCodInSession (); break; - case Tml_GET_RECENT_PUBS: // Get last publications + case Tml_GET_REC_PUBS: // Get recent publications case Tml_GET_OLD_PUBS: // Get only old publications // The oldest publication code retrieved and shown FirstPubCod = Timeline->Pubs.Bottom ? Timeline->Pubs.Bottom->PubCod : 0; - if (Timeline->WhatToGet == Tml_GET_RECENT_PUBS) + if (Timeline->WhatToGet == Tml_GET_REC_PUBS) Tml_DB_UpdateFirstLastPubCodsInSession (FirstPubCod); else Tml_DB_UpdateFirstPubCodInSession (FirstPubCod); @@ -335,7 +371,7 @@ static struct Tml_Pub_Publication *Tml_Pub_SelectTheMostRecentPub (const struct struct Tml_Pub_Publication *Pub; /***** Select the most recent publication from database *****/ - if (Tml_DB_SelectTheMostRecentPub (SubQueries,&mysql_res) == 1) + if (Tml_DB_SelectTheMostRecentPub (&mysql_res,SubQueries) == 1) { /* Allocate space for publication */ if ((Pub = malloc (sizeof (*Pub))) == NULL) @@ -421,8 +457,6 @@ Tml_TopMessage_t Tml_Pub_GetTopMessage (Tml_Pub_Type_t PubType) { static const Tml_TopMessage_t TopMessages[Tml_Pub_NUM_PUB_TYPES] = { - [Tml_Pub_UNKNOWN ] = Tml_TOP_MESSAGE_NONE, - [Tml_Pub_ORIGINAL_NOTE ] = Tml_TOP_MESSAGE_NONE, [Tml_Pub_SHARED_NOTE ] = Tml_TOP_MESSAGE_SHARED, [Tml_Pub_COMMENT_TO_NOTE] = Tml_TOP_MESSAGE_COMMENTED, }; diff --git a/swad_timeline_publication.h b/swad_timeline_publication.h index 6ac07ed7..dd8dcb83 100644 --- a/swad_timeline_publication.h +++ b/swad_timeline_publication.h @@ -67,15 +67,25 @@ struct Tml_Pub_Publication struct Tml_Pub_RangePubsToGet { - long Top; - long Bottom; + long Top; // Top pub code + long Bottom; // Bottom pub code }; +#define Tml_Pub_NUM_FIRST_LAST 2 +typedef enum + { + Tml_Pub_FIRST = 0, + Tml_Pub_LAST = 1, + } Tml_Pub_FirstLast_t; + #define Tml_Pub_MAX_BYTES_SUBQUERY (128 - 1) struct Tml_Pub_SubQueries { - char *TablePublishers; - char Publishers [Tml_Pub_MAX_BYTES_SUBQUERY + 1]; + struct + { + char *Table; + char SubQuery[Tml_Pub_MAX_BYTES_SUBQUERY + 1]; + } Publishers; char RangeBottom [Tml_Pub_MAX_BYTES_SUBQUERY + 1]; char RangeTop [Tml_Pub_MAX_BYTES_SUBQUERY + 1]; char AlreadyExists[Tml_Pub_MAX_BYTES_SUBQUERY + 1];