Approbation des commentaires

This commit is contained in:
Fred Tempez 2020-07-16 18:50:57 +02:00
parent d6b2dc7e20
commit a7efdbf6c5
6 changed files with 175 additions and 62 deletions

View File

@ -9,11 +9,9 @@
- Nombre maximal de caractère par commentaire. - Nombre maximal de caractère par commentaire.
- Gestion des commentaires article par article. - Gestion des commentaires article par article.
- Suppression des commentaires en masse. - Suppression des commentaires en masse.
- Limiter l'édition des articles et des commentaires à l'id de l'éditeur
- Approbation des commentaires
En cours : En cours :
- Limiter l'édition des articles et des commentaires à l'id de l'éditeur
A réaliser :
- Approbation des commentaires
- Edition de l'article, afficher les signatures plutôt que les noms
- Reprise de la date d'édition, bug avec Chrome - Reprise de la date d'édition, bug avec Chrome
git ## version 10.2.04 git ## version 10.2.04

View File

@ -15,10 +15,10 @@
class blog extends common { class blog extends common {
// Objets // Objets
// Propriétaire - groupe Editeur - groupe Admin // Propriétaire - groupe
const EDIT_ALL = '011'; // Groupes Editeurs et admins const EDIT_ALL = '02'; // Groupes Editeurs et admins
const EDIT_OWNER_ADMIN = '101'; // Propriétaire éditeur + groupe admin const EDIT_OWNER_ADMIN = '23'; // Propriétaire éditeur + groupe admin
const EDIT_ADMIN = '001'; // Groupe des admin const EDIT_ADMIN = '03'; // Groupe des admin
public static $actions = [ public static $actions = [
'add' => self::GROUP_MODERATOR, 'add' => self::GROUP_MODERATOR,
@ -76,11 +76,15 @@ class blog extends common {
'10000' => '10000' '10000' => '10000'
]; ];
// Permission d'un article // Permissions d'un article
public static $articlePermissions = [ public static $articleRightsAdmin = [
self::EDIT_ALL => 'Editeurs et administrateurs', self::EDIT_ALL => 'Groupes des éditeurs et des administrateurs',
self::EDIT_OWNER_ADMIN => 'Auteur et groupe des administrateurs', self::EDIT_OWNER_ADMIN => 'Editeur et groupe des administrateurs',
self::EDIT_ADMIN => 'Groupe des administrateurs', self::EDIT_ADMIN => 'Groupe des administrateurs'
];
public static $articleRightsModerator = [
self::EDIT_ALL => 'Groupes des éditeurs et des administrateurs',
self::EDIT_OWNER_ADMIN => 'Editeur et groupe des administrateurs'
]; ];
public static $users = []; public static $users = [];
@ -294,6 +298,24 @@ class blog extends common {
public function config() { public function config() {
// Ids des articles par ordre de publication // Ids des articles par ordre de publication
$articleIds = array_keys(helper::arrayCollumn($this->getData(['module', $this->getUrl(0)]), 'publishedOn', 'SORT_DESC')); $articleIds = array_keys(helper::arrayCollumn($this->getData(['module', $this->getUrl(0)]), 'publishedOn', 'SORT_DESC'));
// Gestion des droits d'accès
$filterData=[];
foreach ($articleIds as $key => $value) {
$rights = $this->getData(['module', $this->getUrl(0), $value,'editRights']);
// Compatibilité pas de droit stocké placer droit par défaut
$rights = empty($rights) ? '02' : $rights;
// Check les droits du propriétaire
// Check les droits du groupe
if (
( substr($rights,0,1) === '2'
AND $this->getData(['module', $this->getUrl(0), $value,'userId']) === $this->getUser('id')
)
OR ( $this->getUser('group') >= substr($rights,1,1) )
) {
$filterData[] = $value;
}
}
$articleIds = $filterData;
// Pagination // Pagination
$pagination = helper::pagination($articleIds, $this->getUrl(),$this->getData(['config','itemsperPage'])); $pagination = helper::pagination($articleIds, $this->getUrl(),$this->getData(['config','itemsperPage']));
// Liste des pages // Liste des pages
@ -301,15 +323,19 @@ class blog extends common {
// Articles en fonction de la pagination // Articles en fonction de la pagination
for($i = $pagination['first']; $i < $pagination['last']; $i++) { for($i = $pagination['first']; $i < $pagination['last']; $i++) {
// Nombre de commentaires à approuver et approuvés // Nombre de commentaires à approuver et approuvés
if ( !empty(helper::arrayCollumn($this->getData(['module', $this->getUrl(0), $articleIds[$i], 'comment' ]),'approval', 'SORT_DESC'))) { $approvals = [];
$a = array_values(helper::arrayCollumn($this->getData(['module', $this->getUrl(0), $articleIds[$i], 'comment' ]),'approval', 'SORT_DESC')); // Compatibilité : vérifier si les données sont disponibles
$toApprove = count(array_keys($a,false)); if ( $this->getData(['module', $this->getUrl(0), $articleIds[$i], 'comment' ,'approval' ]) !== NULL ) {
$approved = count(array_keys($a,true)); $approvals = helper::arrayCollumn($this->getData(['module', $this->getUrl(0), $articleIds[$i], 'comment' ]),'approval', 'SORT_DESC');
} else { }
if ( empty($approvals) ) {
$toApprove = 0; $toApprove = 0;
$approved = count($this->getData(['module', $this->getUrl(0), $articleIds[$i],'comment'])); $approved = count($this->getData(['module', $this->getUrl(0), $articleIds[$i],'comment']));
} else {
$a = array_values($approvals);
$toApprove = count(array_keys($a,false));
$approved = count(array_keys($a,true));
} }
// Met en forme le tableau // Met en forme le tableau
self::$articles[] = [ self::$articles[] = [
'<a href="' . helper::baseurl() . $this->getUrl(0) . '/' . $articleIds[$i] . '" target="_blank" >' . '<a href="' . helper::baseurl() . $this->getUrl(0) . '/' . $articleIds[$i] . '" target="_blank" >' .
@ -426,7 +452,8 @@ class blog extends common {
'title' => $this->getInput('blogEditTitle', helper::FILTER_STRING_SHORT, true), 'title' => $this->getInput('blogEditTitle', helper::FILTER_STRING_SHORT, true),
'userId' => $newuserid, 'userId' => $newuserid,
'commentMaxlength' => $this->getInput('blogEditCommentMaxlength'), 'commentMaxlength' => $this->getInput('blogEditCommentMaxlength'),
'commentApprove' => $this->getInput('blogEditCommentApprove', helper::FILTER_BOOLEAN) 'commentApprove' => $this->getInput('blogEditCommentApprove', helper::FILTER_BOOLEAN),
'editRights' => $this->getInput('blogEditRights')
]]); ]]);
// Supprime l'ancien article // Supprime l'ancien article
if($articleId !== $this->getUrl(2)) { if($articleId !== $this->getUrl(2)) {
@ -443,7 +470,7 @@ class blog extends common {
self::$users = helper::arrayCollumn($this->getData(['user']), 'firstname'); self::$users = helper::arrayCollumn($this->getData(['user']), 'firstname');
ksort(self::$users); ksort(self::$users);
foreach(self::$users as $userId => &$userFirstname) { foreach(self::$users as $userId => &$userFirstname) {
$userFirstname = $userFirstname . ' ' . $this->getData(['user', $userId, 'lastname']); $userFirstname = $userFirstname . ' ' . $this->getData(['user', $userId, 'lastname']) . ' (' . self::$groupEdits[$this->getData(['user', $userId, 'group'])] . ')';
} }
unset($userFirstname); unset($userFirstname);
// Valeurs en sortie // Valeurs en sortie

View File

@ -16,4 +16,40 @@
$("#blogAddDraft").on("click", function() { $("#blogAddDraft").on("click", function() {
$("#blogAddState").val(0); $("#blogAddState").val(0);
$("#blogAddForm").trigger("submit"); $("#blogAddForm").trigger("submit");
});
/**
* Options de commentaires
*/
$("#blogAddCloseComment").on("change", function() {
if ($(this).is(':checked') ) {
$("#commentOptionsWrapper").slideUp();
} else {
$("#commentOptionsWrapper").slideDown();
}
});
$("#blogAddMailNotification").on("change", function() {
if ($(this).is(':checked') ) {
$("#blogAddGroupNotification").slideDown();
} else {
$("#blogAddGroupNotification").slideUp();
}
});
$( document).ready(function() {
if ($("#blogAddCloseComment").is(':checked') ) {
$("#commentOptionsWrapper").slideUp();
} else {
$("#commentOptionsWrapper").slideDown();
}
if ($("#blogAddMailNotification").is(':checked') ) {
$("#blogAddGroupNotification").slideDown();
} else {
$("#blogAddGroupNotification").slideUp();
}
}); });

View File

@ -67,37 +67,75 @@
<?php echo template::textarea('blogAddContent', [ <?php echo template::textarea('blogAddContent', [
'class' => 'editorWysiwyg' 'class' => 'editorWysiwyg'
]); ?> ]); ?>
<div class="row">
<div class="col12">
<div class="block">
<h4>Options de publication</h4>
<div class="row">
<div class="col4">
<?php echo template::select('blogAddCommentMaxlength', $module::$commentLength,[
'help' => 'Choix du nombre maximum de caractères pour chaque commentaire de l\'article, mise en forme html comprise.',
'label' => 'Caractères par commentaire',
'selected' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'commentMaxlength'])
]); ?>
</div>
<div class="col4">
<?php echo template::select('blogAddUserId', $module::$users, [
'label' => 'Auteur',
'selected' => $this->getUser('id'),
'disabled' => $this->getUser('group') !== self::GROUP_ADMIN ? true : false
]); ?>
</div>
<div class="col4">
<?php echo template::date('blogAddPublishedOn', [
'help' => 'L\'article n\'est visible qu\'après la date de publication prévue.',
'label' => 'Date de publication',
'value' => time()
]); ?>
</div>
</div>
</div>
</div>
</div>
<div class="row"> <div class="row">
<div class="col6"> <div class="col6">
<div class="block"> <div class="block">
<h4>Options de publication</h4> <h4>Permissions</h4>
<?php echo template::select('blogAddUserId', $module::$users, [ <?php echo template::select('blogAddRights', $this->getUser('group') === self::GROUP_ADMIN ? $module::$articleRightsAdmin : $module::$articleRightsModerator , [
'label' => 'Auteur', 'label' => 'Droits d\'édition et de modification',
'selected' => $this->getUser('id'), 'selected' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'editRights'])
'disabled' => $this->getUser('group') !== self::GROUP_ADMIN ? true : false
]); ?>
<?php echo template::date('blogAddPublishedOn', [
'help' => 'L\'article n\'est visible qu\'après la date de publication prévue.',
'label' => 'Date de publication',
'value' => time()
]); ?> ]); ?>
</div> </div>
</div> </div>
<div class="col6"> <div class="col6">
<div class="block"> <div class="block">
<h4>Options avancées</h4> <h4>Commentaires</h4>
<?php echo template::select('blogAddlength', $module::$commentLength,[ <?php echo template::checkbox('blogAddCloseComment', true, 'Fermer les commentaires', [
'help' => 'Choix du nombre maximum de caractères pour chaque commentaire de l\'article, caractères de mise en forme html inclus.', 'checked' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'closeComment'])
'label' => 'Nombre maximum de caractères pour chaque commentaire',
'selected' => '5000'
]); ?>
<?php echo template::checkbox('blogAddCloseComment', true, 'Fermer les commentaires' ); ?>
<?php echo template::checkbox('blogAddMailNotification', true, 'Notifier le commentaire aux groupes à partir de :', [
'help' => 'Editeurs = éditeurs + administrateurs<br/> Membres = membres + éditeurs + administrateurs'
]); ?>
<?php echo template::select('blogAddGroupNotification', $module::$groupNews, [
'label' => ''
]); ?> ]); ?>
<div id="commentOptionsWrapper">
<div class="row">
<div class="col12">
<?php echo template::checkbox('blogAddCommentApprove', true, 'Approbation des commentaires', [
'checked' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'commentApprove']),
''
]); ?>
</div>
</div>
<div class="row">
<div class="col7">
<?php echo template::checkbox('blogAddMailNotification', true, 'Notification des nouveaux commentaires par mail aux groupes', [
'checked' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'mailNotification']),
]); ?>
</div>
<div class="col5">
<?php echo template::select('blogAddGroupNotification', $module::$groupNews, [
'selected' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'groupNotification']),
'help' => 'Editeurs = éditeurs + administrateurs<br/> Membres = membres + éditeurs + administrateurs'
]); ?>
</div>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -30,7 +30,9 @@ $("#blogEditDraft").on("click", function() {
$("#blogEditForm").trigger("submit"); $("#blogEditForm").trigger("submit");
}); });
/**
* Options de commentaires
*/
$("#blogEditCloseComment").on("change", function() { $("#blogEditCloseComment").on("change", function() {
if ($(this).is(':checked') ) { if ($(this).is(':checked') ) {
$("#commentOptionsWrapper").slideUp(); $("#commentOptionsWrapper").slideUp();

View File

@ -76,32 +76,44 @@
<div class="row"> <div class="row">
<div class="col12"> <div class="col12">
<div class="block"> <div class="block">
<h4>Permissions</h4> <h4>Options de publication</h4>
<div class="row">
<div class="col4">
<?php echo template::select('blogEditCommentMaxlength', $module::$commentLength,[
'help' => 'Choix du nombre maximum de caractères pour chaque commentaire de l\'article, mise en forme html comprise.',
'label' => 'Caractères par commentaire',
'selected' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'commentMaxlength'])
]); ?>
</div>
<div class="col4">
<?php echo template::select('blogEditUserId', $module::$users, [
'label' => 'Auteur',
'selected' => $this->getUser('id'),
'disabled' => $this->getUser('group') !== self::GROUP_ADMIN ? true : false
]); ?>
</div>
<div class="col4">
<?php echo template::date('blogEditPublishedOn', [
'help' => 'L\'article n\'est visible qu\'après la date de publication prévue.',
'label' => 'Date de publication',
'value' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'publishedOn'])
]); ?>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col5"> <div class="col6">
<div class="block"> <div class="block">
<h4>Options de publication</h4> <h4>Permissions</h4>
<?php echo template::select('blogEditCommentMaxlength', $module::$commentLength,[ <?php echo template::select('blogEditRights', $this->getUser('group') === self::GROUP_ADMIN ? $module::$articleRightsAdmin : $module::$articleRightsModerator , [
'help' => 'Choix du nombre maximum de caractères pour chaque commentaire de l\'article, mise en forme html comprise.', 'label' => 'Droits d\'édition et de modification',
'label' => 'Caractères par commentaire', 'selected' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'editRights'])
'selected' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'commentMaxlength'])
]); ?>
<?php echo template::select('blogEditUserId', $module::$users, [
'label' => 'Auteur',
'selected' => $this->getUser('id'),
'disabled' => $this->getUser('group') !== self::GROUP_ADMIN ? true : false
]); ?>
<?php echo template::date('blogEditPublishedOn', [
'help' => 'L\'article n\'est visible qu\'après la date de publication prévue.',
'label' => 'Date de publication',
'value' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'publishedOn'])
]); ?> ]); ?>
</div> </div>
</div> </div>
<div class="col7"> <div class="col6">
<div class="block"> <div class="block">
<h4>Commentaires</h4> <h4>Commentaires</h4>
<?php echo template::checkbox('blogEditCloseComment', true, 'Fermer les commentaires', [ <?php echo template::checkbox('blogEditCloseComment', true, 'Fermer les commentaires', [