mirror of https://github.com/acanas/swad-core.git
Version 20.33: Feb 21, 2021 New module swad_timeline_form.
This commit is contained in:
parent
76ca73926c
commit
a34501e324
6
Makefile
6
Makefile
|
@ -63,9 +63,9 @@ OBJS = swad_account.o swad_action.o swad_agenda.o swad_alert.o \
|
|||
swad_test_import.o swad_test_print.o swad_test_visibility.o \
|
||||
swad_theme.o \
|
||||
swad_timeline.o swad_timeline_comment.o swad_timeline_favourite.o \
|
||||
swad_timeline_note.o swad_timeline_notification.o swad_timeline_post.o \
|
||||
swad_timeline_publication.o swad_timeline_share.o swad_timeline_user.o \
|
||||
swad_timeline_who.o \
|
||||
swad_timeline_form.o swad_timeline_note.o swad_timeline_notification.o \
|
||||
swad_timeline_post.o swad_timeline_publication.o swad_timeline_share.o \
|
||||
swad_timeline_user.o swad_timeline_who.o \
|
||||
swad_timetable.o \
|
||||
swad_user.o \
|
||||
swad_xml.o \
|
||||
|
|
|
@ -553,7 +553,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
|
|||
En OpenSWAD:
|
||||
ps2pdf source.ps destination.pdf
|
||||
*/
|
||||
#define Log_PLATFORM_VERSION "SWAD 20.32.2 (2021-02-21)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 20.33 (2021-02-21)"
|
||||
#define CSS_FILE "swad20.8.css"
|
||||
#define JS_FILE "swad20.6.2.js"
|
||||
/*
|
||||
|
@ -601,6 +601,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: Salvador Romero Cortés: @acanas opción para editar posts
|
||||
|
||||
Version 20.33: Feb 21, 2021 New module swad_timeline_form. (304866 lines)
|
||||
Version 20.32.2: Feb 21, 2021 Code refactoring in timeline related to actions. (304771 lines)
|
||||
Version 20.32.1: Feb 15, 2021 Fixed bug in forums. (304756 lines)
|
||||
Version 20.32: Feb 15, 2021 Fixed bugs in copy of strings.
|
||||
|
|
|
@ -503,41 +503,6 @@ static void TL_PutIconsTimeline (__attribute__((unused)) void *Args)
|
|||
Fig_PutIconToShowFigure (Fig_TIMELINE);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************** Start a form in global or user timeline *******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void TL_FormStart (const struct TL_Timeline *Timeline,TL_FormAction_t Action)
|
||||
{
|
||||
static const Act_Action_t ActionGbl[TL_NUM_ACTIONS] =
|
||||
{
|
||||
[TL_RECEIVE_POST] = ActRcvTL_PstGbl,
|
||||
[TL_RECEIVE_COMM] = ActRcvTL_ComGbl,
|
||||
[TL_REQ_REM_NOTE] = ActReqRemTL_PubGbl,
|
||||
[TL_REQ_REM_COMM] = ActReqRemTL_ComGbl,
|
||||
};
|
||||
static const Act_Action_t ActionUsr[TL_NUM_ACTIONS] =
|
||||
{
|
||||
[TL_RECEIVE_POST] = ActRcvTL_PstUsr,
|
||||
[TL_RECEIVE_COMM] = ActRcvTL_ComUsr,
|
||||
[TL_REQ_REM_NOTE] = ActReqRemTL_PubUsr,
|
||||
[TL_REQ_REM_COMM] = ActReqRemTL_ComUsr,
|
||||
};
|
||||
|
||||
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
|
||||
{
|
||||
/***** Start form in user timeline *****/
|
||||
Frm_StartFormAnchor (ActionUsr[Action],"timeline");
|
||||
Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EnUsrCod);
|
||||
}
|
||||
else
|
||||
{
|
||||
/***** Start form in global timeline *****/
|
||||
Frm_StartForm (ActionGbl[Action]);
|
||||
Usr_PutHiddenParamWho (Timeline->Who);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************* Write the date of creation of a note ********************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -103,15 +103,6 @@ typedef enum
|
|||
TL_SHOW_ALONE,
|
||||
} TL_ShowAlone_t;
|
||||
|
||||
#define TL_NUM_ACTIONS 4
|
||||
typedef enum
|
||||
{
|
||||
TL_RECEIVE_POST, // Receive post
|
||||
TL_RECEIVE_COMM, // Receive comment
|
||||
TL_REQ_REM_NOTE, // Request removal note
|
||||
TL_REQ_REM_COMM, // Request removal comment
|
||||
} TL_FormAction_t;
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -134,8 +125,6 @@ void TL_RefreshNewTimelineGbl (void);
|
|||
void TL_RefreshOldTimelineGbl (void);
|
||||
void TL_RefreshOldTimelineUsr (void);
|
||||
|
||||
void TL_FormStart (const struct TL_Timeline *Timeline,TL_FormAction_t Action);
|
||||
|
||||
void TL_WriteDateTime (time_t TimeUTC);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#include "swad_profile.h"
|
||||
#include "swad_timeline.h"
|
||||
#include "swad_timeline_favourite.h"
|
||||
#include "swad_timeline_form.h"
|
||||
#include "swad_timeline_note.h"
|
||||
#include "swad_timeline_publication.h"
|
||||
#include "swad_timeline_share.h"
|
||||
|
@ -65,10 +66,6 @@ extern struct Globals Gbl;
|
|||
/***************************** Private prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void TL_Com_FormToShowHiddenComments (Act_Action_t ActionGbl,Act_Action_t ActionUsr,
|
||||
long NotCod,
|
||||
char IdComments[Frm_MAX_BYTES_ID + 1],
|
||||
unsigned NumInitialComments);
|
||||
static unsigned TL_Com_WriteHiddenComments (struct TL_Timeline *Timeline,
|
||||
long NotCod,
|
||||
char IdComments[Frm_MAX_BYTES_ID + 1],
|
||||
|
@ -159,7 +156,7 @@ void TL_Com_PutHiddenFormToWriteNewComment (const struct TL_Timeline *Timeline,
|
|||
HTM_DIV_Begin ("class=\"TL_COM_CONT TL_COMM_WIDTH\"");
|
||||
|
||||
/* Begin form to write the post */
|
||||
TL_FormStart (Timeline,TL_RECEIVE_COMM);
|
||||
TL_Frm_FormStart (Timeline,TL_Frm_RECEIVE_COMM);
|
||||
TL_Not_PutHiddenParamNotCod (NotCod);
|
||||
|
||||
/* Textarea and button */
|
||||
|
@ -293,10 +290,9 @@ void TL_Com_WriteCommentsInNote (struct TL_Timeline *Timeline,
|
|||
|
||||
/***** Div which content will be updated via AJAX *****/
|
||||
HTM_DIV_Begin ("id=\"%s\" class=\"TL_RIGHT_WIDTH\"",IdComments);
|
||||
TL_Com_FormToShowHiddenComments (ActShoHidTL_ComGbl,ActShoHidTL_ComUsr,
|
||||
Not->NotCod,
|
||||
IdComments,
|
||||
NumInitialComments);
|
||||
TL_Frm_FormToShowHiddenComments (Not->NotCod,
|
||||
IdComments,
|
||||
NumInitialComments);
|
||||
HTM_DIV_End ();
|
||||
}
|
||||
|
||||
|
@ -315,73 +311,6 @@ void TL_Com_WriteCommentsInNote (struct TL_Timeline *Timeline,
|
|||
DB_FreeMySQLResult (&mysql_res);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********** Form to show hidden coments in global or user timeline ***********/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void TL_Com_FormToShowHiddenComments (Act_Action_t ActionGbl,Act_Action_t ActionUsr,
|
||||
long NotCod,
|
||||
char IdComments[Frm_MAX_BYTES_ID + 1],
|
||||
unsigned NumInitialComments)
|
||||
{
|
||||
extern const char *The_ClassFormLinkInBox[The_NUM_THEMES];
|
||||
extern const char *Txt_See_the_previous_X_COMMENTS;
|
||||
char *OnSubmit;
|
||||
|
||||
HTM_DIV_Begin ("id=\"exp_%s\" class=\"TL_EXPAND_COM TL_RIGHT_WIDTH\"",
|
||||
IdComments);
|
||||
|
||||
/***** Form and icon-text to show hidden comments *****/
|
||||
/* Begin form */
|
||||
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
|
||||
{
|
||||
if (asprintf (&OnSubmit,"toggleComments('%s');"
|
||||
"updateDivHiddenComments(this,"
|
||||
"'act=%ld&ses=%s&NotCod=%ld&IdComments=%s&NumHidCom=%u&OtherUsrCod=%s');"
|
||||
" return false;", // return false is necessary to not submit form
|
||||
IdComments,
|
||||
Act_GetActCod (ActionUsr),
|
||||
Gbl.Session.Id,
|
||||
NotCod,
|
||||
IdComments,
|
||||
NumInitialComments,
|
||||
Gbl.Usrs.Other.UsrDat.EnUsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
Frm_StartFormUniqueAnchorOnSubmit (ActUnk,"timeline",OnSubmit);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (asprintf (&OnSubmit,"toggleComments('%s');"
|
||||
"updateDivHiddenComments(this,"
|
||||
"'act=%ld&ses=%s&NotCod=%ld&IdComments=%s&NumHidCom=%u');"
|
||||
" return false;", // return false is necessary to not submit form
|
||||
IdComments,
|
||||
Act_GetActCod (ActionGbl),
|
||||
Gbl.Session.Id,
|
||||
NotCod,
|
||||
IdComments,
|
||||
NumInitialComments) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
Frm_StartFormUniqueAnchorOnSubmit (ActUnk,NULL,OnSubmit);
|
||||
}
|
||||
|
||||
/* Put icon and text with link to show the first hidden comments */
|
||||
HTM_BUTTON_SUBMIT_Begin (NULL,The_ClassFormLinkInBox[Gbl.Prefs.Theme],NULL);
|
||||
Ico_PutIconTextLink ("angle-up.svg",
|
||||
Str_BuildStringLong (Txt_See_the_previous_X_COMMENTS,
|
||||
(long) NumInitialComments));
|
||||
Str_FreeString ();
|
||||
HTM_BUTTON_End ();
|
||||
|
||||
/* End form */
|
||||
Frm_EndForm ();
|
||||
|
||||
/* Free allocated memory */
|
||||
free (OnSubmit);
|
||||
|
||||
HTM_DIV_End ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************** Write hidden comments via AJAX ***********************/
|
||||
/*****************************************************************************/
|
||||
|
@ -695,7 +624,7 @@ static void TL_Com_PutFormToRemoveComment (const struct TL_Timeline *Timeline,
|
|||
extern const char *Txt_Remove;
|
||||
|
||||
/***** Form to remove publication *****/
|
||||
TL_FormStart (Timeline,TL_REQ_REM_COMM);
|
||||
TL_Frm_FormStart (Timeline,TL_Frm_REQ_REM_COMM);
|
||||
TL_Pub_PutHiddenParamPubCod (PubCod);
|
||||
Ico_PutIconLink ("trash.svg",Txt_Remove);
|
||||
Frm_EndForm ();
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "swad_global.h"
|
||||
#include "swad_timeline.h"
|
||||
#include "swad_timeline_favourite.h"
|
||||
#include "swad_timeline_form.h"
|
||||
#include "swad_timeline_notification.h"
|
||||
#include "swad_timeline_publication.h"
|
||||
|
||||
|
@ -110,9 +111,7 @@ static void TL_Fav_PutFormToFavNote (long ParamCod)
|
|||
extern const char *Txt_Mark_as_favourite;
|
||||
|
||||
/***** Form and icon to mark note as favourite *****/
|
||||
TL_Usr_FormFavSha (ActFavTL_NotGbl,
|
||||
ActFavTL_NotUsr,
|
||||
"NotCod=%ld",ParamCod,
|
||||
TL_Frm_FormFavSha (TL_Frm_FAV_NOTE,"NotCod=%ld",ParamCod,
|
||||
TL_Fav_ICON_FAV,Txt_Mark_as_favourite);
|
||||
}
|
||||
|
||||
|
@ -121,9 +120,7 @@ static void TL_Fav_PutFormToUnfNote (long ParamCod)
|
|||
extern const char *Txt_TIMELINE_NOTE_Favourite;
|
||||
|
||||
/***** Form and icon to unfav (remove mark as favourite) note *****/
|
||||
TL_Usr_FormFavSha (ActUnfTL_NotGbl,
|
||||
ActUnfTL_NotUsr,
|
||||
"NotCod=%ld",ParamCod,
|
||||
TL_Frm_FormFavSha (TL_Frm_UNF_NOTE,"NotCod=%ld",ParamCod,
|
||||
TL_Fav_ICON_FAVED,Txt_TIMELINE_NOTE_Favourite);
|
||||
}
|
||||
|
||||
|
@ -136,9 +133,7 @@ static void TL_Fav_PutFormToFavComment (long ParamCod)
|
|||
extern const char *Txt_Mark_as_favourite;
|
||||
|
||||
/***** Form and icon to mark comment as favourite *****/
|
||||
TL_Usr_FormFavSha (ActFavTL_ComGbl,
|
||||
ActFavTL_ComUsr,
|
||||
"PubCod=%ld",ParamCod,
|
||||
TL_Frm_FormFavSha (TL_Frm_FAV_COMM,"PubCod=%ld",ParamCod,
|
||||
TL_Fav_ICON_FAV,Txt_Mark_as_favourite);
|
||||
}
|
||||
|
||||
|
@ -147,9 +142,7 @@ static void TL_Fav_PutFormToUnfComment (long ParamCod)
|
|||
extern const char *Txt_TIMELINE_NOTE_Favourite;
|
||||
|
||||
/***** Form and icon to unfav (remove mark as favourite) comment *****/
|
||||
TL_Usr_FormFavSha (ActUnfTL_ComGbl,
|
||||
ActUnfTL_ComUsr,
|
||||
"PubCod=%ld",ParamCod,
|
||||
TL_Frm_FormFavSha (TL_Frm_UNF_COMM,"PubCod=%ld",ParamCod,
|
||||
TL_Fav_ICON_FAVED,Txt_TIMELINE_NOTE_Favourite);
|
||||
}
|
||||
|
||||
|
@ -593,8 +586,7 @@ static void TL_Fav_ShowUsrsWhoHaveMarkedNoteAsFav (const struct TL_Not_Note *Not
|
|||
TL_Usr_ShowSharersOrFavers (&mysql_res,Not->NumFavs,NumFirstUsrs);
|
||||
if (NumFirstUsrs < Not->NumFavs) // Not all are shown
|
||||
/* Clickable ellipsis to show all users */
|
||||
TL_Usr_PutFormToSeeAllFaversSharers (ActAllFavTL_NotGbl,
|
||||
ActAllFavTL_NotUsr,
|
||||
TL_Frm_PutFormToSeeAllFaversSharers (TL_Frm_ALL_FAV_NOTE,
|
||||
"NotCod=%ld",Not->NotCod,
|
||||
HowManyUsrs);
|
||||
HTM_DIV_End ();
|
||||
|
@ -641,8 +633,7 @@ static void TL_Fav_ShowUsrsWhoHaveMarkedCommAsFav (const struct TL_Com_Comment *
|
|||
TL_Usr_ShowSharersOrFavers (&mysql_res,Com->NumFavs,NumFirstUsrs);
|
||||
if (NumFirstUsrs < Com->NumFavs)
|
||||
/* Clickable ellipsis to show all users */
|
||||
TL_Usr_PutFormToSeeAllFaversSharers (ActAllFavTL_ComGbl,
|
||||
ActAllFavTL_ComUsr,
|
||||
TL_Frm_PutFormToSeeAllFaversSharers (TL_Frm_ALL_FAV_COMM,
|
||||
"PubCod=%ld",Com->PubCod,
|
||||
HowManyUsrs);
|
||||
HTM_DIV_End ();
|
||||
|
|
|
@ -0,0 +1,264 @@
|
|||
// swad_timeline_form.c: social timeline forms
|
||||
|
||||
/*
|
||||
SWAD (Shared Workspace At a Distance),
|
||||
is a web platform developed at the University of Granada (Spain),
|
||||
and used to support university teaching.
|
||||
|
||||
This file is part of SWAD core.
|
||||
Copyright (C) 1999-2021 Antonio Cañas Vargas
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General 3 License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*****************************************************************************/
|
||||
/*********************************** Headers *********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define _GNU_SOURCE // For asprintf
|
||||
#include <stdio.h> // For asprintf
|
||||
|
||||
#include "swad_action.h"
|
||||
#include "swad_global.h"
|
||||
#include "swad_timeline.h"
|
||||
#include "swad_timeline_form.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************* Private constants and types ***********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define TL_Frm_ICON_ELLIPSIS "ellipsis-h.svg"
|
||||
|
||||
const Act_Action_t TL_Frm_ActionGbl[TL_Frm_NUM_ACTIONS] =
|
||||
{
|
||||
[TL_Frm_RECEIVE_POST] = ActRcvTL_PstGbl,
|
||||
[TL_Frm_RECEIVE_COMM] = ActRcvTL_ComGbl,
|
||||
[TL_Frm_REQ_REM_NOTE] = ActReqRemTL_PubGbl,
|
||||
[TL_Frm_REQ_REM_COMM] = ActReqRemTL_ComGbl,
|
||||
[TL_Frm_SHA_NOTE ] = ActShaTL_NotGbl,
|
||||
[TL_Frm_UNS_NOTE ] = ActUnsTL_NotGbl,
|
||||
[TL_Frm_FAV_NOTE ] = ActFavTL_NotGbl,
|
||||
[TL_Frm_FAV_COMM ] = ActFavTL_ComGbl,
|
||||
[TL_Frm_UNF_NOTE ] = ActUnfTL_NotGbl,
|
||||
[TL_Frm_UNF_COMM ] = ActUnfTL_ComGbl,
|
||||
[TL_Frm_ALL_SHA_NOTE] = ActAllShaTL_NotGbl,
|
||||
[TL_Frm_ALL_FAV_NOTE] = ActAllFavTL_NotGbl,
|
||||
[TL_Frm_ALL_FAV_COMM] = ActAllFavTL_ComGbl,
|
||||
[TL_Frm_SHO_HID_COMM] = ActShoHidTL_ComGbl,
|
||||
};
|
||||
const Act_Action_t TL_Frm_ActionUsr[TL_Frm_NUM_ACTIONS] =
|
||||
{
|
||||
[TL_Frm_RECEIVE_POST] = ActRcvTL_PstUsr,
|
||||
[TL_Frm_RECEIVE_COMM] = ActRcvTL_ComUsr,
|
||||
[TL_Frm_REQ_REM_NOTE] = ActReqRemTL_PubUsr,
|
||||
[TL_Frm_REQ_REM_COMM] = ActReqRemTL_ComUsr,
|
||||
[TL_Frm_SHA_NOTE ] = ActShaTL_NotUsr,
|
||||
[TL_Frm_UNS_NOTE ] = ActUnsTL_NotUsr,
|
||||
[TL_Frm_FAV_NOTE ] = ActFavTL_NotUsr,
|
||||
[TL_Frm_FAV_COMM ] = ActFavTL_ComUsr,
|
||||
[TL_Frm_UNF_NOTE ] = ActUnfTL_NotUsr,
|
||||
[TL_Frm_UNF_COMM ] = ActUnfTL_ComUsr,
|
||||
[TL_Frm_ALL_SHA_NOTE] = ActAllShaTL_NotUsr,
|
||||
[TL_Frm_ALL_FAV_NOTE] = ActAllFavTL_NotUsr,
|
||||
[TL_Frm_ALL_FAV_COMM] = ActAllFavTL_ComUsr,
|
||||
[TL_Frm_SHO_HID_COMM] = ActShoHidTL_ComUsr,
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
/************** External global variables from others modules ****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
extern struct Globals Gbl;
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************* Private global variables **************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Private prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************** Start a form in global or user timeline *******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void TL_Frm_FormStart (const struct TL_Timeline *Timeline,TL_Frm_Action_t Action)
|
||||
{
|
||||
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
|
||||
{
|
||||
/***** Start form in user timeline *****/
|
||||
Frm_StartFormAnchor (TL_Frm_ActionUsr[Action],"timeline");
|
||||
Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EnUsrCod);
|
||||
}
|
||||
else
|
||||
{
|
||||
/***** Start form in global timeline *****/
|
||||
Frm_StartForm (TL_Frm_ActionGbl[Action]);
|
||||
Usr_PutHiddenParamWho (Timeline->Who);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************* Form to show all favers/sharers ***********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void TL_Frm_PutFormToSeeAllFaversSharers (TL_Frm_Action_t Action,
|
||||
const char *ParamFormat,long ParamCod,
|
||||
TL_Usr_HowManyUsrs_t HowManyUsrs)
|
||||
{
|
||||
extern const char *Txt_View_all_USERS;
|
||||
|
||||
switch (HowManyUsrs)
|
||||
{
|
||||
case TL_Usr_SHOW_FEW_USRS:
|
||||
/***** Form and icon to mark note as favourite *****/
|
||||
TL_Frm_FormFavSha (Action,ParamFormat,ParamCod,
|
||||
TL_Frm_ICON_ELLIPSIS,Txt_View_all_USERS);
|
||||
break;
|
||||
case TL_Usr_SHOW_ALL_USRS:
|
||||
Ico_PutIconOff (TL_Frm_ICON_ELLIPSIS,Txt_View_all_USERS);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******* Form to fav/unfav or share/unshare in global or user timeline *******/
|
||||
/*****************************************************************************/
|
||||
|
||||
void TL_Frm_FormFavSha (TL_Frm_Action_t Action,
|
||||
const char *ParamFormat,long ParamCod,
|
||||
const char *Icon,const char *Title)
|
||||
{
|
||||
char *OnSubmit;
|
||||
char ParamStr[7 + Cns_MAX_DECIMAL_DIGITS_LONG + 1];
|
||||
|
||||
/***** Create parameter string *****/
|
||||
sprintf (ParamStr,ParamFormat,ParamCod);
|
||||
|
||||
/*
|
||||
+---------------------------------------------------------------------------+
|
||||
| div which content will be updated (parent of parent of form) |
|
||||
| +---------------------+ +-------+ +-------------------------------------+ |
|
||||
| | div (parent of form)| | div | | div for users | |
|
||||
| | +-----------------+ | | for | | +------+ +------+ +------+ +------+ | |
|
||||
| | | this form | | | num. | | | | | | | | | form | | |
|
||||
| | | +-------------+ | | | of | | | user | | user | | user | | to | | |
|
||||
| | | | fav icon | | | | users | | | 1 | | 2 | | 3 | | show | | |
|
||||
| | | +-------------+ | | | | | | | | | | | | all | | |
|
||||
| | +-----------------+ | | | | +------+ +------+ +------+ +------+ | |
|
||||
| +---------------------+ +-------+ +-------------------------------------+ |
|
||||
+---------------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/***** Form and icon to mark note as favourite *****/
|
||||
/* Form with icon */
|
||||
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
|
||||
{
|
||||
if (asprintf (&OnSubmit,"updateDivFaversSharers(this,"
|
||||
"'act=%ld&ses=%s&%s&OtherUsrCod=%s');"
|
||||
" return false;", // return false is necessary to not submit form
|
||||
Act_GetActCod (TL_Frm_ActionUsr[Action]),
|
||||
Gbl.Session.Id,
|
||||
ParamStr,
|
||||
Gbl.Usrs.Other.UsrDat.EnUsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
Frm_StartFormUniqueAnchorOnSubmit (ActUnk,"timeline",OnSubmit);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (asprintf (&OnSubmit,"updateDivFaversSharers(this,"
|
||||
"'act=%ld&ses=%s&%s');"
|
||||
" return false;", // return false is necessary to not submit form
|
||||
Act_GetActCod (TL_Frm_ActionGbl[Action]),
|
||||
Gbl.Session.Id,
|
||||
ParamStr) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
Frm_StartFormUniqueAnchorOnSubmit (ActUnk,NULL,OnSubmit);
|
||||
}
|
||||
Ico_PutIconLink (Icon,Title);
|
||||
Frm_EndForm ();
|
||||
|
||||
/* Free allocated memory */
|
||||
free (OnSubmit);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********** Form to show hidden coments in global or user timeline ***********/
|
||||
/*****************************************************************************/
|
||||
|
||||
void TL_Frm_FormToShowHiddenComments (long NotCod,
|
||||
char IdComments[Frm_MAX_BYTES_ID + 1],
|
||||
unsigned NumInitialComments)
|
||||
{
|
||||
extern const char *The_ClassFormLinkInBox[The_NUM_THEMES];
|
||||
extern const char *Txt_See_the_previous_X_COMMENTS;
|
||||
char *OnSubmit;
|
||||
|
||||
HTM_DIV_Begin ("id=\"exp_%s\" class=\"TL_EXPAND_COM TL_RIGHT_WIDTH\"",
|
||||
IdComments);
|
||||
|
||||
/***** Form and icon-text to show hidden comments *****/
|
||||
/* Begin form */
|
||||
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
|
||||
{
|
||||
if (asprintf (&OnSubmit,"toggleComments('%s');"
|
||||
"updateDivHiddenComments(this,"
|
||||
"'act=%ld&ses=%s&NotCod=%ld&IdComments=%s&NumHidCom=%u&OtherUsrCod=%s');"
|
||||
" return false;", // return false is necessary to not submit form
|
||||
IdComments,
|
||||
Act_GetActCod (TL_Frm_ActionUsr[TL_Frm_SHO_HID_COMM]),
|
||||
Gbl.Session.Id,
|
||||
NotCod,
|
||||
IdComments,
|
||||
NumInitialComments,
|
||||
Gbl.Usrs.Other.UsrDat.EnUsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
Frm_StartFormUniqueAnchorOnSubmit (ActUnk,"timeline",OnSubmit);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (asprintf (&OnSubmit,"toggleComments('%s');"
|
||||
"updateDivHiddenComments(this,"
|
||||
"'act=%ld&ses=%s&NotCod=%ld&IdComments=%s&NumHidCom=%u');"
|
||||
" return false;", // return false is necessary to not submit form
|
||||
IdComments,
|
||||
Act_GetActCod (TL_Frm_ActionGbl[TL_Frm_SHO_HID_COMM]),
|
||||
Gbl.Session.Id,
|
||||
NotCod,
|
||||
IdComments,
|
||||
NumInitialComments) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
Frm_StartFormUniqueAnchorOnSubmit (ActUnk,NULL,OnSubmit);
|
||||
}
|
||||
|
||||
/* Put icon and text with link to show the first hidden comments */
|
||||
HTM_BUTTON_SUBMIT_Begin (NULL,The_ClassFormLinkInBox[Gbl.Prefs.Theme],NULL);
|
||||
Ico_PutIconTextLink ("angle-up.svg",
|
||||
Str_BuildStringLong (Txt_See_the_previous_X_COMMENTS,
|
||||
(long) NumInitialComments));
|
||||
Str_FreeString ();
|
||||
HTM_BUTTON_End ();
|
||||
|
||||
/* End form */
|
||||
Frm_EndForm ();
|
||||
|
||||
/* Free allocated memory */
|
||||
free (OnSubmit);
|
||||
|
||||
HTM_DIV_End ();
|
||||
}
|
|
@ -0,0 +1,80 @@
|
|||
// swad_timeline_form.h: social timeline forms
|
||||
|
||||
#ifndef _SWAD_TL_FRM
|
||||
#define _SWAD_TL_FRM
|
||||
/*
|
||||
SWAD (Shared Workspace At a Distance in Spanish),
|
||||
is a web platform developed at the University of Granada (Spain),
|
||||
and used to support university teaching.
|
||||
|
||||
This file is part of SWAD core.
|
||||
Copyright (C) 1999-2021 Antonio Cañas Vargas
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/*****************************************************************************/
|
||||
/********************************** Headers **********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
// #include "swad_form.h"
|
||||
// #include "swad_media.h"
|
||||
// #include "swad_notification.h"
|
||||
// #include "swad_user.h"
|
||||
// #include "swad_timeline_user.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************** Public types *******************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define TL_Frm_NUM_ACTIONS 14
|
||||
typedef enum
|
||||
{
|
||||
TL_Frm_RECEIVE_POST, // Receive post
|
||||
TL_Frm_RECEIVE_COMM, // Receive comment
|
||||
TL_Frm_REQ_REM_NOTE, // Request removal note
|
||||
TL_Frm_REQ_REM_COMM, // Request removal comment
|
||||
TL_Frm_SHA_NOTE, // Share a note
|
||||
TL_Frm_UNS_NOTE, // Unshare a note
|
||||
TL_Frm_FAV_NOTE, // Favourite a note
|
||||
TL_Frm_FAV_COMM, // Favourite a comment
|
||||
TL_Frm_UNF_NOTE, // Unfavourite a note
|
||||
TL_Frm_UNF_COMM, // Unfavourite a comment
|
||||
TL_Frm_ALL_SHA_NOTE, // Show all sharers of note
|
||||
TL_Frm_ALL_FAV_NOTE, // Show all favouriters of note
|
||||
TL_Frm_ALL_FAV_COMM, // Show all favouriters of comment
|
||||
TL_Frm_SHO_HID_COMM, // Show / hide comments
|
||||
} TL_Frm_Action_t;
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void TL_Frm_FormStart (const struct TL_Timeline *Timeline,TL_Frm_Action_t Action);
|
||||
|
||||
void TL_Frm_PutFormToSeeAllFaversSharers (TL_Frm_Action_t Action,
|
||||
const char *ParamFormat,long ParamCod,
|
||||
TL_Usr_HowManyUsrs_t HowManyUsrs);
|
||||
void TL_Frm_FormFavSha (TL_Frm_Action_t Action,
|
||||
const char *ParamFormat,long ParamCod,
|
||||
const char *Icon,const char *Title);
|
||||
|
||||
void TL_Frm_FormToShowHiddenComments (long NotCod,
|
||||
char IdComments[Frm_MAX_BYTES_ID + 1],
|
||||
unsigned NumInitialComments);
|
||||
|
||||
#endif
|
|
@ -42,6 +42,7 @@
|
|||
#include "swad_profile.h"
|
||||
#include "swad_timeline.h"
|
||||
#include "swad_timeline_favourite.h"
|
||||
#include "swad_timeline_form.h"
|
||||
#include "swad_timeline_publication.h"
|
||||
#include "swad_timeline_share.h"
|
||||
|
||||
|
@ -942,7 +943,7 @@ static void TL_Not_PutFormToRemoveNote (const struct TL_Timeline *Timeline,
|
|||
extern const char *Txt_Remove;
|
||||
|
||||
/***** Form to remove publication *****/
|
||||
TL_FormStart (Timeline,TL_REQ_REM_NOTE);
|
||||
TL_Frm_FormStart (Timeline,TL_Frm_REQ_REM_NOTE);
|
||||
TL_Not_PutHiddenParamNotCod (NotCod);
|
||||
Ico_PutIconLink ("trash.svg",Txt_Remove);
|
||||
Frm_EndForm ();
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#include "swad_message.h"
|
||||
#include "swad_profile.h"
|
||||
#include "swad_timeline.h"
|
||||
#include "swad_timeline_form.h"
|
||||
#include "swad_timeline_note.h"
|
||||
#include "swad_timeline_post.h"
|
||||
#include "swad_timeline_publication.h"
|
||||
|
@ -149,7 +150,7 @@ void TL_Pst_PutFormToWriteNewPost (struct TL_Timeline *Timeline)
|
|||
|
||||
/* Form to write the post */
|
||||
HTM_DIV_Begin ("class=\"TL_FORM_NEW_PST TL_RIGHT_WIDTH\"");
|
||||
TL_FormStart (Timeline,TL_RECEIVE_POST);
|
||||
TL_Frm_FormStart (Timeline,TL_Frm_RECEIVE_POST);
|
||||
TL_Pst_PutTextarea (Txt_New_TIMELINE_post,"TL_PST_TEXTAREA TL_RIGHT_WIDTH");
|
||||
Frm_EndForm ();
|
||||
HTM_DIV_End ();
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "swad_database.h"
|
||||
#include "swad_global.h"
|
||||
#include "swad_timeline.h"
|
||||
#include "swad_timeline_form.h"
|
||||
#include "swad_timeline_notification.h"
|
||||
#include "swad_timeline_publication.h"
|
||||
#include "swad_timeline_share.h"
|
||||
|
@ -101,8 +102,7 @@ static void TL_Sha_PutFormToShaNote (long ParamCod)
|
|||
extern const char *Txt_Share;
|
||||
|
||||
/***** Form and icon to mark note as favourite *****/
|
||||
TL_Usr_FormFavSha (ActShaTL_NotGbl,
|
||||
ActShaTL_NotUsr,
|
||||
TL_Frm_FormFavSha (TL_Frm_SHA_NOTE,
|
||||
"NotCod=%ld",ParamCod,
|
||||
TL_Sha_ICON_SHARE,Txt_Share);
|
||||
}
|
||||
|
@ -112,8 +112,7 @@ static void TL_Sha_PutFormToUnsNote (long ParamCod)
|
|||
extern const char *Txt_TIMELINE_NOTE_Shared;
|
||||
|
||||
/***** Form and icon to mark note as favourite *****/
|
||||
TL_Usr_FormFavSha (ActUnsTL_NotGbl,
|
||||
ActUnsTL_NotUsr,
|
||||
TL_Frm_FormFavSha (TL_Frm_UNS_NOTE,
|
||||
"NotCod=%ld",ParamCod,
|
||||
TL_Sha_ICON_SHARED,Txt_TIMELINE_NOTE_Shared);
|
||||
}
|
||||
|
@ -349,7 +348,7 @@ static void TL_Sha_ShowUsrsWhoHaveSharedNote (const struct TL_Not_Note *Not,
|
|||
Not->UsrCod,
|
||||
(unsigned) TL_Pub_SHARED_NOTE,
|
||||
HowManyUsrs == TL_Usr_SHOW_FEW_USRS ? TL_Usr_DEF_USRS_SHOWN :
|
||||
TL_Usr_MAX_USRS_SHOWN);
|
||||
TL_Usr_MAX_USRS_SHOWN);
|
||||
else
|
||||
NumFirstUsrs = 0;
|
||||
|
||||
|
@ -364,8 +363,7 @@ static void TL_Sha_ShowUsrsWhoHaveSharedNote (const struct TL_Not_Note *Not,
|
|||
TL_Usr_ShowSharersOrFavers (&mysql_res,Not->NumShared,NumFirstUsrs);
|
||||
if (NumFirstUsrs < Not->NumShared)
|
||||
/* Clickable ellipsis to show all users */
|
||||
TL_Usr_PutFormToSeeAllFaversSharers (ActAllShaTL_NotGbl,
|
||||
ActAllShaTL_NotUsr,
|
||||
TL_Frm_PutFormToSeeAllFaversSharers (TL_Frm_ALL_SHA_NOTE,
|
||||
"NotCod=%ld",Not->NotCod,
|
||||
HowManyUsrs);
|
||||
HTM_DIV_End ();
|
||||
|
|
|
@ -224,91 +224,3 @@ void TL_Usr_ShowSharersOrFavers (MYSQL_RES **mysql_res,
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************* Form to show all favers/sharers ***********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void TL_Usr_PutFormToSeeAllFaversSharers (Act_Action_t ActionGbl,
|
||||
Act_Action_t ActionUsr,
|
||||
const char *ParamFormat,long ParamCod,
|
||||
TL_Usr_HowManyUsrs_t HowManyUsrs)
|
||||
{
|
||||
extern const char *Txt_View_all_USERS;
|
||||
|
||||
switch (HowManyUsrs)
|
||||
{
|
||||
case TL_Usr_SHOW_FEW_USRS:
|
||||
/***** Form and icon to mark note as favourite *****/
|
||||
TL_Usr_FormFavSha (ActionGbl,
|
||||
ActionUsr,
|
||||
ParamFormat,ParamCod,
|
||||
TL_Usr_ICON_ELLIPSIS,Txt_View_all_USERS);
|
||||
break;
|
||||
case TL_Usr_SHOW_ALL_USRS:
|
||||
Ico_PutIconOff (TL_Usr_ICON_ELLIPSIS,Txt_View_all_USERS);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******* Form to fav/unfav or share/unshare in global or user timeline *******/
|
||||
/*****************************************************************************/
|
||||
|
||||
void TL_Usr_FormFavSha (Act_Action_t ActionGbl,
|
||||
Act_Action_t ActionUsr,
|
||||
const char *ParamFormat,long ParamCod,
|
||||
const char *Icon,const char *Title)
|
||||
{
|
||||
char *OnSubmit;
|
||||
char ParamStr[7 + Cns_MAX_DECIMAL_DIGITS_LONG + 1];
|
||||
|
||||
/***** Create parameter string *****/
|
||||
sprintf (ParamStr,ParamFormat,ParamCod);
|
||||
|
||||
/*
|
||||
+---------------------------------------------------------------------------+
|
||||
| div which content will be updated (parent of parent of form) |
|
||||
| +---------------------+ +-------+ +-------------------------------------+ |
|
||||
| | div (parent of form)| | div | | div for users | |
|
||||
| | +-----------------+ | | for | | +------+ +------+ +------+ +------+ | |
|
||||
| | | this form | | | num. | | | | | | | | | form | | |
|
||||
| | | +-------------+ | | | of | | | user | | user | | user | | to | | |
|
||||
| | | | fav icon | | | | users | | | 1 | | 2 | | 3 | | show | | |
|
||||
| | | +-------------+ | | | | | | | | | | | | all | | |
|
||||
| | +-----------------+ | | | | +------+ +------+ +------+ +------+ | |
|
||||
| +---------------------+ +-------+ +-------------------------------------+ |
|
||||
+---------------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/***** Form and icon to mark note as favourite *****/
|
||||
/* Form with icon */
|
||||
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
|
||||
{
|
||||
if (asprintf (&OnSubmit,"updateDivFaversSharers(this,"
|
||||
"'act=%ld&ses=%s&%s&OtherUsrCod=%s');"
|
||||
" return false;", // return false is necessary to not submit form
|
||||
Act_GetActCod (ActionUsr),
|
||||
Gbl.Session.Id,
|
||||
ParamStr,
|
||||
Gbl.Usrs.Other.UsrDat.EnUsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
Frm_StartFormUniqueAnchorOnSubmit (ActUnk,"timeline",OnSubmit);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (asprintf (&OnSubmit,"updateDivFaversSharers(this,"
|
||||
"'act=%ld&ses=%s&%s');"
|
||||
" return false;", // return false is necessary to not submit form
|
||||
Act_GetActCod (ActionGbl),
|
||||
Gbl.Session.Id,
|
||||
ParamStr) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
Frm_StartFormUniqueAnchorOnSubmit (ActUnk,NULL,OnSubmit);
|
||||
}
|
||||
Ico_PutIconLink (Icon,Title);
|
||||
Frm_EndForm ();
|
||||
|
||||
/* Free allocated memory */
|
||||
free (OnSubmit);
|
||||
}
|
||||
|
|
|
@ -36,8 +36,6 @@
|
|||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define TL_Usr_ICON_ELLIPSIS "ellipsis-h.svg"
|
||||
|
||||
#define TL_Usr_DEF_USRS_SHOWN 5 // Default maximum number of users shown who have share/fav a note
|
||||
#define TL_Usr_MAX_USRS_SHOWN 1000 // Top maximum number of users shown who have share/fav a note
|
||||
|
||||
|
@ -66,13 +64,5 @@ void TL_Usr_RemoveUsrContent (long UsrCod);
|
|||
void TL_Usr_ShowNumSharersOrFavers (unsigned NumUsrs);
|
||||
void TL_Usr_ShowSharersOrFavers (MYSQL_RES **mysql_res,
|
||||
unsigned NumUsrs,unsigned NumFirstUsrs);
|
||||
void TL_Usr_PutFormToSeeAllFaversSharers (Act_Action_t ActionGbl,
|
||||
Act_Action_t ActionUsr,
|
||||
const char *ParamFormat,long ParamCod,
|
||||
TL_Usr_HowManyUsrs_t HowManyUsrs);
|
||||
void TL_Usr_FormFavSha (Act_Action_t ActionGbl,
|
||||
Act_Action_t ActionUsr,
|
||||
const char *ParamFormat,long ParamCod,
|
||||
const char *Icon,const char *Title);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue