forked from ZwiiCMS-Team/ZwiiCMS
Blog 6.0
This commit is contained in:
parent
615bf640a9
commit
0e3c9e779b
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
class blog extends common {
|
class blog extends common {
|
||||||
|
|
||||||
const VERSION = '5.1';
|
const VERSION = '6.0';
|
||||||
const REALNAME = 'Blog';
|
const REALNAME = 'Blog';
|
||||||
const DELETE = true;
|
const DELETE = true;
|
||||||
const UPDATE = '0.0';
|
const UPDATE = '0.0';
|
||||||
@ -32,6 +32,7 @@ class blog extends common {
|
|||||||
'commentDelete' => self::GROUP_MODERATOR,
|
'commentDelete' => self::GROUP_MODERATOR,
|
||||||
'commentDeleteAll' => self::GROUP_MODERATOR,
|
'commentDeleteAll' => self::GROUP_MODERATOR,
|
||||||
'config' => self::GROUP_MODERATOR,
|
'config' => self::GROUP_MODERATOR,
|
||||||
|
'layout' => self::GROUP_MODERATOR,
|
||||||
'delete' => self::GROUP_MODERATOR,
|
'delete' => self::GROUP_MODERATOR,
|
||||||
'edit' => self::GROUP_MODERATOR,
|
'edit' => self::GROUP_MODERATOR,
|
||||||
'index' => self::GROUP_VISITOR,
|
'index' => self::GROUP_VISITOR,
|
||||||
@ -100,6 +101,9 @@ class blog extends common {
|
|||||||
self::EDIT_OWNER => 'Propriétaire'
|
self::EDIT_OWNER => 'Propriétaire'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// Nombre d'articles dans la page de config:
|
||||||
|
public static $itemsperPage = 8;
|
||||||
|
|
||||||
|
|
||||||
public static $users = [];
|
public static $users = [];
|
||||||
|
|
||||||
@ -398,103 +402,113 @@ class blog extends common {
|
|||||||
* Configuration
|
* Configuration
|
||||||
*/
|
*/
|
||||||
public function config() {
|
public function config() {
|
||||||
|
|
||||||
|
// Ids des articles par ordre de publication
|
||||||
|
$articleIds = array_keys(helper::arrayCollumn($this->getData(['module', $this->getUrl(0), 'posts']), 'publishedOn', 'SORT_DESC'));
|
||||||
|
// Gestion des droits d'accès
|
||||||
|
$filterData=[];
|
||||||
|
foreach ($articleIds as $key => $value) {
|
||||||
|
if (
|
||||||
|
( // Propriétaire
|
||||||
|
$this->getData(['module', $this->getUrl(0), 'posts', $value,'editConsent']) === self::EDIT_OWNER
|
||||||
|
AND ( $this->getData(['module', $this->getUrl(0), 'posts', $value,'userId']) === $this->getUser('id')
|
||||||
|
OR $this->getUser('group') === self::GROUP_ADMIN )
|
||||||
|
)
|
||||||
|
|
||||||
|
OR (
|
||||||
|
// Groupe
|
||||||
|
$this->getData(['module', $this->getUrl(0), 'posts', $value,'editConsent']) !== self::EDIT_OWNER
|
||||||
|
AND $this->getUser('group') >= $this->getData(['module',$this->getUrl(0), 'posts', $value,'editConsent'])
|
||||||
|
)
|
||||||
|
OR (
|
||||||
|
// Tout le monde
|
||||||
|
$this->getData(['module', $this->getUrl(0), 'posts', $value,'editConsent']) === self::EDIT_ALL
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
$filterData[] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$articleIds = $filterData;
|
||||||
|
// Pagination
|
||||||
|
$pagination = helper::pagination($articleIds, $this->getUrl(),self::$itemsperPage);
|
||||||
|
// Liste des pages
|
||||||
|
self::$pages = $pagination['pages'];
|
||||||
|
// Articles en fonction de la pagination
|
||||||
|
for($i = $pagination['first']; $i < $pagination['last']; $i++) {
|
||||||
|
// Nombre de commentaires à approuver et approuvés
|
||||||
|
$approvals = helper::arrayCollumn($this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'comment' ]),'approval', 'SORT_DESC');
|
||||||
|
if ( is_array($approvals) ) {
|
||||||
|
$a = array_values($approvals);
|
||||||
|
$toApprove = count(array_keys($a,false));
|
||||||
|
$approved = count(array_keys($a,true));
|
||||||
|
} else {
|
||||||
|
$toApprove = 0;
|
||||||
|
$approved = count($this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i],'comment']));
|
||||||
|
}
|
||||||
|
// Met en forme le tableau
|
||||||
|
$date = mb_detect_encoding(strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn'])), 'UTF-8', true)
|
||||||
|
? strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn']))
|
||||||
|
: utf8_encode(strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn'])));
|
||||||
|
$heure = mb_detect_encoding(strftime('%H:%M', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn'])), 'UTF-8', true)
|
||||||
|
? strftime('%H:%M', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn']))
|
||||||
|
: utf8_encode(strftime('%H:%M', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn'])));
|
||||||
|
self::$articles[] = [
|
||||||
|
'<a href="' . helper::baseurl() . $this->getUrl(0) . '/' . $articleIds[$i] . '" target="_blank" >' .
|
||||||
|
$this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'title']) .
|
||||||
|
'</a>',
|
||||||
|
$date .' à '. $heure,
|
||||||
|
self::$states[$this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'state'])],
|
||||||
|
// Bouton pour afficher les commentaires de l'article
|
||||||
|
template::button('blogConfigComment' . $articleIds[$i], [
|
||||||
|
'class' => ($toApprove || $approved ) > 0 ? '' : 'buttonGrey' ,
|
||||||
|
'href' => ($toApprove || $approved ) > 0 ? helper::baseUrl() . $this->getUrl(0) . '/comment/' . $articleIds[$i] : '',
|
||||||
|
'value' => $toApprove > 0 ? $toApprove . '/' . $approved : $approved
|
||||||
|
]),
|
||||||
|
template::button('blogConfigEdit' . $articleIds[$i], [
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/edit/' . $articleIds[$i] . '/' . $_SESSION['csrf'],
|
||||||
|
'value' => template::ico('pencil')
|
||||||
|
]),
|
||||||
|
template::button('blogConfigDelete' . $articleIds[$i], [
|
||||||
|
'class' => 'blogConfigDelete buttonRed',
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $articleIds[$i] . '/' . $_SESSION['csrf'],
|
||||||
|
'value' => template::ico('cancel')
|
||||||
|
])
|
||||||
|
];
|
||||||
|
}
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'title' => 'Configuration du module',
|
||||||
|
'view' => 'config'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function layout() {
|
||||||
// Mise à jour des données de module
|
// Mise à jour des données de module
|
||||||
$this->update();
|
$this->update();
|
||||||
// Soumission du formulaire
|
// Soumission du formulaire
|
||||||
if($this->isPost()) {
|
if($this->isPost()) {
|
||||||
$this->setData(['module', $this->getUrl(0), 'config',[
|
$this->setData(['module', $this->getUrl(0), 'config',[
|
||||||
'feeds' => $this->getInput('blogConfigShowFeeds',helper::FILTER_BOOLEAN),
|
'feeds' => $this->getInput('blogLayoutShowFeeds',helper::FILTER_BOOLEAN),
|
||||||
'feedsLabel' => $this->getInput('blogConfigFeedslabel',helper::FILTER_STRING_SHORT),
|
'feedsLabel' => $this->getInput('blogLayoutFeedslabel',helper::FILTER_STRING_SHORT),
|
||||||
'itemsperPage' => $this->getInput('blogConfigItemsperPage', helper::FILTER_INT,true),
|
'itemsperPage' => $this->getInput('blogLayoutItemsperPage', helper::FILTER_INT,true),
|
||||||
'versionData' => $this->getData(['module', $this->getUrl(0), 'config', 'versionData'])
|
'versionData' => $this->getData(['module', $this->getUrl(0), 'config', 'versionData'])
|
||||||
]]);
|
]]);
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/layout',
|
||||||
'notification' => 'Modifications enregistrées',
|
'notification' => 'Modifications enregistrées',
|
||||||
'state' => true
|
'state' => true
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
// Ids des articles par ordre de publication
|
|
||||||
$articleIds = array_keys(helper::arrayCollumn($this->getData(['module', $this->getUrl(0), 'posts']), 'publishedOn', 'SORT_DESC'));
|
|
||||||
// Gestion des droits d'accès
|
|
||||||
$filterData=[];
|
|
||||||
foreach ($articleIds as $key => $value) {
|
|
||||||
if (
|
|
||||||
( // Propriétaire
|
|
||||||
$this->getData(['module', $this->getUrl(0), 'posts', $value,'editConsent']) === self::EDIT_OWNER
|
|
||||||
AND ( $this->getData(['module', $this->getUrl(0), 'posts', $value,'userId']) === $this->getUser('id')
|
|
||||||
OR $this->getUser('group') === self::GROUP_ADMIN )
|
|
||||||
)
|
|
||||||
|
|
||||||
OR (
|
|
||||||
// Groupe
|
|
||||||
$this->getData(['module', $this->getUrl(0), 'posts', $value,'editConsent']) !== self::EDIT_OWNER
|
|
||||||
AND $this->getUser('group') >= $this->getData(['module',$this->getUrl(0), 'posts', $value,'editConsent'])
|
|
||||||
)
|
|
||||||
OR (
|
|
||||||
// Tout le monde
|
|
||||||
$this->getData(['module', $this->getUrl(0), 'posts', $value,'editConsent']) === self::EDIT_ALL
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
$filterData[] = $value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$articleIds = $filterData;
|
|
||||||
// Pagination
|
|
||||||
$pagination = helper::pagination($articleIds, $this->getUrl(),$this->getData(['module', $this->getUrl(0),'config', 'itemsperPage']));
|
|
||||||
// Liste des pages
|
|
||||||
self::$pages = $pagination['pages'];
|
|
||||||
// Articles en fonction de la pagination
|
|
||||||
for($i = $pagination['first']; $i < $pagination['last']; $i++) {
|
|
||||||
// Nombre de commentaires à approuver et approuvés
|
|
||||||
$approvals = helper::arrayCollumn($this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'comment' ]),'approval', 'SORT_DESC');
|
|
||||||
if ( is_array($approvals) ) {
|
|
||||||
$a = array_values($approvals);
|
|
||||||
$toApprove = count(array_keys($a,false));
|
|
||||||
$approved = count(array_keys($a,true));
|
|
||||||
} else {
|
|
||||||
$toApprove = 0;
|
|
||||||
$approved = count($this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i],'comment']));
|
|
||||||
}
|
|
||||||
// Met en forme le tableau
|
|
||||||
$date = mb_detect_encoding(strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn'])), 'UTF-8', true)
|
|
||||||
? strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn']))
|
|
||||||
: utf8_encode(strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn'])));
|
|
||||||
$heure = mb_detect_encoding(strftime('%H:%M', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn'])), 'UTF-8', true)
|
|
||||||
? strftime('%H:%M', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn']))
|
|
||||||
: utf8_encode(strftime('%H:%M', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn'])));
|
|
||||||
self::$articles[] = [
|
|
||||||
'<a href="' . helper::baseurl() . $this->getUrl(0) . '/' . $articleIds[$i] . '" target="_blank" >' .
|
|
||||||
$this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'title']) .
|
|
||||||
'</a>',
|
|
||||||
$date .' à '. $heure,
|
|
||||||
self::$states[$this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'state'])],
|
|
||||||
// Bouton pour afficher les commentaires de l'article
|
|
||||||
template::button('blogConfigComment' . $articleIds[$i], [
|
|
||||||
'class' => ($toApprove || $approved ) > 0 ? '' : 'buttonGrey' ,
|
|
||||||
'href' => ($toApprove || $approved ) > 0 ? helper::baseUrl() . $this->getUrl(0) . '/comment/' . $articleIds[$i] : '',
|
|
||||||
'value' => $toApprove > 0 ? $toApprove . '/' . $approved : $approved
|
|
||||||
]),
|
|
||||||
template::button('blogConfigEdit' . $articleIds[$i], [
|
|
||||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/edit/' . $articleIds[$i] . '/' . $_SESSION['csrf'],
|
|
||||||
'value' => template::ico('pencil')
|
|
||||||
]),
|
|
||||||
template::button('blogConfigDelete' . $articleIds[$i], [
|
|
||||||
'class' => 'blogConfigDelete buttonRed',
|
|
||||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $articleIds[$i] . '/' . $_SESSION['csrf'],
|
|
||||||
'value' => template::ico('cancel')
|
|
||||||
])
|
|
||||||
];
|
|
||||||
}
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'title' => 'Configuration du module',
|
'title' => 'Mise en page',
|
||||||
'view' => 'config'
|
'view' => 'layout'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Suppression
|
* Suppression
|
||||||
*/
|
*/
|
||||||
|
2
module/blog/changes.md
Normal file
2
module/blog/changes.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# version 6
|
||||||
|
- mise à la norme avec le module news : le formulaire est sorti de l'écran principal
|
@ -16,35 +16,11 @@
|
|||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col2">
|
<div class="col2">
|
||||||
<?php echo template::submit('blogConfigSubmit'); ?>
|
<?php echo template::button('blogConfigLayout', [
|
||||||
</div>
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/layout',
|
||||||
</div>
|
'ico' => 'brush',
|
||||||
<div class="row">
|
'value' => 'Mise en page'
|
||||||
<div class="col12">
|
]); ?>
|
||||||
<div class="block">
|
|
||||||
<h4>Paramètres du module</h4>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col6">
|
|
||||||
<?php echo template::checkbox('blogConfigShowFeeds', true, 'Lien du flux RSS', [
|
|
||||||
'checked' => $this->getData(['module', $this->getUrl(0), 'config', 'feeds']),
|
|
||||||
]); ?>
|
|
||||||
</div>
|
|
||||||
<div class="col6">
|
|
||||||
<?php echo template::text('blogConfigFeedslabel', [
|
|
||||||
'label' => 'Texte de l\'étiquette',
|
|
||||||
'value' => $this->getData(['module', $this->getUrl(0), 'config', 'feedsLabel'])
|
|
||||||
]); ?>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col6 offset6">
|
|
||||||
<?php echo template::select('blogConfigItemsperPage', $module::$ItemsList, [
|
|
||||||
'label' => 'Articles par page',
|
|
||||||
'selected' => $this->getData(['module', $this->getUrl(0),'config', 'itemsperPage'])
|
|
||||||
]); ?>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php echo template::formClose(); ?>
|
<?php echo template::formClose(); ?>
|
||||||
|
18
module/blog/view/layout/layout.css
Normal file
18
module/blog/view/layout/layout.css
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2022, Frédéric Tempez
|
||||||
|
* @license GNU General Public License, version 3
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** NE PAS EFFACER
|
||||||
|
* admin.css
|
||||||
|
*/
|
47
module/blog/view/layout/layout.php
Normal file
47
module/blog/view/layout/layout.php
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?php echo template::formOpen('blogLayout'); ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col2">
|
||||||
|
<?php echo template::button('blogLayoutBack', [
|
||||||
|
'class' => 'buttonGrey',
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'ico' => 'left',
|
||||||
|
'value' => 'Retour'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col2 offset8">
|
||||||
|
<?php echo template::submit('blogLayoutSubmit'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<div class="block">
|
||||||
|
<h4>Paramètres du module</h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::checkbox('blogLayoutShowFeeds', true, 'Lien du flux RSS', [
|
||||||
|
'checked' => $this->getData(['module', $this->getUrl(0), 'config', 'feeds']),
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::text('blogLayoutFeedslabel', [
|
||||||
|
'label' => 'Texte de l\'étiquette',
|
||||||
|
'value' => $this->getData(['module', $this->getUrl(0), 'config', 'feedsLabel'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col6 offset6">
|
||||||
|
<?php echo template::select('blogLayoutItemsperPage', $module::$ItemsList, [
|
||||||
|
'label' => 'Articles par page',
|
||||||
|
'selected' => $this->getData(['module', $this->getUrl(0),'config', 'itemsperPage'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php echo template::formClose(); ?>
|
||||||
|
<div class="moduleVersion">Version n°
|
||||||
|
<?php echo $module::VERSION; ?>
|
||||||
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user