Version 18.59

This commit is contained in:
Antonio Cañas Vargas 2019-02-25 02:02:10 +01:00
parent d797dcdf42
commit d91932b003
7 changed files with 201 additions and 161 deletions

View File

@ -1577,7 +1577,7 @@ a:hover /* Default ==> underlined */
/* background-color:#fff3d4; */
background-color:#fff8e5;
border-radius:2px;
box-shadow: 0 2px 2px 0 rgba(124,121,109,0.14), 0 2px 1px -2px rgba(124,121,109,0.2), 0 1px 5px 0 rgba(124,121,109,0.12);
box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 2px 1px -2px rgba(0,0,0,0.2), 0 1px 5px 0 rgba(0,0,0,0.12);
}
.ALERT_CLOSE
{

View File

@ -715,13 +715,46 @@ function readAndUpdateFav () {
if (objXMLHttpReqFavSoc.readyState == 4) { // Check if data have been received
if (objXMLHttpReqFavSoc.status == 200)
if (idDivFav) {
var divFav = document.getElementById(idDivFav); // Access to last click DIV
var divFav = document.getElementById(idDivFav); // Access to DIV
if (divFav)
divFav.innerHTML = objXMLHttpReqFavSoc.responseText; // Update fav area DIV
}
}
}
/*****************************************************************************/
/************* Update share area in social timeline using AJAX ***************/
/*****************************************************************************/
var objXMLHttpReqShaSoc = false;
var idDivSha = null;
// This function is called when user clicks in icon to share/unshare in timeline
function refreshSha (elem,Params) {
idDivSha = elem.parentNode.id;
objXMLHttpReqShaSoc = AJAXCreateObject ();
if (objXMLHttpReqShaSoc) {
/* Send request to server */
objXMLHttpReqShaSoc.onreadystatechange = readAndUpdateSha; // onreadystatechange must be lowercase
objXMLHttpReqShaSoc.open('POST',ActionAJAX,true);
objXMLHttpReqShaSoc.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
objXMLHttpReqShaSoc.send(Params);
}
}
// Receives and shows share area: icon and users who have shared a social note or comment in timeline
function readAndUpdateSha () {
if (objXMLHttpReqShaSoc.readyState == 4) { // Check if data have been received
if (objXMLHttpReqShaSoc.status == 200)
if (idDivSha) {
var divSha = document.getElementById(idDivSha); // Access to DIV
if (divSha)
divSha.innerHTML = objXMLHttpReqShaSoc.responseText; // Update share area DIV
}
}
}
function readLastClicksData () {
if (objXMLHttpReqLog.readyState == 4) { // Check if data have been received
if (objXMLHttpReqLog.status == 200) {
@ -1462,31 +1495,3 @@ function ContractChildren (idParent) {
row.style.display = 'none'; // hide
}
}
/*****************************************************************************/
/**************** Animate icon "recycle" when click on a link ****************/
/*****************************************************************************/
function FavSocial (idParent) {
var parent = document.getElementById(idParent);
var iconToFav = document.getElementById('fav_' + idParent);
var iconToUnfav = document.getElementById('unfav_' + idParent);
if (parent.dataset.status == 'unfaved') {
parent.dataset.status = 'faved';
iconToFav.style.display = 'none';
iconToUnfav.style.display = '';
}
}
function UnfavSocial (idParent) {
var parent = document.getElementById(idParent);
var iconToFav = document.getElementById('fav_' + idParent);
var iconToUnfav = document.getElementById('unfav_' + idParent);
if (parent.dataset.status == 'faved') {
parent.dataset.status = 'unfaved';
iconToUnfav.style.display = 'none';
iconToFav.style.display = '';
}
}

View File

@ -1613,8 +1613,8 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActRcvSocPstGbl */{1492,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_DATA,Act_BRW_1ST_TAB,Soc_ShowTimelineGbl1 ,Soc_ReceiveSocialPostGbl ,NULL},
/* 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},
/* ActShaSocNotGbl */{1495,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Soc_ShareSocialNoteGbl ,NULL},
/* ActUnsSocNotGbl */{1496,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Soc_UnshareSocialNoteGbl ,NULL},
/* ActFavSocNotGbl */{1512,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Soc_FavSocialNoteGbl ,NULL},
/* ActUnfSocNotGbl */{1513,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Soc_UnfavSocialNoteGbl ,NULL},
/* ActFavSocComGbl */{1516,-1,TabUnk,ActSeeSocTmlGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Soc_FavSocialCommentGbl ,NULL},

View File

@ -429,10 +429,11 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 18.58.1 (2019-02-24)"
#define Log_PLATFORM_VERSION "SWAD 18.59 (2019-02-25)"
#define CSS_FILE "swad18.57.css"
#define JS_FILE "swad18.58.js"
#define JS_FILE "swad18.59.js"
/*
Version 18.59: Feb 25, 2019 Shared in social notes are made in AJAX without reloading page. (237809 lines)
Version 18.58.1: Feb 24, 2019 Code cleaning related to AJAX and timeline.
Fixed bug in recent clicks. (237768 lines)
9 changes necessary in database:

View File

@ -726,8 +726,6 @@ static void Lay_WriteScriptParamsAJAX (void)
case ActSeeSocTmlGbl:
case ActRcvSocPstGbl:
case ActRcvSocComGbl:
case ActShaSocNotGbl:
case ActUnsSocNotGbl:
case ActReqRemSocPubGbl:
case ActRemSocPubGbl:
case ActReqRemSocComGbl:
@ -746,8 +744,6 @@ static void Lay_WriteScriptParamsAJAX (void)
case ActSeeOthPubPrf:
case ActRcvSocPstUsr:
case ActRcvSocComUsr:
case ActShaSocNotUsr:
case ActUnsSocNotUsr:
case ActReqRemSocPubUsr:
case ActRemSocPubUsr:
case ActReqRemSocComUsr:

View File

@ -735,6 +735,8 @@ void Par_GetMainParameters (void)
Gbl.Action.IsAJAXAutoRefresh = true;
}
else if (Gbl.Action.Act == ActRefOldSocPubGbl || Gbl.Action.Act == ActRefOldSocPubUsr ||
Gbl.Action.Act == ActShaSocNotGbl || Gbl.Action.Act == ActShaSocNotUsr ||
Gbl.Action.Act == ActUnsSocNotGbl || Gbl.Action.Act == ActUnsSocNotUsr ||
Gbl.Action.Act == ActFavSocNotGbl || Gbl.Action.Act == ActFavSocNotUsr ||
Gbl.Action.Act == ActUnfSocNotGbl || Gbl.Action.Act == ActUnfSocNotUsr ||
Gbl.Action.Act == ActFavSocComGbl || Gbl.Action.Act == ActFavSocComUsr ||

View File

@ -198,8 +198,8 @@ static void Soc_PutFormToRemoveComment (long PubCod);
static void Soc_PutDisabledIconShare (unsigned NumShared);
static void Soc_PutDisabledIconFav (unsigned NumFavs);
static void Soc_PutFormToShareSocialNote (long NotCod);
static void Soc_PutFormToUnshareSocialNote (long NotCod);
static void Soc_PutFormToShareSocialNote (const struct SocialNote *SocNot);
static void Soc_PutFormToUnshareSocialNote (const struct SocialNote *SocNot);
static void Soc_PutFormToFavSocialNote (const struct SocialNote *SocNot);
static void Soc_PutFormToUnfavSocialNote (const struct SocialNote *SocNot);
static void Soc_PutFormToFavSocialComment (struct SocialComment *SocCom);
@ -213,13 +213,13 @@ static long Soc_GetParamPubCod (void);
static long Soc_ReceiveComment (void);
static long Soc_ShareSocialNote (void);
static void Soc_ShareSocialNote (struct SocialNote *SocNot);
static void Soc_FavSocialNote (struct SocialNote *SocNot);
static void Soc_FavSocialComment (struct SocialComment *SocCom);
static void Soc_CreateNotifToAuthor (long AuthorCod,long PubCod,
Ntf_NotifyEvent_t NotifyEvent);
static long Soc_UnshareSocialNote (void);
static void Soc_UnshareSocialNote (struct SocialNote *SocNot);
static void Soc_UnfavSocialNote (struct SocialNote *SocNot);
static void Soc_UnfavSocialComment (struct SocialComment *SocCom);
@ -242,7 +242,7 @@ static bool Soc_CheckIfNoteIsSharedByUsr (long NotCod,long UsrCod);
static bool Soc_CheckIfNoteIsFavedByUsr (long NotCod,long UsrCod);
static bool Soc_CheckIfCommIsFavedByUsr (long PubCod,long UsrCod);
static unsigned Soc_UpdateNumTimesANoteHasBeenShared (struct SocialNote *SocNot);
static void Soc_UpdateNumTimesANoteHasBeenShared (struct SocialNote *SocNot);
static void Soc_GetNumTimesANoteHasBeenFav (struct SocialNote *SocNot);
static void Soc_GetNumTimesACommHasBeenFav (struct SocialComment *SocCom);
@ -1374,7 +1374,9 @@ static void Soc_WriteSocialNote (const struct SocialNote *SocNot,
char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1];
unsigned NumComments;
char IdNewComment[Frm_MAX_BYTES_ID + 1];
static unsigned Num = 0;
static unsigned NumDiv = 0; // Used to create unique div id for fav and shared
NumDiv++;
/***** Start box ****/
if (ShowNoteAlone)
@ -1565,51 +1567,50 @@ static void Soc_WriteSocialNote (const struct SocialNote *SocNot,
"<div class=\"SOCIAL_ICOS_FAV_SHA_REM\">");
/* Put icon to mark this social note as favourite */
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
if (SocNot->Unavailable || // Unavailable social notes can not be favourited
IAmTheAuthor) // I am the author
{
/* Put disabled icon and list of users
who have marked this social note as favourite*/
who have marked this social note as favourite */
Soc_PutDisabledIconFav (SocNot->NumFavs);
Soc_ShowUsrsWhoHaveMarkedSocialNoteAsFav (SocNot);
}
else // I am not the author
else // Available and I am not the author
{
fprintf (Gbl.F.Out,"<div id=\"fav_not_%s_%u\""
" class=\"SOCIAL_ICO_FAV\">",
Gbl.UniqueNameEncrypted,++Num);
Gbl.UniqueNameEncrypted,NumDiv);
if (IAmAFaverOfThisSocNot) // I have favourited this social note
/* Put icon to unfav this publishing and list of users */
Soc_PutFormToUnfavSocialNote (SocNot);
else // I am not a faver
else // I am not a faver of this social note
/* Put icon to fav this publishing and list of users */
Soc_PutFormToFavSocialNote (SocNot);
fprintf (Gbl.F.Out,"</div>");
}
/* Put icons to share/unshare */
if (IAmTheAuthor) // I am the author
/* Put icon to share/unshare */
if (SocNot->Unavailable || // Unavailable social notes can not be shared
IAmTheAuthor) // I am the author
{
/* Put disabled icon and list of users
who have shared this social note */
Soc_PutDisabledIconShare (SocNot->NumShared);
else if (IAmASharerOfThisSocNot) // I am a sharer of this social note,
// but not the author ==> I have shared this social note
/* Put icon to unshare this publishing */
Soc_PutFormToUnshareSocialNote (SocNot->NotCod);
else // I am not the author and I am not a sharer
{
if (SocNot->Unavailable) // Unavailable social notes can not be shared
Soc_PutDisabledIconShare (SocNot->NumShared);
else
/* Put icon to share this publishing */
Soc_PutFormToShareSocialNote (SocNot->NotCod);
}
/* Show who have shared this social note */
Soc_ShowUsrsWhoHaveSharedSocialNote (SocNot);
Soc_ShowUsrsWhoHaveSharedSocialNote (SocNot);
}
else // Available and I am not the author
{
fprintf (Gbl.F.Out,"<div id=\"sha_not_%s_%u\""
" class=\"SOCIAL_ICO_SHARE\">",
Gbl.UniqueNameEncrypted,NumDiv);
if (IAmASharerOfThisSocNot) // I am a sharer of this social note
/* Put icon to unshare this publishing and list of users */
Soc_PutFormToUnshareSocialNote (SocNot);
else // I am not a sharer of this social note
/* Put icon to share this publishing and list of users */
Soc_PutFormToShareSocialNote (SocNot);
fprintf (Gbl.F.Out,"</div>");
}
/* Put icon to remove this social note */
if (IAmTheAuthor)
@ -2626,7 +2627,9 @@ static void Soc_WriteSocialComment (struct SocialComment *SocCom,
bool IAmAFaverOfThisSocCom = false;
bool ShowPhoto = false;
char PhotoURL[PATH_MAX + 1];
static unsigned Num = 0;
static unsigned NumDiv = 0; // Used to create unique div id for fav
NumDiv++;
if (ShowCommentAlone)
{
@ -2701,7 +2704,7 @@ static void Soc_WriteSocialComment (struct SocialComment *SocCom,
{
fprintf (Gbl.F.Out,"<div id=\"fav_com_%s_%u\""
" class=\"SOCIAL_ICO_FAV\">",
Gbl.UniqueNameEncrypted,++Num);
Gbl.UniqueNameEncrypted,NumDiv);
if (IAmAFaverOfThisSocCom) // I have favourited this social comment
/* Put icon to unfav this publishing and list of users */
Soc_PutFormToUnfavSocialComment (SocCom);
@ -2830,16 +2833,44 @@ static void Soc_PutDisabledIconFav (unsigned NumFavs)
/*****************************************************************************/
// All forms in this function and nested functions must have unique identifiers
static void Soc_PutFormToShareSocialNote (long NotCod)
static void Soc_PutFormToShareSocialNote (const struct SocialNote *SocNot)
{
extern const char *Txt_Share;
char *OnSubmit;
/***** Form to share social note *****/
Soc_FormStart (ActShaSocNotGbl,ActShaSocNotUsr);
Soc_PutHiddenParamNotCod (NotCod);
Ico_PutDivIconLink ("SOCIAL_ICO_SHARE",
"share-alt.svg",Txt_Share);
/***** Form and icon to mark social note as favourite *****/
/* Form with icon */
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
{
if (asprintf (&OnSubmit,"refreshSha(this,"
"'act=%ld&ses=%s&NotCod=%ld&OtherUsrCod=%s');"
" return false;", // return false is necessary to not submit form
Act_GetActCod (ActShaSocNotUsr),
Gbl.Session.Id,
SocNot->NotCod,
Gbl.Usrs.Other.UsrDat.EncryptedUsrCod) < 0)
Lay_NotEnoughMemoryExit ();
Frm_StartFormUniqueAnchorOnSubmit (ActUnk,"timeline",OnSubmit);
}
else
{
if (asprintf (&OnSubmit,"refreshSha(this,"
"'act=%ld&ses=%s&NotCod=%ld');"
" return false;", // return false is necessary to not submit form
Act_GetActCod (ActShaSocNotGbl),
Gbl.Session.Id,
SocNot->NotCod) < 0)
Lay_NotEnoughMemoryExit ();
Frm_StartFormUniqueAnchorOnSubmit (ActUnk,NULL,OnSubmit);
}
Ico_PutIconLink ("share-alt.svg",Txt_Share);
Frm_EndForm ();
/* Free allocated memory for subquery */
free ((void *) OnSubmit);
/***** Who have shared this social note *****/
Soc_ShowUsrsWhoHaveSharedSocialNote (SocNot);
}
/*****************************************************************************/
@ -2847,16 +2878,44 @@ static void Soc_PutFormToShareSocialNote (long NotCod)
/*****************************************************************************/
// All forms in this function and nested functions must have unique identifiers
static void Soc_PutFormToUnshareSocialNote (long NotCod)
static void Soc_PutFormToUnshareSocialNote (const struct SocialNote *SocNot)
{
extern const char *Txt_SOCIAL_NOTE_Shared;
char *OnSubmit;
/***** Form to share social publishing *****/
Soc_FormStart (ActUnsSocNotGbl,ActUnsSocNotUsr);
Soc_PutHiddenParamNotCod (NotCod);
Ico_PutDivIconLink ("SOCIAL_ICO_SHARE",
"share-alt-green.svg",Txt_SOCIAL_NOTE_Shared);
/***** Form and icon to mark social note as favourite *****/
/* Form with icon */
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
{
if (asprintf (&OnSubmit,"refreshSha(this,"
"'act=%ld&ses=%s&NotCod=%ld&OtherUsrCod=%s');"
" return false;", // return false is necessary to not submit form
Act_GetActCod (ActUnsSocNotUsr),
Gbl.Session.Id,
SocNot->NotCod,
Gbl.Usrs.Other.UsrDat.EncryptedUsrCod) < 0)
Lay_NotEnoughMemoryExit ();
Frm_StartFormUniqueAnchorOnSubmit (ActUnk,"timeline",OnSubmit);
}
else
{
if (asprintf (&OnSubmit,"refreshSha(this,"
"'act=%ld&ses=%s&NotCod=%ld');"
" return false;", // return false is necessary to not submit form
Act_GetActCod (ActUnsSocNotGbl),
Gbl.Session.Id,
SocNot->NotCod) < 0)
Lay_NotEnoughMemoryExit ();
Frm_StartFormUniqueAnchorOnSubmit (ActUnk,NULL,OnSubmit);
}
Ico_PutIconLink ("share-alt-green.svg",Txt_SOCIAL_NOTE_Shared);
Frm_EndForm ();
/* Free allocated memory for subquery */
free ((void *) OnSubmit);
/***** Who have shared this social note *****/
Soc_ShowUsrsWhoHaveSharedSocialNote (SocNot);
}
/*****************************************************************************/
@ -2949,7 +3008,6 @@ static void Soc_PutFormToUnfavSocialNote (const struct SocialNote *SocNot)
Soc_ShowUsrsWhoHaveMarkedSocialNoteAsFav (SocNot);
}
/*****************************************************************************/
/***************** Form to mark a social comment as favourite ****************/
/*****************************************************************************/
@ -3217,77 +3275,69 @@ static long Soc_ReceiveComment (void)
void Soc_ShareSocialNoteGbl (void)
{
long NotCod;
struct SocialNote SocNot;
/***** Share social note *****/
NotCod = Soc_ShareSocialNote ();
/***** Mark social note as favourite *****/
Soc_ShareSocialNote (&SocNot);
/***** Write updated timeline after sharing (global) *****/
Soc_ShowTimelineGblHighlightingNot (NotCod);
/***** Write HTML inside DIV with form to unshare *****/
Soc_PutFormToUnshareSocialNote (&SocNot);
/***** All the output is made, so don't write anymore *****/
Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true;
}
void Soc_ShareSocialNoteUsr (void)
{
long NotCod;
struct SocialNote SocNot;
/***** Get user whom profile is displayed *****/
Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ();
/***** Show user's profile *****/
Prf_ShowUserProfile (&Gbl.Usrs.Other.UsrDat);
/***** Start section *****/
Lay_StartSection (Soc_TIMELINE_SECTION_ID);
/***** Share social note *****/
NotCod = Soc_ShareSocialNote ();
Soc_ShareSocialNote (&SocNot);
/***** Write updated timeline after sharing (user) *****/
Soc_ShowTimelineUsrHighlightingNot (NotCod);
/***** Write HTML inside DIV with form to unshare *****/
Soc_PutFormToUnshareSocialNote (&SocNot);
/***** End section *****/
Lay_EndSection ();
/***** All the output is made, so don't write anymore *****/
Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true;
}
static long Soc_ShareSocialNote (void)
static void Soc_ShareSocialNote (struct SocialNote *SocNot)
{
extern const char *Txt_The_original_post_no_longer_exists;
struct SocialNote SocNot;
struct SocialPublishing SocPub;
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_CheckIfNoteIsSharedByUsr (SocNot.NotCod,
if (!Soc_CheckIfNoteIsSharedByUsr (SocNot->NotCod,
Gbl.Usrs.Me.UsrDat.UsrCod)) // Not yet shared by me
{
/***** Share (publish social note in timeline) *****/
SocPub.NotCod = SocNot.NotCod;
SocPub.NotCod = SocNot->NotCod;
SocPub.PublisherCod = Gbl.Usrs.Me.UsrDat.UsrCod;
SocPub.PubType = Soc_PUB_SHARED_NOTE;
Soc_PublishSocialNoteInTimeline (&SocPub); // Set SocPub.PubCod
/* Update number of times this social note is shared */
SocNot.NumShared = Soc_UpdateNumTimesANoteHasBeenShared (&SocNot);
Soc_UpdateNumTimesANoteHasBeenShared (SocNot);
/**** Create notification about shared 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_SHARE);
Soc_CreateNotifToAuthor (SocNot->UsrCod,OriginalPubCod,Ntf_EVENT_TIMELINE_SHARE);
}
}
else
Ale_ShowAlert (Ale_WARNING,Txt_The_original_post_no_longer_exists);
return SocNot.NotCod;
}
/*****************************************************************************/
@ -3478,55 +3528,51 @@ static void Soc_CreateNotifToAuthor (long AuthorCod,long PubCod,
void Soc_UnshareSocialNoteGbl (void)
{
long NotCod;
struct SocialNote SocNot;
/***** Unshare a previously shared social note *****/
NotCod = Soc_UnshareSocialNote ();
/***** Unshare social note *****/
Soc_UnshareSocialNote (&SocNot);
/***** Write updated timeline after unsharing (global) *****/
Soc_ShowTimelineGblHighlightingNot (NotCod);
/***** Write HTML inside DIV with form to share *****/
Soc_PutFormToShareSocialNote (&SocNot);
/***** All the output is made, so don't write anymore *****/
Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true;
}
void Soc_UnshareSocialNoteUsr (void)
{
long NotCod;
struct SocialNote SocNot;
/***** Get user whom profile is displayed *****/
Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ();
/***** Show user's profile *****/
Prf_ShowUserProfile (&Gbl.Usrs.Other.UsrDat);
/***** Share social note *****/
Soc_UnshareSocialNote (&SocNot);
/***** Start section *****/
Lay_StartSection (Soc_TIMELINE_SECTION_ID);
/***** Write HTML inside DIV with form to share *****/
Soc_PutFormToShareSocialNote (&SocNot);
/***** Unshare a previously shared social note *****/
NotCod = Soc_UnshareSocialNote ();
/***** Write updated timeline after unsharing (user) *****/
Soc_ShowTimelineUsrHighlightingNot (NotCod);
/***** End section *****/
Lay_EndSection ();
/***** All the output is made, so don't write anymore *****/
Gbl.Layout.DivsEndWritten = Gbl.Layout.HTMLEndWritten = true;
}
static long Soc_UnshareSocialNote (void)
static void Soc_UnshareSocialNote (struct SocialNote *SocNot)
{
extern const char *Txt_The_original_post_no_longer_exists;
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.NumShared &&
ItsMe = Usr_ItsMe (SocNot->UsrCod);
if (SocNot->NumShared &&
Gbl.Usrs.Me.Logged && !ItsMe) // I am not the author
if (Soc_CheckIfNoteIsSharedByUsr (SocNot.NotCod,
if (Soc_CheckIfNoteIsSharedByUsr (SocNot->NotCod,
Gbl.Usrs.Me.UsrDat.UsrCod)) // I am a sharer
{
/***** Delete social publishing from database *****/
@ -3535,29 +3581,19 @@ static long Soc_UnshareSocialNote (void)
" WHERE NotCod=%ld"
" AND PublisherCod=%ld"
" AND PubType=%u",
SocNot.NotCod,
SocNot->NotCod,
Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Soc_PUB_SHARED_NOTE);
/***** Update number of times this social note is shared *****/
SocNot.NumShared = Soc_UpdateNumTimesANoteHasBeenShared (&SocNot);
Soc_UpdateNumTimesANoteHasBeenShared (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_SHARE,OriginalPubCod);
/***** Show the social note corresponding
to the publishing just unshared *****/
Soc_WriteSocialNote (&SocNot,
Soc_TOP_MESSAGE_UNSHARED,Gbl.Usrs.Me.UsrDat.UsrCod,
true,true);
}
}
else
Ale_ShowAlert (Ale_WARNING,Txt_The_original_post_no_longer_exists);
return SocNot.NotCod;
}
/*****************************************************************************/
@ -4407,10 +4443,10 @@ static bool Soc_CheckIfCommIsFavedByUsr (long PubCod,long UsrCod)
/******* Get number of times a social note has been shared in timeline *******/
/*****************************************************************************/
static unsigned Soc_UpdateNumTimesANoteHasBeenShared (struct SocialNote *SocNot)
static void Soc_UpdateNumTimesANoteHasBeenShared (struct SocialNote *SocNot)
{
/***** Get number of times (users) this note has been shared *****/
return
SocNot->NumShared =
(unsigned) DB_QueryCOUNT ("can not get number of times"
" a note has been shared",
"SELECT COUNT(*) FROM social_pubs"
@ -4759,7 +4795,7 @@ static void Soc_GetDataOfSocialNoteFromRow (MYSQL_ROW row,struct SocialNote *Soc
SocNot->DateTimeUTC = Dat_GetUNIXTimeFromStr (row[6]);
/***** Get number of times this social note has been shared *****/
SocNot->NumShared = Soc_UpdateNumTimesANoteHasBeenShared (SocNot);
Soc_UpdateNumTimesANoteHasBeenShared (SocNot);
/***** Get number of times this social note has been favourited *****/
Soc_GetNumTimesANoteHasBeenFav (SocNot);