mirror of https://github.com/acanas/swad-core.git
Version 21.57.2: Nov 14, 2021 Code refactoring in timeline.
This commit is contained in:
parent
bbf39d2fe4
commit
b911c3480a
|
@ -13508,4 +13508,18 @@ SELECT gam_questions.QstCod,gam_questions.QstInd,tst_questions.AnsType,tst_quest
|
|||
|
||||
SELECT COUNT(tst_answers.AnsInd) AS N FROM tst_answers,gam_questions WHERE gam_questions.GamCod=8 AND gam_questions.QstCod=tst_answers.QstCod GROUP BY tst_answers.QstCod;
|
||||
|
||||
---------------------------
|
||||
|
||||
SELECT MAX(PubCod) AS NewestPubCod
|
||||
FROM tml_pubs
|
||||
GROUP BY NotCod
|
||||
ORDER BY NewestPubCod DESC
|
||||
LIMIT 10;
|
||||
|
||||
SELECT PubCod
|
||||
FROM tml_pubs
|
||||
WHERE NotCod NOT IN (SELECT NotCod FROM tml_tmp_just_retrieved_notes)
|
||||
ORDER BY PubCod DESC
|
||||
LIMIT 1;
|
||||
|
||||
|
|
@ -602,13 +602,14 @@ 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.1 (2021-11-12)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 21.57.2 (2021-11-14)"
|
||||
#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.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)
|
||||
Version 21.56.5: Nov 10, 2021 Code refactoring in switch statements. (319181 lines)
|
||||
|
|
|
@ -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_TIMELINE;
|
||||
Timeline->WhatToGet = Tml_GET_RECENT_PUBS;
|
||||
Timeline->Pubs.Top =
|
||||
Timeline->Pubs.Bottom = NULL,
|
||||
Timeline->NotCod = -1L;
|
||||
|
@ -248,7 +248,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_TIMELINE;
|
||||
Timeline->WhatToGet = Tml_GET_RECENT_PUBS;
|
||||
Tml_Pub_GetListPubsToShowInTimeline (Timeline);
|
||||
|
||||
/***** Show timeline *****/
|
||||
|
@ -277,7 +277,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_TIMELINE;
|
||||
Timeline->WhatToGet = Tml_GET_RECENT_PUBS;
|
||||
Tml_Pub_GetListPubsToShowInTimeline (Timeline);
|
||||
|
||||
/***** Show timeline *****/
|
||||
|
@ -310,7 +310,7 @@ void Tml_RefreshNewTimelineGbl (void)
|
|||
|
||||
/***** Get list of pubications to show in timeline *****/
|
||||
Timeline.UsrOrGbl = Tml_Usr_TIMELINE_GBL;
|
||||
Timeline.WhatToGet = Tml_GET_ONLY_NEW_PUBS;
|
||||
Timeline.WhatToGet = Tml_GET_NEW_PUBS;
|
||||
Tml_Pub_GetListPubsToShowInTimeline (&Timeline);
|
||||
|
||||
/***** Show new timeline *****/
|
||||
|
@ -336,7 +336,7 @@ void Tml_RefreshOldTimelineGbl (void)
|
|||
|
||||
/***** Show old publications *****/
|
||||
Timeline.UsrOrGbl = Tml_Usr_TIMELINE_GBL;
|
||||
Timeline.WhatToGet = Tml_GET_ONLY_OLD_PUBS;
|
||||
Timeline.WhatToGet = Tml_GET_OLD_PUBS;
|
||||
Tml_GetAndShowOldTimeline (&Timeline);
|
||||
}
|
||||
|
||||
|
@ -353,7 +353,7 @@ void Tml_RefreshOldTimelineUsr (void)
|
|||
|
||||
/***** If user exists, show old publications *****/
|
||||
Timeline.UsrOrGbl = Tml_Usr_TIMELINE_USR;
|
||||
Timeline.WhatToGet = Tml_GET_ONLY_OLD_PUBS;
|
||||
Timeline.WhatToGet = Tml_GET_OLD_PUBS;
|
||||
Tml_GetAndShowOldTimeline (&Timeline);
|
||||
}
|
||||
|
||||
|
|
|
@ -69,12 +69,14 @@ typedef enum
|
|||
#define Tml_NUM_WHAT_TO_GET 3
|
||||
typedef enum
|
||||
{
|
||||
Tml_GET_RECENT_TIMELINE, // Recent timeline is shown when the user clicks on action menu,...
|
||||
// or after editing timeline
|
||||
Tml_GET_ONLY_NEW_PUBS, // New publications are retrieved via AJAX
|
||||
// automatically from time to time
|
||||
Tml_GET_ONLY_OLD_PUBS, // Old publications are retrieved via AJAX
|
||||
// when the user clicks on link at bottom of timeline
|
||||
Tml_GET_NEW_PUBS, // New publications are retrieved via AJAX...
|
||||
// automatically from time to time
|
||||
Tml_GET_RECENT_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...
|
||||
// when the user clicks on link...
|
||||
// at bottom of timeline
|
||||
} Tml_WhatToGet_t;
|
||||
|
||||
struct Tml_Timeline
|
||||
|
|
|
@ -922,9 +922,9 @@ void Tml_DB_CreateSubQueryAlreadyExists (const struct Tml_Timeline *Timeline,
|
|||
{
|
||||
static const char *Table[Tml_NUM_WHAT_TO_GET] =
|
||||
{
|
||||
[Tml_GET_RECENT_TIMELINE] = "tml_tmp_just_retrieved_notes", // Avoid notes just retrieved
|
||||
[Tml_GET_ONLY_NEW_PUBS ] = "tml_tmp_just_retrieved_notes", // Avoid notes just retrieved
|
||||
[Tml_GET_ONLY_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_RECENT_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),
|
||||
|
@ -970,8 +970,8 @@ unsigned Tml_DB_SelectTheMostRecentPub (const struct Tml_Pub_SubQueries *SubQuer
|
|||
"tml_pubs.PubType" // row[3]
|
||||
" FROM tml_pubs%s"
|
||||
" WHERE %s%s%s%s"
|
||||
" ORDER BY tml_pubs.PubCod"
|
||||
" DESC LIMIT 1",
|
||||
" ORDER BY tml_pubs.PubCod DESC"
|
||||
" LIMIT 1",
|
||||
SubQueries->TablePublishers,
|
||||
SubQueries->RangeBottom,
|
||||
SubQueries->RangeTop,
|
||||
|
@ -1024,28 +1024,18 @@ long Tml_DB_GetNotCodFromPubCod (long PubCod)
|
|||
|
||||
long Tml_DB_GetPubCodFromSession (const char *FieldName)
|
||||
{
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
long PubCod;
|
||||
|
||||
/***** Get last publication code from database *****/
|
||||
if (DB_QuerySELECT (&mysql_res,"can not get publication code from session",
|
||||
"SELECT %s" // row[0]
|
||||
" FROM ses_sessions"
|
||||
" WHERE SessionId='%s'",
|
||||
FieldName,Gbl.Session.Id) == 1)
|
||||
{
|
||||
/* Get last publication code */
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
if (sscanf (row[0],"%ld",&PubCod) != 1)
|
||||
PubCod = 0;
|
||||
}
|
||||
else
|
||||
PubCod = DB_QuerySELECTCode ("can not get publication code from session",
|
||||
"SELECT %s" // row[0]
|
||||
" FROM ses_sessions"
|
||||
" WHERE SessionId='%s'",
|
||||
FieldName,
|
||||
Gbl.Session.Id);
|
||||
if (PubCod < 0)
|
||||
PubCod = 0;
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
|
||||
return PubCod;
|
||||
}
|
||||
|
||||
|
|
|
@ -63,7 +63,24 @@ static Tml_Pub_Type_t Tml_Pub_GetPubTypeFromStr (const char *Str);
|
|||
/*****************************************************************************/
|
||||
/*************** Get list of pubications to show in timeline *****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*
|
||||
_ ______________________
|
||||
/ |______________________| Tml_GET_ONLY_NEW_PUBS
|
||||
New < |______________________| automatically from time to time
|
||||
\_|______________________| (AJAX)
|
||||
_|_See_new_activity_(3)_|
|
||||
/ |______________________| Tml_GET_RECENT_TIMELINE
|
||||
| |______________________| user clicks on action menu
|
||||
Recent < |______________________| or after editing timeline
|
||||
| |______________________|
|
||||
\_|______________________|
|
||||
_|_______See_more_______|
|
||||
/ |______________________| Tml_GET_ONLY_OLD_PUBS
|
||||
| |______________________| user clicks on bottom link
|
||||
Old < |______________________| (AJAX)
|
||||
| |______________________|
|
||||
\_|______________________|
|
||||
*/
|
||||
void Tml_Pub_GetListPubsToShowInTimeline (struct Tml_Timeline *Timeline)
|
||||
{
|
||||
struct Tml_Pub_SubQueries SubQueries;
|
||||
|
@ -76,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_TIMELINE)
|
||||
if (Timeline->WhatToGet == Tml_GET_RECENT_PUBS)
|
||||
Tml_DB_ClearTimelineNotesOfSessionFromDB ();
|
||||
|
||||
/***** Create temporary tables *****/
|
||||
|
@ -84,7 +101,7 @@ void Tml_Pub_GetListPubsToShowInTimeline (struct Tml_Timeline *Timeline)
|
|||
Tml_DB_CreateTmpTableJustRetrievedNotes ();
|
||||
|
||||
/* Create temporary table with all notes visible in timeline */
|
||||
if (Timeline->WhatToGet == Tml_GET_ONLY_OLD_PUBS)
|
||||
if (Timeline->WhatToGet == Tml_GET_OLD_PUBS)
|
||||
Tml_DB_CreateTmpTableVisibleTimeline ();
|
||||
|
||||
/***** Create subqueries *****/
|
||||
|
@ -120,15 +137,16 @@ void Tml_Pub_GetListPubsToShowInTimeline (struct Tml_Timeline *Timeline)
|
|||
|
||||
/***** Get the publications in timeline *****/
|
||||
/* With the current approach, we select one by one
|
||||
the publications and notes in a loop. In each iteration,
|
||||
we get the most recent publication (original, shared or commment)
|
||||
of every set of publications corresponding to the same note,
|
||||
checking that the note is not already retrieved.
|
||||
After getting a publication, its note code is stored
|
||||
in order to not get it again.
|
||||
the publications and notes in a loop.
|
||||
In each iteration:
|
||||
we get the most recent publication (original, shared or comment)
|
||||
of every set of publications corresponding to the same note,
|
||||
checking that the note is not already retrieved.
|
||||
After getting a publication, its note code is saved
|
||||
in order to not get it again.
|
||||
|
||||
As an alternative, we tried to get the maximum PubCod,
|
||||
i.e more recent publication (original, shared or commment),
|
||||
i.e more recent publication (original, shared or comment),
|
||||
of every set of publications corresponding to the same note:
|
||||
SELECT MAX(PubCod) AS NewestPubCod
|
||||
FROM tml_pubs ...
|
||||
|
@ -152,7 +170,7 @@ void Tml_Pub_GetListPubsToShowInTimeline (struct Tml_Timeline *Timeline)
|
|||
Timeline->Pubs.Top = Pub; // Pointer to top publication
|
||||
else
|
||||
Timeline->Pubs.Bottom->Next = Pub; // Chain the previous publication with the current one
|
||||
Timeline->Pubs.Bottom = Pub; // Update pointer to bottom publication
|
||||
Timeline->Pubs.Bottom = Pub; // Update pointer to bottom publication
|
||||
|
||||
if (Pub == NULL) // Nothing got ==> abort loop
|
||||
break; // Last publication
|
||||
|
@ -160,7 +178,7 @@ void Tml_Pub_GetListPubsToShowInTimeline (struct Tml_Timeline *Timeline)
|
|||
/* Insert note in temporary tables with just retrieved notes.
|
||||
These tables will be used to not get notes already shown */
|
||||
Tml_DB_InsertNoteInJustRetrievedNotes (Pub->NotCod);
|
||||
if (Timeline->WhatToGet == Tml_GET_ONLY_OLD_PUBS) // Get only old publications
|
||||
if (Timeline->WhatToGet == Tml_GET_OLD_PUBS) // Get only old publications
|
||||
Tml_DB_InsertNoteInVisibleTimeline (Pub->NotCod);
|
||||
|
||||
/* Narrow the range for the next iteration */
|
||||
|
@ -177,7 +195,7 @@ void Tml_Pub_GetListPubsToShowInTimeline (struct Tml_Timeline *Timeline)
|
|||
/***** Drop temporary tables *****/
|
||||
/* Drop temporary tables with notes already retrieved */
|
||||
Tml_DB_DropTmpTableJustRetrievedNotes ();
|
||||
if (Timeline->WhatToGet == Tml_GET_ONLY_OLD_PUBS) // Get only old publications
|
||||
if (Timeline->WhatToGet == Tml_GET_OLD_PUBS) // Get only old publications
|
||||
Tml_DB_DropTmpTableVisibleTimeline ();
|
||||
|
||||
/* Drop temporary table with me and users I follow */
|
||||
|
@ -210,28 +228,31 @@ static void Tml_Pub_InitializeRangeOfPubs (Tml_WhatToGet_t WhatToGet,
|
|||
|_____| 1
|
||||
0
|
||||
*/
|
||||
/* Default range */
|
||||
RangePubsToGet->Top = 0; // +Infinite
|
||||
RangePubsToGet->Bottom = 0; // -Infinite
|
||||
|
||||
switch (WhatToGet)
|
||||
{
|
||||
case Tml_GET_ONLY_NEW_PUBS: // Get the publications (without limit)
|
||||
// newer than LastPubCod
|
||||
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");
|
||||
break;
|
||||
case Tml_GET_ONLY_OLD_PUBS: // Get some limited publications
|
||||
// older than FirstPubCod
|
||||
case Tml_GET_RECENT_PUBS: // Get some limited recent publications
|
||||
/* This is the first query to get initial timeline shown
|
||||
==> no notes yet in current timeline table */
|
||||
RangePubsToGet->Top = 0; // +Infinite
|
||||
RangePubsToGet->Bottom = 0; // -Infinite
|
||||
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
|
||||
break;
|
||||
case Tml_GET_RECENT_TIMELINE: // Get some limited recent publications
|
||||
default:
|
||||
/* This is the first query to get initial timeline shown
|
||||
==> no notes yet in current timeline table */
|
||||
break;
|
||||
RangePubsToGet->Top = 0; // +Infinite
|
||||
RangePubsToGet->Bottom = 0; // -Infinite
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -243,9 +264,9 @@ static unsigned Tml_Pub_GetMaxPubsToGet (const struct Tml_Timeline *Timeline)
|
|||
{
|
||||
static const unsigned MaxPubsToGet[Tml_NUM_WHAT_TO_GET] =
|
||||
{
|
||||
[Tml_GET_RECENT_TIMELINE] = Tml_Pub_MAX_REC_PUBS_TO_GET_AND_SHOW,
|
||||
[Tml_GET_ONLY_NEW_PUBS ] = Tml_Pub_MAX_NEW_PUBS_TO_GET_AND_SHOW,
|
||||
[Tml_GET_ONLY_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_RECENT_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];
|
||||
|
@ -262,18 +283,18 @@ static void Tml_Pub_UpdateFirstLastPubCodesIntoSession (const struct Tml_Timelin
|
|||
|
||||
switch (Timeline->WhatToGet)
|
||||
{
|
||||
case Tml_GET_ONLY_NEW_PUBS: // Get only new publications
|
||||
case Tml_GET_NEW_PUBS: // Get only new publications
|
||||
Tml_DB_UpdateLastPubCodInSession ();
|
||||
break;
|
||||
case Tml_GET_ONLY_OLD_PUBS: // Get only old publications
|
||||
case Tml_GET_RECENT_TIMELINE: // Get last publications
|
||||
case Tml_GET_RECENT_PUBS: // Get last 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_ONLY_OLD_PUBS)
|
||||
Tml_DB_UpdateFirstPubCodInSession (FirstPubCod);
|
||||
else
|
||||
if (Timeline->WhatToGet == Tml_GET_RECENT_PUBS)
|
||||
Tml_DB_UpdateFirstLastPubCodsInSession (FirstPubCod);
|
||||
else
|
||||
Tml_DB_UpdateFirstPubCodInSession (FirstPubCod);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,8 +37,8 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
// Number of recent publishings got and shown the first time, before refreshing
|
||||
#define Tml_Pub_MAX_REC_PUBS_TO_GET_AND_SHOW 10 // Recent publishings to show (first time)
|
||||
#define Tml_Pub_MAX_NEW_PUBS_TO_GET_AND_SHOW 10000 // New publishings retrieved (big number)
|
||||
#define Tml_Pub_MAX_REC_PUBS_TO_GET_AND_SHOW 10 // Recent publishings to show (first time)
|
||||
#define Tml_Pub_MAX_OLD_PUBS_TO_GET_AND_SHOW 20 // Old publishings are retrieved in packs of this size
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -45,8 +45,8 @@
|
|||
|
||||
typedef enum
|
||||
{
|
||||
Tml_Usr_TIMELINE_USR, // Show the timeline of a user
|
||||
Tml_Usr_TIMELINE_GBL, // Show the timeline of the users follwed by me
|
||||
Tml_Usr_TIMELINE_USR, // Show the timeline of a user
|
||||
Tml_Usr_TIMELINE_GBL, // Show the timeline of the users follwed by me
|
||||
} Tml_Usr_UsrOrGbl_t;
|
||||
|
||||
typedef enum
|
||||
|
|
Loading…
Reference in New Issue