2022-01-31 09:10:49 +01:00
< ? php
/**
* This file is part of DeltaCMS .
* For full copyright and license information , please see the LICENSE
* file that was distributed with this source code .
* @ author Sylvain Lelièvre < lelievresylvain @ free . fr >
* @ copyright Copyright ( C ) 2021 - 2022 , Sylvain Lelièvre
* @ license GNU General Public License , version 3
* @ link https :// deltacms . fr /
*
* Delta was created from version 11.2 . 00.24 of ZwiiCMS
* @ author Rémi Jean < remi . jean @ outlook . com >
* @ copyright Copyright ( C ) 2008 - 2018 , Rémi Jean
* @ author Frédéric Tempez < frederic . tempez @ outlook . com >
* @ copyright Copyright ( C ) 2018 - 2021 , Frédéric Tempez
*/
class blog extends common {
2022-11-07 16:37:05 +01:00
const VERSION = '6.5' ;
2022-01-31 09:10:49 +01:00
const REALNAME = 'Blog' ;
const DELETE = true ;
const UPDATE = '0.0' ;
const DATADIRECTORY = '' ; // Contenu localisé inclus par défaut (page.json et module.json)
const EDIT_OWNER = 'owner' ;
const EDIT_GROUP = 'group' ;
const EDIT_ALL = 'all' ;
public static $actions = [
2022-11-07 16:37:05 +01:00
'add' => self :: GROUP_EDITOR ,
'comment' => self :: GROUP_EDITOR ,
2022-11-08 14:28:32 +01:00
'commentApprove' => self :: GROUP_MODERATOR ,
'commentDelete' => self :: GROUP_MODERATOR ,
'commentDeleteAll' => self :: GROUP_MODERATOR ,
2022-11-07 16:37:05 +01:00
'config' => self :: GROUP_EDITOR ,
2022-11-08 14:28:32 +01:00
'texts' => self :: GROUP_MODERATOR ,
'delete' => self :: GROUP_MODERATOR ,
2022-11-07 16:37:05 +01:00
'edit' => self :: GROUP_EDITOR ,
2022-01-31 09:10:49 +01:00
'index' => self :: GROUP_VISITOR ,
'rss' => self :: GROUP_VISITOR
];
public static $articles = [];
// Signature de l'article
public static $articleSignature = '' ;
// Signature du commentaire
public static $editCommentSignature = '' ;
public static $comments = [];
public static $nbCommentsApproved = 0 ;
public static $commentsDelete ;
// Signatures des commentaires déjà saisis
public static $commentsSignature = [];
public static $pages ;
public static $users = [];
/**
* Mise à jour du module
* Appelée par les fonctions index et config
*/
2022-06-21 07:53:00 +02:00
private function update () {
2022-01-31 09:10:49 +01:00
// Version 5.0
if ( version_compare ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'versionData' ]), '5.0' , '<' ) ) {
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'itemsperPage' , 6 ]);
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'versionData' , '5.0' ]);
}
2022-03-18 07:50:13 +01:00
// Version 6.0
if ( version_compare ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'versionData' ]), '6.0' , '<' ) ) {
if ( $this -> getData ([ 'config' , 'i18n' , 'langAdmin' ]) === 'en' ){
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'texts' ,[
'NoComment' => 'No comment yet' ,
'Write' => 'Write a comment' ,
'Name' => 'Name' ,
'Maxi' => 'Comment with maximum' ,
'Cara' => 'characters' ,
'Comment' => 'comment' ,
'CommentOK' => 'Comment filed' ,
'Waiting' => 'Comment submitted pending approval' ,
'ArticleNoComment' => 'This article does not receive comments' ,
'Connection' => 'Login' ,
'Edit' => 'Edit' ,
'Cancel' => 'Cancel' ,
'Send' => 'Send' ,
'TinymceMaxi' => 'You have reached the maximum of' ,
'TinymceCara' => 'characters left' ,
'TinymceExceed' => 'You were about to exceed the maximum of '
]]);
}
else {
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'texts' ,[
'NoComment' => 'Pas encore de commentaire' ,
'Write' => 'Ecrire un commentaire' ,
'Name' => 'Nom' ,
'Maxi' => 'Commentaire avec maximum' ,
'Cara' => 'caractères' ,
'Comment' => 'commentaire' ,
'CommentOK' => 'Commentaire déposé' ,
'Waiting' => 'Commentaire déposé en attente d\'approbation' ,
'ArticleNoComment' => 'Cet article ne reçoit pas de commentaire' ,
'Connection' => 'Connexion' ,
'Edit' => 'Editer' ,
'Cancel' => 'Annuler' ,
'Send' => 'Envoyer' ,
'TinymceMaxi' => 'Vous avez atteint le maximum de' ,
'TinymceCara' => 'caractères restants' ,
'TinymceExceed' => 'Vous alliez dépasser le maximum de '
]]);
}
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'versionData' , '6.0' ]);
}
2022-09-02 08:44:18 +02:00
// Version 6.3
if ( version_compare ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'versionData' ]), '6.3' , '<' ) ) {
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'texts' , 'ReadMore' , 'Lire la suite' ]);
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'versionData' , '6.3' ]);
2022-05-30 09:05:11 +02:00
}
2022-11-07 17:59:44 +01:00
// Version 6.5
if ( version_compare ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'versionData' ]), '6.5' , '<' ) ) {
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'versionData' , '6.5' ]);
}
2022-01-31 09:10:49 +01:00
}
/**
* Flux RSS
*/
public function rss () {
// Inclure les classes
include_once 'module/blog/vendor/FeedWriter/Item.php' ;
include_once 'module/blog/vendor/FeedWriter/Feed.php' ;
include_once 'module/blog/vendor/FeedWriter/RSS2.php' ;
include_once 'module/blog/vendor/FeedWriter/InvalidOperationException.php' ;
date_default_timezone_set ( 'UTC' );
$feeds = new \FeedWriter\RSS2 ();
// En-tête
$feeds -> setTitle ( $this -> getData ([ 'page' , $this -> getUrl ( 0 ), 'title' ]));
$feeds -> setLink ( helper :: baseUrl () . $this -> getUrl ( 0 ));
$feeds -> setDescription ( $this -> getData ([ 'page' , $this -> getUrl ( 0 ), 'metaDescription' ]));
$feeds -> setChannelElement ( 'language' , 'fr-FR' );
$feeds -> setDate ( date ( 'r' , time ()));
$feeds -> addGenerator ();
// Corps des articles
$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' );
foreach ( $articleIdsPublishedOns as $articleId => $articlePublishedOn ) {
if ( $articlePublishedOn <= time () AND $articleIdsStates [ $articleId ] ) {
// 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' ]));
// Créer les articles du flux
$newsArticle = $feeds -> createNewItem ();
// Signature de l'article
$author = $this -> signature ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleId , 'userId' ]));
$newsArticle -> addElementArray ([
'title' => $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleId , 'title' ]),
'link' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/' . $articleId ,
'description' => '<img src="' . helper :: baseUrl () . self :: FILE_DIR . $thumb
. '" alt="' . $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleId , 'title' ])
. '" title="' . $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleId , 'title' ])
. '" />' .
$this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleId , 'content' ]),
]);
$newsArticle -> setAuthor ( $author , 'no@mail.com' );
$newsArticle -> setId ( helper :: baseUrl () . $this -> getUrl ( 0 ) . '/' . $articleId );
$newsArticle -> setDate ( date ( 'r' , $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleId , 'publishedOn' ])));
if ( file_exists ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleId , 'picture' ])) ) {
$imageData = getimagesize ( helper :: baseUrl ( false ) . self :: FILE_DIR . 'thumb/' . $thumb );
$newsArticle -> addEnclosure ( helper :: baseUrl ( false ) . self :: FILE_DIR . 'thumb/' . $thumb ,
$imageData [ 0 ] * $imageData [ 1 ],
$imageData [ 'mime' ]
);
}
$feeds -> addItem ( $newsArticle );
}
}
// Valeurs en sortie
$this -> addOutput ([
'display' => self :: DISPLAY_RSS ,
'content' => $feeds -> generateFeed (),
'view' => 'rss'
]);
}
2022-03-18 07:50:13 +01:00
/**
* Configuration des textes visibles par l ' utiliateur
*/
public function texts () {
// Lexique
2022-09-02 08:44:18 +02:00
$param = 'blog' ;
include ( './module/blog/lang/' . $this -> getData ([ 'config' , 'i18n' , 'langAdmin' ]) . '/lex_blog.php' );
2022-03-18 07:50:13 +01:00
// Soumission du formulaire
if ( $this -> isPost ()) {
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'texts' ,[
'NoComment' => $this -> getInput ( 'blogTextsNoComment' , helper :: FILTER_STRING_SHORT ),
'Write' => $this -> getInput ( 'blogTextsWrite' , helper :: FILTER_STRING_SHORT ),
'Name' => $this -> getInput ( 'blogTextsName' , helper :: FILTER_STRING_SHORT ),
'Maxi' => $this -> getInput ( 'blogTextsMaxi' , helper :: FILTER_STRING_SHORT ),
'Cara' => $this -> getInput ( 'blogTextsCara' , helper :: FILTER_STRING_SHORT ),
'Comment' => $this -> getInput ( 'blogTextsComment' , helper :: FILTER_STRING_SHORT ),
'CommentOK' => $this -> getInput ( 'blogTextsCommentOK' , helper :: FILTER_STRING_SHORT ),
'Waiting' => $this -> getInput ( 'blogTextsWaiting' , helper :: FILTER_STRING_SHORT ),
'ArticleNoComment' => $this -> getInput ( 'blogTextsArticleNoComment' , helper :: FILTER_STRING_SHORT ),
'Connection' => $this -> getInput ( 'blogTextsConnection' , helper :: FILTER_STRING_SHORT ),
'Edit' => $this -> getInput ( 'blogTextsEdit' , helper :: FILTER_STRING_SHORT ),
'Cancel' => $this -> getInput ( 'blogTextsCancel' , helper :: FILTER_STRING_SHORT ),
'Send' => $this -> getInput ( 'blogTextsSend' , helper :: FILTER_STRING_SHORT ),
'TinymceMaxi' => $this -> getInput ( 'blogTextsTinymceMaxi' , helper :: FILTER_STRING_SHORT ),
'TinymceCara' => $this -> getInput ( 'blogTextsTinymceCara' , helper :: FILTER_STRING_SHORT ),
'TinymceExceed' => $this -> getInput ( 'blogTextsTinymceExceed' , helper :: FILTER_STRING_SHORT ),
2022-09-02 08:44:18 +02:00
'ReadMore' => $this -> getInput ( 'blogTextsReadMore' , helper :: FILTER_STRING_SHORT )
2022-03-18 07:50:13 +01:00
]]);
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
2022-09-02 08:44:18 +02:00
'notification' => $text [ 'blog' ][ 'texts' ][ 1 ],
2022-03-18 07:50:13 +01:00
'state' => true
]);
}
$this -> addOutput ([
2022-09-02 08:44:18 +02:00
'title' => $text [ 'blog' ][ 'texts' ][ 2 ],
2022-03-18 07:50:13 +01:00
'view' => 'texts' ,
]);
}
2022-01-31 09:10:49 +01:00
/**
* Édition
*/
public function add () {
2022-03-18 07:50:13 +01:00
// Lexique
2022-09-02 08:44:18 +02:00
$param = 'blog' ;
include ( './module/blog/lang/' . $this -> getData ([ 'config' , 'i18n' , 'langAdmin' ]) . '/lex_blog.php' );
2022-01-31 09:10:49 +01:00
// Soumission du formulaire
if ( $this -> isPost ()) {
// Modification de l'userId
if ( $this -> getUser ( 'group' ) === self :: GROUP_ADMIN ){
$newuserid = $this -> getInput ( 'blogAddUserId' , helper :: FILTER_STRING_SHORT , true );
}
else {
$newuserid = $this -> getUser ( 'id' );
}
// 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
$this -> setData ([ 'module' ,
$this -> getUrl ( 0 ),
'posts' ,
$articleId , [
'comment' => $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' ]),
'content' => $this -> getInput ( 'blogAddContent' , null ),
2022-09-02 08:44:18 +02:00
'picture' => $this -> getInput ( 'blogAddPicture' , helper :: FILTER_STRING_SHORT ),
2022-01-31 09:10:49 +01:00
'hidePicture' => $this -> getInput ( 'blogAddHidePicture' , helper :: FILTER_BOOLEAN ),
'pictureSize' => $this -> getInput ( 'blogAddPictureSize' , helper :: FILTER_STRING_SHORT ),
'picturePosition' => $this -> getInput ( 'blogAddPicturePosition' , helper :: FILTER_STRING_SHORT ),
'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' => $newuserid ,
'editConsent' => $this -> getInput ( 'blogAddConsent' ) === self :: EDIT_GROUP ? $this -> getUser ( 'group' ) : $this -> getInput ( 'blogAddConsent' ),
'commentMaxlength' => $this -> getInput ( 'blogAddCommentMaxlength' ),
'commentApproved' => $this -> getInput ( 'blogAddCommentApproved' , helper :: FILTER_BOOLEAN ),
'commentClose' => $this -> getInput ( 'blogAddCommentClose' , helper :: FILTER_BOOLEAN ),
'commentNotification' => $this -> getInput ( 'blogAddCommentNotification' , helper :: FILTER_BOOLEAN ),
'commentGroupNotification' => $this -> getInput ( 'blogAddCommentGroupNotification' , helper :: FILTER_INT ),
]
]);
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
2022-09-02 08:44:18 +02:00
'notification' => $text [ 'blog' ][ 'add' ][ 0 ],
2022-01-31 09:10:49 +01:00
'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 ([
2022-09-02 08:44:18 +02:00
'title' => $text [ 'blog' ][ 'add' ][ 1 ],
2022-01-31 09:10:49 +01:00
'vendor' => [
2022-03-18 07:50:13 +01:00
'flatpickr'
2022-01-31 09:10:49 +01:00
],
'view' => 'add'
]);
}
/**
* Liste des commentaires
*/
public function comment () {
2022-03-18 07:50:13 +01:00
// Lexique
2022-09-02 08:44:18 +02:00
$param = 'blog' ;
include ( './module/blog/lang/' . $this -> getData ([ 'config' , 'i18n' , 'langAdmin' ]) . '/lex_blog.php' );
2022-01-31 09:10:49 +01:00
$comments = $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' ]);
self :: $commentsDelete = template :: button ( 'blogCommentDeleteAll' , [
'class' => 'blogCommentDeleteAll buttonRed' ,
'href' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/commentDeleteAll/' . $this -> getUrl ( 2 ) . '/' . $_SESSION [ 'csrf' ] ,
'ico' => 'cancel' ,
2022-11-08 14:28:32 +01:00
'value' => $text [ 'blog' ][ 'comment' ][ 0 ],
'disabled' => $this -> getUser ( 'group' ) >= self :: GROUP_MODERATOR ? false : true
2022-01-31 09:10:49 +01:00
]);
2022-03-18 07:50:13 +01:00
// Dates suivant la langue d'administration
setlocale ( LC_TIME , 'fr_FR' );
if ( $this -> getData ([ 'config' , 'i18n' , 'langAdmin' ]) === 'en' ) setlocale ( LC_TIME , 'en_GB' );
2022-01-31 09:10:49 +01:00
// Ids des commentaires par ordre de création
$commentIds = array_keys ( helper :: arrayCollumn ( $comments , 'createdOn' , 'SORT_DESC' ));
// Pagination
$pagination = helper :: pagination ( $commentIds , $this -> getUrl (), $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'itemsperPage' ]) );
// Liste des pages
self :: $pages = $pagination [ 'pages' ];
2022-11-08 14:28:32 +01:00
// Commentaires en fonction de la pagination
2022-01-31 09:10:49 +01:00
for ( $i = $pagination [ 'first' ]; $i < $pagination [ 'last' ]; $i ++ ) {
// Met en forme le tableau
$comment = $comments [ $commentIds [ $i ]];
// Bouton d'approbation
$buttonApproval = '' ;
// Compatibilité avec les commentaires des versions précédentes, les valider
$comment [ 'approval' ] = array_key_exists ( 'approval' , $comment ) === false ? true : $comment [ 'approval' ] ;
if ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'commentApproved' ]) === true ) {
$buttonApproval = template :: button ( 'blogCommentApproved' . $commentIds [ $i ], [
'class' => $comment [ 'approval' ] === true ? 'blogCommentRejected buttonGreen' : 'blogCommentApproved buttonRed' ,
'href' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/commentApprove/' . $this -> getUrl ( 2 ) . '/' . $commentIds [ $i ] . '/' . $_SESSION [ 'csrf' ] ,
2022-11-08 14:28:32 +01:00
'value' => $comment [ 'approval' ] === true ? 'A' : 'R' ,
'disabled' => $this -> getUser ( 'group' ) >= self :: GROUP_MODERATOR ? false : true
2022-01-31 09:10:49 +01:00
]);
}
self :: $comments [] = [
2022-05-01 11:45:17 +02:00
mb_detect_encoding ( date ( 'd\/m\/Y\ \-\ H\:i' , $comment [ 'createdOn' ]), 'UTF-8' , true )
? date ( 'd\/m\/Y\ \-\ H\:i' , $comment [ 'createdOn' ])
: utf8_encode ( date ( 'd\/m\/Y\ \-\ H\:i' , $comment [ 'createdOn' ])),
2022-01-31 09:10:49 +01:00
$comment [ 'content' ],
$comment [ 'userId' ] ? $this -> getData ([ 'user' , $comment [ 'userId' ], 'firstname' ]) . ' ' . $this -> getData ([ 'user' , $comment [ 'userId' ], 'lastname' ]) : $comment [ 'author' ],
$buttonApproval ,
template :: button ( 'blogCommentDelete' . $commentIds [ $i ], [
'class' => 'blogCommentDelete buttonRed' ,
'href' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/commentDelete/' . $this -> getUrl ( 2 ) . '/' . $commentIds [ $i ] . '/' . $_SESSION [ 'csrf' ] ,
2022-11-08 14:28:32 +01:00
'value' => template :: ico ( 'cancel' ),
'disabled' => $this -> getUser ( 'group' ) >= self :: GROUP_MODERATOR ? false : true
2022-01-31 09:10:49 +01:00
])
];
}
// Valeurs en sortie
$this -> addOutput ([
2022-09-02 08:44:18 +02:00
'title' => $text [ 'blog' ][ 'comment' ][ 1 ] . $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'title' ]),
2022-01-31 09:10:49 +01:00
'view' => 'comment'
]);
}
/**
* Suppression de commentaire
*/
public function commentDelete () {
2022-03-18 07:50:13 +01:00
// Lexique
2022-09-02 08:44:18 +02:00
$param = 'blog' ;
include ( './module/blog/lang/' . $this -> getData ([ 'config' , 'i18n' , 'langAdmin' ]) . '/lex_blog.php' );
2022-01-31 09:10:49 +01:00
// Le commentaire n'existe pas
if ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' , $this -> getUrl ( 3 )]) === null ) {
// Valeurs en sortie
$this -> addOutput ([
'access' => false
]);
}
// Jeton incorrect
elseif ( $this -> getUrl ( 4 ) !== $_SESSION [ 'csrf' ]) {
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
2022-09-02 08:44:18 +02:00
'notification' => $text [ 'blog' ][ 'commentDelete' ][ 0 ]
2022-01-31 09:10:49 +01:00
]);
}
// Suppression
else {
$this -> deleteData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' , $this -> getUrl ( 3 )]);
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/comment/' . $this -> getUrl ( 2 ),
2022-09-02 08:44:18 +02:00
'notification' => $text [ 'blog' ][ 'commentDelete' ][ 1 ],
2022-01-31 09:10:49 +01:00
'state' => true
]);
}
}
/**
* Suppression de tous les commentaires de l ' article $this -> getUrl ( 2 )
*/
public function commentDeleteAll () {
2022-03-18 07:50:13 +01:00
// Lexique
2022-09-02 08:44:18 +02:00
$param = 'blog' ;
include ( './module/blog/lang/' . $this -> getData ([ 'config' , 'i18n' , 'langAdmin' ]) . '/lex_blog.php' );
2022-01-31 09:10:49 +01:00
// Jeton incorrect
if ( $this -> getUrl ( 3 ) !== $_SESSION [ 'csrf' ]) {
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
2022-09-02 08:44:18 +02:00
'notification' => $text [ 'blog' ][ 'commentDeleteAll' ][ 0 ]
2022-01-31 09:10:49 +01:00
]);
}
// Suppression
else {
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' ,[] ]);
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/comment' ,
2022-09-02 08:44:18 +02:00
'notification' => $text [ 'blog' ][ 'commentDeleteAll' ][ 1 ],
2022-01-31 09:10:49 +01:00
'state' => true
]);
}
}
/**
* Approbation oou désapprobation de commentaire
*/
public function commentApprove () {
2022-03-18 07:50:13 +01:00
// Lexique
2022-09-02 08:44:18 +02:00
$param = 'blog' ;
include ( './module/blog/lang/' . $this -> getData ([ 'config' , 'i18n' , 'langAdmin' ]) . '/lex_blog.php' );
2022-01-31 09:10:49 +01:00
// Le commentaire n'existe pas
if ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' , $this -> getUrl ( 3 )]) === null ) {
// Valeurs en sortie
$this -> addOutput ([
'access' => false
]);
}
// Jeton incorrect
elseif ( $this -> getUrl ( 4 ) !== $_SESSION [ 'csrf' ]) {
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
2022-09-02 08:44:18 +02:00
'notification' => $text [ 'blog' ][ 'commentApprove' ][ 0 ]
2022-01-31 09:10:49 +01:00
]);
}
// Inversion du statut
else {
$approved = ! $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' , $this -> getUrl ( 3 ), 'approval' ]) ;
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' , $this -> getUrl ( 3 ), [
'author' => $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' , $this -> getUrl ( 3 ), 'author' ]),
'content' => $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' , $this -> getUrl ( 3 ), 'content' ]),
'createdOn' => $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' , $this -> getUrl ( 3 ), 'createdOn' ]),
'userId' => $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' , $this -> getUrl ( 3 ), 'userId' ]),
'approval' => $approved
]]);
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/comment/' . $this -> getUrl ( 2 ),
2022-09-02 08:44:18 +02:00
'notification' => $approved ? $text [ 'blog' ][ 'commentApprove' ][ 1 ] : $text [ 'blog' ][ 'commentApprove' ][ 2 ],
2022-01-31 09:10:49 +01:00
'state' => $approved
]);
}
}
/**
* Configuration
*/
public function config () {
2022-03-18 07:50:13 +01:00
// Lexique
2022-09-02 08:44:18 +02:00
$param = 'blog' ;
include ( './module/blog/lang/' . $this -> getData ([ 'config' , 'i18n' , 'langAdmin' ]) . '/lex_blog.php' );
2022-01-31 09:10:49 +01:00
// Mise à jour des données de module
2022-06-21 07:53:00 +02:00
if ( null === $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'versionData' ]) ) $this -> update ();
2022-01-31 09:10:49 +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 ),
'itemsperPage' => $this -> getInput ( 'blogConfigItemsperPage' , helper :: FILTER_INT , true ),
'versionData' => $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'versionData' ])
]]);
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
2022-09-02 08:44:18 +02:00
'notification' => $text [ 'blog' ][ 'config' ][ 0 ],
2022-01-31 09:10:49 +01:00
'state' => true
]);
} else {
2022-03-18 07:50:13 +01:00
// Dates suivant la langue d'administration
setlocale ( LC_TIME , 'fr_FR' );
if ( $this -> getData ([ 'config' , 'i18n' , 'langAdmin' ]) === 'en' ) setlocale ( LC_TIME , 'en_GB' );
2022-01-31 09:10:49 +01:00
// Ids des articles par ordre de publication
$articleIds = array_keys ( helper :: arrayCollumn ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' ]), 'publishedOn' , 'SORT_DESC' ));
// Gestion des droits d'accès
$filterData = [];
foreach ( $articleIds as $key => $value ) {
if (
( // Propriétaire
$this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $value , 'editConsent' ]) === self :: EDIT_OWNER
AND ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $value , 'userId' ]) === $this -> getUser ( 'id' )
OR $this -> getUser ( 'group' ) === self :: GROUP_ADMIN )
)
OR (
// Groupe
$this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $value , 'editConsent' ]) !== self :: EDIT_OWNER
AND $this -> getUser ( 'group' ) >= $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $value , 'editConsent' ])
)
OR (
// Tout le monde
$this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $value , 'editConsent' ]) === self :: EDIT_ALL
)
) {
$filterData [] = $value ;
}
}
$articleIds = $filterData ;
// Pagination
$pagination = helper :: pagination ( $articleIds , $this -> getUrl (), $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'itemsperPage' ]));
// Liste des pages
self :: $pages = $pagination [ 'pages' ];
// Articles en fonction de la pagination
for ( $i = $pagination [ 'first' ]; $i < $pagination [ 'last' ]; $i ++ ) {
// Nombre de commentaires à approuver et approuvés
$approvals = helper :: arrayCollumn ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'comment' ]), 'approval' , 'SORT_DESC' );
if ( is_array ( $approvals ) ) {
$a = array_values ( $approvals );
$toApprove = count ( array_keys ( $a , false ));
$approved = count ( array_keys ( $a , true ));
} else {
$toApprove = 0 ;
$approved = count ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'comment' ]));
}
// Met en forme le tableau
2022-05-01 11:45:17 +02:00
$date = mb_detect_encoding ( date ( 'd\/m\/Y' , $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'publishedOn' ])), 'UTF-8' , true )
? date ( 'd\/m\/Y' , $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'publishedOn' ]))
: utf8_encode ( date ( 'd\/m\/Y' , $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'publishedOn' ])));
$heure = mb_detect_encoding ( date ( 'H\:i' , $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'publishedOn' ])), 'UTF-8' , true )
? date ( 'H\:i' , $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'publishedOn' ]))
: utf8_encode ( date ( 'H\:i' , $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'publishedOn' ])));
2022-01-31 09:10:49 +01:00
self :: $articles [] = [
'<a href="' . helper :: baseurl () . $this -> getUrl ( 0 ) . '/' . $articleIds [ $i ] . '" target="_blank" >' .
$this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'title' ]) .
'</a>' ,
2022-09-02 08:44:18 +02:00
$date . $text [ 'blog' ][ 'config' ][ 2 ] . $heure ,
2022-03-18 07:50:13 +01:00
$states [ $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ], 'state' ])],
2022-01-31 09:10:49 +01:00
// Bouton pour afficher les commentaires de l'article
template :: button ( 'blogConfigComment' . $articleIds [ $i ], [
'class' => ( $toApprove || $approved ) > 0 ? '' : 'buttonGrey' ,
'href' => ( $toApprove || $approved ) > 0 ? helper :: baseUrl () . $this -> getUrl ( 0 ) . '/comment/' . $articleIds [ $i ] : '' ,
'value' => $toApprove > 0 ? $toApprove . '/' . $approved : $approved
]),
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' ],
2022-11-08 14:28:32 +01:00
'value' => template :: ico ( 'cancel' ),
'disabled' => $this -> getUser ( 'group' ) >= self :: GROUP_MODERATOR ? false : true
2022-01-31 09:10:49 +01:00
])
];
}
// Valeurs en sortie
$this -> addOutput ([
2022-09-02 08:44:18 +02:00
'title' => $text [ 'blog' ][ 'config' ][ 1 ],
2022-01-31 09:10:49 +01:00
'view' => 'config'
]);
}
}
/**
* Suppression
*/
public function delete () {
2022-03-18 07:50:13 +01:00
// Lexique
2022-09-02 08:44:18 +02:00
$param = 'blog' ;
include ( './module/blog/lang/' . $this -> getData ([ 'config' , 'i18n' , 'langAdmin' ]) . '/lex_blog.php' );
2022-01-31 09:10:49 +01:00
if ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 )]) === null ) {
// Valeurs en sortie
$this -> addOutput ([
'access' => false
]);
}
// Jeton incorrect
elseif ( $this -> getUrl ( 3 ) !== $_SESSION [ 'csrf' ]) {
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
2022-09-02 08:44:18 +02:00
'notification' => $text [ 'blog' ][ 'delete' ][ 0 ]
2022-01-31 09:10:49 +01:00
]);
}
// Suppression
else {
$this -> deleteData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 )]);
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
2022-09-02 08:44:18 +02:00
'notification' => $text [ 'blog' ][ 'delete' ][ 1 ],
2022-01-31 09:10:49 +01:00
'state' => true
]);
}
}
/**
* Édition
*/
public function edit () {
2022-03-18 07:50:13 +01:00
// Lexique
2022-09-02 08:44:18 +02:00
$param = 'blog' ;
include ( './module/blog/lang/' . $this -> getData ([ 'config' , 'i18n' , 'langAdmin' ]) . '/lex_blog.php' );
2022-01-31 09:10:49 +01:00
// Jeton incorrect
if ( $this -> getUrl ( 3 ) !== $_SESSION [ 'csrf' ]) {
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
2022-09-02 08:44:18 +02:00
'notification' => $text [ 'blog' ][ 'edit' ][ 0 ]
2022-01-31 09:10:49 +01:00
]);
}
// L'article n'existe pas
if ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 )]) === null ) {
// Valeurs en sortie
$this -> addOutput ([
'access' => false
]);
}
// L'article existe
else {
// Soumission du formulaire
if ( $this -> isPost ()) {
if ( $this -> getUser ( 'group' ) === self :: GROUP_ADMIN ){
$newuserid = $this -> getInput ( 'blogEditUserId' , helper :: FILTER_STRING_SHORT , true );
}
else {
$newuserid = $this -> getUser ( 'id' );
}
$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 ), 'posts' ]));
$articleId = helper :: increment ( $articleId , array_keys ( self :: $actions ));
}
$this -> setData ([ 'module' ,
$this -> getUrl ( 0 ),
'posts' ,
$articleId , [
'comment' => $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'comment' ]),
'content' => $this -> getInput ( 'blogEditContent' , null ),
2022-09-02 08:44:18 +02:00
'picture' => $this -> getInput ( 'blogEditPicture' , helper :: FILTER_STRING_SHORT ),
2022-01-31 09:10:49 +01:00
'hidePicture' => $this -> getInput ( 'blogEditHidePicture' , helper :: FILTER_BOOLEAN ),
'pictureSize' => $this -> getInput ( 'blogEditPictureSize' , helper :: FILTER_STRING_SHORT ),
'picturePosition' => $this -> getInput ( 'blogEditPicturePosition' , helper :: FILTER_STRING_SHORT ),
'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' => $newuserid ,
'editConsent' => $this -> getInput ( 'blogEditConsent' ) === self :: EDIT_GROUP ? $this -> getUser ( 'group' ) : $this -> getInput ( 'blogEditConsent' ),
'commentMaxlength' => $this -> getInput ( 'blogEditCommentMaxlength' ),
'commentApproved' => $this -> getInput ( 'blogEditCommentApproved' , helper :: FILTER_BOOLEAN ),
'commentClose' => $this -> getInput ( 'blogEditCommentClose' , helper :: FILTER_BOOLEAN ),
'commentNotification' => $this -> getInput ( 'blogEditCommentNotification' , helper :: FILTER_BOOLEAN ),
'commentGroupNotification' => $this -> getInput ( 'blogEditCommentGroupNotification' , helper :: FILTER_INT )
]
]);
// Supprime l'ancien article
if ( $articleId !== $this -> getUrl ( 2 )) {
$this -> deleteData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 )]);
}
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl ( 0 ) . '/config' ,
2022-09-02 08:44:18 +02:00
'notification' => $text [ 'blog' ][ 'edit' ][ 1 ],
2022-01-31 09:10:49 +01:00
'state' => true
]);
}
// Liste des utilisateurs
self :: $users = helper :: arrayCollumn ( $this -> getData ([ 'user' ]), 'firstname' );
ksort ( self :: $users );
foreach ( self :: $users as $userId => & $userFirstname ) {
// Les membres ne sont pas éditeurs, les exclure de la liste
if ( $this -> getData ([ 'user' , $userId , 'group' ]) < self :: GROUP_MODERATOR ) {
unset ( self :: $users [ $userId ]);
}
2022-09-11 09:42:42 +02:00
$userFirstname = $userFirstname . ' ' . $this -> getData ([ 'user' , $userId , 'lastname' ]) . ' (' . $groupEdits [ $this -> getData ([ 'user' , $userId , 'group' ])] . ')' ;
2022-01-31 09:10:49 +01:00
}
unset ( $userFirstname );
// Valeurs en sortie
$this -> addOutput ([
'title' => $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 2 ), 'title' ]),
'vendor' => [
2022-11-05 09:31:32 +01:00
'flatpickr'
2022-01-31 09:10:49 +01:00
],
'view' => 'edit'
]);
}
}
/**
* Accueil ( deux affichages en un pour éviter une url à rallonge )
*/
public function index () {
2022-03-18 07:50:13 +01:00
// Lexique
2022-09-02 08:44:18 +02:00
$param = 'blog' ;
include ( './module/blog/lang/' . $this -> getData ([ 'config' , 'i18n' , 'langAdmin' ]) . '/lex_blog.php' );
2022-06-21 07:53:00 +02:00
// Installation ?
if ( null === $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'versionData' ]) ){
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'config' ,[
'feeds' => false ,
'feedsLabel' => '' ,
'itemsperPage' => 4 ,
'versionData' => self :: VERSION
]]);
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'texts' ,[
2022-09-02 08:44:18 +02:00
'NoComment' => $text [ 'blog' ][ 'index' ][ 8 ],
'Write' => $text [ 'blog' ][ 'index' ][ 9 ],
'Name' => $text [ 'blog' ][ 'index' ][ 10 ],
'Maxi' => $text [ 'blog' ][ 'index' ][ 11 ],
'Cara' => $text [ 'blog' ][ 'index' ][ 12 ],
'Comment' => $text [ 'blog' ][ 'index' ][ 13 ],
'CommentOK' => $text [ 'blog' ][ 'index' ][ 14 ],
'Waiting' => $text [ 'blog' ][ 'index' ][ 15 ],
'ArticleNoComment' => $text [ 'blog' ][ 'index' ][ 16 ],
'Connection' => $text [ 'blog' ][ 'index' ][ 17 ],
'Edit' => $text [ 'blog' ][ 'index' ][ 18 ],
'Cancel' => $text [ 'blog' ][ 'index' ][ 19 ],
'Send' => $text [ 'blog' ][ 'index' ][ 20 ],
'TinymceMaxi' => $text [ 'blog' ][ 'index' ][ 21 ],
'TinymceCara' => $text [ 'blog' ][ 'index' ][ 22 ],
'TinymceExceed' => $text [ 'blog' ][ 'index' ][ 23 ],
2022-06-21 07:53:00 +02:00
]]);
} else {
// Mise à jour des données de module
$this -> update ();
}
2022-01-31 09:10:49 +01:00
// 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
if ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 )]) === null ) {
// Valeurs en sortie
$this -> addOutput ([
'access' => false
]);
}
// L'article existe
else {
// Soumission du formulaire
if ( $this -> isPost ()) {
2022-11-15 18:20:17 +01:00
// Sauve le contenu dans un brouillon
// $this->setData(['module', $this->getUrl(0), 'posts', $this->getUrl(1), 'comment', $commentId, 'draft', 'content', $this->getInput('blogArticleContent', false) ]);
$_SESSION [ 'commentAuthor' ] = $this -> getInput ( 'blogArticleAuthor' , false );
$_SESSION [ 'commentContent' ] = $this -> getInput ( 'blogArticleContent' , false );
2022-11-05 09:31:32 +01:00
$detectBot = '' ;
2022-01-31 09:10:49 +01:00
// Check la captcha
2022-11-05 09:31:32 +01:00
if ( $this -> getUser ( 'password' ) !== $this -> getInput ( 'DELTA_USER_PASSWORD' ) ){
$code = strtoupper ( $_REQUEST [ 'codeCaptcha' ]);
// option de détection de robot en premier cochée et $_SESSION['humanBot']==='human'
if ( $_SESSION [ 'humanBot' ] === 'human' && $this -> getData ([ 'config' , 'connect' , 'captchaBot' ]) === true ) {
// Présence des 6 cookies et checkbox cochée ?
$detectBot = 'bot' ;
if ( isset ( $_COOKIE [ 'evtC' ]) && isset ( $_COOKIE [ 'evtO' ]) && isset ( $_COOKIE [ 'evtV' ]) && isset ( $_COOKIE [ 'evtA' ])
&& isset ( $_COOKIE [ 'evtH' ]) && isset ( $_COOKIE [ 'evtS' ]) && $this -> getInput ( 'blogHumanCheck' , helper :: FILTER_BOOLEAN ) === true ) {
// Calcul des intervals de temps
$time1 = $_COOKIE [ 'evtC' ] - $_COOKIE [ 'evtO' ]; // temps entre fin de saisie et ouverture de la page
$time2 = $_COOKIE [ 'evtH' ] - $_COOKIE [ 'evtO' ]; // temps entre click checkbox et ouverture de la page
$time3 = $_COOKIE [ 'evtV' ] - $_COOKIE [ 'evtH' ]; // temps entre validation formulaire et click checkbox
$time4 = $_COOKIE [ 'evtS' ] - $_COOKIE [ 'evtA' ]; // temps passé sur la checkbox
if ( $time1 >= 5000 && $time2 >= 1000 && $time3 >= 300
&& $time4 >= 300 && $this -> getInput ( 'blogInputBlue' ) === '' ) $detectBot = 'human' ;
}
// Bot présumé
if ( $detectBot === 'bot' ) $_SESSION [ 'humanBot' ] = 'bot' ;
}
// $_SESSION['humanBot']==='bot' ou option 'Pas de Captcha pour un humain' non validée
elseif ( md5 ( $code ) !== $_SESSION [ 'captcha' ] )
{
self :: $inputNotices [ 'blogArticleCaptcha' ] = $text [ 'blog' ][ 'index' ][ 24 ];
2022-01-31 09:10:49 +01:00
}
}
2022-11-05 09:31:32 +01:00
if ( $detectBot !== 'bot' ){
// Crée le commentaire
$key = $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'comment' ]);
if ( $key === null ) $key = array ();
$commentId = helper :: increment ( uniqid (), $key );
$content = $this -> getInput ( 'blogArticleContent' , false );
$this -> setData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'comment' , $commentId , [
'author' => $this -> getInput ( 'blogArticleAuthor' , helper :: FILTER_STRING_SHORT , empty ( $this -> getInput ( 'blogArticleUserId' )) ? TRUE : FALSE ),
'content' => $content ,
'createdOn' => time (),
'userId' => $this -> getInput ( 'blogArticleUserId' ),
'approval' => ! $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'commentApproved' ]) // true commentaire publié false en attente de publication
]]);
// Envoi d'une notification aux administrateurs
// Init tableau
$to = [];
// Liste des destinataires
foreach ( $this -> getData ([ 'user' ]) as $userId => $user ) {
if ( $user [ 'group' ] >= $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'commentGroupNotification' ]) ) {
$to [] = $user [ 'mail' ];
$firstname [] = $user [ 'firstname' ];
$lastname [] = $user [ 'lastname' ];
}
}
// Envoi du mail $sent code d'erreur ou de réussite
$notification = $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'commentApproved' ]) === true ? $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'texts' , 'Waiting' ]) : $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'texts' , 'CommentOK' ]);
if ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'commentNotification' ]) === true ) {
$error = 0 ;
foreach ( $to as $key => $adress ){
$sent = $this -> sendMail (
$adress ,
$text [ 'blog' ][ 'index' ][ 4 ],
$text [ 'blog' ][ 'index' ][ 5 ] . ' <strong>' . $firstname [ $key ] . ' ' . $lastname [ $key ] . '</strong>,<br><br>' .
$text [ 'blog' ][ 'index' ][ 6 ] . '<a href="' . helper :: baseUrl () . $this -> getUrl ( 0 ) . '/ ' . $this -> getUrl ( 1 ) . '">' . $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'title' ]) . '</a>' . $text [ 'blog' ][ 'index' ][ 7 ] . '<br><br>' ,
''
);
if ( $sent === false ) $error ++ ;
}
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl () . '#comment' ,
'notification' => ( $error === 0 ? $notification . $text [ 'blog' ][ 'index' ][ 0 ] : $notification . $text [ 'blog' ][ 'index' ][ 1 ] . $sent ),
'state' => ( $sent === true ? true : null )
]);
} else {
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl () . '#comment' ,
'notification' => $notification ,
'state' => true
]);
2022-01-31 09:10:49 +01:00
}
2022-11-15 18:20:17 +01:00
$_SESSION [ 'commentContent' ] = '' ;
2022-01-31 09:10:49 +01:00
} else {
// Valeurs en sortie
$this -> addOutput ([
'redirect' => helper :: baseUrl () . $this -> getUrl () . '#comment' ,
2022-11-05 09:31:32 +01:00
'notification' => $text [ 'blog' ][ 'index' ][ 25 ],
'state' => false
]);
2022-01-31 09:10:49 +01:00
}
}
// Ids des commentaires approuvés par ordre de publication
$commentsApproved = $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'comment' ]);
if ( $commentsApproved ) {
foreach ( $commentsApproved as $key => $value ){
if ( $value [ 'approval' ] === false ) unset ( $commentsApproved [ $key ]);
}
// Ligne suivante si affichage du nombre total de commentaires approuvés sous l'article
self :: $nbCommentsApproved = count ( $commentsApproved );
}
$commentIds = array_keys ( helper :: arrayCollumn ( $commentsApproved , 'createdOn' , 'SORT_DESC' ));
// Pagination
$pagination = helper :: pagination ( $commentIds , $this -> getUrl (), $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'itemsperPage' ]), '#comment' );
// Liste des pages
self :: $pages = $pagination [ 'pages' ];
// Signature de l'article
self :: $articleSignature = $this -> signature ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'userId' ]));
// Signature du commentaire édité
if ( $this -> getUser ( 'password' ) === $this -> getInput ( 'DELTA_USER_PASSWORD' )) {
self :: $editCommentSignature = $this -> signature ( $this -> getUser ( 'id' ));
}
// Commentaires en fonction de la pagination
for ( $i = $pagination [ 'first' ]; $i < $pagination [ 'last' ]; $i ++ ) {
// Signatures des commentaires
$e = $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'comment' , $commentIds [ $i ], 'userId' ]);
if ( $e ) {
self :: $commentsSignature [ $commentIds [ $i ]] = $this -> signature ( $e );
} else {
self :: $commentsSignature [ $commentIds [ $i ]] = $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'comment' , $commentIds [ $i ], 'author' ]);
}
// Données du commentaire si approuvé
if ( $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'comment' , $commentIds [ $i ], 'approval' ]) === true ) {
self :: $comments [ $commentIds [ $i ]] = $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'comment' , $commentIds [ $i ]]);
}
2022-03-18 07:50:13 +01:00
}
// Valeurs en sortie (activation de tinymce déporté dans article.php)
2022-01-31 09:10:49 +01:00
$this -> addOutput ([
'showBarEditButton' => true ,
'title' => $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $this -> getUrl ( 1 ), 'title' ]),
'view' => 'article'
]);
}
}
// Liste des articles
else {
// Ids des articles par ordre de publication
$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' );
$articleIds = [];
foreach ( $articleIdsPublishedOns as $articleId => $articlePublishedOn ) {
if ( $articlePublishedOn <= time () AND $articleIdsStates [ $articleId ]) {
$articleIds [] = $articleId ;
}
}
// Pagination
$pagination = helper :: pagination ( $articleIds , $this -> getUrl (), $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'config' , 'itemsperPage' ]));
// Liste des pages
self :: $pages = $pagination [ 'pages' ];
// Articles en fonction de la pagination
for ( $i = $pagination [ 'first' ]; $i < $pagination [ 'last' ]; $i ++ ) {
self :: $articles [ $articleIds [ $i ]] = $this -> getData ([ 'module' , $this -> getUrl ( 0 ), 'posts' , $articleIds [ $i ]]);
}
// Valeurs en sortie
$this -> addOutput ([
'showBarEditButton' => true ,
'showPageContent' => true ,
'view' => 'index'
]);
}
}
/**
* Retourne la signature d ' un utilisateur
*/
private function signature ( $userId ) {
switch ( $this -> getData ([ 'user' , $userId , 'signature' ])){
case 1 :
return $userId ;
break ;
case 2 :
return $this -> getData ([ 'user' , $userId , 'pseudo' ]);
break ;
case 3 :
return $this -> getData ([ 'user' , $userId , 'firstname' ]) . ' ' . $this -> getData ([ 'user' , $userId , 'lastname' ]);
break ;
case 4 :
return $this -> getData ([ 'user' , $userId , 'lastname' ]) . ' ' . $this -> getData ([ 'user' , $userId , 'firstname' ]);
break ;
default :
return $this -> getData ([ 'user' , $userId , 'firstname' ]);
}
}
}