Version 18.57.1

This commit is contained in:
Antonio Cañas Vargas 2019-02-24 15:15:43 +01:00
parent f56c2f3d34
commit ae5f8fadad
14 changed files with 269 additions and 162 deletions

View File

@ -1925,6 +1925,7 @@ a:hover img.CENTRE_PHOTO_SHOW
}
/******************************* User's photo ********************************/
.PHOTO12x16 {width: 12px; height: 16px; border-radius:1px; vertical-align:middle; margin-top:-2px;}
.PHOTO15x20 {width: 15px; height: 20px; border-radius:2px; vertical-align:middle;}
.PHOTO15x20B {width: 15px; height: 20px; border-radius:2px; display:block; margin:0 auto;}
.PHOTO18x24 {width: 18px; height: 24px; border-radius:2px; vertical-align:middle;}

View File

@ -689,7 +689,75 @@ function expandTextarea (textareaElem,idButton,rows) {
document.getElementById(idButton).style.display = '';
}
//Change display of a project
/*****************************************************************************/
/************** Update fav area in social timeline using AJAX ****************/
/*****************************************************************************/
var objXMLHttpReqFavSocNot = false;
var idDivFav = null;
// This function is called when user clicks in icon to fav/unfav
function refreshFavSocNot (elem,ActCod,NotCod) {
idDivFav = elem.parentNode.id;
objXMLHttpReqFavSocNot = AJAXCreateObject ();
if (objXMLHttpReqFavSocNot) {
/* Build request parameters */
var RefreshParams = 'act=' + ActCod + '&' +
RefreshParamIdSes + '&' +
'NotCod=' + NotCod;
if (RefreshParamUsr) {
if (RefreshParamUsr.length)
RefreshParams += '&' + RefreshParamUsr;
}
else {
if (RefreshParamWhichUsrs.length)
RefreshParams += '&' + RefreshParamWhichUsrs;
}
/* Send request to server */
objXMLHttpReqFavSocNot.onreadystatechange = readAndUpdateFav; // onreadystatechange must be lowercase
objXMLHttpReqFavSocNot.open('POST',ActionAJAX,true);
objXMLHttpReqFavSocNot.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
objXMLHttpReqFavSocNot.send(RefreshParams);
}
}
// Receives and shows fav note area: icon and users who have faved a social note or comment
function readAndUpdateFav () {
if (objXMLHttpReqFavSocNot.readyState == 4) { // Check if data have been received
if (objXMLHttpReqFavSocNot.status == 200)
if (idDivFav) {
var htmlFav = objXMLHttpReqFavSocNot.responseText;
var divFav = document.getElementById(idDivFav); // Access to last click DIV
if (divFav) {
divFav.innerHTML = htmlFav; // Update fav area DIV
}
}
}
}
function readLastClicksData () {
if (objXMLHttpReqLog.readyState == 4) { // Check if data have been received
if (objXMLHttpReqLog.status == 200) {
var endOfDelay = objXMLHttpReqLog.responseText.indexOf('|',0); // Get separator position
var delay = parseInt(objXMLHttpReqLog.responseText.substring(0,endOfDelay)); // Get refresh delay
var htmlLastClicks = objXMLHttpReqLog.responseText.substring(endOfDelay + 1); // Get HTML code for last clicks
var divLastClicks = document.getElementById('lastclicks'); // Access to last click DIV
if (divLastClicks)
divLastClicks.innerHTML = htmlLastClicks; // Update global connected DIV
if (delay > 200) // If refresh slower than 1 time each 0.2 seconds, do refresh; else abort
setTimeout('refreshLastClicks()',delay);
}
}
}
/*****************************************************************************/
/************************ Change display of a project ************************/
/*****************************************************************************/
function toggleProject (prjID) {
toggleDisplay('prj_exp_' + prjID);
toggleDisplay('prj_con_' + prjID);
@ -700,14 +768,20 @@ function toggleProject (prjID) {
toggleDisplay('prj_url_' + prjID);
}
// Change display of a test answer
/*****************************************************************************/
/********************** Change display of a test answer **********************/
/*****************************************************************************/
function toggleAnswer (option) {
toggleDisplay('ans_' + option);
toggleDisplay('con_' + option);
toggleDisplay('exp_' + option);
}
// Change display of a element (hidden or visible)
/*****************************************************************************/
/************* Change display of an element (hidden or visible) **************/
/*****************************************************************************/
function toggleDisplay (elementID) {
var stl = document.getElementById (elementID).style;
stl.display = (stl.display === 'none') ? '' : 'none';

View File

@ -12598,3 +12598,16 @@ SELECT Weekday,TIME_TO_SEC(StartTime) AS S,TIME_TO_SEC(Duration) AS D,Place,Clas
CREATE TABLE IF NOT EXISTS firewall (ClickTime DATETIME NOT NULL,IP CHAR(15) NOT NULL,INDEX(ClickTime),INDEX(IP));
SELECT UsrCod,FavCod FROM
(
(SELECT UsrCod,FavCod FROM social_notes_fav WHERE NotCod=278 ORDER BY FavCod)
UNION
(SELECT 1,(SELECT FavCod FROM social_notes_fav WHERE NotCod=278 AND UsrCod=1) AS FavCod)
ORDER BY FavCod LIMIT 7
) AS favers;
SELECT UsrCod FROM social_notes_fav WHERE NotCod=278 AND UsrCod<>7 AND UsrCod<>1 ORDER BY FavCod LIMIT 7;
SELECT CAST(~0 AS UNSIGNED);

View File

@ -1615,10 +1615,8 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActRcvSocComGbl */{1503,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_DATA,Act_BRW_1ST_TAB,Soc_ShowTimelineGbl1 ,Soc_ReceiveCommentGbl ,NULL},
/* ActShaSocNotGbl */{1495,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Soc_ShowTimelineGbl1 ,Soc_ShareSocialNoteGbl ,NULL},
/* ActUnsSocNotGbl */{1496,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Soc_ShowTimelineGbl1 ,Soc_UnshareSocialNoteGbl ,NULL},
// /* ActFavSocNotGbl */{1512,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Soc_ShowTimelineGbl1 ,Soc_FavSocialNoteGbl ,NULL},
/* ActFavSocNotGbl */{1512,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_204_NO_CONT,Soc_FavSocialNoteGbl_new ,NULL ,NULL},
// /* ActUnfSocNotGbl */{1513,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Soc_ShowTimelineGbl1 ,Soc_UnfavSocialNoteGbl ,NULL},
/* ActUnfSocNotGbl */{1513,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_204_NO_CONT,Soc_UnfavSocialNoteGbl_new ,NULL ,NULL},
/* ActFavSocNotGbl */{1512,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Soc_FavSocialNoteGbl_new ,NULL},
/* ActUnfSocNotGbl */{1513,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Soc_UnfavSocialNoteGbl_new ,NULL},
/* ActFavSocComGbl */{1516,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Soc_ShowTimelineGbl1 ,Soc_FavSocialCommentGbl ,NULL},
/* ActUnfSocComGbl */{1517,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Soc_ShowTimelineGbl1 ,Soc_UnfavSocialCommentGbl ,NULL},
/* ActReqRemSocPubGbl*/{1494,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Soc_ShowTimelineGbl1 ,Soc_RequestRemSocialNoteGbl ,NULL},

View File

@ -429,11 +429,12 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 18.56 (2019-02-23)"
#define CSS_FILE "swad18.55.css"
#define JS_FILE "swad18.56.js"
#define Log_PLATFORM_VERSION "SWAD 18.57.1 (2019-02-23)"
#define CSS_FILE "swad18.57.css"
#define JS_FILE "swad18.57.js"
/*
Version 18.56: Feb 23, 2019 Favourite is made in Javascript without reloading page. (237787 lines)
Version 18.57.1: Feb 24, 2019 Changes in social timeline related to AJAX and favourites. (237862 lines)
Version 18.57: Feb 23, 2019 Favourites in social notes is made in AJAX without reloading page. (237892 lines)
Version 18.55: Feb 22, 2019 Changes in CSS styles related to forms. (237585 lines)
Version 18.54.1: Feb 22, 2019 Following and followers shown in photo zoom. (237586 lines)
Version 18.54: Feb 21, 2019 Selection of users scope in timeline is made with icons. (237534 lines)

View File

@ -131,7 +131,7 @@ static void Frm_StartFormInternal (Act_Action_t NextAction,bool PutParameterLoca
fprintf (Gbl.F.Out,"\" id=\"%s\"",Id);
if (OnSubmit)
if (OnSubmit[0])
fprintf (Gbl.F.Out," onsubmit=\"%s;\"",OnSubmit);
fprintf (Gbl.F.Out," onsubmit=\"%s\"",OnSubmit);
switch (Act_GetBrowserTab (NextAction))
{
case Act_BRW_NEW_TAB:

View File

@ -405,7 +405,7 @@ void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction,
" style=\"padding-top:12px;\">");
Frm_LinkFormSubmitAnimated (Txt_Update_users,
The_ClassFormInBoxBold[Gbl.Prefs.Theme],
"CopyMessageToHiddenFields()");
"CopyMessageToHiddenFields();");
Ico_PutCalculateIconWithText (Txt_Update_users);
fprintf (Gbl.F.Out,"</div>");

View File

@ -668,7 +668,7 @@ static void Lay_WriteScriptInit (void)
Gbl.Usrs.Connected.TimeToRefreshInMs);
if (Gbl.Action.Act == ActLstClk)
// Refresh timeline via AJAX
// Refresh fav button via AJAX
fprintf (Gbl.F.Out," setTimeout(\"refreshLastClicks()\",%lu);\n",
Cfg_TIME_TO_REFRESH_LAST_CLICKS);
else
@ -1294,9 +1294,25 @@ void Lay_ShowErrorAndExit (const char *Txt)
Lay_WriteEndOfPage ();
}
if (Gbl.Action.Act == ActFavSocNotGbl ||
Gbl.Action.Act == ActUnfSocNotGbl)
DB_QueryINSERT ("can not debug",
"INSERT INTO debug"
" (DebugTime,Txt)"
" VALUES"
" (NOW(),'antes de Gbl_Cleanup')");
/***** Free memory and close all the open files *****/
Gbl_Cleanup ();
if (Gbl.Action.Act == ActFavSocNotGbl ||
Gbl.Action.Act == ActUnfSocNotGbl)
DB_QueryINSERT ("can not debug",
"INSERT INTO debug"
" (DebugTime,Txt)"
" VALUES"
" (NOW(),'tras Gbl_Cleanup')");
/***** Page is generated (except </body> and </html>).
Compute time to generate page *****/
if (!Gbl.Action.IsAJAXAutoRefresh)
@ -1339,6 +1355,14 @@ void Lay_ShowErrorAndExit (const char *Txt)
}
}
if (Gbl.Action.Act == ActFavSocNotGbl ||
Gbl.Action.Act == ActUnfSocNotGbl)
DB_QueryINSERT ("can not debug",
"INSERT INTO debug"
" (DebugTime,Txt)"
" VALUES"
" (NOW(),'antes de DB_CloseDBConnection')");
/***** Close database connection *****/
DB_CloseDBConnection ();

