mirror of
https://github.com/acanas/swad-core.git
synced 2024-06-03 15:25:22 +02:00
Version20.14.1
This commit is contained in:
parent
8ba2a27976
commit
12a9340cd6
|
@ -553,7 +553,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
|
||||||
En OpenSWAD:
|
En OpenSWAD:
|
||||||
ps2pdf source.ps destination.pdf
|
ps2pdf source.ps destination.pdf
|
||||||
*/
|
*/
|
||||||
#define Log_PLATFORM_VERSION "SWAD 20.14 (2021-02-08)"
|
#define Log_PLATFORM_VERSION "SWAD 20.14.1 (2021-02-08)"
|
||||||
#define CSS_FILE "swad20.8.css"
|
#define CSS_FILE "swad20.8.css"
|
||||||
#define JS_FILE "swad20.6.2.js"
|
#define JS_FILE "swad20.6.2.js"
|
||||||
/*
|
/*
|
||||||
|
@ -600,6 +600,7 @@ TODO: DNI de un estudiante sale err
|
||||||
|
|
||||||
TODO: BUG: Cuando un tipo de grupo sólo tiene un grupo, inscribirse es voluntario, el estudiante sólo puede pertenecer a un grupo, y se inscribe en él, debería poder desapuntarse. Ahora no puede.
|
TODO: BUG: Cuando un tipo de grupo sólo tiene un grupo, inscribirse es voluntario, el estudiante sólo puede pertenecer a un grupo, y se inscribe en él, debería poder desapuntarse. Ahora no puede.
|
||||||
|
|
||||||
|
Version 20.14.1: Feb 08, 2021 Code refactoring in timeline. (305072 lines)
|
||||||
Version 20.14: Feb 08, 2021 New module timeline_shared. (305048 lines)
|
Version 20.14: Feb 08, 2021 New module timeline_shared. (305048 lines)
|
||||||
Version 20.13: Feb 08, 2021 New module timeline_favourite. (304971 lines)
|
Version 20.13: Feb 08, 2021 New module timeline_favourite. (304971 lines)
|
||||||
Version 20.12.1: Feb 08, 2021 Code refactoring in timeline. (304900 lines)
|
Version 20.12.1: Feb 08, 2021 Code refactoring in timeline. (304900 lines)
|
||||||
|
|
|
@ -680,6 +680,101 @@ static unsigned Str_FindHTMLEntity (const char *Ptr)
|
||||||
0; // No HTML entity found
|
0; // No HTML entity found
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*** Create a notification about mention for any nickname in a publication ***/
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*
|
||||||
|
Example: "The user @rms says..."
|
||||||
|
^ ^
|
||||||
|
PtrStart ___| |___ PtrEnd
|
||||||
|
Length = 3
|
||||||
|
*/
|
||||||
|
void Str_AnalyzeTxtAndStoreNotifyEventToMentionedUsrs (long PubCod,const char *Txt)
|
||||||
|
{
|
||||||
|
const char *Ptr;
|
||||||
|
bool IsNickname;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
const char *PtrStart;
|
||||||
|
const char *PtrEnd;
|
||||||
|
size_t Length; // Length of the nickname
|
||||||
|
} Nickname;
|
||||||
|
struct UsrData UsrDat;
|
||||||
|
bool ItsMe;
|
||||||
|
bool CreateNotif;
|
||||||
|
bool NotifyByEmail;
|
||||||
|
|
||||||
|
/***** Initialize structure with user's data *****/
|
||||||
|
Usr_UsrDataConstructor (&UsrDat);
|
||||||
|
|
||||||
|
/***** Find nicknames and create notifications *****/
|
||||||
|
for (Ptr = Txt;
|
||||||
|
*Ptr;)
|
||||||
|
/* Check if the next char is the start of a nickname */
|
||||||
|
if ((int) *Ptr == (int) '@')
|
||||||
|
{
|
||||||
|
/* Find nickname end */
|
||||||
|
Ptr++; // Points to first character after @
|
||||||
|
Nickname.PtrStart = Ptr;
|
||||||
|
|
||||||
|
/* A nick can have digits, letters and '_' */
|
||||||
|
for (;
|
||||||
|
*Ptr;
|
||||||
|
Ptr++)
|
||||||
|
if (!((*Ptr >= 'a' && *Ptr <= 'z') ||
|
||||||
|
(*Ptr >= 'A' && *Ptr <= 'Z') ||
|
||||||
|
(*Ptr >= '0' && *Ptr <= '9') ||
|
||||||
|
(*Ptr == '_')))
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Calculate length of this nickname */
|
||||||
|
Nickname.PtrEnd = Ptr - 1;
|
||||||
|
Nickname.Length = (size_t) (Ptr - Nickname.PtrStart);
|
||||||
|
|
||||||
|
/* A nick (without arroba) must have a number of characters
|
||||||
|
Nck_MIN_BYTES_NICKNAME_WITHOUT_ARROBA <= Length <= Nck_MAX_BYTES_NICKNAME_WITHOUT_ARROBA */
|
||||||
|
IsNickname = (Nickname.Length >= Nck_MIN_BYTES_NICKNAME_WITHOUT_ARROBA &&
|
||||||
|
Nickname.Length <= Nck_MAX_BYTES_NICKNAME_WITHOUT_ARROBA);
|
||||||
|
|
||||||
|
if (IsNickname)
|
||||||
|
{
|
||||||
|
/* Copy nickname */
|
||||||
|
strncpy (UsrDat.Nickname,Nickname.PtrStart,Nickname.Length);
|
||||||
|
UsrDat.Nickname[Nickname.Length] = '\0';
|
||||||
|
|
||||||
|
if ((UsrDat.UsrCod = Nck_GetUsrCodFromNickname (UsrDat.Nickname)) > 0)
|
||||||
|
{
|
||||||
|
ItsMe = Usr_ItsMe (UsrDat.UsrCod);
|
||||||
|
if (!ItsMe) // Not me
|
||||||
|
{
|
||||||
|
/* Get user's data */
|
||||||
|
Usr_GetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS);
|
||||||
|
|
||||||
|
/* Create notification for the mentioned user *****/
|
||||||
|
CreateNotif = (UsrDat.NtfEvents.CreateNotif & (1 << Ntf_EVENT_TIMELINE_MENTION));
|
||||||
|
if (CreateNotif)
|
||||||
|
{
|
||||||
|
NotifyByEmail = (UsrDat.NtfEvents.SendEmail & (1 << Ntf_EVENT_TIMELINE_MENTION));
|
||||||
|
Ntf_StoreNotifyEventToOneUser (Ntf_EVENT_TIMELINE_MENTION,&UsrDat,PubCod,
|
||||||
|
(Ntf_Status_t) (NotifyByEmail ? Ntf_STATUS_BIT_EMAIL :
|
||||||
|
0),
|
||||||
|
Gbl.Hierarchy.Ins.InsCod,
|
||||||
|
Gbl.Hierarchy.Ctr.CtrCod,
|
||||||
|
Gbl.Hierarchy.Deg.DegCod,
|
||||||
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* The next char is not the start of a nickname */
|
||||||
|
else // Character != '@'
|
||||||
|
Ptr++;
|
||||||
|
|
||||||
|
/***** Free memory used for user's data *****/
|
||||||
|
Usr_UsrDataDestructor (&UsrDat);
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/***** Convert a string to title: first uppercase and the rest lowercase *****/
|
/***** Convert a string to title: first uppercase and the rest lowercase *****/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -84,6 +84,9 @@ typedef enum
|
||||||
|
|
||||||
void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScreen);
|
void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScreen);
|
||||||
size_t Str_LimitLengthHTMLStr (char *Str,size_t MaxCharsOnScreen);
|
size_t Str_LimitLengthHTMLStr (char *Str,size_t MaxCharsOnScreen);
|
||||||
|
|
||||||
|
void Str_AnalyzeTxtAndStoreNotifyEventToMentionedUsrs (long PubCod,const char *Txt);
|
||||||
|
|
||||||
void Str_ConvertToTitleType (char *Str);
|
void Str_ConvertToTitleType (char *Str);
|
||||||
void Str_ConvertToComparable (char *Str);
|
void Str_ConvertToComparable (char *Str);
|
||||||
char *Str_ConvertToUpperText (char *Str);
|
char *Str_ConvertToUpperText (char *Str);
|
||||||
|
|
126
swad_timeline.c
126
swad_timeline.c
|
@ -32,9 +32,6 @@
|
||||||
#include <string.h> // For string functions
|
#include <string.h> // For string functions
|
||||||
#include <sys/types.h> // For time_t
|
#include <sys/types.h> // For time_t
|
||||||
|
|
||||||
#include "swad_announcement.h"
|
|
||||||
#include "swad_box.h"
|
|
||||||
#include "swad_constant.h"
|
|
||||||
#include "swad_database.h"
|
#include "swad_database.h"
|
||||||
#include "swad_exam_announcement.h"
|
#include "swad_exam_announcement.h"
|
||||||
#include "swad_figure.h"
|
#include "swad_figure.h"
|
||||||
|
@ -42,13 +39,9 @@
|
||||||
#include "swad_form.h"
|
#include "swad_form.h"
|
||||||
#include "swad_forum.h"
|
#include "swad_forum.h"
|
||||||
#include "swad_global.h"
|
#include "swad_global.h"
|
||||||
#include "swad_HTML.h"
|
|
||||||
#include "swad_layout.h"
|
|
||||||
#include "swad_media.h"
|
|
||||||
#include "swad_message.h"
|
#include "swad_message.h"
|
||||||
#include "swad_notice.h"
|
#include "swad_notice.h"
|
||||||
#include "swad_notification.h"
|
#include "swad_photo.h"
|
||||||
#include "swad_parameter.h"
|
|
||||||
#include "swad_profile.h"
|
#include "swad_profile.h"
|
||||||
#include "swad_setting.h"
|
#include "swad_setting.h"
|
||||||
#include "swad_timeline.h"
|
#include "swad_timeline.h"
|
||||||
|
@ -309,8 +302,6 @@ static void TL_ResetComment (struct TL_Comment *SocCom);
|
||||||
static void TL_ClearTimelineThisSession (void);
|
static void TL_ClearTimelineThisSession (void);
|
||||||
static void TL_AddNotesJustRetrievedToTimelineThisSession (void);
|
static void TL_AddNotesJustRetrievedToTimelineThisSession (void);
|
||||||
|
|
||||||
static void Str_AnalyzeTxtAndStoreNotifyEventToMentionedUsrs (long PubCod,const char *Txt);
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/************************ Initialize global timeline *************************/
|
/************************ Initialize global timeline *************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -4054,7 +4045,8 @@ void TL_RemoveUsrContent (long UsrCod)
|
||||||
|
|
||||||
void TL_ShowNumSharersOrFavers (unsigned NumUsrs)
|
void TL_ShowNumSharersOrFavers (unsigned NumUsrs)
|
||||||
{
|
{
|
||||||
/***** Show number of users who have marked this note as favourite *****/
|
/***** Show number of sharers or favers
|
||||||
|
(users who have shared or marked this note as favourite) *****/
|
||||||
HTM_TxtF (" %u",NumUsrs);
|
HTM_TxtF (" %u",NumUsrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4201,7 +4193,13 @@ static void TL_GetDataOfPublicationFromRow (MYSQL_ROW row,struct TL_Publication
|
||||||
[TL_PUB_SHARED_NOTE ] = TL_TOP_MESSAGE_SHARED,
|
[TL_PUB_SHARED_NOTE ] = TL_TOP_MESSAGE_SHARED,
|
||||||
[TL_PUB_COMMENT_TO_NOTE] = TL_TOP_MESSAGE_COMMENTED,
|
[TL_PUB_COMMENT_TO_NOTE] = TL_TOP_MESSAGE_COMMENTED,
|
||||||
};
|
};
|
||||||
|
/*
|
||||||
|
row[0]: PubCod
|
||||||
|
row[1]: NotCod
|
||||||
|
row[2]: PublisherCod
|
||||||
|
row[3]: PubType
|
||||||
|
row[4]: UNIX_TIMESTAMP(TimePublish)
|
||||||
|
*/
|
||||||
/***** Get code of publication (row[0]) *****/
|
/***** Get code of publication (row[0]) *****/
|
||||||
SocPub->PubCod = Str_ConvertStrCodToLongCod (row[0]);
|
SocPub->PubCod = Str_ConvertStrCodToLongCod (row[0]);
|
||||||
|
|
||||||
|
@ -4225,6 +4223,15 @@ static void TL_GetDataOfPublicationFromRow (MYSQL_ROW row,struct TL_Publication
|
||||||
|
|
||||||
static void TL_GetDataOfNoteFromRow (MYSQL_ROW row,struct TL_Note *SocNot)
|
static void TL_GetDataOfNoteFromRow (MYSQL_ROW row,struct TL_Note *SocNot)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
row[0]: NotCod
|
||||||
|
row[1]: NoteType
|
||||||
|
row[2]: Cod
|
||||||
|
row[3]: UsrCod
|
||||||
|
row[4]: HieCod
|
||||||
|
row[5]: Unavailable
|
||||||
|
row[5]: UNIX_TIMESTAMP(TimeNote)
|
||||||
|
*/
|
||||||
/***** Get code (row[0]) *****/
|
/***** Get code (row[0]) *****/
|
||||||
SocNot->NotCod = Str_ConvertStrCodToLongCod (row[0]);
|
SocNot->NotCod = Str_ConvertStrCodToLongCod (row[0]);
|
||||||
|
|
||||||
|
@ -4523,101 +4530,6 @@ void TL_GetNotifPublication (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
||||||
(*ContentStr)[0] = '\0';
|
(*ContentStr)[0] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/*** Create a notification about mention for any nickname in a publication ***/
|
|
||||||
/*****************************************************************************/
|
|
||||||
/*
|
|
||||||
Example: "The user @rms says..."
|
|
||||||
^ ^
|
|
||||||
PtrStart ___| |___ PtrEnd
|
|
||||||
Length = 3
|
|
||||||
*/
|
|
||||||
static void Str_AnalyzeTxtAndStoreNotifyEventToMentionedUsrs (long PubCod,const char *Txt)
|
|
||||||
{
|
|
||||||
const char *Ptr;
|
|
||||||
bool IsNickname;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
const char *PtrStart;
|
|
||||||
const char *PtrEnd;
|
|
||||||
size_t Length; // Length of the nickname
|
|
||||||
} Nickname;
|
|
||||||
struct UsrData UsrDat;
|
|
||||||
bool ItsMe;
|
|
||||||
bool CreateNotif;
|
|
||||||
bool NotifyByEmail;
|
|
||||||
|
|
||||||
/***** Initialize structure with user's data *****/
|
|
||||||
Usr_UsrDataConstructor (&UsrDat);
|
|
||||||
|
|
||||||
/***** Find nicknames and create notifications *****/
|
|
||||||
for (Ptr = Txt;
|
|
||||||
*Ptr;)
|
|
||||||
/* Check if the next char is the start of a nickname */
|
|
||||||
if ((int) *Ptr == (int) '@')
|
|
||||||
{
|
|
||||||
/* Find nickname end */
|
|
||||||
Ptr++; // Points to first character after @
|
|
||||||
Nickname.PtrStart = Ptr;
|
|
||||||
|
|
||||||
/* A nick can have digits, letters and '_' */
|
|
||||||
for (;
|
|
||||||
*Ptr;
|
|
||||||
Ptr++)
|
|
||||||
if (!((*Ptr >= 'a' && *Ptr <= 'z') ||
|
|
||||||
(*Ptr >= 'A' && *Ptr <= 'Z') ||
|
|
||||||
(*Ptr >= '0' && *Ptr <= '9') ||
|
|
||||||
(*Ptr == '_')))
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* Calculate length of this nickname */
|
|
||||||
Nickname.PtrEnd = Ptr - 1;
|
|
||||||
Nickname.Length = (size_t) (Ptr - Nickname.PtrStart);
|
|
||||||
|
|
||||||
/* A nick (without arroba) must have a number of characters
|
|
||||||
Nck_MIN_BYTES_NICKNAME_WITHOUT_ARROBA <= Length <= Nck_MAX_BYTES_NICKNAME_WITHOUT_ARROBA */
|
|
||||||
IsNickname = (Nickname.Length >= Nck_MIN_BYTES_NICKNAME_WITHOUT_ARROBA &&
|
|
||||||
Nickname.Length <= Nck_MAX_BYTES_NICKNAME_WITHOUT_ARROBA);
|
|
||||||
|
|
||||||
if (IsNickname)
|
|
||||||
{
|
|
||||||
/* Copy nickname */
|
|
||||||
strncpy (UsrDat.Nickname,Nickname.PtrStart,Nickname.Length);
|
|
||||||
UsrDat.Nickname[Nickname.Length] = '\0';
|
|
||||||
|
|
||||||
if ((UsrDat.UsrCod = Nck_GetUsrCodFromNickname (UsrDat.Nickname)) > 0)
|
|
||||||
{
|
|
||||||
ItsMe = Usr_ItsMe (UsrDat.UsrCod);
|
|
||||||
if (!ItsMe) // Not me
|
|
||||||
{
|
|
||||||
/* Get user's data */
|
|
||||||
Usr_GetAllUsrDataFromUsrCod (&UsrDat,Usr_DONT_GET_PREFS);
|
|
||||||
|
|
||||||
/* Create notification for the mentioned user *****/
|
|
||||||
CreateNotif = (UsrDat.NtfEvents.CreateNotif & (1 << Ntf_EVENT_TIMELINE_MENTION));
|
|
||||||
if (CreateNotif)
|
|
||||||
{
|
|
||||||
NotifyByEmail = (UsrDat.NtfEvents.SendEmail & (1 << Ntf_EVENT_TIMELINE_MENTION));
|
|
||||||
Ntf_StoreNotifyEventToOneUser (Ntf_EVENT_TIMELINE_MENTION,&UsrDat,PubCod,
|
|
||||||
(Ntf_Status_t) (NotifyByEmail ? Ntf_STATUS_BIT_EMAIL :
|
|
||||||
0),
|
|
||||||
Gbl.Hierarchy.Ins.InsCod,
|
|
||||||
Gbl.Hierarchy.Ctr.CtrCod,
|
|
||||||
Gbl.Hierarchy.Deg.DegCod,
|
|
||||||
Gbl.Hierarchy.Crs.CrsCod);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* The next char is not the start of a nickname */
|
|
||||||
else // Character != '@'
|
|
||||||
Ptr++;
|
|
||||||
|
|
||||||
/***** Free memory used for user's data *****/
|
|
||||||
Usr_UsrDataDestructor (&UsrDat);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/****************** Get number of publications from a user *******************/
|
/****************** Get number of publications from a user *******************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -100,7 +100,7 @@ static void TL_Fav_PutDisabledIconFav (unsigned NumFavs)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/************************** Form to fav/unfav note ***************************/
|
/************************ Form to show all favers ****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
void TL_Fav_PutFormToSeeAllFaversNote (const struct TL_Note *SocNot,
|
void TL_Fav_PutFormToSeeAllFaversNote (const struct TL_Note *SocNot,
|
||||||
|
@ -600,11 +600,10 @@ static void TL_Fav_ShowUsrsWhoHaveMarkedNoteAsFav (const struct TL_Note *SocNot,
|
||||||
TL_HowManyUsrs_t HowManyUsrs)
|
TL_HowManyUsrs_t HowManyUsrs)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
unsigned NumFirstUsrs = 0;
|
unsigned NumFirstUsrs;
|
||||||
|
|
||||||
/***** Get users who have marked this note as favourite *****/
|
/***** Get users who have marked this note as favourite *****/
|
||||||
if (SocNot->NumFavs)
|
if (SocNot->NumFavs)
|
||||||
{
|
|
||||||
/***** Get list of users from database *****/
|
/***** Get list of users from database *****/
|
||||||
NumFirstUsrs =
|
NumFirstUsrs =
|
||||||
(unsigned) DB_QuerySELECT (&mysql_res,"can not get users",
|
(unsigned) DB_QuerySELECT (&mysql_res,"can not get users",
|
||||||
|
@ -616,16 +615,20 @@ static void TL_Fav_ShowUsrsWhoHaveMarkedNoteAsFav (const struct TL_Note *SocNot,
|
||||||
SocNot->UsrCod,
|
SocNot->UsrCod,
|
||||||
HowManyUsrs == TL_SHOW_FEW_USRS ? TL_DEF_USRS_SHOWN :
|
HowManyUsrs == TL_SHOW_FEW_USRS ? TL_DEF_USRS_SHOWN :
|
||||||
TL_MAX_USRS_SHOWN);
|
TL_MAX_USRS_SHOWN);
|
||||||
}
|
else
|
||||||
|
NumFirstUsrs = 0;
|
||||||
|
|
||||||
/***** Show users *****/
|
/***** Show users *****/
|
||||||
|
/* Number of users */
|
||||||
HTM_DIV_Begin ("class=\"TL_NUM_USRS\"");
|
HTM_DIV_Begin ("class=\"TL_NUM_USRS\"");
|
||||||
TL_ShowNumSharersOrFavers (SocNot->NumFavs);
|
TL_ShowNumSharersOrFavers (SocNot->NumFavs);
|
||||||
HTM_DIV_End ();
|
HTM_DIV_End ();
|
||||||
|
|
||||||
|
/* List users one by one */
|
||||||
HTM_DIV_Begin ("class=\"TL_USRS\"");
|
HTM_DIV_Begin ("class=\"TL_USRS\"");
|
||||||
TL_ShowSharersOrFavers (&mysql_res,SocNot->NumFavs,NumFirstUsrs);
|
TL_ShowSharersOrFavers (&mysql_res,SocNot->NumFavs,NumFirstUsrs);
|
||||||
if (NumFirstUsrs < SocNot->NumFavs) // Not all are shown
|
if (NumFirstUsrs < SocNot->NumFavs) // Not all are shown
|
||||||
|
/* Clickable ellipsis to show all users */
|
||||||
TL_Fav_PutFormToSeeAllFaversNote (SocNot,HowManyUsrs);
|
TL_Fav_PutFormToSeeAllFaversNote (SocNot,HowManyUsrs);
|
||||||
HTM_DIV_End ();
|
HTM_DIV_End ();
|
||||||
|
|
||||||
|
@ -642,7 +645,7 @@ static void TL_Fav_ShowUsrsWhoHaveMarkedCommAsFav (const struct TL_Comment *SocC
|
||||||
TL_HowManyUsrs_t HowManyUsrs)
|
TL_HowManyUsrs_t HowManyUsrs)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
unsigned NumFirstUsrs = 0;
|
unsigned NumFirstUsrs;
|
||||||
|
|
||||||
/***** Get users who have marked this comment as favourite *****/
|
/***** Get users who have marked this comment as favourite *****/
|
||||||
if (SocCom->NumFavs)
|
if (SocCom->NumFavs)
|
||||||
|
@ -657,15 +660,20 @@ static void TL_Fav_ShowUsrsWhoHaveMarkedCommAsFav (const struct TL_Comment *SocC
|
||||||
SocCom->UsrCod,
|
SocCom->UsrCod,
|
||||||
HowManyUsrs == TL_SHOW_FEW_USRS ? TL_DEF_USRS_SHOWN :
|
HowManyUsrs == TL_SHOW_FEW_USRS ? TL_DEF_USRS_SHOWN :
|
||||||
TL_MAX_USRS_SHOWN);
|
TL_MAX_USRS_SHOWN);
|
||||||
|
else
|
||||||
|
NumFirstUsrs = 0;
|
||||||
|
|
||||||
/***** Show users *****/
|
/***** Show users *****/
|
||||||
|
/* Number of users */
|
||||||
HTM_DIV_Begin ("class=\"TL_NUM_USRS\"");
|
HTM_DIV_Begin ("class=\"TL_NUM_USRS\"");
|
||||||
TL_ShowNumSharersOrFavers (SocCom->NumFavs);
|
TL_ShowNumSharersOrFavers (SocCom->NumFavs);
|
||||||
HTM_DIV_End ();
|
HTM_DIV_End ();
|
||||||
|
|
||||||
|
/* List users one by one */
|
||||||
HTM_DIV_Begin ("class=\"TL_USRS\"");
|
HTM_DIV_Begin ("class=\"TL_USRS\"");
|
||||||
TL_ShowSharersOrFavers (&mysql_res,SocCom->NumFavs,NumFirstUsrs);
|
TL_ShowSharersOrFavers (&mysql_res,SocCom->NumFavs,NumFirstUsrs);
|
||||||
if (NumFirstUsrs < SocCom->NumFavs)
|
if (NumFirstUsrs < SocCom->NumFavs)
|
||||||
|
/* Clickable ellipsis to show all users */
|
||||||
TL_Fav_PutFormToSeeAllFaversComment (SocCom,HowManyUsrs);
|
TL_Fav_PutFormToSeeAllFaversComment (SocCom,HowManyUsrs);
|
||||||
HTM_DIV_End ();
|
HTM_DIV_End ();
|
||||||
|
|
||||||
|
|
|
@ -352,7 +352,7 @@ static void TL_Sha_ShowUsrsWhoHaveSharedNote (const struct TL_Note *SocNot,
|
||||||
TL_HowManyUsrs_t HowManyUsrs)
|
TL_HowManyUsrs_t HowManyUsrs)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
unsigned NumFirstUsrs = 0;
|
unsigned NumFirstUsrs;
|
||||||
|
|
||||||
/***** Get users who have shared this note *****/
|
/***** Get users who have shared this note *****/
|
||||||
if (SocNot->NumShared)
|
if (SocNot->NumShared)
|
||||||
|
@ -368,15 +368,20 @@ static void TL_Sha_ShowUsrsWhoHaveSharedNote (const struct TL_Note *SocNot,
|
||||||
(unsigned) TL_PUB_SHARED_NOTE,
|
(unsigned) TL_PUB_SHARED_NOTE,
|
||||||
HowManyUsrs == TL_SHOW_FEW_USRS ? TL_DEF_USRS_SHOWN :
|
HowManyUsrs == TL_SHOW_FEW_USRS ? TL_DEF_USRS_SHOWN :
|
||||||
TL_MAX_USRS_SHOWN);
|
TL_MAX_USRS_SHOWN);
|
||||||
|
else
|
||||||
|
NumFirstUsrs = 0;
|
||||||
|
|
||||||
/***** Show users *****/
|
/***** Show users *****/
|
||||||
|
/* Number of users */
|
||||||
HTM_DIV_Begin ("class=\"TL_NUM_USRS\"");
|
HTM_DIV_Begin ("class=\"TL_NUM_USRS\"");
|
||||||
TL_ShowNumSharersOrFavers (SocNot->NumShared);
|
TL_ShowNumSharersOrFavers (SocNot->NumShared);
|
||||||
HTM_DIV_End ();
|
HTM_DIV_End ();
|
||||||
|
|
||||||
|
/* List users one by one */
|
||||||
HTM_DIV_Begin ("class=\"TL_USRS\"");
|
HTM_DIV_Begin ("class=\"TL_USRS\"");
|
||||||
TL_ShowSharersOrFavers (&mysql_res,SocNot->NumShared,NumFirstUsrs);
|
TL_ShowSharersOrFavers (&mysql_res,SocNot->NumShared,NumFirstUsrs);
|
||||||
if (NumFirstUsrs < SocNot->NumShared)
|
if (NumFirstUsrs < SocNot->NumShared)
|
||||||
|
/* Clickable ellipsis to show all users */
|
||||||
TL_Sha_PutFormToSeeAllSharersNote (SocNot,HowManyUsrs);
|
TL_Sha_PutFormToSeeAllSharersNote (SocNot,HowManyUsrs);
|
||||||
HTM_DIV_End ();
|
HTM_DIV_End ();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user