diff --git a/CHANGES.md b/CHANGES.md
index bc9d9ebd..0e7f3b09 100755
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,6 +1,16 @@
# Changelog
## version 10.3.00
+- Modifications :
+ - Module User
+ - Pour les articles de blog et de news, choix de la signature, nom+prenom ; nom+prenom ; id ; pseudo
+ - Module Blog :
+ - Texte du commentaire enrichi.
+ - 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
- Corrections :
- Bloquage de l'incrémentation de l'id de page lorsque deux pages ont le même nom.
- Login : l'option "Se souvenir de moi" est fonctionnelle.
diff --git a/core/core.php b/core/core.php
index c0e17e56..48951b3a 100644
--- a/core/core.php
+++ b/core/core.php
@@ -25,6 +25,10 @@ class common {
const GROUP_MEMBER = 1;
const GROUP_MODERATOR = 2;
const GROUP_ADMIN = 3;
+ const SIGNATURE_ID = 1;
+ const SIGNATURE_PSEUDO = 2;
+ const SIGNATURE_FIRSTLASTNAME = 3;
+ const SIGNATURE_LASTFIRSTNAME = 4;
// Dossier de travail
const BACKUP_DIR = 'site/backup/';
const DATA_DIR = 'site/data/';
@@ -39,7 +43,7 @@ class common {
const ACCESS_TIMER = 1800;
// Numéro de version
- const ZWII_VERSION = '10.3.00';
+ const ZWII_VERSION = '10.4.00';
const ZWII_UPDATE_CHANNEL = "v10";
public static $actions = [];
@@ -1403,6 +1407,47 @@ class common {
// Mise à jour du numéro de version
$this->setData(['core', 'dataVersion', 10300]);
}
+ // Version 10.4.00
+ if ($this->getData(['core', 'dataVersion']) < 10300) {
+ // Ajouter le prénom comme pseudo et le pseudo comme signature
+ foreach($this->getData(['user']) as $userId => $userIds){
+ $this->setData(['user',$userId,'pseudo',$this->getData(['user',$userId,'firstname'])]);
+ $this->setData(['user',$userId,'signature',2]);
+ }
+
+ // Ajouter les champs de blog v3
+ // Liste des pages dans pageList
+ $pageList = array();
+ foreach ($this->getHierarchy(null,null,null) as $parentKey=>$parentValue) {
+ $pageList [] = $parentKey;
+ foreach ($parentValue as $childKey) {
+ $pageList [] = $childKey;
+ }
+ }
+ // Parcourir pageList et rechercher les modules de blog
+ foreach ($pageList as $parentKey => $parent) {
+ //La page a une galerie
+ if ($this->getData(['page',$parent,'moduleId']) === 'blog' ) {
+ $articleIds = array_keys(helper::arrayCollumn($this->getData(['module',$parent]), 'publishedOn', 'SORT_DESC'));
+ foreach ($articleIds as $key => $article) {
+ // Droits les deux groupes
+ $this->setData(['module', $parent, $article,'editRights','22']);
+ // Limite de taille 500
+ $this->setData(['module', $parent, $article,'commentMaxlength', '500']);
+ // Pas d'approbation des commentaires
+ $this->setData(['module', $parent, $article,'commentApprove', false ]);
+ }
+ // Traitement des commentaires
+ if ( is_array($this->getData(['module', $parent, $article,'comment'])) ) {
+ foreach($this->getData(['module', $parent, $article,'comment']) as $commentId => $comment) {
+ // Approbation
+ $this->setData(['module', $parent, $article,'comment', $commentId, 'approval', true ]);
+ }
+ }
+ }
+ }
+ $this->setData(['core', 'dataVersion', 10400]);
+ }
}
}
diff --git a/core/module/user/user.php b/core/module/user/user.php
index c4fb8ca5..1eed3585 100755
--- a/core/module/user/user.php
+++ b/core/module/user/user.php
@@ -27,6 +27,14 @@ class user extends common {
public static $users = [];
+ //Paramètres pour choix de la signature
+ public static $signature = [
+ self::SIGNATURE_ID => 'Identifiant',
+ self::SIGNATURE_PSEUDO => 'Pseudo',
+ self::SIGNATURE_FIRSTLASTNAME => 'Prénom Nom',
+ self::SIGNATURE_LASTFIRSTNAME => 'Nom Prénom'
+ ];
+
public static $userId = '';
public static $userLongtime = false;
@@ -53,7 +61,7 @@ class user extends common {
$userFirstname = $this->getInput('userAddFirstname', helper::FILTER_STRING_SHORT, true);
$userLastname = $this->getInput('userAddLastname', helper::FILTER_STRING_SHORT, true);
$userMail = $this->getInput('userAddMail', helper::FILTER_MAIL, true);
-
+
// Stockage des données
$this->setData([
'user',
@@ -208,15 +216,26 @@ class user extends common {
else {
$newGroup = $this->getData(['user', $this->getUrl(2), 'group']);
}
+ // Modification de nom Prénom
+ if($this->getUser('group') === self::GROUP_ADMIN){
+ $newfirstname = $this->getInput('userEditFirstname', helper::FILTER_STRING_SHORT, true);
+ $newlastname = $this->getInput('userEditLastname', helper::FILTER_STRING_SHORT, true);
+ }
+ else{
+ $newfirstname = $this->getData(['user', $this->getUrl(2), 'firstname']);
+ $newlastname = $this->getData(['user', $this->getUrl(2), 'lastname']);
+ }
// Modifie l'utilisateur
$this->setData([
'user',
$this->getUrl(2),
[
- 'firstname' => $this->getInput('userEditFirstname', helper::FILTER_STRING_SHORT, true),
+ 'firstname' => $newfirstname,
'forgot' => 0,
'group' => $newGroup,
- 'lastname' => $this->getInput('userEditLastname', helper::FILTER_STRING_SHORT, true),
+ 'lastname' => $newlastname,
+ 'pseudo' => $this->getInput('userEditPseudo', helper::FILTER_STRING_SHORT, true),
+ 'signature' => $this->getInput('userEditSignature', helper::FILTER_INT, true),
'mail' => $this->getInput('userEditMail', helper::FILTER_MAIL, true),
'password' => $newPassword,
'connectFail' => $this->getData(['user',$this->getUrl(2),'connectFail']),
@@ -527,4 +546,4 @@ class user extends common {
]);
}
}
-}
\ No newline at end of file
+}
diff --git a/core/module/user/view/add/add.php b/core/module/user/view/add/add.php
index 18a52d5d..ad80e4d1 100644
--- a/core/module/user/view/add/add.php
+++ b/core/module/user/view/add/add.php
@@ -30,6 +30,14 @@
]); ?>
+ 'off',
+ 'label' => 'Pseudo'
+ ]); ?>
+ 'Signature',
+ 'selected' => 1
+ ]); ?>
'off',
'label' => 'Adresse mail'
@@ -73,9 +81,9 @@
'label' => 'Confirmation'
]); ?>
+ 'Prévenir l\'utilisateur par mail');
+ ?>
-
\ No newline at end of file
+
diff --git a/core/module/user/view/edit/edit.php b/core/module/user/view/edit/edit.php
index a2e2c551..1e890fe7 100644
--- a/core/module/user/view/edit/edit.php
+++ b/core/module/user/view/edit/edit.php
@@ -1,7 +1,7 @@
- getUser('group') === self::GROUP_ADMIN): ?>
+ getUser('group') === self::GROUP_ADMIN): ?>
'buttonGrey',
'href' => helper::baseUrl() . 'user',
@@ -29,6 +29,7 @@
'off',
+ 'disabled' => $this->getUser('group') > 2 ? false : true,
'label' => 'Prénom',
'value' => $this->getData(['user', $this->getUrl(2), 'firstname'])
]); ?>
@@ -36,11 +37,21 @@
'off',
+ 'disabled' => $this->getUser('group') > 2 ? false : true,
'label' => 'Nom',
'value' => $this->getData(['user', $this->getUrl(2), 'lastname'])
]); ?>
+ 'off',
+ 'label' => 'Pseudo',
+ 'value' => $this->getData(['user', $this->getUrl(2), 'pseudo'])
+ ]); ?>
+ 'Signature',
+ 'selected' => $this->getData(['user', $this->getUrl(2), 'signature'])
+ ]); ?>
'off',
'label' => 'Adresse mail',
@@ -98,4 +109,4 @@
-
\ No newline at end of file
+
diff --git a/core/vendor/tinymce/init.js b/core/vendor/tinymce/init.js
index feeceba2..7c557af9 100755
--- a/core/vendor/tinymce/init.js
+++ b/core/vendor/tinymce/init.js
@@ -4,6 +4,13 @@
*/
+ /**
+ * Quand tinyMCE est invoqué hors connexion, initialiser privateKey
+ */
+ if ( typeof(privateKey) == 'undefined') {
+ var privateKey = null;
+};
+
tinymce.init({
// Classe où appliquer l'éditeur
selector: ".editorWysiwyg",
@@ -118,12 +125,6 @@ tinymce.init({
external_plugins: {
"filemanager": baseUrl + "core/vendor/filemanager/plugin.min.js"
},
- // Thème mobile
- // mobile: {
- // theme: "mobile",
- // plugins: [ 'autosave', 'lists', 'autolink' ],
- // toolbar: [ 'undo', 'bold', 'italic', 'styleselect' ]
- //},
// Contenu du bouton insérer
insert_button_items: "anchor hr table",
// Contenu du bouton formats
@@ -206,6 +207,144 @@ tinymce.init({
]
});
+
+tinymce.init({
+ // Classe où appliquer l'éditeur
+ selector: ".editorWysiwygComment",
+ setup:function(ed) {
+ // Aperçu dans le pied de page
+ ed.on('change', function(e) {
+ if (ed.id === 'themeFooterText') {
+ $("#footerText").html(tinyMCE.get('themeFooterText').getContent());
+ }
+ });
+ // Limitation du nombre de caractères des commentaires à maxlength
+ var alarmCaraMin = 200; // alarme sur le nombre de caractères restants à partir de...
+ var maxlength = parseInt($("#" + (ed.id)).attr("maxlength"));
+ var id_alarm = "#blogArticleContentAlarm"
+ var contentLength = 0;
+ ed.on("keydown", function(e) {
+ contentLength = ed.getContent({format : 'text'}).length;
+ if (contentLength > maxlength) {
+ $(id_alarm).html("Vous avez atteint le maximum de " + maxlength + " caractères ! ");
+ if(e.keyCode != 8 && e.keyCode != 46){
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ }
+ }
+ else{
+ if(maxlength - contentLength < alarmCaraMin){
+ $(id_alarm).html((maxlength - contentLength) + " caractères restants");
+ }
+ else{
+ $(id_alarm).html(" ");
+ }
+ }
+ });
+ // Limitation y compris lors d'un copier/coller
+ ed.on("paste", function(e){
+ contentLeng = ed.getContent({format : 'text'}).length - 16;
+ var data = e.clipboardData.getData('Text');
+ if (data.length > (maxlength - contentLeng)) {
+ $(id_alarm).html("Vous alliez dépasser le maximum de " + maxlength + " caractères ! ");
+ return false;
+ } else {
+ if(maxlength - contentLeng < alarmCaraMin){
+ $(id_alarm).html((maxlength - contentLeng - data.length) + " caractères restants");
+ }
+ else{
+ $(id_alarm).html(" ");
+ }
+ return true;
+ }
+ });
+ },
+ // Langue
+ language: "fr_FR",
+ // Plugins
+ plugins: "advlist anchor autolink autoresize autosave colorpicker contextmenu fullscreen hr lists paste searchreplace stickytoolbar tabfocus template textcolor visualblocks emoticons",
+ // Contenu de la barre d'outils
+ toolbar: "restoredraft | undo redo | styleselect | bold italic forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist emoticons | visualblocks fullscreen",
+ // Emoticons
+ emoticons_append: {
+ custom_mind_explode: {
+ keywords: ["brain", "mind", "explode", "blown"],
+ char: "🤯"
+ }
+ },
+ // Titre des images
+ image_title: true,
+ // Pages internes
+ link_list: baseUrl + "core/vendor/tinymce/links.php",
+ // Contenu du menu contextuel
+ contextmenu: "cut copy paste pastetext | selectall searchreplace ",
+ // Fichiers CSS à intégrer à l'éditeur
+ content_css: [
+ baseUrl + "core/layout/common.css",
+ baseUrl + "core/vendor/tinymce/content.css",
+ baseUrl + "site/data/theme.css",
+ baseUrl + "site/data/custom.css"
+ ],
+// Classe à ajouter à la balise body dans l'iframe
+ body_class: "editorWysiwyg",
+ // Cache les menus
+ menubar: false,
+ // URL menu contextuel
+ link_context_toolbar: true,
+ // Cache la barre de statut
+ statusbar: false,
+ // Autorise le copié collé à partir du web
+ paste_data_images: true,
+ // Autorise tous les éléments
+ //valid_elements :"*[*]",
+ //valid_children : "*[*]",
+ // Autorise l'ajout de script
+ // extended_valid_elements: "script[language|type|src]",
+ // Bloque le dimensionnement des médias (car automatiquement en fullsize avec fitvids pour le responsive)
+ media_dimensions: true,
+ // Désactiver la dimension des images
+ image_dimensions: true,
+ // Active l'onglet avancé lors de l'ajout d'une image
+ image_advtab: true,
+ // Urls absolues
+ relative_urls: false,
+ // Url de base
+ document_base_url: baseUrl,
+ // Contenu du bouton formats
+ style_formats: [
+ {title: "Headers", items: [
+ {title: "Header 1", format: "h1"},
+ {title: "Header 2", format: "h2"},
+ {title: "Header 3", format: "h3"},
+ {title: "Header 4", format: "h4"}
+ ]},
+ {title: "Inline", items: [
+ {title: "Bold", icon: "bold", format: "bold"},
+ {title: "Italic", icon: "italic", format: "italic"},
+ {title: "Underline", icon: "underline", format: "underline"},
+ {title: "Strikethrough", icon: "strikethrough", format: "strikethrough"},
+ {title: "Superscript", icon: "superscript", format: "superscript"},
+ {title: "Subscript", icon: "subscript", format: "subscript"},
+ {title: "Code", icon: "code", format: "code"}
+ ]},
+ {title: "Blocks", items: [
+ {title: "Paragraph", format: "p"},
+ {title: "Blockquote", format: "blockquote"},
+ {title: "Div", format: "div"},
+ {title: "Pre", format: "pre"}
+ ]},
+ {title: "Alignment", items: [
+ {title: "Left", icon: "alignleft", format: "alignleft"},
+ {title: "Center", icon: "aligncenter", format: "aligncenter"},
+ {title: "Right", icon: "alignright", format: "alignright"},
+ {title: "Justify", icon: "alignjustify", format: "alignjustify"}
+ ]}
+ ]
+});
+
+
+
tinymce.PluginManager.add('stickytoolbar', function(editor, url) {
editor.on('init', function() {
setSticky();
@@ -297,4 +436,4 @@ tinymce.PluginManager.add('stickytoolbar', function(editor, url) {
return false;
}
- });
+ });
\ No newline at end of file
diff --git a/module/blog/blog.php b/module/blog/blog.php
index e69db419..d06f43b8 100644
--- a/module/blog/blog.php
+++ b/module/blog/blog.php
@@ -14,10 +14,18 @@
class blog extends common {
+ // Objets
+ // 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,
'comment' => self::GROUP_MODERATOR,
+ 'commentApprove' => self::GROUP_MODERATOR,
'commentDelete' => self::GROUP_MODERATOR,
+ 'commentDeleteAll' => self::GROUP_MODERATOR,
'config' => self::GROUP_MODERATOR,
'delete' => self::GROUP_MODERATOR,
'edit' => self::GROUP_MODERATOR,
@@ -26,8 +34,19 @@ class blog extends common {
public static $articles = [];
+ // Signature de l'article
+ public static $articleSignature = '';
+
+ // Signature du commentaire
+ public static $editCommentSignature = '';
+
public static $comments = [];
+ public static $commentsDelete;
+
+ // Signatures des commentaires déjà saisis
+ public static $commentsSignature = [];
+
public static $pages;
public static $states = [
@@ -48,10 +67,29 @@ class blog extends common {
'right' => 'À droite ',
];
+ //Paramètre longueur maximale des commentaires en nb de caractères
+ public static $commentLength = [
+ '500' => '500',
+ '1000' => '1000',
+ '2000' => '2000',
+ '5000' => '5000',
+ '10000' => '10000'
+ ];
+
+ // 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 = [];
- const BLOG_VERSION = '2.02';
+ const BLOG_VERSION = '3.00.dev';
/**
* Édition
@@ -59,6 +97,13 @@ class blog extends common {
public function add() {
// 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)]));
@@ -77,7 +122,8 @@ class blog extends common {
'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)
+ 'userId' => $newuserid,
+ 'commentMaxlength' => $this->getInput('blogAddlength', null)
]]);
// Valeurs en sortie
$this->addOutput([
@@ -108,14 +154,13 @@ class blog extends common {
* Liste des commentaires
*/
public function comment() {
- // Liste les commentaires
- $comments = [];
- foreach((array) $this->getData(['module', $this->getUrl(0)]) as $articleId => $article) {
- foreach($article['comment'] as &$comment) {
- $comment['articleId'] = $articleId;
- }
- $comments += $article['comment'];
- }
+ $comments = $this->getData(['module', $this->getUrl(0), $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',
+ 'value' => 'Tout effacer'
+ ]);
// Ids des commentaires par ordre de création
$commentIds = array_keys(helper::arrayCollumn($comments, 'createdOn', 'SORT_DESC'));
// Pagination
@@ -126,20 +171,32 @@ class blog extends common {
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), $this->getUrl(2),'commentApprove']) === true) {
+ $buttonApproval = template::button('blogcommentApprove' . $commentIds[$i], [
+ 'class' => $comment['approval'] === true ? 'blogCommentReject' : 'blogCommentApprove buttonRed' ,
+ 'href' => helper::baseUrl() . $this->getUrl(0) . '/commentApprove/' . $this->getUrl(2) . '/' . $commentIds[$i] . '/' . $_SESSION['csrf'] ,
+ 'value' => $comment['approval'] === true ? 'A' : 'R'
+ ]);
+ }
self::$comments[] = [
utf8_encode(strftime('%d %B %Y - %H:%M', $comment['createdOn'])),
$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) . '/comment-delete/' . $comment['articleId'] . '/' . $commentIds[$i] . '/' . $_SESSION['csrf'] ,
+ 'href' => helper::baseUrl() . $this->getUrl(0) . '/commentDelete/' . $this->getUrl(2) . '/' . $commentIds[$i] . '/' . $_SESSION['csrf'] ,
'value' => template::ico('cancel')
])
];
}
// Valeurs en sortie
$this->addOutput([
- 'title' => 'Gestion des commentaires',
+ 'title' => 'Gestion des commentaires : '. $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'title']),
'view' => 'comment'
]);
}
@@ -168,33 +225,132 @@ class blog extends common {
$this->deleteData(['module', $this->getUrl(0), $this->getUrl(2), 'comment', $this->getUrl(3)]);
// Valeurs en sortie
$this->addOutput([
- 'redirect' => helper::baseUrl() . $this->getUrl(0) . '/comment',
+ 'redirect' => helper::baseUrl() . $this->getUrl(0) . '/comment/'.$this->getUrl(2),
'notification' => 'Commentaire supprimé',
'state' => true
]);
}
}
+ /**
+ * Suppression de tous les commentaires de l'article $this->getUrl(2)
+ */
+ public function commentDeleteAll() {
+ // 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'
+ ]);
+ }
+ // Suppression
+ else {
+ $this->setData(['module', $this->getUrl(0), $this->getUrl(2), 'comment',[] ]);
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . $this->getUrl(0) . '/comment',
+ 'notification' => 'Commentaires supprimés',
+ 'state' => true
+ ]);
+ }
+ }
+
+ /**
+ * Approbation oou désapprobation de commentaire
+ */
+ public function commentApprove() {
+ // Le commentaire n'existe pas
+ if($this->getData(['module', $this->getUrl(0), $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',
+ 'notification' => 'Action non autorisée'
+ ]);
+ }
+ // Inversion du statut
+ else {
+ $this->setData(['module', $this->getUrl(0), $this->getUrl(2), 'comment', $this->getUrl(3), [
+ 'author' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'comment', $this->getUrl(3), 'author']),
+ 'content' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'comment', $this->getUrl(3), 'content']),
+ 'createdOn' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'comment', $this->getUrl(3), 'createdOn']),
+ 'userId' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'comment', $this->getUrl(3), 'userId']),
+ 'approval' => !$this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'comment', $this->getUrl(3), 'approval'])
+ ]]);
+
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . $this->getUrl(0) . '/comment/'.$this->getUrl(2),
+ 'notification' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'comment', $this->getUrl(3), 'approval']) === true ? 'Commentaire approuvé' : 'Commentaire rejeté',
+ 'state' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'comment', $this->getUrl(3), 'approval'])
+ ]);
+ }
+ }
+
/**
* Configuration
*/
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
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), $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), $articleIds[$i],'comment']));
+ }
// Met en forme le tableau
self::$articles[] = [
- $this->getData(['module', $this->getUrl(0), $articleIds[$i], 'title']),
+ '' .
+ $this->getData(['module', $this->getUrl(0), $articleIds[$i], 'title']) .
+ '',
// date('d/m/Y H:i', $this->getData(['module', $this->getUrl(0), $articleIds[$i], 'publishedOn'])),
utf8_encode(strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0), $articleIds[$i], 'publishedOn'])))
.' à '.
utf8_encode(strftime('%H:%M', $this->getData(['module', $this->getUrl(0), $articleIds[$i], 'publishedOn']))),
self::$states[$this->getData(['module', $this->getUrl(0), $articleIds[$i], 'state'])],
+ // Bouton pour afficher les commentaires de l'article
+ template::button('blogConfigComment' . $articleIds[$i], [
+ 'class' => ($toApprove || $approved ) > 0 ? 'buttonBlue' : 'buttonGrey' ,
+ 'href' => ($toApprove || $approved ) > 0 ? helper::baseUrl() . $this->getUrl(0) . '/comment/' . $articleIds[$i] : '',
+ 'value' => $toApprove > 0 ? $toApprove . '/' . $approved : $approved
+ //'value' => count($this->getData(['module', $this->getUrl(0), $articleIds[$i],'comment']))
+ ]),
template::button('blogConfigEdit' . $articleIds[$i], [
'href' => helper::baseUrl() . $this->getUrl(0) . '/edit/' . $articleIds[$i] . '/' . $_SESSION['csrf'],
'value' => template::ico('pencil')
@@ -266,6 +422,12 @@ class blog extends common {
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)) {
@@ -274,7 +436,7 @@ class blog extends common {
$articleId = helper::increment($articleId, array_keys(self::$actions));
}
$this->setData(['module', $this->getUrl(0), $articleId, [
- 'closeComment' => $this->getInput('blogEditCloseComment'),
+ 'closeComment' => $this->getInput('blogEditCloseComment', helper::FILTER_BOOLEAN),
'mailNotification' => $this->getInput('blogEditMailNotification', helper::FILTER_BOOLEAN),
'groupNotification' => $this->getInput('blogEditGroupNotification', helper::FILTER_INT),
'comment' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'comment']),
@@ -286,7 +448,10 @@ class blog extends common {
'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)
+ 'userId' => $newuserid,
+ 'commentMaxlength' => $this->getInput('blogEditCommentMaxlength'),
+ 'commentApprove' => $this->getInput('blogEditCommentApprove', helper::FILTER_BOOLEAN),
+ 'editRights' => $this->getInput('blogEditRights')
]]);
// Supprime l'ancien article
if($articleId !== $this->getUrl(2)) {
@@ -303,7 +468,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
@@ -350,11 +515,11 @@ class blog extends common {
$commentId = helper::increment(uniqid(), $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'comment']));
$this->setData(['module', $this->getUrl(0), $this->getUrl(1), 'comment', $commentId, [
'author' => $this->getInput('blogArticleAuthor', helper::FILTER_STRING_SHORT, empty($this->getInput('blogArticleUserId')) ? TRUE : FALSE),
- 'content' => $this->getInput('blogArticleContent', helper::FILTER_STRING_SHORT, true),
+ 'content' => $this->getInput('blogArticleContent', false),
'createdOn' => time(),
'userId' => $this->getInput('blogArticleUserId'),
+ 'approval' => !$this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'commentApprove']) // true commentaire publié false en attente de publication
]]);
-
// Envoi d'une notification aux administrateurs
// Init tableau
$to = [];
@@ -365,20 +530,21 @@ class blog extends common {
}
}
// Envoi du mail $sent code d'erreur ou de réussite
+ $notification = $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'comment', $commentId, 'approval']) === false ? 'Commentaire déposé en attente d\'approbation.': 'Commentaire déposé.';
if ($this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'mailNotification']) === true) {
$sent = $this->sendMail(
$to,
'Nouveau commentaire',
'Bonjour' . ' ' . $user['firstname'] . ' ' . $user['lastname'] . ',
' .
- 'Nouveau commentaire déposé sur la page "' . $this->getData(['page', $this->getUrl(0), 'title']) . '" :
',
+ 'Nouveau commentaire ' . $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'comment', $commentId, 'approval']) === false ? 'à approuver' : '' .
+ 'déposé sur la page "' . $this->getData(['page', $this->getUrl(0), 'title']) . '" :
'.
+ $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'comment', $commentId, 'content']),
''
);
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . $this->getUrl() . '#comment',
- //'notification' => 'Commentaire ajouté',
- //'state' => true
- 'notification' => ($sent === true ? 'Commentaire ajouté et une notification envoyée' : 'Commentaire ajouté, erreur de notification :
' . $sent),
+ 'notification' => ($sent === true ? $notification . '
Une notification a été envoyée.' : $notification . '
Erreur de notification : ' . $sent),
'state' => ($sent === true ? true : null)
]);
@@ -386,7 +552,7 @@ class blog extends common {
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . $this->getUrl() . '#comment',
- 'notification' => 'Commentaire ajouté',
+ 'notification' => $notification,
'state' => true
]);
}
@@ -398,14 +564,78 @@ class blog extends common {
$pagination = helper::pagination($commentIds, $this->getUrl(),$this->getData(['config','itemsperPage']),'#comment');
// Liste des pages
self::$pages = $pagination['pages'];
+ // Signature de l'article
+ $userIdArticle = $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'userId']);
+ switch ($this->getData(['user', $userIdArticle, 'signature'])){
+ case 1:
+ self::$articleSignature = $userIdArticle;
+ break;
+ case 2:
+ self::$articleSignature = $this->getData(['user', $userIdArticle, 'pseudo']);
+ break;
+ case 3:
+ self::$articleSignature = $this->getData(['user', $userIdArticle, 'firstname']) . ' ' . $this->getData(['user', $userIdArticle, 'lastname']);
+ break;
+ case 4:
+ self::$articleSignature = $this->getData(['user', $userIdArticle, 'lastname']) . ' ' . $this->getData(['user', $userIdArticle, 'firstname']);
+ break;
+ default:
+ self::$articleSignature = $this->getData(['user', $userIdArticle, 'firstname']);
+ }
+ // Signature du commentaire édité
+ if($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')) {
+ $useridcomment = $this->getUser('id');
+ switch ($this->getData(['user', $useridcomment, 'signature'])){
+ case 1:
+ self::$editCommentSignature = $useridcomment;
+ break;
+ case 2:
+ self::$editCommentSignature = $this->getData(['user', $useridcomment, 'pseudo']);
+ break;
+ case 3:
+ self::$editCommentSignature = $this->getData(['user', $useridcomment, 'firstname']) . ' ' . $this->getData(['user', $useridcomment, 'lastname']);
+ break;
+ case 4:
+ self::$editCommentSignature = $this->getData(['user', $useridcomment, 'lastname']) . ' ' . $this->getData(['user', $useridcomment, 'firstname']);
+ break;
+ default:
+ self::$editCommentSignature = $this->getData(['user', $useridcomment, 'firstname']);
+ }
+ }
// Commentaires en fonction de la pagination
for($i = $pagination['first']; $i < $pagination['last']; $i++) {
- self::$comments[$commentIds[$i]] = $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'comment', $commentIds[$i]]);
+ // Signatures des commentaires
+ $e = $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'comment', $commentIds[$i],'userId']);
+ if ($e) {
+ switch ($this->getData(['user', $e, 'signature'])){
+ case 1:
+ self::$commentsSignature[$commentIds[$i]] = $e;
+ break;
+ case 2:
+ self::$commentsSignature[$commentIds[$i]] = $this->getData(['user', $e, 'pseudo']);
+ break;
+ case 3:
+ self::$commentsSignature[$commentIds[$i]] = $this->getData(['user', $e, 'firstname']) . ' ' . $this->getData(['user', $e, 'lastname']);
+ break;
+ case 4:
+ self::$commentsSignature[$commentIds[$i]] = $this->getData(['user', $e, 'lastname']) . ' ' . $this->getData(['user', $e, 'firstname']);
+ break;
+ }
+ } else {
+ self::$commentsSignature[$commentIds[$i]] = $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'comment', $commentIds[$i],'author']);
+ }
+ // Données du commentaire si approuvé
+ if ($this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'comment', $commentIds[$i],'approval']) === true ) {
+ self::$comments[$commentIds[$i]] = $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'comment', $commentIds[$i]]);
+ }
}
// Valeurs en sortie
$this->addOutput([
'showBarEditButton' => true,
'title' => $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'title']),
+ 'vendor' => [
+ 'tinymce'
+ ],
'view' => 'article'
]);
}
@@ -438,4 +668,4 @@ class blog extends common {
]);
}
}
-}
\ No newline at end of file
+}
diff --git a/module/blog/view/add/add.js.php b/module/blog/view/add/add.js.php
index 1ade9625..be4e7ac0 100644
--- a/module/blog/view/add/add.js.php
+++ b/module/blog/view/add/add.js.php
@@ -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();
+ }
+
});
\ No newline at end of file
diff --git a/module/blog/view/add/add.php b/module/blog/view/add/add.php
index 37230abd..058894c8 100644
--- a/module/blog/view/add/add.php
+++ b/module/blog/view/add/add.php
@@ -67,32 +67,76 @@
'editorWysiwyg'
]); ?>
-
-
+
+
Options de publication
- 'Auteur',
- 'selected' => $this->getUser('id')
- ]); ?>
- 'L\'article n\'est visible qu\'après la date de publication prévue.',
- 'label' => 'Date de publication',
- 'value' => time()
- ]); ?>
-
-
-
-
-
Options avancées
-
- 'Editeurs = éditeurs + administrateurs
Membres = membres + éditeurs + administrateurs'
- ]); ?>
- ''
- ]); ?>
+
+
+ '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'])
+ ]); ?>
+
+
+ 'Auteur',
+ 'selected' => $this->getUser('id'),
+ 'disabled' => $this->getUser('group') !== self::GROUP_ADMIN ? true : false
+ ]); ?>
+
+
+ 'L\'article n\'est visible qu\'après la date de publication prévue.',
+ 'label' => 'Date de publication',
+ 'value' => time()
+ ]); ?>
+
+
-
\ No newline at end of file
+
+
+
+
Permissions
+ 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'])
+ ]); ?>
+
+
+
+
+
Commentaires
+ $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'closeComment'])
+ ]); ?>
+
+
+
+
+
diff --git a/module/blog/view/article/article.css b/module/blog/view/article/article.css
index e75691a1..7828afc9 100755
--- a/module/blog/view/article/article.css
+++ b/module/blog/view/article/article.css
@@ -50,6 +50,4 @@
.blogArticlePicture {
height:auto;
max-width: 100%;}
- }
-
-
+}
diff --git a/module/blog/view/article/article.php b/module/blog/view/article/article.php
index 848418f6..1bf1ba9e 100644
--- a/module/blog/view/article/article.php
+++ b/module/blog/view/article/article.php
@@ -1,120 +1,113 @@
-
-
-
-
- getData(['module', $this->getUrl(0), $this->getUrl(1), 'publishedOn']))); ?>
- à getData(['module', $this->getUrl(0), $this->getUrl(1), 'publishedOn']))); ?>
+
+
+
+
+
+ getData(['module', $this->getUrl(0), $this->getUrl(1), 'publishedOn']))); ?>
+ à getData(['module', $this->getUrl(0), $this->getUrl(1), 'publishedOn']))); ?>
+
+ getUser('group') >= self::GROUP_ADMIN): ?>
+
+ helper::baseUrl() . $this->getUrl(0) . '/edit/' . $this->getUrl(1) . '/' . $_SESSION['csrf'],
+ 'value' => 'Editer'
+ ]); ?>
+
+
- getUser('group') >= self::GROUP_ADMIN
- AND $this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
- ): ?>
-
- helper::baseUrl() . $this->getUrl(0) . '/edit/' . $this->getUrl(1) . '/' . $_SESSION['csrf'],
- 'value' => 'Editer'
+ getData(['module', $this->getUrl(0), $this->getUrl(1), 'pictureSize']) === null ? '100' : $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'pictureSize']); ?>
+ getData(['module', $this->getUrl(0), $this->getUrl(1), 'hidePicture']) == false) {
+ echo '
';
+ } ?>
+ getData(['module', $this->getUrl(0), $this->getUrl(1), 'content']); ?>
+
+ getData(['module', $this->getUrl(0), $this->getUrl(1), 'closeComment'])): ?>
+
Cet article ne reçoit pas de commentaire.
+
+
+
+ 'Rédiger un commentaire...',
+ 'readonly' => true
]); ?>
-
-
-
- getData(['module', $this->getUrl(0), $this->getUrl(1), 'pictureSize']) === null ? '100' : $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'pictureSize']); ?>
- getData(['module', $this->getUrl(0), $this->getUrl(1), 'hidePicture']) == false) {
- echo '
';
- } ?>
-
-getData(['module', $this->getUrl(0), $this->getUrl(1), 'content']); ?>
-
- getData(['user', $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'userId']), 'firstname']); ?>
- getData(['user', $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'userId']), 'lastname']); ?>
-
-getData(['module', $this->getUrl(0), $this->getUrl(1), 'closeComment'])): ?>
-
Cet article ne reçoit pas de commentaire.
-
-
-
- 'Rédiger un commentaire...',
- 'readonly' => true
- ]); ?>
-
- getUser('password') === $this->getInput('ZWII_USER_PASSWORD')): ?>
- 'Nom',
- 'readonly' => true,
- 'value' => $this->getUser('firstname') . ' ' . $this->getUser('lastname')
+
+ getUser('password') === $this->getInput('ZWII_USER_PASSWORD')): ?>
+ 'Nom',
+ 'readonly' => true,
+ 'value' => $module::$editCommentSignature
+ ]); ?>
+ $this->getUser('id')
+ ]); ?>
+
+
+
+ 'Nom'
+ ]); ?>
+
+
+
+ helper::baseUrl() . 'user/login/' . str_replace('/', '_', $this->getUrl()) . '__comment',
+ 'value' => 'Connexion'
+ ]); ?>
+
+
+
+ 'Commentaire avec maximum '.$this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'commentMaxlength']).' caractères',
+ 'class' => 'editorWysiwygComment',
+ 'noDirty' => true,
+ 'maxlength' => $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'commentMaxlength'])
]); ?>
- $this->getUser('id')
- ]); ?>
-
+
+ getUser('password') !== $this->getInput('ZWII_USER_PASSWORD')): ?>
+
+
-
- 'Nom'
+
+ 'buttonGrey',
+ 'value' => 'Annuler'
]); ?>
-
-
- helper::baseUrl() . 'user/login/' . str_replace('/', '_', $this->getUrl()) . '__comment',
- 'value' => 'Connexion'
+
+ 'Envoyer',
+ 'ico' => ''
]); ?>
-
- 'Commentaire',
- 'maxlength' => '500'
- ]); ?>
- getUser('password') !== $this->getInput('ZWII_USER_PASSWORD')): ?>
-
-
-
-
- 'buttonGrey',
- 'value' => 'Annuler'
- ]); ?>
-
-
- 'Envoyer',
- 'ico' => ''
- ]); ?>
-
-
-
-
+
+
-
-
- $comment): ?>
-
-
-
- getData(['user', $comment['userId'], 'firstname']) . ' ' . $this->getData(['user', $comment['userId'], 'lastname']); ?>
-
-
-
- le
-
-
-
-
+
+
+ $comment): ?>
+
+
+ le
+
+
+
+
+
-
-
+
+
\ No newline at end of file
diff --git a/module/blog/view/comment/comment.js.php b/module/blog/view/comment/comment.js.php
index fa8ec3e3..e79aae5b 100644
--- a/module/blog/view/comment/comment.js.php
+++ b/module/blog/view/comment/comment.js.php
@@ -10,12 +10,53 @@
* @link http://zwiicms.fr/
*/
+
/**
* Confirmation de suppression
*/
$(".blogCommentDelete").on("click", function() {
var _this = $(this);
- return core.confirm("Êtes-vous sûr de vouloir supprimer ce commentaire ?", function() {
+ var nom = "getData(['module', $this->getUrl(0), $this->getUrl(2), 'title' ]); ?>";
+ return core.confirm("Supprimer le commentaire de l'article " + nom + " ?", function() {
$(location).attr("href", _this.attr("href"));
});
-});
\ No newline at end of file
+});
+
+/**
+ * Confirmation d'approbation
+ */
+$(".blogCommentApprove").on("click", function() {
+ var _this = $(this);
+ var nom = "getData(['module', $this->getUrl(0), $this->getUrl(2), 'title' ]); ?>";
+ return core.confirm("Approuver le commentaire de l'article " + nom + " ?", function() {
+ $(location).attr("href", _this.attr("href"));
+ });
+});
+
+/**
+ * Confirmation de rejet
+ */
+$(".blogCommentReject").on("click", function() {
+ var _this = $(this);
+ var nom = "getData(['module', $this->getUrl(0), $this->getUrl(2), 'title' ]); ?>";
+ return core.confirm("Rejeter le commentaire de l'article " + nom + " ?", function() {
+ $(location).attr("href", _this.attr("href"));
+ });
+});
+
+/**
+ * Confirmation de suppression en masse
+ */
+$(".blogCommentDeleteAll").on("click", function() {
+ var _this = $(this);
+ var nombre = "getData(['module', $this->getUrl(0), $this->getUrl(2), 'comment' ])); ?>";
+ var nom = "getData(['module', $this->getUrl(0), $this->getUrl(2), 'title' ]); ?>";
+ if( nombre === "1"){
+ var message = "Supprimer le commentaire de l'article " + nom + " ?";
+ } else{
+ var message = "Supprimer les " + nombre + " commentaires de l'article " + nom + " ?";
+ }
+ return core.confirm(message, function() {
+ $(location).attr("href", _this.attr("href"));
+ });
+});
diff --git a/module/blog/view/comment/comment.php b/module/blog/view/comment/comment.php
index d6b58853..08d5e9ee 100644
--- a/module/blog/view/comment/comment.php
+++ b/module/blog/view/comment/comment.php
@@ -7,10 +7,16 @@
'value' => 'Retour'
]); ?>
-
+
-
-
+
+
+
+
+
+
+ '; ?>
+
-
\ No newline at end of file
+
diff --git a/module/blog/view/config/config.php b/module/blog/view/config/config.php
index a8d472dd..d1e22ec0 100644
--- a/module/blog/view/config/config.php
+++ b/module/blog/view/config/config.php
@@ -7,13 +7,7 @@
'value' => 'Retour'
]); ?>
-
- helper::baseUrl() . $this->getUrl(0) . '/comment',
- 'value' => 'Gérer les commentaires'
- ]); ?>
-
-
+
helper::baseUrl() . $this->getUrl(0) . '/add',
'ico' => 'plus',
@@ -22,11 +16,11 @@
-
+
Version n°
-
\ No newline at end of file
+
diff --git a/module/blog/view/edit/edit.js.php b/module/blog/view/edit/edit.js.php
index 8daaa07a..0297425d 100644
--- a/module/blog/view/edit/edit.js.php
+++ b/module/blog/view/edit/edit.js.php
@@ -28,4 +28,40 @@ $("#blogEditMailNotification").on("change", function() {
$("#blogEditDraft").on("click", function() {
$("#blogEditState").val(0);
$("#blogEditForm").trigger("submit");
+});
+
+/**
+ * Options de commentaires
+ */
+$("#blogEditCloseComment").on("change", function() {
+ if ($(this).is(':checked') ) {
+ $("#commentOptionsWrapper").slideUp();
+ } else {
+ $("#commentOptionsWrapper").slideDown();
+ }
+});
+
+$("#blogEditMailNotification").on("change", function() {
+ if ($(this).is(':checked') ) {
+ $("#blogEditGroupNotification").slideDown();
+ } else {
+ $("#blogEditGroupNotification").slideUp();
+ }
+});
+
+
+$( document).ready(function() {
+
+ if ($("#blogEditCloseComment").is(':checked') ) {
+ $("#commentOptionsWrapper").slideUp();
+ } else {
+ $("#commentOptionsWrapper").slideDown();
+ }
+
+ if ($("#blogEditMailNotification").is(':checked') ) {
+ $("#blogEditGroupNotification").slideDown();
+ } else {
+ $("#blogEditGroupNotification").slideUp();
+ }
+
});
\ No newline at end of file
diff --git a/module/blog/view/edit/edit.php b/module/blog/view/edit/edit.php
index e964ef93..d6ff0965 100644
--- a/module/blog/view/edit/edit.php
+++ b/module/blog/view/edit/edit.php
@@ -21,6 +21,7 @@
'Publier'
]); ?>
+
@@ -73,36 +74,75 @@
'value' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'content'])
]); ?>
-
+
Options de publication
- 'Auteur',
- 'selected' => $this->getUser('id')
- ]); ?>
- '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'])
- ]); ?>
-
-
-
-
-
Options avancées
- $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'closeComment'])
- ]); ?>
- $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'mailNotification']),
- 'help' => 'Editeurs = éditeurs + administrateurs
Membres = membres + éditeurs + administrateurs'
-
- ]); ?>
- '',
- 'selected' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'groupNotification'])
- ]); ?>
+
+
+ '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'])
+ ]); ?>
+
+
+ 'Auteur',
+ 'selected' => $this->getUser('id'),
+ 'disabled' => $this->getUser('group') !== self::GROUP_ADMIN ? true : false
+ ]); ?>
+
+
+ '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'])
+ ]); ?>
+
+
-
\ No newline at end of file
+
+
+
+
Permissions
+ 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'])
+ ]); ?>
+
+
+
+
+
Commentaires
+ $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'closeComment'])
+ ]); ?>
+
+
+
+
+
diff --git a/module/blog/view/index/index.php b/module/blog/view/index/index.php
index 3734b479..81fe7a66 100644
--- a/module/blog/view/index/index.php
+++ b/module/blog/view/index/index.php
@@ -21,6 +21,7 @@