Version 15.106

This commit is contained in:
Antonio Cañas Vargas 2016-01-10 14:27:35 +01:00
parent f1e9b1451e
commit e6558c4cda
11 changed files with 213 additions and 71 deletions

View File

@ -1668,14 +1668,14 @@ a:hover img.CENTRE_PHOTO_SHOW
.LOG_R {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:red; font-size:11pt;} .LOG_R {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:red; font-size:11pt;}
/******************************** Social activity ****************************/ /******************************** Social activity ****************************/
#view_new_posts_container #view_new_posts_container,#view_old_posts_container
{ {
display:table-cell; display:table-cell;
height:50px; height:50px;
text-align:center; text-align:center;
vertical-align:middle; vertical-align:middle;
} }
#recent_timeline_list #new_timeline_list
{ {
display:none; display:none;
} }

View File

@ -349,15 +349,30 @@ function refreshLastClicks() {
} }
} }
//Automatic refresh of social timeline using AJAX. This function must be called from time to time // Automatic refresh of new publishings in social timeline using AJAX. This function must be called from time to time
var objXMLHttpReqSoc = false; var objXMLHttpReqSoc = false;
function refreshSocialTimeline() { function refreshNewTimeline() {
objXMLHttpReqSoc = AJAXCreateObject(); objXMLHttpReqSoc = AJAXCreateObject();
if (objXMLHttpReqSoc) { if (objXMLHttpReqSoc) {
var RefreshParams = RefreshParamNxtActSoc + '&' + var RefreshParams = RefreshParamNxtActNewPub + '&' +
RefreshParamIdSes; RefreshParamIdSes;
objXMLHttpReqSoc.onreadystatechange = readSocialTimelineData; // onreadystatechange must be lowercase objXMLHttpReqSoc.onreadystatechange = readNewTimelineData; // onreadystatechange must be lowercase
objXMLHttpReqSoc.open('POST',ActionAJAX,true);
objXMLHttpReqSoc.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
objXMLHttpReqSoc.send(RefreshParams);
}
}
// Refresh of old publishings in social timeline using AJAX. This function is called when user clicks in link
var objXMLHttpReqSoc = false;
function refreshOldTimeline() {
objXMLHttpReqSoc = AJAXCreateObject();
if (objXMLHttpReqSoc) {
var RefreshParams = RefreshParamNxtActOldPub + '&' +
RefreshParamIdSes;
objXMLHttpReqSoc.onreadystatechange = readOldTimelineData; // onreadystatechange must be lowercase
objXMLHttpReqSoc.open('POST',ActionAJAX,true); objXMLHttpReqSoc.open('POST',ActionAJAX,true);
objXMLHttpReqSoc.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); objXMLHttpReqSoc.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
objXMLHttpReqSoc.send(RefreshParams); objXMLHttpReqSoc.send(RefreshParams);
@ -446,25 +461,25 @@ function readLastClicksData() {
} }
} }
//Receives and show social timeline data // Receives and show new social timeline data
function readSocialTimelineData() { function readNewTimelineData() {
if (objXMLHttpReqSoc.readyState == 4) { // Check if data have been received if (objXMLHttpReqSoc.readyState == 4) { // Check if data have been received
if (objXMLHttpReqSoc.status == 200) { if (objXMLHttpReqSoc.status == 200) {
var endOfDelay = objXMLHttpReqSoc.responseText.indexOf('|',0); // Get separator position var endOfDelay = objXMLHttpReqSoc.responseText.indexOf('|',0); // Get separator position
var delay = parseInt(objXMLHttpReqSoc.responseText.substring(0,endOfDelay)); // Get refresh delay var delay = parseInt(objXMLHttpReqSoc.responseText.substring(0,endOfDelay)); // Get refresh delay
var htmlRecentTimeline = objXMLHttpReqSoc.responseText.substring(endOfDelay+1); // Get HTML code for social timeline var htmlNewTimeline = objXMLHttpReqSoc.responseText.substring(endOfDelay+1); // Get HTML code for social timeline
var recentTimeline = document.getElementById('recent_timeline_list'); // Access to UL with the recent timeline var newTimeline = document.getElementById('new_timeline_list'); // Access to UL with the new timeline
if (recentTimeline) { if (newTimeline) {
recentTimeline.innerHTML = htmlRecentTimeline + recentTimeline.innerHTML; // Update list of publishings in recent timeline newTimeline.innerHTML = htmlNewTimeline + newTimeline.innerHTML; // Update list of publishings in new timeline
var countRecentTimeline = recentTimeline.childNodes.length; var countNewTimeline = newTimeline.childNodes.length;
if (countRecentTimeline) { if (countNewTimeline) {
var viewNewPostsContainer = document.getElementById('view_new_posts_container'); var viewNewPostsContainer = document.getElementById('view_new_posts_container');
var viewNewPostsCount = document.getElementById('view_new_posts_count'); var viewNewPostsCount = document.getElementById('view_new_posts_count');
// Update number of new posts // Update number of new posts
viewNewPostsCount.innerHTML = countRecentTimeline; viewNewPostsCount.innerHTML = countNewTimeline;
// Display message with new posts if hidden // Display message with new posts if hidden
viewNewPostsContainer.style.display = ''; viewNewPostsContainer.style.display = '';
@ -472,23 +487,49 @@ function readSocialTimelineData() {
} }
if (delay >= 5000) // If refresh slower than 1 time each 5 seconds, do refresh; else abort if (delay >= 5000) // If refresh slower than 1 time each 5 seconds, do refresh; else abort
setTimeout('refreshSocialTimeline()',delay); setTimeout('refreshNewTimeline()',delay);
} }
} }
} }
// Move recent timeline to timeline // Receives and show old social timeline data
function moveRecentTimelineToTimeline() { function readOldTimelineData() {
if (objXMLHttpReqSoc.readyState == 4) { // Check if data have been received
if (objXMLHttpReqSoc.status == 200) {
var endOfDelay = objXMLHttpReqSoc.responseText.indexOf('|',0); // Get separator position
var delay = parseInt(objXMLHttpReqSoc.responseText.substring(0,endOfDelay)); // Get refresh delay
var htmlOldTimeline = objXMLHttpReqSoc.responseText.substring(endOfDelay+1); // Get HTML code for social timeline
var oldTimeline = document.getElementById('old_timeline_list'); // Access to UL with the recent timeline
if (oldTimeline) {
oldTimeline.innerHTML = htmlOldTimeline; // Fill list of publishings in old timeline
var countOldTimeline = oldTimeline.childNodes.length;
if (countOldTimeline) {
var timeline = document.getElementById("timeline_list");
// Move all the LI elements in UL 'old_timeline_list' to the bottom of UL 'timeline_list'
for (var i=0; i<countOldTimeline; i++)
timeline.appendChild(oldTimeline.firstChild);
// oldTimeline.removeChild(oldTimeline.childNodes[0]); // Not necessary
}
}
}
}
}
// Move new timeline to top of timeline
function moveNewTimelineToTimeline() {
var viewNewPostsContainer = document.getElementById('view_new_posts_container'); var viewNewPostsContainer = document.getElementById('view_new_posts_container');
var viewNewPostsCount = document.getElementById('view_new_posts_count'); var viewNewPostsCount = document.getElementById('view_new_posts_count');
var recentTimeline = document.getElementById('recent_timeline_list'); // Access to social timeline DIV var newTimeline = document.getElementById('new_timeline_list');
var countRecentTimeline = recentTimeline.childNodes.length; var countNewTimeline = newTimeline.childNodes.length;
if (countRecentTimeline) { if (countNewTimeline) {
var timeline = document.getElementById("timeline_list"); var timeline = document.getElementById("timeline_list");
// Move all the LI elements in UL 'recentTimeline' to the top of UL 'timeline' // Move all the LI elements in UL 'new_timeline_list' to the top of UL 'timeline_list'
for(var i=0; i < countRecentTimeline; i++) for (var i=0; i<countNewTimeline; i++)
timeline.insertBefore(recentTimeline.lastChild, timeline.childNodes[0]); timeline.insertBefore(newTimeline.lastChild, timeline.childNodes[0]);
} }
// Reset and hide number of new posts after moving // Reset and hide number of new posts after moving

View File

@ -83,7 +83,8 @@ extern struct Globals Gbl;
3. ActMnu Show menu of a tab 3. ActMnu Show menu of a tab
4. ActRefCon Refresh number of notifications and connected users via AJAX 4. ActRefCon Refresh number of notifications and connected users via AJAX
5. ActRefLstClk Refresh last clicks in log via AJAX 5. ActRefLstClk Refresh last clicks in log via AJAX
New!!!!!!!!. ActRefSocTim Refresh recent social timeline via AJAX New!!!!!!!!. ActRefNewSocPub Refresh recent social timeline via AJAX
New!!!!!!!!. ActRefNewSocPub View old social timeline via AJAX
6. ActWebSvc Call plugin function 6. ActWebSvc Call plugin function
System: System:
7. ActSysReqSch Request search in system tab 7. ActSysReqSch Request search in system tab
@ -1339,7 +1340,8 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActMnu */{ 2,-1,TabUnk,ActMnu ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,NULL ,NULL}, /* ActMnu */{ 2,-1,TabUnk,ActMnu ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,NULL ,NULL},
/* ActRefCon */{ 845,-1,TabUnk,ActRefCon ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Lay_RefreshNotifsAndConnected ,NULL}, /* ActRefCon */{ 845,-1,TabUnk,ActRefCon ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Lay_RefreshNotifsAndConnected ,NULL},
/* ActRefLstClk */{ 994,-1,TabUnk,ActRefLstClk ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Lay_RefreshLastClicks ,NULL}, /* ActRefLstClk */{ 994,-1,TabUnk,ActRefLstClk ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Lay_RefreshLastClicks ,NULL},
/* ActRefSocTim */{1509,-1,TabUnk,ActRefSocTim ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Lay_RefreshSocialTimeline ,NULL}, /* ActRefNewSocPub */{1509,-1,TabUnk,ActRefNewSocPub ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Lay_RefreshNewTimeline ,NULL},
/* ActRefOldSocPub */{1510,-1,TabUnk,ActRefNewSocPub ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Lay_RefreshOldTimeline ,NULL},
/* ActWebSvc */{ 892,-1,TabUnk,ActWebSvc ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Plg_WebService ,NULL}, /* ActWebSvc */{ 892,-1,TabUnk,ActWebSvc ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Plg_WebService ,NULL},
// TabSys ****************************************************************** // TabSys ******************************************************************
@ -4202,7 +4204,8 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActReqRemSocComUsr, // #1506 ActReqRemSocComUsr, // #1506
ActRemSocComGbl, // #1507 ActRemSocComGbl, // #1507
ActRemSocComUsr, // #1508 ActRemSocComUsr, // #1508
ActRefSocTim, // #1509 ActRefNewSocPub, // #1509
ActRefOldSocPub, // #1510
}; };
/*****************************************************************************/ /*****************************************************************************/
@ -4501,9 +4504,10 @@ void Act_AdjustCurrentAction (void)
return; return;
/***** Don't adjust anything when refreshing users or on a web service *****/ /***** Don't adjust anything when refreshing users or on a web service *****/
if (Gbl.CurrentAct == ActRefCon || if (Gbl.CurrentAct == ActRefCon ||
Gbl.CurrentAct == ActRefLstClk || Gbl.CurrentAct == ActRefLstClk ||
Gbl.CurrentAct == ActRefSocTim || Gbl.CurrentAct == ActRefNewSocPub ||
Gbl.CurrentAct == ActRefOldSocPub ||
Gbl.WebService.IsWebService) Gbl.WebService.IsWebService)
return; return;

View File

@ -71,9 +71,9 @@ typedef enum
typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
#define Act_NUM_ACTIONS (8+52+15+90+72+67+205+183+143+163+36+27+82) #define Act_NUM_ACTIONS (9+52+15+90+72+67+205+183+143+163+36+27+82)
#define Act_MAX_ACTION_COD 1509 #define Act_MAX_ACTION_COD 1510
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
@ -86,8 +86,9 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
#define ActMnu 3 #define ActMnu 3
#define ActRefCon 4 #define ActRefCon 4
#define ActRefLstClk 5 #define ActRefLstClk 5
#define ActRefSocTim 6 #define ActRefNewSocPub 6
#define ActWebSvc 7 #define ActRefOldSocPub 7
#define ActWebSvc 8
/*****************************************************************************/ /*****************************************************************************/
/******************************** System tab *********************************/ /******************************** System tab *********************************/

View File

@ -115,18 +115,20 @@
// TODO: Go to forum post (or at least to forum thread) from social timeline? // TODO: Go to forum post (or at least to forum thread) from social timeline?
// TODO: Include time of last comment in table social_timeline to display social publishings with new comments when refreshing // TODO: Include time of last comment in table social_timeline to display social publishings with new comments when refreshing
// TODO: Change refreshing time from 5 seconds to 1 minute or so. Increment one second after each refresh? // TODO: Change refreshing time from 5 seconds to 1 minute or so. Increment one second after each refresh?
// TODO: Show error message when commenting a removed social note
/*****************************************************************************/ /*****************************************************************************/
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 15.105.1 (2016-01-10)" #define Log_PLATFORM_VERSION "SWAD 15.106 (2016-01-10)"
#define CSS_FILE "swad15.102.css" #define CSS_FILE "swad15.102.css"
#define JS_FILE "swad15.104.js" #define JS_FILE "swad15.106.js"
// Number of lines (includes comments but not blank lines) has been got with the following command: // Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/* /*
Version 15.106: Jan 10, 2016 Link at the bottom of timeline to get older publishings. (192028 lines)
Version 15.105.1: Jan 10, 2016 Change in style writing recent social publishings. (191909 lines) Version 15.105.1: Jan 10, 2016 Change in style writing recent social publishings. (191909 lines)
Version 15.105: Jan 10, 2016 Get only publishings newest than a give publishing. (191912 lines) Version 15.105: Jan 10, 2016 Get only publishings newest than a give publishing. (191912 lines)
1 change necessary in database: 1 change necessary in database:

View File

@ -438,9 +438,10 @@ void Gbl_InitializeGlobals (void)
void Gbl_Cleanup (void) void Gbl_Cleanup (void)
{ {
if (Gbl.CurrentAct != ActRefCon && if (Gbl.CurrentAct != ActRefCon &&
Gbl.CurrentAct != ActRefLstClk && Gbl.CurrentAct != ActRefLstClk &&
Gbl.CurrentAct != ActRefSocTim && Gbl.CurrentAct != ActRefNewSocPub &&
Gbl.CurrentAct != ActRefOldSocPub &&
!Gbl.WebService.IsWebService && !Gbl.WebService.IsWebService &&
Act_Actions[Gbl.CurrentAct].BrowserWindow == Act_MAIN_WINDOW && Act_Actions[Gbl.CurrentAct].BrowserWindow == Act_MAIN_WINDOW &&
!Gbl.HiddenParamsInsertedIntoDB) !Gbl.HiddenParamsInsertedIntoDB)

View File

@ -123,9 +123,10 @@ void Lay_WriteStartOfPage (void)
Con_ComputeConnectedUsrsBelongingToCurrentCrs (); Con_ComputeConnectedUsrsBelongingToCurrentCrs ();
/***** Send head width the file type for the HTTP protocol *****/ /***** Send head width the file type for the HTTP protocol *****/
if (Gbl.CurrentAct == ActRefCon || if (Gbl.CurrentAct == ActRefCon ||
Gbl.CurrentAct == ActRefLstClk || Gbl.CurrentAct == ActRefLstClk ||
Gbl.CurrentAct == ActRefSocTim) Gbl.CurrentAct == ActRefNewSocPub ||
Gbl.CurrentAct == ActRefOldSocPub)
// Don't generate a full HTML page, only the content of a DIV or similar // Don't generate a full HTML page, only the content of a DIV or similar
{ {
fprintf (Gbl.F.Out,"Content-Type: text/html; charset=windows-1252\r\n\r\n"); fprintf (Gbl.F.Out,"Content-Type: text/html; charset=windows-1252\r\n\r\n");
@ -611,7 +612,7 @@ static void Lay_WriteScriptInit (void)
fprintf (Gbl.F.Out," setTimeout(\"refreshLastClicks()\",%lu);\n", fprintf (Gbl.F.Out," setTimeout(\"refreshLastClicks()\",%lu);\n",
Cfg_TIME_TO_REFRESH_LAST_CLICKS); Cfg_TIME_TO_REFRESH_LAST_CLICKS);
else if (Gbl.CurrentAct == ActSeeSocTmlGbl) else if (Gbl.CurrentAct == ActSeeSocTmlGbl)
fprintf (Gbl.F.Out," setTimeout(\"refreshSocialTimeline()\",%lu);\n", fprintf (Gbl.F.Out," setTimeout(\"refreshNewTimeline()\",%lu);\n",
Cfg_TIME_TO_REFRESH_SOCIAL_TIMELINE); Cfg_TIME_TO_REFRESH_SOCIAL_TIMELINE);
fprintf (Gbl.F.Out,"}\n" fprintf (Gbl.F.Out,"}\n"
"</script>\n"); "</script>\n");
@ -626,13 +627,15 @@ static void Lay_WriteScriptParamsAJAX (void)
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">\n" fprintf (Gbl.F.Out,"<script type=\"text/javascript\">\n"
"var RefreshParamNxtActCon = \"act=%ld\";\n" "var RefreshParamNxtActCon = \"act=%ld\";\n"
"var RefreshParamNxtActLog = \"act=%ld\";\n" "var RefreshParamNxtActLog = \"act=%ld\";\n"
"var RefreshParamNxtActSoc = \"act=%ld\";\n" "var RefreshParamNxtActNewPub = \"act=%ld\";\n"
"var RefreshParamNxtActOldPub = \"act=%ld\";\n"
"var RefreshParamIdSes = \"ses=%s\";\n" "var RefreshParamIdSes = \"ses=%s\";\n"
"var RefreshParamCrsCod = \"crs=%ld\";\n" "var RefreshParamCrsCod = \"crs=%ld\";\n"
"</script>\n", "</script>\n",
Act_Actions[ActRefCon ].ActCod, Act_Actions[ActRefCon ].ActCod,
Act_Actions[ActRefLstClk].ActCod, Act_Actions[ActRefLstClk ].ActCod,
Act_Actions[ActRefSocTim].ActCod, Act_Actions[ActRefNewSocPub].ActCod,
Act_Actions[ActRefOldSocPub].ActCod,
Gbl.Session.Id, Gbl.Session.Id,
Gbl.CurrentCrs.Crs.CrsCod); Gbl.CurrentCrs.Crs.CrsCod);
} }
@ -1295,9 +1298,10 @@ void Lay_ShowErrorAndExit (const char *Message)
/***** Page is generated (except </body> and </html>). /***** Page is generated (except </body> and </html>).
Compute time to generate page *****/ Compute time to generate page *****/
if (Gbl.CurrentAct != ActRefCon && // Refreshing connected users if (Gbl.CurrentAct != ActRefCon && // Refreshing connected users
Gbl.CurrentAct != ActRefLstClk && // Refreshing last clics Gbl.CurrentAct != ActRefLstClk && // Refreshing last clics
Gbl.CurrentAct != ActRefSocTim) // Refreshing social timeline Gbl.CurrentAct != ActRefNewSocPub && // Refreshing new social publishings in timeline
Gbl.CurrentAct != ActRefOldSocPub) // Refreshing old social publishings in timeline
Sta_ComputeTimeToGeneratePage (); Sta_ComputeTimeToGeneratePage ();
if (Gbl.WebService.IsWebService) // Serving a plugin request if (Gbl.WebService.IsWebService) // Serving a plugin request
@ -1315,9 +1319,10 @@ void Lay_ShowErrorAndExit (const char *Message)
Fil_FastCopyOfOpenFiles (Gbl.F.Out,stdout); Fil_FastCopyOfOpenFiles (Gbl.F.Out,stdout);
Fil_CloseAndRemoveFileForHTMLOutput (); Fil_CloseAndRemoveFileForHTMLOutput ();
if (Gbl.CurrentAct != ActRefCon && // Refreshing connected users if (Gbl.CurrentAct != ActRefCon && // Refreshing connected users
Gbl.CurrentAct != ActRefLstClk && // Refreshing last clicks Gbl.CurrentAct != ActRefLstClk && // Refreshing last clicks
Gbl.CurrentAct != ActRefSocTim) // Refreshing last clicks Gbl.CurrentAct != ActRefNewSocPub && // Refreshing new social publishings in timeline
Gbl.CurrentAct != ActRefOldSocPub) // Refreshing old social publishings in timeline
{ {
/***** Compute time to send page *****/ /***** Compute time to send page *****/
Sta_ComputeTimeToSendPage (); Sta_ComputeTimeToSendPage ();
@ -1492,15 +1497,27 @@ void Lay_RefreshLastClicks (void)
} }
/*****************************************************************************/ /*****************************************************************************/
/********************* Refresh social timeline via AJAX **********************/ /********** Refresh new publishings in social timeline via AJAX **************/
/*****************************************************************************/ /*****************************************************************************/
void Lay_RefreshSocialTimeline (void) void Lay_RefreshNewTimeline (void)
{ {
// Send, before the HTML, the refresh time and the last publishing got from database // Send, before the HTML, the refresh time and the last publishing got from database
fprintf (Gbl.F.Out,"%lu|", fprintf (Gbl.F.Out,"%lu|",
Cfg_TIME_TO_REFRESH_SOCIAL_TIMELINE); Cfg_TIME_TO_REFRESH_SOCIAL_TIMELINE);
Soc_GetAndShowRecentTimelineGbl (); Soc_GetAndShowNewTimelineGbl ();
/***** All the output is made, so don't write anymore *****/
Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true;
}
/*****************************************************************************/
/************ View new publishings in social timeline via AJAX ***************/
/*****************************************************************************/
void Lay_RefreshOldTimeline (void)
{
Soc_GetAndShowOldTimelineGbl ();
/***** All the output is made, so don't write anymore *****/ /***** All the output is made, so don't write anymore *****/
Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true; Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true;

View File

@ -111,7 +111,8 @@ void Lay_ShowAlert (Lay_AlertType_t MsgType,const char *Message);
void Lay_RefreshNotifsAndConnected (void); void Lay_RefreshNotifsAndConnected (void);
void Lay_RefreshLastClicks (void); void Lay_RefreshLastClicks (void);
void Lay_RefreshSocialTimeline (void); void Lay_RefreshNewTimeline (void);
void Lay_RefreshOldTimeline (void);
void Lay_WriteHeaderClassPhoto (unsigned NumColumns,bool PrintView,bool DrawingClassPhoto, void Lay_WriteHeaderClassPhoto (unsigned NumColumns,bool PrintView,bool DrawingClassPhoto,
long InsCod,long DegCod,long CrsCod); long InsCod,long DegCod,long CrsCod);

View File

@ -49,10 +49,10 @@
/***************************** Private constants *****************************/ /***************************** Private constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Soc_MAX_BYTES_SUMMARY 100 #define Soc_WIDTH_TIMELINE "560px"
#define Soc_NUM_PUBS_IN_TIMELINE 100 #define Soc_NUM_PUBS_IN_TIMELINE 5 // Number of recent publishings shown before refreshing
#define Soc_WIDTH_TIMELINE "560px" #define Soc_MAX_NUM_SHARERS_SHOWN 10 // Maximum number of users shown who have share a social note
#define Soc_MAX_NUM_SHARERS_SHOWN 10 // Maximum number of users shown who have share a social note #define Soc_MAX_BYTES_SUMMARY 100
static const Act_Action_t Soc_DefaultActions[Soc_NUM_SOCIAL_NOTES] = static const Act_Action_t Soc_DefaultActions[Soc_NUM_SOCIAL_NOTES] =
{ {
@ -187,7 +187,10 @@ static void Soc_ShowTimeline (const char *Query,const char *Title);
static void Soc_ShowRecentTimeline (const char *Query); static void Soc_ShowRecentTimeline (const char *Query);
static void Soc_GetDataOfSocialPublishingFromRow (MYSQL_ROW row,struct SocialPublishing *SocPub); static void Soc_GetDataOfSocialPublishingFromRow (MYSQL_ROW row,struct SocialPublishing *SocPub);
static void Soc_PutLinkToViewRecentPublishings (void);
static void Soc_PutLinkToViewNewPublishings (void);
static void Soc_PutLinkToViewOldPublishings (void);
static void Soc_WriteSocialNote (const struct SocialPublishing *SocPub, static void Soc_WriteSocialNote (const struct SocialPublishing *SocPub,
const struct SocialNote *SocNot, const struct SocialNote *SocNot,
bool ShowAlone, bool ShowAlone,
@ -302,7 +305,7 @@ void Soc_ShowTimelineGbl (void)
/******* Get and show recent timeline including all the users I follow *******/ /******* Get and show recent timeline including all the users I follow *******/
/*****************************************************************************/ /*****************************************************************************/
void Soc_GetAndShowRecentTimelineGbl (void) void Soc_GetAndShowNewTimelineGbl (void)
{ {
char Query[512]; char Query[512];
@ -317,6 +320,27 @@ void Soc_GetAndShowRecentTimelineGbl (void)
Soc_DropTemporaryTableWithPubCods (); Soc_DropTemporaryTableWithPubCods ();
} }
/*****************************************************************************/
/******** Get and show old timeline including all the users I follow *********/
/*****************************************************************************/
void Soc_GetAndShowOldTimelineGbl (void)
{
// char Query[512];
/***** Build query to get timeline *****/
// Soc_BuildQueryToGetTimelineGbl (true, // Get only new publishings
// Query);
/***** Show recent timeline *****/
// Soc_ShowRecentTimeline (Query);
/***** Drop temporary table with publishing codes *****/
// Soc_DropTemporaryTableWithPubCods ();
fprintf (Gbl.F.Out,"<li class=\"SOCIAL_PUB\">Un ejemplo de post.</li>");
}
/*****************************************************************************/ /*****************************************************************************/
/************************ Build query to get timeline ************************/ /************************ Build query to get timeline ************************/
/*****************************************************************************/ /*****************************************************************************/
@ -452,11 +476,13 @@ static void Soc_ShowTimeline (const char *Query,const char *Title)
Gbl.Usrs.Other.UsrDat.UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod) // It's me Gbl.Usrs.Other.UsrDat.UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod) // It's me
Soc_PutHiddenFormToWriteNewPost (); Soc_PutHiddenFormToWriteNewPost ();
/***** Hidden div where insert new publishings via AJAX *****/ /***** Link to view new publishings via AJAX *****/
Soc_PutLinkToViewRecentPublishings (); Soc_PutLinkToViewNewPublishings ();
fprintf (Gbl.F.Out,"<ul id=\"recent_timeline_list\"></ul>");
/***** List publishings in timeline one by one *****/ /***** Hidden list where insert new publishings via AJAX *****/
fprintf (Gbl.F.Out,"<ul id=\"new_timeline_list\"></ul>");
/***** List with the publishings in timeline *****/
fprintf (Gbl.F.Out,"<ul id=\"timeline_list\" class=\"LIST_LEFT\">"); fprintf (Gbl.F.Out,"<ul id=\"timeline_list\" class=\"LIST_LEFT\">");
for (NumPub = 0; for (NumPub = 0;
NumPub < NumPublishings; NumPub < NumPublishings;
@ -475,6 +501,12 @@ static void Soc_ShowTimeline (const char *Query,const char *Title)
} }
fprintf (Gbl.F.Out,"</ul>"); fprintf (Gbl.F.Out,"</ul>");
/***** Link to view old publishings via AJAX *****/
Soc_PutLinkToViewOldPublishings ();
/***** Hidden list where insert old publishings via AJAX *****/
fprintf (Gbl.F.Out,"<ul id=\"old_timeline_list\"></ul>");
/***** End frame *****/ /***** End frame *****/
Lay_EndRoundFrame (); Lay_EndRoundFrame ();
} }
@ -526,18 +558,18 @@ static void Soc_ShowRecentTimeline (const char *Query)
/***************** Put link to view new publishings in timeline **************/ /***************** Put link to view new publishings in timeline **************/
/*****************************************************************************/ /*****************************************************************************/
static void Soc_PutLinkToViewRecentPublishings (void) static void Soc_PutLinkToViewNewPublishings (void)
{ {
extern const char *The_ClassFormBold[The_NUM_THEMES]; extern const char *The_ClassFormBold[The_NUM_THEMES];
extern const char *Txt_See_new_activity; extern const char *Txt_See_new_activity;
/***** Link to toggle on/off the form to comment a social note *****/ /***** Link to view (show hidden) new publishings *****/
// div is hidden. When new posts arrive to the client via AJAX, div is shown // div is hidden. When new posts arrive to the client via AJAX, div is shown
fprintf (Gbl.F.Out,"<div id=\"view_new_posts_container\"" fprintf (Gbl.F.Out,"<div id=\"view_new_posts_container\""
" class=\"SOCIAL_PUB VERY_LIGHT_BLUE\"" " class=\"SOCIAL_PUB VERY_LIGHT_BLUE\""
" style=\"display:none;\">" " style=\"display:none;\">"
"<a href=\"\" class=\"%s\"" "<a href=\"\" class=\"%s\""
" onclick=\"moveRecentTimelineToTimeline();return false;\" />" " onclick=\"moveNewTimelineToTimeline();return false;\" />"
"%s (<span id=\"view_new_posts_count\">0</span>)" "%s (<span id=\"view_new_posts_count\">0</span>)"
"</a>" "</a>"
"</div>", "</div>",
@ -545,6 +577,27 @@ static void Soc_PutLinkToViewRecentPublishings (void)
Txt_See_new_activity); Txt_See_new_activity);
} }
/*****************************************************************************/
/***************** Put link to view old publishings in timeline **************/
/*****************************************************************************/
static void Soc_PutLinkToViewOldPublishings (void)
{
extern const char *The_ClassFormBold[The_NUM_THEMES];
extern const char *Txt_See_more;
/***** Link to view old publishings *****/
fprintf (Gbl.F.Out,"<div id=\"view_old_posts_container\""
" class=\"SOCIAL_PUB VERY_LIGHT_BLUE\">"
"<a href=\"\" class=\"%s\""
" onclick=\"refreshOldTimeline();return false;\" />"
"%s"
"</a>"
"</div>",
The_ClassFormBold[Gbl.Prefs.Theme],
Txt_See_more);
}
/*****************************************************************************/ /*****************************************************************************/
/***************************** Write social note *****************************/ /***************************** Write social note *****************************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -83,7 +83,8 @@ typedef enum
void Soc_ShowTimelineUsr (void); void Soc_ShowTimelineUsr (void);
void Soc_ShowTimelineGbl (void); void Soc_ShowTimelineGbl (void);
void Soc_GetAndShowRecentTimelineGbl (void); void Soc_GetAndShowNewTimelineGbl (void);
void Soc_GetAndShowOldTimelineGbl (void);
void Soc_StoreAndPublishSocialNote (Soc_NoteType_t NoteType,long Cod); void Soc_StoreAndPublishSocialNote (Soc_NoteType_t NoteType,long Cod);
void Soc_MarkSocialNoteAsUnavailableUsingNotCod (long NotCod); void Soc_MarkSocialNoteAsUnavailableUsingNotCod (long NotCod);

View File

@ -33851,6 +33851,27 @@ const char *Txt_See_messages_received =
"Veja mensagens recebidas"; "Veja mensagens recebidas";
#endif #endif
const char *Txt_See_more =
#if L==1
"Veure m&eacute;s";
#elif L==2
"Weitere";
#elif L==3
"See more";
#elif L==4
"Ver m&aacute;s";
#elif L==5
"Voir plus";
#elif L==6
"Ver m&aacute;s"; // Okoteve traducción
#elif L==7
"Vedere pi&ugrave;";
#elif L==8
"Zobacz wi&eogon;cej";
#elif L==9
"Veja mais";
#endif
const char *Txt_See_new_activity = const char *Txt_See_new_activity =
#if L==1 #if L==1
"Veure nova activitat"; "Veure nova activitat";