View File

@ -152,15 +152,39 @@ int main (void)
/***** Write HTTP Status 204 No Content *****/
Lay_WriteHTTPStatus204NoContent ();
if (Gbl.Action.Act == ActFavSocNotGbl ||
Gbl.Action.Act == ActUnfSocNotGbl)
DB_QueryINSERT ("can not debug",
"INSERT INTO debug"
" (DebugTime,Txt)"
" VALUES"
" (NOW(),'tras FunctionPriori')");
/***** Start writing HTML output *****/
Lay_WriteStartOfPage ();
if (Gbl.Action.Act == ActFavSocNotGbl ||
Gbl.Action.Act == ActUnfSocNotGbl)
DB_QueryINSERT ("can not debug",
"INSERT INTO debug"
" (DebugTime,Txt)"
" VALUES"
" (NOW(),'antes de FunctionPosteriori')");
/***** Make a processing or other depending on the action *****/
FunctionPosteriori = Act_GetFunctionPosteriori (Gbl.Action.Act);
if (FunctionPosteriori != NULL)
FunctionPosteriori ();
}
if (Gbl.Action.Act == ActFavSocNotGbl ||
Gbl.Action.Act == ActUnfSocNotGbl)
DB_QueryINSERT ("can not debug",
"INSERT INTO debug"
" (DebugTime,Txt)"
" VALUES"
" (NOW(),'antes de Lay_ShowErrorAndExit')");
/***** Cleanup and exit *****/
Lay_ShowErrorAndExit (NULL);

