Version 21.57.4: Nov 17, 2021 Code refactoring in timeline.

This commit is contained in:
acanas 2021-11-18 01:29:48 +01:00
parent b911c3480a
commit 71c8bf59e9
10 changed files with 176 additions and 203 deletions

View File

@ -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)

View File

@ -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");
}

View File

@ -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] =

View File

@ -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\"");

View File

@ -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...

View File

@ -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;

View File

@ -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);

View File

@ -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 *****/

View File

@ -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,
};

View File

@ -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];