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.
- Gestion des commentaires article par article.
- Suppression des commentaires en masse.
- Limiter l'édition des articles et des commentaires à l'id de l'éditeur
- Approbation des commentaires
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
git ## version 10.2.04

View File

@ -15,10 +15,10 @@
class blog extends common {
// Objets
// Propriétaire - groupe Editeur - groupe Admin
const EDIT_ALL = '011'; // Groupes Editeurs et admins
const EDIT_OWNER_ADMIN = '101'; // Propriétaire éditeur + groupe admin
const EDIT_ADMIN = '001'; // Groupe des admin
// Propriétaire - groupe
const EDIT_ALL = '02'; // Groupes Editeurs et admins
const EDIT_OWNER_ADMIN = '23'; // Propriétaire éditeur + groupe admin
const EDIT_ADMIN = '03'; // Groupe des admin
public static $actions = [
'add' => self::GROUP_MODERATOR,
@ -76,11 +76,15 @@ class blog extends common {
'10000' => '10000'
];
// Permission d'un article
public static $articlePermissions = [
self::EDIT_ALL => 'Editeurs et administrateurs',
self::EDIT_OWNER_ADMIN => 'Auteur et groupe des administrateurs',
self::EDIT_ADMIN => 'Groupe des administrateurs',
// Permissions d'un article
public static $articleRightsAdmin = [
self::EDIT_ALL => 'Groupes des éditeurs et des administrateurs',
self::EDIT_OWNER_ADMIN => 'Editeur et 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 = [];
@ -294,6 +298,24 @@ class blog extends common {
public function config() {
// Ids des articles par ordre de publication
$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 = helper::pagination($articleIds, $this->getUrl(),$this->getData(['config','itemsperPage']));
// Liste des pages
@ -301,15 +323,19 @@ class blog extends common {
// Articles en fonction de la pagination
for($i = $pagination['first']; $i < $pagination['last']; $i++) {
// Nombre de commentaires à approuver et approuvés
if ( !empty(helper::arrayCollumn($this->getData(['module', $this->getUrl(0), $articleIds[$i], 'comment' ]),'approval', 'SORT_DESC'))) {
$a = array_values(helper::arrayCollumn($this->getData(['module', $this->getUrl(0), $articleIds[$i], 'comment' ]),'approval', 'SORT_DESC'));
$toApprove = count(array_keys($a,false));
$approved = count(array_keys($a,true));
} else {
$approvals = [];
// Compatibilité : vérifier si les données sont disponibles
if ( $this->getData(['module', $this->getUrl(0), $articleIds[$i], 'comment' ,'approval' ]) !== NULL ) {
$approvals = helper::arrayCollumn($this->getData(['module', $this->getUrl(0), $articleIds[$i], 'comment' ]),'approval', 'SORT_DESC');
}
if ( empty($approvals) ) {
$toApprove = 0;
$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
self::$articles[] = [
'<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),
'userId' => $newuserid,
'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
if($articleId !== $this->getUrl(2)) {
@ -443,7 +470,7 @@ class blog extends common {
self::$users = helper::arrayCollumn($this->getData(['user']), 'firstname');
ksort(self::$users);
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);
// Valeurs en sortie

View File

@ -16,4 +16,40 @@
$("#blogAddDraft").on("click", function() {
$("#blogAddState").val(0);
$("#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', [
'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="col6">
<div class="block">
<h4>Options de publication</h4>
<?php echo template::select('blogAddUserId', $module::$users, [
'label' => 'Auteur',
'selected' => $this->getUser('id'),
'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()
<h4>Permissions</h4>
<?php echo template::select('blogAddRights', $this->getUser('group') === self::GROUP_ADMIN ? $module::$articleRightsAdmin : $module::$articleRightsModerator , [
'label' => 'Droits d\'édition et de modification',
'selected' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'editRights'])
]); ?>
</div>
</div>
<div class="col6">
<div class="block">
<h4>Options avancées</h4>
<?php echo template::select('blogAddlength', $module::$commentLength,[
'help' => 'Choix du nombre maximum de caractères pour chaque commentaire de l\'article, caractères de mise en forme html inclus.',
'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' => ''
<h4>Commentaires</h4>
<?php echo template::checkbox('blogAddCloseComment', true, 'Fermer les commentaires', [
'checked' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'closeComment'])
]); ?>
<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>

View File

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

View File

@ -76,32 +76,44 @@
<div class="row">
<div class="col12">
<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 class="row">
<div class="col5">
<div class="col6">
<div class="block">
<h4>Options de publication</h4>
<?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'])
]); ?>
<?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'])
<h4>Permissions</h4>
<?php echo template::select('blogEditRights', $this->getUser('group') === self::GROUP_ADMIN ? $module::$articleRightsAdmin : $module::$articleRightsModerator , [
'label' => 'Droits d\'édition et de modification',
'selected' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'editRights'])
]); ?>
</div>
</div>
<div class="col7">
<div class="col6">
<div class="block">
<h4>Commentaires</h4>
<?php echo template::checkbox('blogEditCloseComment', true, 'Fermer les commentaires', [