2018-04-02 08:29:19 +02:00
< ? php
/**
* This file is part of Zwii .
*
* For full copyright and license information , please see the LICENSE
* file that was distributed with this source code .
*
* @ author Rémi Jean < remi . jean @ outlook . com >
* @ copyright Copyright ( C ) 2008 - 2018 , Rémi Jean
* @ license GNU General Public License , version 3
2020-09-01 20:48:40 +02:00
* @ link http :// zwiicms . fr /
2018-04-02 08:29:19 +02:00
*/
class blog extends common {
public static $actions = [
'add' => self :: GROUP_MODERATOR ,
'comment' => self :: GROUP_MODERATOR ,
'commentDelete' => self :: GROUP_MODERATOR ,
'config' => self :: GROUP_MODERATOR ,
'delete' => self :: GROUP_MODERATOR ,
'edit' => self :: GROUP_MODERATOR ,
2020-11-15 18:39:03 +01:00
'index' => self :: GROUP_VISITOR ,
'rss' => self :: GROUP_VISITOR
2018-04-02 08:29:19 +02:00
];
public static $articles = [];
public static $comments = [];
public static $pages ;
public static $states = [
false => 'Brouillon' ,
true => 'Publié'
];
2020-04-23 19:55:47 +02:00
public static $pictureSizes = [
'20' => 'Très petite' ,
'30' => 'Petite' ,
'40' => 'Grande' ,
'50' => 'Très Grande' ,
'100' => 'Pleine largeur' ,
];
public static $picturePositions = [
2020-06-03 09:07:00 +02:00
'left' => 'À gauche' ,
2020-04-23 19:55:47 +02:00
'right' => 'À droite ' ,
];
2018-04-02 08:29:19 +02:00
public static $users = [];
2020-12-27 10:56:23 +01:00
const BLOG_VERSION = '2.12' ;
2020-11-15 18:39:03 +01:00
/**
* Flux RSS
*/
public function rss () {
2020-11-16 14:33:59 +01:00
// Inclure les classes
include_once 'module/news/vendor/FeedWriter/Item.php' ;
include_once 'module/news/vendor/FeedWriter/Feed.php' ;
include_once 'module/news/vendor/FeedWriter/RSS2.php' ;
include_once 'module/news/vendor/FeedWriter/InvalidOperationException.php' ;
date_default_timezone_set ( 'UTC' );
$feeds = new \FeedWriter\RSS2 ();
2020-11-15 18:39:03 +01:00
// En-tête
2020-11-17 08:52:32 +01:00
$feeds -> setTitle ( $this -> getData ([ 'page' , $this -> getUrl ( 0 ), 'posts' , 'title' ]));
2020-11-16 14:33:59 +01:00
$feeds -> setLink ( helper :: baseUrl () . $this -> getUrl ( 0 ));
2020-11-17 09:47:45 +01:00
$feeds -> setDescription ( html_entity_decode ( strip_tags ( $this -> getData ([ 'page' , $this -> getUrl ( 0 ), 'metaDescription' ]))));
2020-11-16 14:33:59 +01:00
$feeds -> setChannelElement ( 'language' , 'fr-FR' );
$feeds -> setDate ( time ());
$feeds -> addGenerator ();
// Corps des articles
2020-11-17 09:47:45 +01:00
$articleIdsPublishedOns = helper :: arrayCollumn ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' ]), 'publishedOn' , 'SORT_DESC' );
$articleIdsStates = helper :: arrayCollumn ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' ]), 'state' , 'SORT_DESC' );
2020-11-15 18:39:03 +01:00
foreach ( $articleIdsPublishedOns as $articleId => $articlePublishedOn ) {
if ( $articlePublishedOn <= time () AND $articleIdsStates [ $articleId ]) {
2020-11-17 09:47:45 +01:00
// Miniature
$parts = explode ( '/' , $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleId , 'picture' ]));
$thumb = str_replace ( $parts [( count ( $parts ) - 1 )], 'mini_' . $parts [( count ( $parts ) - 1 )], $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleId , 'picture' ]));
2020-11-17 09:48:21 +01:00
// Créer les articles du flux
2020-11-16 14:33:59 +01:00
$newsArticle = $feeds -> createNewItem ();
$newsArticle -> addElementArray ([
2020-11-17 08:52:32 +01:00
'title' => strip_tags ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleId , 'title' ]) ),
2020-11-16 14:33:59 +01:00
'link' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/' . $articleId ,
2020-11-17 09:47:45 +01:00
'description' => html_entity_decode ( strip_tags ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleId , 'content' ]))),
'addEnclosure' => helper :: baseUrl () . self :: FILE_DIR . $thumb
2020-11-16 14:33:59 +01:00
]);
$feeds -> addItem ( $newsArticle );
2020-11-15 18:39:03 +01:00
}
}
2020-11-16 14:33:59 +01:00
2020-11-15 18:39:03 +01:00
// Valeurs en sortie
$this -> addOutput ([
'display' => self :: DISPLAY_RSS ,
2020-11-16 14:33:59 +01:00
'content' => $feeds -> generateFeed (),
2020-11-15 18:39:03 +01:00
'view' => 'rss'
]);
}
2019-02-14 15:17:03 +01:00
2018-04-02 08:29:19 +02:00
/**
* Édition
*/
public function add () {
// Soumission du formulaire
if ( $this -> isPost ()) {
// Incrémente l'id de l'article
$articleId = helper :: increment ( $this -> getInput ( 'blogAddTitle' , helper :: FILTER_ID ), $this -> getData ([ 'page' ]));
$articleId = helper :: increment ( $articleId , ( array ) $this -> getData ([ 'module' , $this -> getUrl ( 0 )]));
$articleId = helper :: increment ( $articleId , array_keys ( self :: $actions ));
// Crée l'article
2020-11-17 08:52:32 +01:00
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleId , [
2018-04-02 08:29:19 +02:00
'closeComment' => $this -> getInput ( 'blogAddCloseComment' , helper :: FILTER_BOOLEAN ),
2020-06-10 16:32:33 +02:00
'mailNotification' => $this -> getInput ( 'blogAddMailNotification' , helper :: FILTER_BOOLEAN ),
'groupNotification' => $this -> getInput ( 'blogAddGroupNotification' , helper :: FILTER_INT ),
2018-04-02 08:29:19 +02:00
'comment' => [],
'content' => $this -> getInput ( 'blogAddContent' , null ),
'picture' => $this -> getInput ( 'blogAddPicture' , helper :: FILTER_STRING_SHORT , true ),
2020-06-03 09:07:00 +02:00
'hidePicture' => $this -> getInput ( 'blogAddHidePicture' , helper :: FILTER_BOOLEAN ),
2020-06-10 16:32:33 +02:00
'pictureSize' => $this -> getInput ( 'blogAddPictureSize' , helper :: FILTER_STRING_SHORT ),
2020-06-10 16:38:53 +02:00
'picturePosition' => $this -> getInput ( 'blogAddPicturePosition' , helper :: FILTER_STRING_SHORT ),
2018-04-02 08:29:19 +02:00
'publishedOn' => $this -> getInput ( 'blogAddPublishedOn' , helper :: FILTER_DATETIME , true ),
'state' => $this -> getInput ( 'blogAddState' , helper :: FILTER_BOOLEAN ),
'title' => $this -> getInput ( 'blogAddTitle' , helper :: FILTER_STRING_SHORT , true ),
'userId' => $this -> getInput ( 'blogAddUserId' , helper :: FILTER_ID , true )
]]);
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
'notification' => 'Nouvel article créé' ,
'state' => true
]);
}
// Liste des utilisateurs
self :: $users = helper :: arrayCollumn ( $this -> getData ([ 'user' ]), 'firstname' );
ksort ( self :: $users );
foreach ( self :: $users as $userId => & $userFirstname ) {
$userFirstname = $userFirstname . ' ' . $this -> getData ([ 'user' , $userId , 'lastname' ]);
}
unset ( $userFirstname );
// Valeurs en sortie
$this -> addOutput ([
'title' => 'Nouvel article' ,
'vendor' => [
'flatpickr' ,
'tinymce'
],
'view' => 'add'
]);
}
/**
* Liste des commentaires
*/
public function comment () {
// Liste les commentaires
$comments = [];
2020-12-18 15:05:36 +01:00
foreach (( array ) $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' ]) as $articleId => $article ) {
2018-04-02 08:29:19 +02:00
foreach ( $article [ 'comment' ] as & $comment ) {
$comment [ 'articleId' ] = $articleId ;
}
$comments += $article [ 'comment' ];
}
// Ids des commentaires par ordre de création
$commentIds = array_keys ( helper :: arrayCollumn ( $comments , 'createdOn' , 'SORT_DESC' ));
// Pagination
2018-12-09 00:52:05 +01:00
$pagination = helper :: pagination ( $commentIds , $this -> getUrl (), $this -> getData ([ 'config' , 'itemsperPage' ]));
2018-04-02 08:29:19 +02:00
// Liste des pages
self :: $pages = $pagination [ 'pages' ];
// Commentaires en fonction de la pagination
for ( $i = $pagination [ 'first' ]; $i < $pagination [ 'last' ]; $i ++ ) {
// Met en forme le tableau
$comment = $comments [ $commentIds [ $i ]];
2020-06-03 09:07:00 +02:00
self :: $comments [] = [
2020-11-01 13:38:25 +01:00
mb_detect_encoding ( strftime ( '%d %B %Y - %H:%M' , $comment [ 'createdOn' ]), 'UTF-8' , true )
? strftime ( '%d %B %Y - %H:%M' , $comment [ 'createdOn' ])
: utf8_encode ( strftime ( '%d %B %Y - %H:%M' , $comment [ 'createdOn' ])),
2018-04-02 08:29:19 +02:00
$comment [ 'content' ],
$comment [ 'userId' ] ? $this -> getData ([ 'user' , $comment [ 'userId' ], 'firstname' ]) . ' ' . $this -> getData ([ 'user' , $comment [ 'userId' ], 'lastname' ]) : $comment [ 'author' ],
template :: button ( 'blogCommentDelete' . $commentIds [ $i ], [
'class' => 'blogCommentDelete buttonRed' ,
2019-01-16 19:25:09 +01:00
'href' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/comment-delete/' . $comment [ 'articleId' ] . '/' . $commentIds [ $i ] . '/' . $_SESSION [ 'csrf' ] ,
2018-04-02 08:29:19 +02:00
'value' => template :: ico ( 'cancel' )
])
];
}
// Valeurs en sortie
$this -> addOutput ([
'title' => 'Gestion des commentaires' ,
'view' => 'comment'
]);
}
/**
* Suppression de commentaire
*/
public function commentDelete () {
// Le commentaire n'existe pas
2020-11-17 08:52:32 +01:00
if ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' , $this -> getUrl ( 3 )]) === null ) {
2018-04-02 08:29:19 +02:00
// Valeurs en sortie
$this -> addOutput ([
'access' => false
]);
}
2019-01-16 19:25:09 +01:00
// Jeton incorrect
elseif ( $this -> getUrl ( 4 ) !== $_SESSION [ 'csrf' ]) {
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
'notification' => 'Action non autorisée'
]);
2020-06-03 09:07:00 +02:00
}
2018-04-02 08:29:19 +02:00
// Suppression
else {
2020-11-17 08:52:32 +01:00
$this -> deleteData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' , $this -> getUrl ( 3 )]);
2018-04-02 08:29:19 +02:00
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/comment' ,
'notification' => 'Commentaire supprimé' ,
'state' => true
]);
}
}
/**
* Configuration
*/
public function config () {
2020-11-16 18:39:32 +01:00
// Soumission du formulaire
if ( $this -> isPost ()) {
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'config' ,[
'feeds' => $this -> getInput ( 'blogConfigShowFeeds' , helper :: FILTER_BOOLEAN ),
'feedsLabel' => $this -> getInput ( 'blogConfigFeedslabel' , helper :: FILTER_STRING_SHORT )
]]);
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
'notification' => 'Modifications enregistrées' ,
'state' => true
]);
} else {
// Ids des articles par ordre de publication
2020-11-17 08:52:32 +01:00
$articleIds = array_keys ( helper :: arrayCollumn ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' ]), 'publishedOn' , 'SORT_DESC' ));
2020-11-16 18:39:32 +01:00
// Supprimer le bloc config
// Pagination
$pagination = helper :: pagination ( $articleIds , $this -> getUrl (), $this -> getData ([ 'config' , 'itemsperPage' ]));
// Liste des pages
self :: $pages = $pagination [ 'pages' ];
// Articles en fonction de la pagination
for ( $i = $pagination [ 'first' ]; $i < $pagination [ 'last' ]; $i ++ ) {
// Met en forme le tableau
2020-11-17 08:52:32 +01:00
$date = mb_detect_encoding ( strftime ( '%d %B %Y' , $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'publishedOn' ])), 'UTF-8' , true )
? strftime ( '%d %B %Y' , $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'publishedOn' ]))
: utf8_encode ( strftime ( '%d %B %Y' , $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'publishedOn' ])));
$heure = mb_detect_encoding ( strftime ( '%H:%M' , $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'publishedOn' ])), 'UTF-8' , true )
? strftime ( '%H:%M' , $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'publishedOn' ]))
: utf8_encode ( strftime ( '%H:%M' , $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'publishedOn' ])));
2020-11-16 18:39:32 +01:00
self :: $articles [] = [
2020-11-17 08:52:32 +01:00
$this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'title' ]),
2020-11-16 18:39:32 +01:00
$date . ' à ' . $heure ,
2020-11-17 08:52:32 +01:00
self :: $states [ $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'state' ])],
2020-11-16 18:39:32 +01:00
template :: button ( 'blogConfigEdit' . $articleIds [ $i ], [
'href' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/edit/' . $articleIds [ $i ] . '/' . $_SESSION [ 'csrf' ],
'value' => template :: ico ( 'pencil' )
]),
template :: button ( 'blogConfigDelete' . $articleIds [ $i ], [
'class' => 'blogConfigDelete buttonRed' ,
'href' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/delete/' . $articleIds [ $i ] . '/' . $_SESSION [ 'csrf' ],
'value' => template :: ico ( 'cancel' )
])
];
}
// Valeurs en sortie
$this -> addOutput ([
'title' => 'Configuration du module' ,
'view' => 'config'
]);
2018-04-02 08:29:19 +02:00
}
}
/**
* Suppression
*/
public function delete () {
2020-11-17 08:52:32 +01:00
if ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 )]) === null ) {
2018-04-02 08:29:19 +02:00
// Valeurs en sortie
$this -> addOutput ([
'access' => false
]);
}
2019-01-08 17:55:18 +01:00
// Jeton incorrect
2019-01-16 19:25:09 +01:00
elseif ( $this -> getUrl ( 3 ) !== $_SESSION [ 'csrf' ]) {
2019-01-08 17:55:18 +01:00
// Valeurs en sortie
$this -> addOutput ([
2019-01-16 19:25:09 +01:00
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
'notification' => 'Action non autorisée'
2019-01-08 17:55:18 +01:00
]);
2020-06-03 09:07:00 +02:00
}
2018-04-02 08:29:19 +02:00
// Suppression
else {
2020-11-17 08:52:32 +01:00
$this -> deleteData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 )]);
2018-04-02 08:29:19 +02:00
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
'notification' => 'Article supprimé' ,
'state' => true
]);
}
}
/**
* Édition
*/
public function edit () {
2019-01-16 19:25:09 +01:00
// Jeton incorrect
if ( $this -> getUrl ( 3 ) !== $_SESSION [ 'csrf' ]) {
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
'notification' => 'Action non autorisée'
]);
2020-06-03 09:07:00 +02:00
}
2018-04-02 08:29:19 +02:00
// L'article n'existe pas
2020-11-17 08:52:32 +01:00
if ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 )]) === null ) {
2018-04-02 08:29:19 +02:00
// Valeurs en sortie
$this -> addOutput ([
'access' => false
]);
}
// L'article existe
else {
// Soumission du formulaire
2020-06-03 09:07:00 +02:00
if ( $this -> isPost ()) {
2018-04-02 08:29:19 +02:00
$articleId = $this -> getInput ( 'blogEditTitle' , helper :: FILTER_ID , true );
// Incrémente le nouvel id de l'article
if ( $articleId !== $this -> getUrl ( 2 )) {
$articleId = helper :: increment ( $articleId , $this -> getData ([ 'page' ]));
$articleId = helper :: increment ( $articleId , $this -> getData ([ 'module' , $this -> getUrl ( 0 )]));
$articleId = helper :: increment ( $articleId , array_keys ( self :: $actions ));
}
2020-11-17 08:52:32 +01:00
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleId , [
2018-04-02 08:29:19 +02:00
'closeComment' => $this -> getInput ( 'blogEditCloseComment' ),
2019-05-02 13:21:48 +02:00
'mailNotification' => $this -> getInput ( 'blogEditMailNotification' , helper :: FILTER_BOOLEAN ),
'groupNotification' => $this -> getInput ( 'blogEditGroupNotification' , helper :: FILTER_INT ),
2020-11-17 08:52:32 +01:00
'comment' => $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' ]),
2018-04-02 08:29:19 +02:00
'content' => $this -> getInput ( 'blogEditContent' , null ),
'picture' => $this -> getInput ( 'blogEditPicture' , helper :: FILTER_STRING_SHORT , true ),
2020-04-23 19:55:47 +02:00
'hidePicture' => $this -> getInput ( 'blogEditHidePicture' , helper :: FILTER_BOOLEAN ),
'pictureSize' => $this -> getInput ( 'blogEditPictureSize' , helper :: FILTER_STRING_SHORT ),
'picturePosition' => $this -> getInput ( 'blogEditPicturePosition' , helper :: FILTER_STRING_SHORT ),
2018-04-02 08:29:19 +02:00
'publishedOn' => $this -> getInput ( 'blogEditPublishedOn' , helper :: FILTER_DATETIME , true ),
'state' => $this -> getInput ( 'blogEditState' , helper :: FILTER_BOOLEAN ),
'title' => $this -> getInput ( 'blogEditTitle' , helper :: FILTER_STRING_SHORT , true ),
'userId' => $this -> getInput ( 'blogEditUserId' , helper :: FILTER_ID , true )
]]);
// Supprime l'ancien article
if ( $articleId !== $this -> getUrl ( 2 )) {
2020-11-17 08:52:32 +01:00
$this -> deleteData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 )]);
2018-04-02 08:29:19 +02:00
}
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
'notification' => 'Modifications enregistrées' ,
'state' => true
]);
}
// Liste des utilisateurs
self :: $users = helper :: arrayCollumn ( $this -> getData ([ 'user' ]), 'firstname' );
ksort ( self :: $users );
foreach ( self :: $users as $userId => & $userFirstname ) {
$userFirstname = $userFirstname . ' ' . $this -> getData ([ 'user' , $userId , 'lastname' ]);
}
unset ( $userFirstname );
// Valeurs en sortie
$this -> addOutput ([
2020-11-17 08:52:32 +01:00
'title' => $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'title' ]),
2018-04-02 08:29:19 +02:00
'vendor' => [
'flatpickr' ,
'tinymce'
],
'view' => 'edit'
]);
}
}
/**
* Accueil ( deux affichages en un pour éviter une url à rallonge )
*/
public function index () {
// Affichage d'un article
if (
$this -> getUrl ( 1 )
// Protection pour la pagination, un ID ne peut pas être un entier, une page oui
AND intval ( $this -> getUrl ( 1 )) === 0
) {
// L'article n'existe pas
2020-11-17 08:52:32 +01:00
if ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 )]) === null ) {
2018-04-02 08:29:19 +02:00
// Valeurs en sortie
$this -> addOutput ([
'access' => false
]);
}
// L'article existe
else {
// Soumission du formulaire
if ( $this -> isPost ()) {
2020-08-10 19:07:17 +02:00
// Check la captcha
2018-04-02 08:29:19 +02:00
if (
$this -> getUser ( 'password' ) !== $this -> getInput ( 'ZWII_USER_PASSWORD' )
2020-10-01 15:50:19 +02:00
//AND $this->getInput('blogArticlecaptcha', helper::FILTER_INT) !== $this->getInput('blogArticlecaptchaFirstNumber', helper::FILTER_INT) + $this->getInput('blogArticlecaptchaSecondNumber', helper::FILTER_INT))
2020-10-04 12:16:37 +02:00
AND password_verify ( $this -> getInput ( 'blogArticleCaptcha' , helper :: FILTER_INT ), $this -> getInput ( 'blogArticleCaptchaResult' ) ) === false )
2018-04-02 08:29:19 +02:00
{
2020-10-04 12:16:37 +02:00
self :: $inputNotices [ 'blogArticleCaptcha' ] = 'Incorrect' ;
2018-04-02 08:29:19 +02:00
}
// Crée le commentaire
2020-11-17 08:52:32 +01:00
$commentId = helper :: increment ( uniqid (), $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'comment' ]));
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'comment' , $commentId , [
2018-04-04 21:20:50 +02:00
'author' => $this -> getInput ( 'blogArticleAuthor' , helper :: FILTER_STRING_SHORT , empty ( $this -> getInput ( 'blogArticleUserId' )) ? TRUE : FALSE ),
2018-04-02 08:29:19 +02:00
'content' => $this -> getInput ( 'blogArticleContent' , helper :: FILTER_STRING_SHORT , true ),
'createdOn' => time (),
'userId' => $this -> getInput ( 'blogArticleUserId' ),
]]);
2020-06-03 09:07:00 +02:00
2019-05-02 13:21:48 +02:00
// Envoi d'une notification aux administrateurs
// Init tableau
$to = [];
2020-06-03 09:07:00 +02:00
// Liste des destinataires
2019-05-02 13:21:48 +02:00
foreach ( $this -> getData ([ 'user' ]) as $userId => $user ) {
2020-11-17 08:52:32 +01:00
if ( $user [ 'group' ] >= $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'groupNotification' ]) ) {
2019-05-02 13:21:48 +02:00
$to [] = $user [ 'mail' ];
}
}
2020-06-03 09:07:00 +02:00
// Envoi du mail $sent code d'erreur ou de réussite
2020-11-17 08:52:32 +01:00
if ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'mailNotification' ]) === true ) {
2019-05-02 13:21:48 +02:00
$sent = $this -> sendMail (
$to ,
2021-01-02 17:16:29 +01:00
'Nouveau commentaire déposé' ,
2019-05-02 13:21:48 +02:00
'Bonjour' . ' <strong>' . $user [ 'firstname' ] . ' ' . $user [ 'lastname' ] . '</strong>,<br><br>' .
2021-01-02 17:16:29 +01:00
'L\'article <a href="' . helper :: baseUrl () . $this -> getUrl ( 0 ) . '/ ' . $this -> getUrl ( 1 ) . '">' . $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'title' ]) . '</a> a reçu un nouveau commentaire.<br><br>' ,
2020-02-26 23:45:49 +01:00
''
2019-05-02 13:21:48 +02:00
);
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl () . '#comment' ,
//'notification' => 'Commentaire ajouté',
//'state' => true
2021-01-02 17:16:29 +01:00
'notification' => ( $sent === true ? 'Commentaire ajouté, les administrateurs ont été notifiés.' : 'Commentaire ajouté. <br/>' . $sent ),
2020-06-03 09:07:00 +02:00
'state' => ( $sent === true ? true : null )
2019-05-02 13:21:48 +02:00
]);
} else {
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl () . '#comment' ,
'notification' => 'Commentaire ajouté' ,
2020-06-03 09:07:00 +02:00
'state' => true
2019-05-02 13:21:48 +02:00
]);
}
2020-06-03 09:07:00 +02:00
2018-04-02 08:29:19 +02:00
}
// Ids des commentaires par ordre de publication
2020-11-17 08:52:32 +01:00
$commentIds = array_keys ( helper :: arrayCollumn ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'comment' ]), 'createdOn' , 'SORT_DESC' ));
2018-04-02 08:29:19 +02:00
// Pagination
2018-12-09 00:52:05 +01:00
$pagination = helper :: pagination ( $commentIds , $this -> getUrl (), $this -> getData ([ 'config' , 'itemsperPage' ]), '#comment' );
2018-04-02 08:29:19 +02:00
// Liste des pages
self :: $pages = $pagination [ 'pages' ];
// Commentaires en fonction de la pagination
for ( $i = $pagination [ 'first' ]; $i < $pagination [ 'last' ]; $i ++ ) {
2020-11-17 08:52:32 +01:00
self :: $comments [ $commentIds [ $i ]] = $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'comment' , $commentIds [ $i ]]);
2018-04-02 08:29:19 +02:00
}
// Valeurs en sortie
$this -> addOutput ([
'showBarEditButton' => true ,
2020-11-17 08:52:32 +01:00
'title' => $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'title' ]),
2018-04-02 08:29:19 +02:00
'view' => 'article'
]);
}
}
// Liste des articles
else {
// Ids des articles par ordre de publication
2020-11-17 08:52:32 +01:00
$articleIdsPublishedOns = helper :: arrayCollumn ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' ]), 'publishedOn' , 'SORT_DESC' );
$articleIdsStates = helper :: arrayCollumn ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' ]), 'state' , 'SORT_DESC' );
2018-04-02 08:29:19 +02:00
$articleIds = [];
foreach ( $articleIdsPublishedOns as $articleId => $articlePublishedOn ) {
if ( $articlePublishedOn <= time () AND $articleIdsStates [ $articleId ]) {
$articleIds [] = $articleId ;
}
}
// Pagination
2018-12-09 00:52:05 +01:00
$pagination = helper :: pagination ( $articleIds , $this -> getUrl (), $this -> getData ([ 'config' , 'itemsperPage' ]));
2018-04-02 08:29:19 +02:00
// Liste des pages
self :: $pages = $pagination [ 'pages' ];
// Articles en fonction de la pagination
for ( $i = $pagination [ 'first' ]; $i < $pagination [ 'last' ]; $i ++ ) {
2020-11-17 08:52:32 +01:00
self :: $articles [ $articleIds [ $i ]] = $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ]]);
2018-04-02 08:29:19 +02:00
}
// Valeurs en sortie
$this -> addOutput ([
'showBarEditButton' => true ,
'showPageContent' => true ,
'view' => 'index'
]);
}
}
2019-03-08 11:22:19 +01:00
}