Version 20.36.24: Feb 28, 2021 Functions moved to module swad_timeline_database.

This commit is contained in:
acanas 2021-02-28 21:12:44 +01:00
parent 7254a2fff0
commit e02fd7f3dc
8 changed files with 153 additions and 156 deletions

View File

@ -553,7 +553,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 20.36.23 (2021-02-28)"
#define Log_PLATFORM_VERSION "SWAD 20.36.24 (2021-02-28)"
#define CSS_FILE "swad20.33.9.css"
#define JS_FILE "swad20.6.2.js"
/*
@ -601,6 +601,7 @@ TODO: DNI de un estudiante sale err
TODO: BUG: Cuando un tipo de grupo sólo tiene un grupo, inscribirse es voluntario, el estudiante sólo puede pertenecer a un grupo, y se inscribe en él, debería poder desapuntarse. Ahora no puede.
TODO: Salvador Romero Cortés: @acanas opción para editar posts
Version 20.36.24: Feb 28, 2021 Functions moved to module swad_timeline_database. (305385 lines)
Version 20.36.23: Feb 28, 2021 Function moved to module swad_timeline_database. (305387 lines)
Version 20.36.22: Feb 28, 2021 Query moved to module swad_timeline_database. (305387 lines)
Version 20.36.21: Feb 27, 2021 Function moved to module swad_timeline_database. (305376 lines)

View File

@ -81,5 +81,4 @@ void Fol_RemoveUsrFromUsrFollow (long UsrCod);
void Fol_CreateTmpTableMeAndUsrsIFollow (void);
void Fol_DropTmpTableMeAndUsrsIFollow (void);
#endif

View File

@ -953,7 +953,7 @@ void TL_Com_RemoveCommentMediaAndDBEntries (long PubCod)
TL_DB_RemoveCommentContent (PubCod);
/***** Remove this comment publication *****/
TL_DB_RemoveCommentPub (PubCod,Gbl.Usrs.Me.UsrDat.UsrCod);
TL_DB_RemoveCommentPub (PubCod);
}
/*****************************************************************************/

View File

@ -26,6 +26,8 @@
/*****************************************************************************/
#include "swad_database.h"
#include "swad_follow.h"
#include "swad_global.h"
#include "swad_timeline.h"
#include "swad_timeline_database.h"
#include "swad_timeline_publication.h"
@ -42,6 +44,8 @@
/************** External global variables from others modules ****************/
/*****************************************************************************/
extern struct Globals Gbl;
/*****************************************************************************/
/************************* Private global variables **************************/
/*****************************************************************************/
@ -172,7 +176,7 @@ void TL_DB_CreateTmpTableJustRetrievedNotes (void)
" ENGINE=MEMORY");
}
void TL_DB_CreateTmpTableVisibleTimeline (char SessionId[Cns_BYTES_SESSION_ID + 1])
void TL_DB_CreateTmpTableVisibleTimeline (void)
{
/***** Create temporary table with all notes visible in timeline *****/
DB_Query ("can not create temporary table",
@ -180,7 +184,7 @@ void TL_DB_CreateTmpTableVisibleTimeline (char SessionId[Cns_BYTES_SESSION_ID +
"(NotCod BIGINT NOT NULL,UNIQUE INDEX(NotCod))"
" ENGINE=MEMORY"
" SELECT NotCod FROM tl_timelines WHERE SessionId='%s'",
SessionId);
Gbl.Session.Id);
}
/*****************************************************************************/
@ -211,7 +215,7 @@ void TL_DB_InsertNoteInVisibleTimeline (long NotCod)
/****** Add just retrieved notes to current timeline for this session ********/
/*****************************************************************************/
void TL_DB_AddNotesJustRetrievedToVisibleTimelineOfSession (char SessionId[Cns_BYTES_SESSION_ID + 1])
void TL_DB_AddNotesJustRetrievedToVisibleTimelineOfSession (void)
{
/* tl_timelines contains the distinct notes in timeline of each open session:
mysql> SELECT SessionId,COUNT(*) FROM tl_timelines GROUP BY SessionId;
@ -235,7 +239,7 @@ mysql> SELECT SessionId,COUNT(*) FROM tl_timelines GROUP BY SessionId;
"INSERT IGNORE INTO tl_timelines"
" (SessionId,NotCod)"
" SELECT '%s',NotCod FROM tl_tmp_just_retrieved_notes",
SessionId);
Gbl.Session.Id);
}
/*****************************************************************************/
@ -272,13 +276,13 @@ void TL_DB_ClearOldTimelinesNotesFromDB (void)
/***************** Clear timeline for a session in database ******************/
/*****************************************************************************/
void TL_DB_ClearTimelineNotesOfSessionFromDB (char SessionId[Cns_BYTES_SESSION_ID + 1])
void TL_DB_ClearTimelineNotesOfSessionFromDB (void)
{
/***** Remove timeline for a session *****/
DB_QueryDELETE ("can not remove timeline",
"DELETE FROM tl_timelines"
" WHERE SessionId='%s'",
SessionId);
Gbl.Session.Id);
}
/*****************************************************************************/
@ -311,7 +315,7 @@ void TL_DB_RemoveNotePubs (long NotCod)
/******************* Remove note publication from database *******************/
/*****************************************************************************/
void TL_DB_RemoveNote (long NotCod,long PublisherCod)
void TL_DB_RemoveNote (long NotCod)
{
/***** Remove note *****/
DB_QueryDELETE ("can not remove a note",
@ -319,7 +323,7 @@ void TL_DB_RemoveNote (long NotCod,long PublisherCod)
" WHERE NotCod=%ld"
" AND UsrCod=%ld", // Extra check: author
NotCod,
PublisherCod);
Gbl.Usrs.Me.UsrDat.UsrCod);
}
/*****************************************************************************/
@ -549,7 +553,7 @@ void TL_DB_RemoveCommentContent (long PubCod)
/***************** Remove comment publication from database ******************/
/*****************************************************************************/
void TL_DB_RemoveCommentPub (long PubCod,long PublisherCod)
void TL_DB_RemoveCommentPub (long PubCod)
{
/***** Remove comment publication *****/
DB_QueryDELETE ("can not remove comment",
@ -558,7 +562,7 @@ void TL_DB_RemoveCommentPub (long PubCod,long PublisherCod)
" AND PublisherCod=%ld" // Extra check: author
" AND PubType=%u", // Extra check: it's a comment
PubCod,
PublisherCod,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) TL_Pub_COMMENT_TO_NOTE);
}
@ -590,6 +594,98 @@ static long TL_DB_GetMedCodFromPub (long PubCod,const char *DBTable)
return MedCod;
}
/*****************************************************************************/
/******* Create temporary table and subquery with potential publishers *******/
/*****************************************************************************/
void TL_DB_CreateSubQueryPublishers (const struct TL_Timeline *Timeline,
struct TL_Pub_SubQueries *SubQueries)
{
/***** Create temporary table and subquery with potential publishers *****/
switch (Timeline->UsrOrGbl)
{
case TL_Usr_TIMELINE_USR: // Show the timeline of a user
SubQueries->TablePublishers = "";
sprintf (SubQueries->Publishers,"tl_pubs.PublisherCod=%ld AND ",
Gbl.Usrs.Other.UsrDat.UsrCod);
break;
case TL_Usr_TIMELINE_GBL: // Show the global timeline
switch (Timeline->Who)
{
case Usr_WHO_ME: // Show my timeline
SubQueries->TablePublishers = "";
snprintf (SubQueries->Publishers,sizeof (SubQueries->Publishers),
"tl_pubs.PublisherCod=%ld AND ",
Gbl.Usrs.Me.UsrDat.UsrCod);
break;
case Usr_WHO_FOLLOWED: // Show the timeline of the users I follow
Fol_CreateTmpTableMeAndUsrsIFollow ();
SubQueries->TablePublishers = ",fol_tmp_me_and_followed";
Str_Copy (SubQueries->Publishers,
"tl_pubs.PublisherCod=fol_tmp_me_and_followed.UsrCod AND ",
sizeof (SubQueries->Publishers) - 1);
break;
case Usr_WHO_ALL: // Show the timeline of all users
SubQueries->TablePublishers = "";
SubQueries->Publishers[0] = '\0';
break;
default:
Lay_WrongWhoExit ();
break;
}
break;
}
}
/*****************************************************************************/
/********* Create subquery to get only notes not present in timeline *********/
/*****************************************************************************/
void TL_DB_CreateSubQueryAlreadyExists (const struct TL_Timeline *Timeline,
struct TL_Pub_SubQueries *SubQueries)
{
switch (Timeline->WhatToGet)
{
case TL_GET_RECENT_TIMELINE:
case TL_GET_ONLY_NEW_PUBS:
Str_Copy (SubQueries->AlreadyExists,
" tl_pubs.NotCod NOT IN"
" (SELECT NotCod FROM tl_tmp_just_retrieved_notes)", // Avoid notes just retrieved
sizeof (SubQueries->AlreadyExists) - 1);
break;
case TL_GET_ONLY_OLD_PUBS: // Get only old publications
Str_Copy (SubQueries->AlreadyExists,
" tl_pubs.NotCod NOT IN"
" (SELECT NotCod FROM tl_tmp_visible_timeline)", // Avoid notes already shown
sizeof (SubQueries->AlreadyExists) - 1);
break;
}
}
/*****************************************************************************/
/***** Create subqueries with range of publications to get from tl_pubs ******/
/*****************************************************************************/
void TL_DB_CreateSubQueryRangeBottom (const struct TL_Pub_RangePubsToGet *RangePubsToGet,
struct TL_Pub_SubQueries *SubQueries)
{
if (RangePubsToGet->Bottom > 0)
sprintf (SubQueries->RangeBottom,"tl_pubs.PubCod>%ld AND ",
RangePubsToGet->Bottom);
else
SubQueries->RangeBottom[0] = '\0';
}
void TL_DB_CreateSubQueryRangeTop (const struct TL_Pub_RangePubsToGet *RangePubsToGet,
struct TL_Pub_SubQueries *SubQueries)
{
if (RangePubsToGet->Top > 0)
sprintf (SubQueries->RangeTop,"tl_pubs.PubCod<%ld AND ",
RangePubsToGet->Top);
else
SubQueries->RangeTop[0] = '\0';
}
/*****************************************************************************/
/******************** Select the most recent publication *********************/
/*****************************************************************************/
@ -648,8 +744,7 @@ long TL_DB_GetNotCodFromPubCod (long PubCod)
// "LastPubCod"
// "FirstPubCod"
long TL_DB_GetPubCodFromSession (const char *FieldName,
const char SessionId[Cns_BYTES_SESSION_ID + 1])
long TL_DB_GetPubCodFromSession (const char *FieldName)
{
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -659,7 +754,7 @@ long TL_DB_GetPubCodFromSession (const char *FieldName,
if (DB_QuerySELECT (&mysql_res,"can not get publication code from session",
"SELECT %s FROM sessions"
" WHERE SessionId='%s'",
FieldName,SessionId) == 1)
FieldName,Gbl.Session.Id) == 1)
{
/***** Get last publication code *****/
row = mysql_fetch_row (mysql_res);
@ -711,22 +806,21 @@ long TL_DB_CreateNewPub (const struct TL_Pub_Publication *Pub)
/************** Update first publication code stored in session **************/
/*****************************************************************************/
void TL_DB_UpdateFirstPubCodInSession (long FirstPubCod,
const char SessionId[Cns_BYTES_SESSION_ID + 1])
void TL_DB_UpdateFirstPubCodInSession (long FirstPubCod)
{
DB_QueryUPDATE ("can not update first publication code into session",
"UPDATE sessions"
" SET FirstPubCod=%ld"
" WHERE SessionId='%s'",
FirstPubCod,
SessionId);
Gbl.Session.Id);
}
/*****************************************************************************/
/*************** Update last publication code stored in session **************/
/*****************************************************************************/
void TL_DB_UpdateLastPubCodInSession (const char SessionId[Cns_BYTES_SESSION_ID + 1])
void TL_DB_UpdateLastPubCodInSession (void)
{
DB_QueryUPDATE ("can not update last publication code into session",
"UPDATE sessions"
@ -734,15 +828,14 @@ void TL_DB_UpdateLastPubCodInSession (const char SessionId[Cns_BYTES_SESSION_ID
"(SELECT IFNULL(MAX(PubCod),0)"
" FROM tl_pubs)" // The most recent publication
" WHERE SessionId='%s'",
SessionId);
Gbl.Session.Id);
}
/*****************************************************************************/
/********* Update first and last publication codes stored in session *********/
/*****************************************************************************/
void TL_DB_UpdateFirstLastPubCodsInSession (long FirstPubCod,
const char SessionId[Cns_BYTES_SESSION_ID + 1])
void TL_DB_UpdateFirstLastPubCodsInSession (long FirstPubCod)
{
DB_QueryUPDATE ("can not update first/last publication codes into session",
"UPDATE sessions"
@ -752,5 +845,5 @@ void TL_DB_UpdateFirstLastPubCodsInSession (long FirstPubCod,
" FROM tl_pubs)" // The most recent publication
" WHERE SessionId='%s'",
FirstPubCod,
SessionId);
Gbl.Session.Id);
}

View File

@ -56,17 +56,17 @@ void TL_DB_MarkNotesChildrenOfFolderAsUnavailable (TL_Not_NoteType_t NoteType,
long Cod,
const char *Path);
void TL_DB_CreateTmpTableJustRetrievedNotes (void);
void TL_DB_CreateTmpTableVisibleTimeline (char SessionId[Cns_BYTES_SESSION_ID + 1]);
void TL_DB_CreateTmpTableVisibleTimeline (void);
void TL_DB_InsertNoteInJustRetrievedNotes (long NotCod);
void TL_DB_InsertNoteInVisibleTimeline (long NotCod);
void TL_DB_AddNotesJustRetrievedToVisibleTimelineOfSession (char SessionId[Cns_BYTES_SESSION_ID + 1]);
void TL_DB_AddNotesJustRetrievedToVisibleTimelineOfSession (void);
void TL_DB_DropTmpTableJustRetrievedNotes (void);
void TL_DB_DropTmpTableVisibleTimeline (void);
void TL_DB_ClearOldTimelinesNotesFromDB (void);
void TL_DB_ClearTimelineNotesOfSessionFromDB (char SessionId[Cns_BYTES_SESSION_ID + 1]);
void TL_DB_ClearTimelineNotesOfSessionFromDB (void);
void TL_DB_RemoveNoteFavs (long NotCod);
void TL_DB_RemoveNotePubs (long NotCod);
void TL_DB_RemoveNote (long NotCod,long PublisherCod);
void TL_DB_RemoveNote (long NotCod);
/* Posts */
unsigned TL_DB_GetPostByCod (long PstCod,MYSQL_RES **mysql_res);
@ -89,20 +89,25 @@ void TL_DB_InsertCommentContent (long PubCod,
long TL_DB_GetMedCodFromComment (long PubCod);
void TL_DB_RemoveCommentFavs (long PubCod);
void TL_DB_RemoveCommentContent (long PubCod);
void TL_DB_RemoveCommentPub (long PubCod,long PublisherCod);
void TL_DB_RemoveCommentPub (long PubCod);
/* Publications */
void TL_DB_CreateSubQueryPublishers (const struct TL_Timeline *Timeline,
struct TL_Pub_SubQueries *SubQueries);
void TL_DB_CreateSubQueryAlreadyExists (const struct TL_Timeline *Timeline,
struct TL_Pub_SubQueries *SubQueries);
void TL_DB_CreateSubQueryRangeBottom (const struct TL_Pub_RangePubsToGet *RangePubsToGet,
struct TL_Pub_SubQueries *SubQueries);
void TL_DB_CreateSubQueryRangeTop (const struct TL_Pub_RangePubsToGet *RangePubsToGet,
struct TL_Pub_SubQueries *SubQueries);
unsigned TL_DB_SelectTheMostRecentPub (const struct TL_Pub_SubQueries *SubQueries,
MYSQL_RES **mysql_res);
long TL_DB_GetNotCodFromPubCod (long PubCod);
long TL_DB_GetPubCodFromSession (const char *FieldName,
const char SessionId[Cns_BYTES_SESSION_ID + 1]);
long TL_DB_GetPubCodFromSession (const char *FieldName);
unsigned long TL_DB_GetNumPubsUsr (long UsrCod);
long TL_DB_CreateNewPub (const struct TL_Pub_Publication *Pub);
void TL_DB_UpdateFirstPubCodInSession (long FirstPubCod,
const char SessionId[Cns_BYTES_SESSION_ID + 1]);
void TL_DB_UpdateLastPubCodInSession (const char SessionId[Cns_BYTES_SESSION_ID + 1]);
void TL_DB_UpdateFirstLastPubCodsInSession (long FirstPubCod,
const char SessionId[Cns_BYTES_SESSION_ID + 1]);
void TL_DB_UpdateFirstPubCodInSession (long FirstPubCod);
void TL_DB_UpdateLastPubCodInSession (void);
void TL_DB_UpdateFirstLastPubCodsInSession (long FirstPubCod);
#endif

View File

@ -1247,7 +1247,7 @@ static void TL_Not_RemoveNoteMediaAndDBEntries (struct TL_Not_Note *Not)
TL_DB_RemoveNotePubs (Not->NotCod);
/***** Remove note *****/
TL_DB_RemoveNote (Not->NotCod,Gbl.Usrs.Me.UsrDat.UsrCod);
TL_DB_RemoveNote (Not->NotCod);
if (Not->NoteType == TL_NOTE_POST)
/***** Remove post *****/

View File

@ -46,12 +46,6 @@
/************************* Private constants and types ***********************/
/*****************************************************************************/
struct TL_Pub_RangePubsToGet
{
long Top;
long Bottom;
};
/*****************************************************************************/
/************** External global variables from others modules ****************/
/*****************************************************************************/
@ -68,15 +62,6 @@ extern struct Globals Gbl;
static unsigned TL_Pub_GetMaxPubsToGet (const struct TL_Timeline *Timeline);
static void TL_Pub_CreateSubQueryPublishers (const struct TL_Timeline *Timeline,
struct TL_Pub_SubQueries *SubQueries);
static void TL_Pub_CreateSubQueryAlreadyExists (const struct TL_Timeline *Timeline,
struct TL_Pub_SubQueries *SubQueries);
static void TL_Pub_CreateSubQueryRangeBottom (const struct TL_Pub_RangePubsToGet *RangePubsToGet,
struct TL_Pub_SubQueries *SubQueries);
static void TL_Pub_CreateSubQueryRangeTop (const struct TL_Pub_RangePubsToGet *RangePubsToGet,
struct TL_Pub_SubQueries *SubQueries);
static void TL_Pub_UpdateFirstLastPubCodesIntoSession (const struct TL_Timeline *Timeline);
static struct TL_Pub_Publication *TL_Pub_SelectTheMostRecentPub (const struct TL_Pub_SubQueries *SubQueries);
@ -97,7 +82,7 @@ void TL_Pub_GetListPubsToShowInTimeline (struct TL_Timeline *Timeline)
/***** Clear timeline for this session in database *****/
if (Timeline->WhatToGet == TL_GET_RECENT_TIMELINE)
TL_DB_ClearTimelineNotesOfSessionFromDB (Gbl.Session.Id);
TL_DB_ClearTimelineNotesOfSessionFromDB ();
/***** Create temporary tables *****/
/* Create temporary table with notes just retrieved */
@ -105,14 +90,14 @@ void TL_Pub_GetListPubsToShowInTimeline (struct TL_Timeline *Timeline)
/* Create temporary table with all notes visible in timeline */
if (Timeline->WhatToGet == TL_GET_ONLY_OLD_PUBS)
TL_DB_CreateTmpTableVisibleTimeline (Gbl.Session.Id);
TL_DB_CreateTmpTableVisibleTimeline ();
/***** Create subqueries *****/
/* Create subquery with potential publishers */
TL_Pub_CreateSubQueryPublishers (Timeline,&SubQueries);
TL_DB_CreateSubQueryPublishers (Timeline,&SubQueries);
/* Create subquery to get only notes not present in timeline */
TL_Pub_CreateSubQueryAlreadyExists (Timeline,&SubQueries);
TL_DB_CreateSubQueryAlreadyExists (Timeline,&SubQueries);
/***** Get the publications in timeline *****/
/* Initialize range of pubs:
@ -138,13 +123,13 @@ void TL_Pub_GetListPubsToShowInTimeline (struct TL_Timeline *Timeline)
// newer than LastPubCod
/* This query is made via AJAX automatically from time to time */
RangePubsToGet.Top = 0; // +Infinite
RangePubsToGet.Bottom = TL_DB_GetPubCodFromSession ("LastPubCod",Gbl.Session.Id);
RangePubsToGet.Bottom = TL_DB_GetPubCodFromSession ("LastPubCod");
break;
case TL_GET_ONLY_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 = TL_DB_GetPubCodFromSession ("FirstPubCod",Gbl.Session.Id);
RangePubsToGet.Top = TL_DB_GetPubCodFromSession ("FirstPubCod");
RangePubsToGet.Bottom = 0; // -Infinite
break;
case TL_GET_RECENT_TIMELINE: // Get some limited recent publications
@ -157,7 +142,7 @@ void TL_Pub_GetListPubsToShowInTimeline (struct TL_Timeline *Timeline)
}
/* Create subquery with bottom range of publications to get from tl_pubs.
Bottom pub. code remains unchanged in all iterations of the next loop. */
TL_Pub_CreateSubQueryRangeBottom (&RangePubsToGet,&SubQueries);
TL_DB_CreateSubQueryRangeBottom (&RangePubsToGet,&SubQueries);
/* With the current approach, we select one by one
the publications and notes in a loop. In each iteration,
@ -199,7 +184,7 @@ void TL_Pub_GetListPubsToShowInTimeline (struct TL_Timeline *Timeline)
{
/* Create subquery with top range of publications to get from tl_pubs
In each iteration of this loop, top publication code is changed to a lower value */
TL_Pub_CreateSubQueryRangeTop (&RangePubsToGet,&SubQueries);
TL_DB_CreateSubQueryRangeTop (&RangePubsToGet,&SubQueries);
/* Select the most recent publication from tl_pubs */
Pub = TL_Pub_SelectTheMostRecentPub (&SubQueries);
@ -229,7 +214,7 @@ void TL_Pub_GetListPubsToShowInTimeline (struct TL_Timeline *Timeline)
TL_Pub_UpdateFirstLastPubCodesIntoSession (Timeline);
/***** Add notes just retrieved to visible timeline for this session *****/
TL_DB_AddNotesJustRetrievedToVisibleTimelineOfSession (Gbl.Session.Id);
TL_DB_AddNotesJustRetrievedToVisibleTimelineOfSession ();
/***** Drop temporary tables *****/
/* Drop temporary tables with notes already retrieved */
@ -259,98 +244,6 @@ static unsigned TL_Pub_GetMaxPubsToGet (const struct TL_Timeline *Timeline)
return MaxPubsToGet[Timeline->WhatToGet];
}
/*****************************************************************************/
/******* Create temporary table and subquery with potential publishers *******/
/*****************************************************************************/
static void TL_Pub_CreateSubQueryPublishers (const struct TL_Timeline *Timeline,
struct TL_Pub_SubQueries *SubQueries)
{
/***** Create temporary table and subquery with potential publishers *****/
switch (Timeline->UsrOrGbl)
{
case TL_Usr_TIMELINE_USR: // Show the timeline of a user
SubQueries->TablePublishers = "";
sprintf (SubQueries->Publishers,"tl_pubs.PublisherCod=%ld AND ",
Gbl.Usrs.Other.UsrDat.UsrCod);
break;
case TL_Usr_TIMELINE_GBL: // Show the global timeline
switch (Timeline->Who)
{
case Usr_WHO_ME: // Show my timeline
SubQueries->TablePublishers = "";
snprintf (SubQueries->Publishers,sizeof (SubQueries->Publishers),
"tl_pubs.PublisherCod=%ld AND ",
Gbl.Usrs.Me.UsrDat.UsrCod);
break;
case Usr_WHO_FOLLOWED: // Show the timeline of the users I follow
Fol_CreateTmpTableMeAndUsrsIFollow ();
SubQueries->TablePublishers = ",fol_tmp_me_and_followed";
Str_Copy (SubQueries->Publishers,
"tl_pubs.PublisherCod=fol_tmp_me_and_followed.UsrCod AND ",
sizeof (SubQueries->Publishers) - 1);
break;
case Usr_WHO_ALL: // Show the timeline of all users
SubQueries->TablePublishers = "";
SubQueries->Publishers[0] = '\0';
break;
default:
Lay_WrongWhoExit ();
break;
}
break;
}
}
/*****************************************************************************/
/********* Create subquery to get only notes not present in timeline *********/
/*****************************************************************************/
static void TL_Pub_CreateSubQueryAlreadyExists (const struct TL_Timeline *Timeline,
struct TL_Pub_SubQueries *SubQueries)
{
switch (Timeline->WhatToGet)
{
case TL_GET_RECENT_TIMELINE:
case TL_GET_ONLY_NEW_PUBS:
Str_Copy (SubQueries->AlreadyExists,
" tl_pubs.NotCod NOT IN"
" (SELECT NotCod FROM tl_tmp_just_retrieved_notes)", // Avoid notes just retrieved
sizeof (SubQueries->AlreadyExists) - 1);
break;
case TL_GET_ONLY_OLD_PUBS: // Get only old publications
Str_Copy (SubQueries->AlreadyExists,
" tl_pubs.NotCod NOT IN"
" (SELECT NotCod FROM tl_tmp_visible_timeline)", // Avoid notes already shown
sizeof (SubQueries->AlreadyExists) - 1);
break;
}
}
/*****************************************************************************/
/***** Create subqueries with range of publications to get from tl_pubs ******/
/*****************************************************************************/
static void TL_Pub_CreateSubQueryRangeBottom (const struct TL_Pub_RangePubsToGet *RangePubsToGet,
struct TL_Pub_SubQueries *SubQueries)
{
if (RangePubsToGet->Bottom > 0)
sprintf (SubQueries->RangeBottom,"tl_pubs.PubCod>%ld AND ",
RangePubsToGet->Bottom);
else
SubQueries->RangeBottom[0] = '\0';
}
static void TL_Pub_CreateSubQueryRangeTop (const struct TL_Pub_RangePubsToGet *RangePubsToGet,
struct TL_Pub_SubQueries *SubQueries)
{
if (RangePubsToGet->Top > 0)
sprintf (SubQueries->RangeTop,"tl_pubs.PubCod<%ld AND ",
RangePubsToGet->Top);
else
SubQueries->RangeTop[0] = '\0';
}
/*****************************************************************************/
/************* Update first (oldest) and last (more recent) ***************/
/************* publication codes into session for next refresh ***************/
@ -363,19 +256,19 @@ static void TL_Pub_UpdateFirstLastPubCodesIntoSession (const struct TL_Timeline
switch (Timeline->WhatToGet)
{
case TL_GET_ONLY_NEW_PUBS: // Get only new publications
TL_DB_UpdateLastPubCodInSession (Gbl.Session.Id);
TL_DB_UpdateLastPubCodInSession ();
break;
case TL_GET_ONLY_OLD_PUBS: // Get only old publications
// The oldest publication code retrieved and shown
FirstPubCod = Timeline->Pubs.Bottom ? Timeline->Pubs.Bottom->PubCod :
0;
TL_DB_UpdateFirstPubCodInSession (FirstPubCod,Gbl.Session.Id);
TL_DB_UpdateFirstPubCodInSession (FirstPubCod);
break;
case TL_GET_RECENT_TIMELINE: // Get last publications
// The oldest publication code retrieved and shown
FirstPubCod = Timeline->Pubs.Bottom ? Timeline->Pubs.Bottom->PubCod :
0;
TL_DB_UpdateFirstLastPubCodsInSession (FirstPubCod,Gbl.Session.Id);
TL_DB_UpdateFirstLastPubCodsInSession (FirstPubCod);
break;
}
}

View File

@ -65,6 +65,12 @@ struct TL_Pub_Publication
struct TL_Pub_Publication *Next; // Used for chained list
};
struct TL_Pub_RangePubsToGet
{
long Top;
long Bottom;
};
#define TL_Pub_MAX_BYTES_SUBQUERY (128 - 1)
struct TL_Pub_SubQueries
{