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']) + ]); ?> +
+
+
+ $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'commentApprove']), + '' + ]); ?> +
+
+
+
+ $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'mailNotification']), + ]); ?> +
+
+ $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'groupNotification']), + 'help' => 'Editeurs = éditeurs + administrateurs
Membres = membres + éditeurs + administrateurs' + ]); ?> +
+
+
+
+
+
+ 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 '' . $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'picture']) . ''; + } ?> + 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.

+ +

+ + + 0 ? $commentsNb . ' ' . 'commentaire' . $s : 'Pas encore 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 '' . $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'picture']) . ''; - } ?> - -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.

- -

- getData(['module', $this->getUrl(0), $this->getUrl(1), 'comment'])); ?> - - 0 ? $commentsNb . ' ' . 'commentaire' . $s : 'Pas encore 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' + ]); ?> +
+
+
Ou
+
+
+ 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' ]); ?>
-
-
Ou
-
-
- 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']) + ]); ?> +
+
+
+ $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'commentApprove']), + '' + ]); ?> +
+
+
+
+ $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'mailNotification']), + ]); ?> +
+
+ $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'groupNotification']), + 'help' => 'Editeurs = éditeurs + administrateurs
Membres = membres + éditeurs + administrateurs' + ]); ?> +
+
+
+
+
+
+ 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 @@
+