View File

@ -256,7 +256,7 @@ static void Msg_PutFormMsgUsrs (char Content[Cns_MAX_BYTES_LONG_TEXT + 1])
Enr_CheckStdsAndPutButtonToRegisterStdsInCurrentCrs ();
/***** Check if it's a big list *****/
ShowUsrsInCrs = Usr_GetIfShowBigList (NumUsrsInCrs,"CopyMessageToHiddenFields()");
ShowUsrsInCrs = Usr_GetIfShowBigList (NumUsrsInCrs,"CopyMessageToHiddenFields();");
if (ShowUsrsInCrs)
/***** Get lists of selected users *****/
@ -367,7 +367,7 @@ static void Msg_PutLinkToShowMorePotentialRecipients (void)
Msg_PutParamsShowMorePotentialRecipients,
"users.svg",
Txt_Show_more_recipients,
"CopyMessageToHiddenFields()");
"CopyMessageToHiddenFields();");
fprintf (Gbl.F.Out,"</div>");
}

View File

@ -733,7 +733,9 @@ void Par_GetMainParameters (void)
Gbl.Action.Act == ActRefLstClk ||
Gbl.Action.Act == ActRefNewSocPubGbl ||
Gbl.Action.Act == ActRefOldSocPubGbl ||
Gbl.Action.Act == ActRefOldSocPubUsr)
Gbl.Action.Act == ActRefOldSocPubUsr ||
Gbl.Action.Act == ActFavSocNotGbl ||
Gbl.Action.Act == ActUnfSocNotGbl)
{
Gbl.Action.UsesAJAX = true;
if (Gbl.Action.Act == ActRefCon ||

View File

@ -25,7 +25,9 @@
/*********************************** Headers *********************************/
/*****************************************************************************/
#define _GNU_SOURCE // For asprintf
#include <linux/limits.h> // For PATH_MAX
#include <stdio.h> // For asprintf
#include <stdlib.h> // For malloc and free
#include <string.h> // For string functions
#include <sys/types.h> // For time_t
@ -198,12 +200,10 @@ static void Soc_PutDisabledIconShare (unsigned NumShared);
static void Soc_PutDisabledIconFav (unsigned NumFavs);
static void Soc_PutFormToShareSocialNote (long NotCod);
static void Soc_PutFormToFavSocialNote_new (long NotCod,const char *FavId,bool Hidden);
static void Soc_PutFormToUnfavSocialNote_new (long NotCod,const char *FavId,bool Hidden);
static void Soc_PutFormToFavSocialNote (long NotCod);
static void Soc_PutFormToFavSocialNote_new (const struct SocialNote *SocNot);
static void Soc_PutFormToUnfavSocialNote_new (const struct SocialNote *SocNot);
static void Soc_PutFormToUnshareSocialNote (long NotCod);
static void Soc_PutFormToUnfavSocialNote (long NotCod);
static void Soc_PutFormToUnfavSocialComment (long PubCod);
static void Soc_PutFormToRemoveSocialPublishing (long NotCod);
@ -215,14 +215,14 @@ static long Soc_GetParamPubCod (void);
static long Soc_ReceiveComment (void);
static long Soc_ShareSocialNote (void);
static long Soc_FavSocialNote_new (void);
static void Soc_FavSocialNote_new (struct SocialNote *SocNot);
static long Soc_FavSocialNote (void);
static long Soc_FavSocialComment (void);
static void Soc_CreateNotifToAuthor (long AuthorCod,long PubCod,
Ntf_NotifyEvent_t NotifyEvent);
static long Soc_UnshareSocialNote (void);
static long Soc_UnfavSocialNote_new (void);
static void Soc_UnfavSocialNote_new (struct SocialNote *SocNot);
static long Soc_UnfavSocialNote (void);
static long Soc_UnfavSocialComment (void);
@ -1298,7 +1298,7 @@ static void Soc_ShowOldPubsInTimeline (char *Query)
static void Soc_PutLinkToViewNewPublishings (void)
{
extern const char *The_ClassFormOutBoxBold[The_NUM_THEMES];
extern const char *The_ClassFormInBoxBold[The_NUM_THEMES];
extern const char *Txt_See_new_activity;
/***** Link to view (show hidden) new publishings *****/
@ -1311,7 +1311,7 @@ static void Soc_PutLinkToViewNewPublishings (void)
"%s (<span id=\"view_new_posts_count\">0</span>)"
"</a>"
"</div>",
The_ClassFormOutBoxBold[Gbl.Prefs.Theme],
The_ClassFormInBoxBold[Gbl.Prefs.Theme],
Txt_See_new_activity);
}
@ -1321,7 +1321,7 @@ static void Soc_PutLinkToViewNewPublishings (void)
static void Soc_PutLinkToViewOldPublishings (void)
{
extern const char *The_ClassFormOutBoxBold[The_NUM_THEMES];
extern const char *The_ClassFormInBoxBold[The_NUM_THEMES];
extern const char *Txt_See_more;
/***** Animated link to view old publishings *****/
@ -1341,7 +1341,7 @@ static void Soc_PutLinkToViewOldPublishings (void)
"&nbsp;%s"
"</a>"
"</div>",
The_ClassFormOutBoxBold[Gbl.Prefs.Theme],
The_ClassFormInBoxBold[Gbl.Prefs.Theme],
Gbl.Prefs.URLIcons,Txt_See_more,Txt_See_more,
Gbl.Prefs.URLIcons,Txt_See_more,Txt_See_more,
Txt_See_more);
@ -1572,39 +1572,34 @@ static void Soc_WriteSocialNote (const struct SocialNote *SocNot,
Num++;
sprintf (FavId,"%s_%u",Gbl.UniqueNameEncrypted,Num);
if (IAmTheAuthor) // I am the author
if (SocNot->Unavailable) // Unavailable social notes can not be favourited
{
/* Put disabled icon */
Soc_PutDisabledIconFav (SocNot->NumFavs);
// Don't show who have marked this social note as favourite
}
else if (IAmTheAuthor) // I am the author
{
/* Put disabled icon and list of users
who have marked this social note as favourite*/
Soc_PutDisabledIconFav (SocNot->NumFavs);
Soc_ShowUsrsWhoHaveMarkedSocialNoteAsFav (SocNot);
}
else if (IAmAFaverOfThisSocNot) // I have favourited this social note
{
/* Put icon to unfav this publishing */
fprintf (Gbl.F.Out,"<div id=\"%s\" data-status=\"faved\""
" class=\"SOCIAL_ICO_FAV\">",
FavId);
Soc_PutFormToFavSocialNote_new (SocNot->NotCod,FavId,true);
Soc_PutFormToUnfavSocialNote_new (SocNot->NotCod,FavId,false);
// Soc_PutFormToUnfavSocialNote (SocNot->NotCod);
/* Put icon to unfav this publishing and list of users */
fprintf (Gbl.F.Out,"<div id=\"%s\" class=\"SOCIAL_ICO_FAV\">",FavId);
Soc_PutFormToUnfavSocialNote_new (SocNot);
fprintf (Gbl.F.Out,"</div>");
}
else // I am not the author and I am not a sharer
else // I am not the author and I am not a faver
{
if (SocNot->Unavailable) // Unavailable social notes can not be favourited
Soc_PutDisabledIconFav (SocNot->NumFavs);
else
{
/* Put icon to fav this publishing */
fprintf (Gbl.F.Out,"<div id=\"%s\" data-status=\"unfaved\""
" class=\"SOCIAL_ICO_FAV\">",
FavId);
Soc_PutFormToFavSocialNote_new (SocNot->NotCod,FavId,false);
Soc_PutFormToUnfavSocialNote_new (SocNot->NotCod,FavId,true);
// Soc_PutFormToFavSocialNote (SocNot->NotCod);
fprintf (Gbl.F.Out,"</div>");
}
/* Put icon to fav this publishing and list of users */
fprintf (Gbl.F.Out,"<div id=\"%s\" class=\"SOCIAL_ICO_FAV\">",FavId);
Soc_PutFormToFavSocialNote_new (SocNot);
fprintf (Gbl.F.Out,"</div>");
}
/* Show who have marked this social note as favourite */
Soc_ShowUsrsWhoHaveMarkedSocialNoteAsFav (SocNot);
/* Put icons to share/unshare */
if (IAmTheAuthor) // I am the author
Soc_PutDisabledIconShare (SocNot->NumShared);
@ -2863,90 +2858,69 @@ static void Soc_PutFormToShareSocialNote (long NotCod)
}
/*****************************************************************************/
/******************* Form to mark a social note as favourite *****************/
/*************** Form to fav (mark as favourite) social note *****************/
/*****************************************************************************/
// All forms in this function and nested functions must have unique identifiers
static void Soc_PutFormToFavSocialNote_new (long NotCod,const char *FavId,bool Hidden)
static void Soc_PutFormToFavSocialNote_new (const struct SocialNote *SocNot)
{
extern const char *Txt_Mark_as_favourite;
char JavaScriptFunc[256 + Brw_MAX_ROW_ID];
/***** Start container *****/
fprintf (Gbl.F.Out,"<div id=\"fav_%s\"",FavId);
if (Hidden)
fprintf (Gbl.F.Out," style=\"display:none;\"");
fprintf (Gbl.F.Out,">");
char *OnSubmit;
/***** Form and icon to mark social note as favourite *****/
snprintf (JavaScriptFunc,sizeof (JavaScriptFunc),
"FavSocial('%s')",
FavId);
/* Create JavaScript funtion and parameters to send the request via AJAX */
if (asprintf (&OnSubmit,"refreshFavSocNot(this,%ld,%ld);"
" return false;", // return false is necessary to not submit form
Act_GetActCod (ActFavSocNotGbl),
SocNot->NotCod) < 0)
Lay_NotEnoughMemoryExit ();
/* Form with icon */
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
{
Frm_StartFormUniqueAnchorOnSubmit (ActFavSocNotUsr,"timeline",
JavaScriptFunc); // JavaScript function to fav social note
Usr_PutParamOtherUsrCodEncrypted ();
}
Frm_StartFormUniqueAnchorOnSubmit (ActFavSocNotUsr,"timeline",OnSubmit);
else
{
Frm_StartFormUniqueAnchorOnSubmit (ActFavSocNotGbl,NULL,
JavaScriptFunc); // JavaScript function to fav social note
Soc_PutParamWhichUsrs ();
}
Soc_PutHiddenParamNotCod (NotCod);
Frm_StartFormUniqueAnchorOnSubmit (ActFavSocNotGbl,NULL,OnSubmit);
Ico_PutIconLink ("heart.svg",Txt_Mark_as_favourite);
Frm_EndForm ();
/***** End container *****/
fprintf (Gbl.F.Out,"</div>");
/* Free allocated memory for subquery */
free ((void *) OnSubmit);
/***** Who have marked this social note as favourite *****/
Soc_ShowUsrsWhoHaveMarkedSocialNoteAsFav (SocNot);
}
static void Soc_PutFormToUnfavSocialNote_new (long NotCod,const char *FavId,bool Hidden)
/*****************************************************************************/
/*********** Form to unfav (remove mark as favourite) social note ************/
/*****************************************************************************/
// All forms in this function and nested functions must have unique identifiers
static void Soc_PutFormToUnfavSocialNote_new (const struct SocialNote *SocNot)
{
extern const char *Txt_SOCIAL_NOTE_Favourite;
char JavaScriptFunc[256 + Brw_MAX_ROW_ID];
/***** Start container *****/
fprintf (Gbl.F.Out,"<div id=\"unfav_%s\"",FavId);
if (Hidden)
fprintf (Gbl.F.Out," style=\"display:none;\"");
fprintf (Gbl.F.Out,">");
char *OnSubmit;
/***** Form and icon to mark social note as favourite *****/
snprintf (JavaScriptFunc,sizeof (JavaScriptFunc),
"UnfavSocial('%s')",
FavId);
/* Create JavaScript funtion and parameters to send the request via AJAX */
if (asprintf (&OnSubmit,"refreshFavSocNot(this,%ld,%ld);"
" return false;", // return false is necessary to not submit form
Act_GetActCod (ActUnfSocNotGbl),
SocNot->NotCod) < 0)
Lay_NotEnoughMemoryExit ();
/* Form with icon */
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
{
Frm_StartFormUniqueAnchorOnSubmit (ActUnfSocNotUsr,"timeline",
JavaScriptFunc); // JavaScript function to unfav social note
Usr_PutParamOtherUsrCodEncrypted ();
}
Frm_StartFormUniqueAnchorOnSubmit (ActUnfSocNotUsr,"timeline",OnSubmit);
else
{
Frm_StartFormUniqueAnchorOnSubmit (ActUnfSocNotGbl,NULL,
JavaScriptFunc); // JavaScript function to unfav social note
Soc_PutParamWhichUsrs ();
}
Soc_PutHiddenParamNotCod (NotCod);
Frm_StartFormUniqueAnchorOnSubmit (ActUnfSocNotGbl,NULL,OnSubmit);
Ico_PutIconLink ("heart-red.svg",Txt_SOCIAL_NOTE_Favourite);
Frm_EndForm ();
/***** End container *****/
fprintf (Gbl.F.Out,"</div>");
}
/* Free allocated memory for subquery */
free ((void *) OnSubmit);
static void Soc_PutFormToFavSocialNote (long NotCod)
{
extern const char *Txt_Mark_as_favourite;
/***** Form to mark social note as favourite *****/
Soc_FormStart (ActFavSocNotGbl,ActFavSocNotUsr);
Soc_PutHiddenParamNotCod (NotCod);
Ico_PutDivIconLink ("SOCIAL_ICO_FAV",
"heart.svg",Txt_Mark_as_favourite);
Frm_EndForm ();
/***** Who have marked this social note as favourite *****/
Soc_ShowUsrsWhoHaveMarkedSocialNoteAsFav (SocNot);
}
/*****************************************************************************/
@ -2966,23 +2940,6 @@ static void Soc_PutFormToUnshareSocialNote (long NotCod)
Frm_EndForm ();
}
/*****************************************************************************/
/*********** Form to unfav (remove mark as favourite) social note ************/
/*****************************************************************************/
// All forms in this function and nested functions must have unique identifiers
static void Soc_PutFormToUnfavSocialNote (long NotCod)
{
extern const char *Txt_SOCIAL_NOTE_Favourite;
/***** Form to unfav social note *****/
Soc_FormStart (ActUnfSocNotGbl,ActUnfSocNotUsr);
Soc_PutHiddenParamNotCod (NotCod);
Ico_PutDivIconLink ("SOCIAL_ICO_FAV",
"heart-red.svg",Txt_SOCIAL_NOTE_Favourite);
Frm_EndForm ();
}
/*****************************************************************************/
/********* Form to unfav (remove mark as favourite) social comment ***********/
/*****************************************************************************/
@ -3256,10 +3213,19 @@ static long Soc_ShareSocialNote (void)
void Soc_FavSocialNoteGbl_new (void)
{
long NotCod;
struct SocialNote SocNot;
/***** Get which users *****/
Soc_GetParamsWhichUsrs ();
/***** Mark social note as favourite *****/
NotCod = Soc_FavSocialNote_new ();
Soc_FavSocialNote_new (&SocNot);
/***** Write HTML inside DIV with form to unfav *****/
Soc_PutFormToUnfavSocialNote_new (&SocNot);
/***** All the output is made, so don't write anymore *****/
Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true;
}
void Soc_FavSocialNoteGbl (void)
@ -3296,22 +3262,21 @@ void Soc_FavSocialNoteUsr (void)
Lay_EndSection ();
}
static long Soc_FavSocialNote_new (void)
static void Soc_FavSocialNote_new (struct SocialNote *SocNot)
{
extern const char *Txt_The_original_post_no_longer_exists;
struct SocialNote SocNot;
bool ItsMe;
long OriginalPubCod;
/***** Get data of social note *****/
SocNot.NotCod = Soc_GetParamNotCod ();
Soc_GetDataOfSocialNotByCod (&SocNot);
SocNot->NotCod = Soc_GetParamNotCod ();
Soc_GetDataOfSocialNotByCod (SocNot);
if (SocNot.NotCod > 0)
if (SocNot->NotCod > 0)
{
ItsMe = Usr_ItsMe (SocNot.UsrCod);
ItsMe = Usr_ItsMe (SocNot->UsrCod);
if (Gbl.Usrs.Me.Logged && !ItsMe) // I am not the author
if (!Soc_CheckIfNoteIsFavedByUsr (SocNot.NotCod,
if (!Soc_CheckIfNoteIsFavedByUsr (SocNot->NotCod,
Gbl.Usrs.Me.UsrDat.UsrCod)) // I have not yet favourited the note
{
/***** Mark as favourite in database *****/
@ -3320,21 +3285,19 @@ static long Soc_FavSocialNote_new (void)
" (NotCod,UsrCod,TimeFav)"
" VALUES"
" (%ld,%ld,NOW())",
SocNot.NotCod,
SocNot->NotCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
/* Update number of times this social note is favourited */
SocNot.NumFavs = Soc_GetNumTimesANoteHasBeenFav (&SocNot);
SocNot->NumFavs = Soc_GetNumTimesANoteHasBeenFav (SocNot);
/**** Create notification about favourite post
for the author of the post ***/
OriginalPubCod = Soc_GetPubCodOfOriginalSocialNote (SocNot.NotCod);
OriginalPubCod = Soc_GetPubCodOfOriginalSocialNote (SocNot->NotCod);
if (OriginalPubCod > 0)
Soc_CreateNotifToAuthor (SocNot.UsrCod,OriginalPubCod,Ntf_EVENT_TIMELINE_FAV);
Soc_CreateNotifToAuthor (SocNot->UsrCod,OriginalPubCod,Ntf_EVENT_TIMELINE_FAV);
}
}
return SocNot.NotCod;
}
static long Soc_FavSocialNote (void)
@ -3603,10 +3566,19 @@ static long Soc_UnshareSocialNote (void)
void Soc_UnfavSocialNoteGbl_new (void)
{
long NotCod;
struct SocialNote SocNot;
/***** Get which users *****/
Soc_GetParamsWhichUsrs ();
/***** Stop marking as favourite a previously favourited social note *****/
NotCod = Soc_UnfavSocialNote_new ();
Soc_UnfavSocialNote_new (&SocNot);
/***** Write HTML inside DIV with form to fav *****/
Soc_PutFormToFavSocialNote_new (&SocNot);
/***** All the output is made, so don't write anymore *****/
Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true;
}
void Soc_UnfavSocialNoteGbl (void)
@ -3643,42 +3615,39 @@ void Soc_UnfavSocialNoteUsr (void)
Lay_EndSection ();
}
static long Soc_UnfavSocialNote_new (void)
static void Soc_UnfavSocialNote_new (struct SocialNote *SocNot)
{
struct SocialNote SocNot;
long OriginalPubCod;
bool ItsMe;
/***** Get data of social note *****/
SocNot.NotCod = Soc_GetParamNotCod ();
Soc_GetDataOfSocialNotByCod (&SocNot);
SocNot->NotCod = Soc_GetParamNotCod ();
Soc_GetDataOfSocialNotByCod (SocNot);
if (SocNot.NotCod > 0)
if (SocNot->NotCod > 0)
{
ItsMe = Usr_ItsMe (SocNot.UsrCod);
if (SocNot.NumFavs &&
ItsMe = Usr_ItsMe (SocNot->UsrCod);
if (SocNot->NumFavs &&
Gbl.Usrs.Me.Logged && !ItsMe) // I am not the author
if (Soc_CheckIfNoteIsFavedByUsr (SocNot.NotCod,
if (Soc_CheckIfNoteIsFavedByUsr (SocNot->NotCod,
Gbl.Usrs.Me.UsrDat.UsrCod)) // I have favourited the note
{
/***** Delete the mark as favourite from database *****/
DB_QueryDELETE ("can not unfavourite social note",
"DELETE FROM social_notes_fav"
" WHERE NotCod=%ld AND UsrCod=%ld",
SocNot.NotCod,
SocNot->NotCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
/***** Update number of times this social note is favourited *****/
SocNot.NumFavs = Soc_GetNumTimesANoteHasBeenFav (&SocNot);
SocNot->NumFavs = Soc_GetNumTimesANoteHasBeenFav (SocNot);
/***** Mark possible notifications on this social note as removed *****/
OriginalPubCod = Soc_GetPubCodOfOriginalSocialNote (SocNot.NotCod);
OriginalPubCod = Soc_GetPubCodOfOriginalSocialNote (SocNot->NotCod);
if (OriginalPubCod > 0)
Ntf_MarkNotifAsRemoved (Ntf_EVENT_TIMELINE_FAV,OriginalPubCod);
}
}
return SocNot.NotCod;
}
static long Soc_UnfavSocialNote (void)
@ -4609,6 +4578,7 @@ static void Soc_ShowUsrsWhoHaveMarkedSocialNoteAsFav (const struct SocialNote *S
/***** Get users who have marked this note as favourite *****/
if (SocNot->NumFavs)
{
/***** Get list of users from database *****/
NumFirstUsrs =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get users",
@ -4619,6 +4589,7 @@ static void Soc_ShowUsrsWhoHaveMarkedSocialNoteAsFav (const struct SocialNote *S
SocNot->NotCod,
SocNot->UsrCod,
Soc_MAX_SHARERS_FAVERS_SHOWN);
}
/***** Show users *****/
Soc_ShowSharersOrFavers (&mysql_res,SocNot->NumFavs,NumFirstUsrs);
@ -4703,7 +4674,7 @@ static void Soc_ShowSharersOrFavers (MYSQL_RES **mysql_res,
ShowPhoto = Pho_ShowingUsrPhotoIsAllowed (&UsrDat,PhotoURL);
Pho_ShowUsrPhoto (&UsrDat,ShowPhoto ? PhotoURL :
NULL,
"PHOTO15x20",Pho_ZOOM,true); // Use unique id
"PHOTO12x16",Pho_ZOOM,true); // Use unique id
fprintf (Gbl.F.Out,"</div>");
NumUsrsShown++;

View File

@ -158,7 +158,6 @@ void Soc_ReceiveCommentUsr (void);
void Soc_ShareSocialNoteGbl (void);
void Soc_ShareSocialNoteUsr (void);
void Soc_FavSocialNoteGbl_new (void);
void Soc_FavSocialNoteGbl (void);
void Soc_FavSocialNoteUsr (void);
void Soc_FavSocialCommentGbl (void);
void Soc_FavSocialCommentUsr (void);

View File

@ -5914,7 +5914,7 @@ static void Usr_FormToSelectUsrListType (Act_Action_t NextAction,Usr_ShowUsrsTyp
/***** Link and image *****/
Frm_LinkFormSubmit (Txt_USR_LIST_TYPES[ListType],
The_ClassFormInBoxNoWrap[Gbl.Prefs.Theme],
NextAction == ActReqMsgUsr ? "CopyMessageToHiddenFields()" :
NextAction == ActReqMsgUsr ? "CopyMessageToHiddenFields();" :
NULL);
fprintf (Gbl.F.Out,"<img src=\"%s/%s\""
" alt=\"%s\" title=\"%s\""