forked from ZwiiCMS-Team/ZwiiCMS
Normalisation + bugs de variables
This commit is contained in:
parent
32b4f3b7de
commit
469581e37f
@ -1,11 +1,13 @@
|
||||
<?php
|
||||
|
||||
class template {
|
||||
class template
|
||||
{
|
||||
|
||||
/**
|
||||
* retourne un texte traduit
|
||||
*/
|
||||
public static function topic($text) {
|
||||
public static function topic($text)
|
||||
{
|
||||
$text = helper::translate($text);
|
||||
return $text;
|
||||
}
|
||||
@ -16,7 +18,8 @@ class template {
|
||||
* @param array $attributes Attributs ($key => $value)
|
||||
* @return string
|
||||
*/
|
||||
public static function button($nameId, array $attributes = []) {
|
||||
public static function button($nameId, array $attributes = [])
|
||||
{
|
||||
// Attributs par défaut
|
||||
$attributes = array_merge([
|
||||
'class' => '',
|
||||
@ -51,7 +54,8 @@ class template {
|
||||
* @param array $attributes Attributs ($key => $value)
|
||||
* @return string
|
||||
*/
|
||||
public static function captcha($nameId, array $attributes = []) {
|
||||
public static function captcha($nameId, array $attributes = [])
|
||||
{
|
||||
// Attributs par défaut
|
||||
$attributes = array_merge([
|
||||
'class' => '',
|
||||
@ -137,10 +141,13 @@ class template {
|
||||
// Début du wrapper
|
||||
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="captcha inputWrapper ' . $attributes['classWrapper'] . '">';
|
||||
// Label
|
||||
$html .= self::label($attributes['id'],
|
||||
'<img class="captcha' . ucFirst($attributes['type']) . '" src="' . helper::baseUrl(false) . 'site/tmp/' . $firstLetter . '.png" /> <strong>' . $operator . '</strong> <img class="captcha' . ucFirst($attributes['type']) . '" src="' . helper::baseUrl(false) . 'site/tmp/' . $secondLetter . '.png" /> en chiffres ?', [
|
||||
$html .= self::label(
|
||||
$attributes['id'],
|
||||
'<img class="captcha' . ucFirst($attributes['type']) . '" src="' . helper::baseUrl(false) . 'site/tmp/' . $firstLetter . '.png" /> <strong>' . $operator . '</strong> <img class="captcha' . ucFirst($attributes['type']) . '" src="' . helper::baseUrl(false) . 'site/tmp/' . $secondLetter . '.png" /> en chiffres ?',
|
||||
[
|
||||
'help' => $attributes['help']
|
||||
]);
|
||||
]
|
||||
);
|
||||
|
||||
// Notice
|
||||
$notice = '';
|
||||
@ -177,7 +184,8 @@ class template {
|
||||
* @param array $attributes Attributs ($key => $value)
|
||||
* @return string
|
||||
*/
|
||||
public static function checkbox($nameId, $value, $label, array $attributes = []) {
|
||||
public static function checkbox($nameId, $value, $label, array $attributes = [])
|
||||
{
|
||||
// Attributs par défaut
|
||||
$attributes = array_merge([
|
||||
'before' => true,
|
||||
@ -193,7 +201,7 @@ class template {
|
||||
$label = helper::translate($label);
|
||||
$attributes['help'] = helper::translate($attributes['help']);
|
||||
// Sauvegarde des données en cas d'erreur
|
||||
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
if ($attributes['before'] and array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
$attributes['checked'] = (bool) common::$inputBefore[$attributes['id']];
|
||||
}
|
||||
// Début du wrapper
|
||||
@ -227,7 +235,8 @@ class template {
|
||||
* @param array $attributes Attributs ($key => $value)
|
||||
* @return string
|
||||
*/
|
||||
public static function date($nameId, array $attributes = []) {
|
||||
public static function date($nameId, array $attributes = [])
|
||||
{
|
||||
// Attributs par défaut
|
||||
$attributes = array_merge([
|
||||
'autocomplete' => 'on',
|
||||
@ -249,10 +258,9 @@ class template {
|
||||
$attributes['help'] = helper::translate($attributes['help']);
|
||||
//$attributes['placeholder'] = helper::translate($attributes['placeholder']);
|
||||
// Sauvegarde des données en cas d'erreur
|
||||
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
if ($attributes['before'] and array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
$attributes['value'] = common::$inputBefore[$attributes['id']];
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$attributes['value'] = ($attributes['value'] ? helper::filter($attributes['value'], helper::FILTER_TIMESTAMP) : '');
|
||||
}
|
||||
// Début du wrapper
|
||||
@ -295,7 +303,8 @@ class template {
|
||||
* @param array $attributes Attributs ($key => $value)
|
||||
* @return string
|
||||
*/
|
||||
public static function file($nameId, array $attributes = []) {
|
||||
public static function file($nameId, array $attributes = [])
|
||||
{
|
||||
// Attributs par défaut
|
||||
$attributes = array_merge([
|
||||
'before' => true,
|
||||
@ -316,7 +325,7 @@ class template {
|
||||
$attributes['value'] = helper::translate($attributes['value']);
|
||||
$attributes['help'] = helper::translate($attributes['help']);
|
||||
// Sauvegarde des données en cas d'erreur
|
||||
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
if ($attributes['before'] and array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
$attributes['value'] = common::$inputBefore[$attributes['id']];
|
||||
}
|
||||
// Début du wrapper
|
||||
@ -380,7 +389,8 @@ class template {
|
||||
* Ferme un formulaire
|
||||
* @return string
|
||||
*/
|
||||
public static function formClose() {
|
||||
public static function formClose()
|
||||
{
|
||||
return '</form>';
|
||||
}
|
||||
|
||||
@ -389,7 +399,8 @@ class template {
|
||||
* @param string $id Id du formulaire
|
||||
* @return string
|
||||
*/
|
||||
public static function formOpen($id) {
|
||||
public static function formOpen($id)
|
||||
{
|
||||
// Ouverture formulaire
|
||||
$html = '<form id="' . $id . '" method="post">';
|
||||
// Stock le token CSRF
|
||||
@ -407,7 +418,8 @@ class template {
|
||||
* @param string $text Texte de l'aide
|
||||
* @return string
|
||||
*/
|
||||
public static function help($text) {
|
||||
public static function help($text)
|
||||
{
|
||||
return '<span class="helpButton" data-tippy-content="' . $text . '">' . self::ico('help') . '<!----></span>';
|
||||
}
|
||||
|
||||
@ -417,7 +429,8 @@ class template {
|
||||
* @param array $attributes Attributs ($key => $value)
|
||||
* @return string
|
||||
*/
|
||||
public static function hidden($nameId, array $attributes = []) {
|
||||
public static function hidden($nameId, array $attributes = [])
|
||||
{
|
||||
// Attributs par défaut
|
||||
$attributes = array_merge([
|
||||
'before' => true,
|
||||
@ -429,7 +442,7 @@ class template {
|
||||
'value' => ''
|
||||
], $attributes);
|
||||
// Sauvegarde des données en cas d'erreur
|
||||
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
if ($attributes['before'] and array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
$attributes['value'] = common::$inputBefore[$attributes['id']];
|
||||
}
|
||||
// Texte
|
||||
@ -451,7 +464,8 @@ class template {
|
||||
* @return string
|
||||
*/
|
||||
// public static function ico($ico, $margin = '', $animate = false, $fontSize = '1em') {
|
||||
public static function ico($ico, array $attributes = []) {
|
||||
public static function ico($ico, array $attributes = [])
|
||||
{
|
||||
// Attributs par défaut
|
||||
$attributes = array_merge([
|
||||
'margin' => '',
|
||||
@ -477,7 +491,8 @@ class template {
|
||||
* @param string size en pixels ou en rem
|
||||
* @return string
|
||||
*/
|
||||
public static function flag($langId, $size = 'auto') {
|
||||
public static function flag($langId, $size = 'auto')
|
||||
{
|
||||
switch ($langId) {
|
||||
case '':
|
||||
$lang = 'fr_FR';
|
||||
@ -486,8 +501,7 @@ class template {
|
||||
$lang = $langId;
|
||||
break;
|
||||
case 'selected':
|
||||
if ( isset($_COOKIE['ZWII_I18N_SITE'])
|
||||
) {
|
||||
if (isset($_COOKIE['ZWII_I18N_SITE'])) {
|
||||
$lang = $_COOKIE['ZWII_I18N_SITE'];
|
||||
} else {
|
||||
$lang = 'fr_FR';
|
||||
@ -507,7 +521,8 @@ class template {
|
||||
* @param string $text Texte du label
|
||||
* @return string
|
||||
*/
|
||||
public static function label($for, $text, array $attributes = []) {
|
||||
public static function label($for, $text, array $attributes = [])
|
||||
{
|
||||
// Attributs par défaut
|
||||
$attributes = array_merge([
|
||||
'class' => '',
|
||||
@ -515,7 +530,8 @@ class template {
|
||||
'help' => ''
|
||||
], $attributes);
|
||||
// Traduction de l'étiquette si déjà appelée par une fonction de template
|
||||
; if (
|
||||
;
|
||||
if (
|
||||
get_called_class() !== 'template'
|
||||
) {
|
||||
$attributes['help'] = helper::translate($attributes['help']);
|
||||
@ -537,7 +553,8 @@ class template {
|
||||
* @param array $attributes Attributs ($key => $value)
|
||||
* @return string
|
||||
*/
|
||||
public static function mail($nameId, array $attributes = []) {
|
||||
public static function mail($nameId, array $attributes = [])
|
||||
{
|
||||
// Attributs par défaut
|
||||
$attributes = array_merge([
|
||||
'autocomplete' => 'on',
|
||||
@ -560,7 +577,7 @@ class template {
|
||||
$attributes['help'] = helper::translate($attributes['help']);
|
||||
//$attributes['placeholder'] = helper::translate($attributes['placeholder']);
|
||||
// Sauvegarde des données en cas d'erreur
|
||||
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
if ($attributes['before'] and array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
$attributes['value'] = common::$inputBefore[$attributes['id']];
|
||||
}
|
||||
// Début du wrapper
|
||||
@ -595,7 +612,8 @@ class template {
|
||||
* @param string $notice Notice
|
||||
* @return string
|
||||
*/
|
||||
public static function notice($id, $notice) {
|
||||
public static function notice($id, $notice)
|
||||
{
|
||||
return ' <span id="' . $id . 'Notice" class="notice ' . ($notice ? '' : 'displayNone') . '">' . $notice . '</span>';
|
||||
}
|
||||
|
||||
@ -605,7 +623,8 @@ class template {
|
||||
* @param array $attributes Attributs ($key => $value)
|
||||
* @return string
|
||||
*/
|
||||
public static function password($nameId, array $attributes = []) {
|
||||
public static function password($nameId, array $attributes = [])
|
||||
{
|
||||
// Attributs par défaut
|
||||
$attributes = array_merge([
|
||||
'autocomplete' => 'on',
|
||||
@ -658,7 +677,8 @@ class template {
|
||||
* @param array $attributes Attributs ($key => $value)
|
||||
* @return string
|
||||
*/
|
||||
public static function select($nameId, array $options, array $attributes = []) {
|
||||
public static function select($nameId, array $options, array $attributes = [])
|
||||
{
|
||||
// Attributs par défaut
|
||||
$attributes = array_merge([
|
||||
'before' => true,
|
||||
@ -682,7 +702,7 @@ class template {
|
||||
$attributes['fonts'] = [];
|
||||
}
|
||||
// Sauvegarde des données en cas d'erreur
|
||||
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
if ($attributes['before'] and array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
$attributes['selected'] = common::$inputBefore[$attributes['id']];
|
||||
}
|
||||
// Début du wrapper
|
||||
@ -701,7 +721,8 @@ class template {
|
||||
}
|
||||
$html .= self::notice($attributes['id'], $notice);
|
||||
// Début sélection
|
||||
$html .= sprintf('<select %s>',
|
||||
$html .= sprintf(
|
||||
'<select %s>',
|
||||
helper::sprintAttributes($attributes)
|
||||
);
|
||||
foreach ($options as $value => $text) {
|
||||
@ -733,7 +754,8 @@ class template {
|
||||
* @param string $text Texte de la bulle
|
||||
* @return string
|
||||
*/
|
||||
public static function speech($text) {
|
||||
public static function speech($text)
|
||||
{
|
||||
return '<div class="speech"><div class="speechBubble">' . $text . '</div>' . template::ico('mimi speechMimi', ['fontSize' => '7em']) . '</div>';
|
||||
}
|
||||
|
||||
@ -743,7 +765,8 @@ class template {
|
||||
* @param array $attributes Attributs ($key => $value)
|
||||
* @return string
|
||||
*/
|
||||
public static function submit($nameId, array $attributes = []) {
|
||||
public static function submit($nameId, array $attributes = [])
|
||||
{
|
||||
// Attributs par défaut
|
||||
$attributes = array_merge([
|
||||
'class' => '',
|
||||
@ -775,7 +798,8 @@ class template {
|
||||
* @param array $attributes Attributs ($key => $value)
|
||||
* @return string
|
||||
*/
|
||||
public static function table(array $cols = [], array $body = [], array $head = [], array $attributes = [], array $rowsId = []) {
|
||||
public static function table(array $cols = [], array $body = [], array $head = [], array $attributes = [], array $rowsId = [])
|
||||
{
|
||||
// Attributs par défaut
|
||||
$attributes = array_merge([
|
||||
'class' => '',
|
||||
@ -834,7 +858,8 @@ class template {
|
||||
* @param array $attributes Attributs ($key => $value)
|
||||
* @return string
|
||||
*/
|
||||
public static function text($nameId, array $attributes = []) {
|
||||
public static function text($nameId, array $attributes = [])
|
||||
{
|
||||
// Attributs par défaut
|
||||
$attributes = array_merge([
|
||||
'autocomplete' => 'on',
|
||||
@ -857,7 +882,7 @@ class template {
|
||||
$attributes['help'] = helper::translate($attributes['help']);
|
||||
//$attributes['placeholder'] = helper::translate($attributes['placeholder']);
|
||||
// Sauvegarde des données en cas d'erreur
|
||||
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
if ($attributes['before'] and array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
$attributes['value'] = common::$inputBefore[$attributes['id']];
|
||||
}
|
||||
// Début du wrapper
|
||||
@ -892,7 +917,8 @@ class template {
|
||||
* @param array $attributes Attributs ($key => $value)
|
||||
* @return string
|
||||
*/
|
||||
public static function textarea($nameId, array $attributes = []) {
|
||||
public static function textarea($nameId, array $attributes = [])
|
||||
{
|
||||
// Attributs par défaut
|
||||
$attributes = array_merge([
|
||||
'before' => true,
|
||||
@ -912,7 +938,7 @@ class template {
|
||||
$attributes['label'] = helper::translate($attributes['label']);
|
||||
$attributes['help'] = helper::translate($attributes['help']);
|
||||
// Sauvegarde des données en cas d'erreur
|
||||
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
if ($attributes['before'] and array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||
$attributes['value'] = common::$inputBefore[$attributes['id']];
|
||||
}
|
||||
// Début du wrapper
|
||||
|
622
core/core.php
622
core/core.php
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Mises à jour suivant les versions de Zwii
|
||||
*/
|
||||
@ -46,7 +47,7 @@ if($this->getData(['core', 'dataVersion']) < 10000) {
|
||||
if (is_dir($this->getdata(['module', $parent, $galleryKey, 'config', 'directory']))) {
|
||||
$iterator = new DirectoryIterator($this->getdata(['module', $parent, $galleryKey, 'config', 'directory']));
|
||||
foreach ($iterator as $fileInfos) {
|
||||
if($fileInfos->isDot() === false AND $fileInfos->isFile() AND @getimagesize($fileInfos->getPathname())) {
|
||||
if ($fileInfos->isDot() === false and $fileInfos->isFile() and @getimagesize($fileInfos->getPathname())) {
|
||||
$this->setdata(['module', $parent, $galleryKey, 'config', 'homePicture', $fileInfos->getFilename()]);
|
||||
break;
|
||||
}
|
||||
@ -75,9 +76,11 @@ if ($this->getData(['core', 'dataVersion']) < 10092) {
|
||||
rmdir('core/vendor/fullpage/');
|
||||
}
|
||||
if (file_exists('core/vendor/tinymce/templates/fullPageSections.html')) {
|
||||
unlink ('core/vendor/tinymce/templates/fullPageSections.html'); }
|
||||
unlink('core/vendor/tinymce/templates/fullPageSections.html');
|
||||
}
|
||||
if (file_exists('core/vendor/tinymce/templates/fullPageSlides.html')) {
|
||||
unlink ('core/vendor/tinymce/templates/fullPageSlides.html'); }
|
||||
unlink('core/vendor/tinymce/templates/fullPageSlides.html');
|
||||
}
|
||||
$this->setData(['core', 'dataVersion', 10092]);
|
||||
}
|
||||
// Version 10.0.93
|
||||
@ -244,7 +247,9 @@ if ($this->getData(['core', 'dataVersion']) < 10306) {
|
||||
if ($this->getData(['page', $parent, 'moduleId']) === 'blog') {
|
||||
if (is_array($this->getData(['module', $parent]))) {
|
||||
foreach ($this->getData(['module', $parent]) as $blogKey => $blogItem) {
|
||||
if ($blogKey === 'posts' OR $blogKey === 'config') {continue;}
|
||||
if ($blogKey === 'posts' or $blogKey === 'config') {
|
||||
continue;
|
||||
}
|
||||
$data = $this->getdata(['module', $parent, $blogKey]);
|
||||
$this->deleteData(['module', $parent, $blogKey]);
|
||||
$this->setData(['module', $parent, 'posts', $blogKey, $data]);
|
||||
@ -257,7 +262,9 @@ if ($this->getData(['core', 'dataVersion']) < 10306) {
|
||||
if ($this->getData(['page', $parent, 'moduleId']) === 'news') {
|
||||
if (is_array($this->getData(['module', $parent]))) {
|
||||
foreach ($this->getData(['module', $parent]) as $newsKey => $newsItem) {
|
||||
if ($blogKey === 'posts' OR $blogKey === 'config') {continue;}
|
||||
if ($blogKey === 'posts' or $blogKey === 'config') {
|
||||
continue;
|
||||
}
|
||||
$data = $this->getdata(['module', $parent, $newsKey]);
|
||||
$this->deleteData(['module', $parent, $newsKey]);
|
||||
$this->setData(['module', $parent, 'posts', $newsKey, $data]);
|
||||
@ -334,8 +341,7 @@ if ($this->getData(['core', 'dataVersion']) < 10400) {
|
||||
// Renommer les fichier de backup
|
||||
if ($this->getInput('configAdvancedFileBackup', helper::FILTER_BOOLEAN) === false) {
|
||||
$path = realpath('site/data');
|
||||
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename)
|
||||
{
|
||||
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename) {
|
||||
if (strpos($filename, 'back.json')) {
|
||||
rename($filename, str_replace('back.json', 'backup.json', $filename));
|
||||
}
|
||||
@ -360,7 +366,6 @@ if ($this->getData(['core', 'dataVersion']) < 10400) {
|
||||
$this->setData(['module', $modules]);
|
||||
|
||||
$this->setData(['core', 'dataVersion', 10400]);
|
||||
|
||||
}
|
||||
|
||||
// Version 10.5.02
|
||||
@ -427,8 +432,7 @@ if ($this->getData(['core', 'dataVersion']) < 11000) {
|
||||
// Supprimer les fichiers de backup
|
||||
if (file_exists('site/data/.backup')) unlink('site/data/.backup');
|
||||
$path = realpath('site/data');
|
||||
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename)
|
||||
{
|
||||
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename) {
|
||||
if (strpos($filename, 'backup.json')) {
|
||||
unlink($filename);
|
||||
}
|
||||
@ -794,8 +798,10 @@ if ($this->getData(['core', 'dataVersion']) < 11400) {
|
||||
$files = $this->getData(['fonts', 'files']);
|
||||
if (is_array($files)) {
|
||||
foreach ($files as $fontId => $fontName) {
|
||||
if ( gettype($fontName) === 'string'
|
||||
&& file_exists(self::DATA_DIR . 'fonts/' . $fontName)) {
|
||||
if (
|
||||
gettype($fontName) === 'string'
|
||||
&& file_exists(self::DATA_DIR . 'fonts/' . $fontName)
|
||||
) {
|
||||
$this->setData(['fonts', 'files', $fontId, [
|
||||
'name' => ucfirst($fontId),
|
||||
'font-family' => '\'' . ucfirst($fontId) . '\', sans-serif',
|
||||
|
@ -14,7 +14,8 @@
|
||||
* @link http://zwiicms.fr/
|
||||
*/
|
||||
|
||||
class config extends common {
|
||||
class config extends common
|
||||
{
|
||||
|
||||
public static $actions = [
|
||||
'backup' => self::GROUP_ADMIN,
|
||||
@ -201,7 +202,8 @@ class config extends common {
|
||||
* Sitemap compressé et non compressé
|
||||
* Robots.txt
|
||||
*/
|
||||
public function siteMap() {
|
||||
public function siteMap()
|
||||
{
|
||||
|
||||
// Mettre à jour le site map
|
||||
$successSitemap = $this->createSitemap();
|
||||
@ -218,7 +220,8 @@ class config extends common {
|
||||
/**
|
||||
* Sauvegarde des données
|
||||
*/
|
||||
public function backup() {
|
||||
public function backup()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
// Creation du ZIP
|
||||
@ -249,9 +252,10 @@ class config extends common {
|
||||
/**
|
||||
* Réalise une copie d'écran du site
|
||||
*/
|
||||
public function configMetaImage() {
|
||||
public function configMetaImage()
|
||||
{
|
||||
// fonction désactivée pour un site local
|
||||
if ( strpos(helper::baseUrl(false),'localhost') > 0 OR strpos(helper::baseUrl(false),'127.0.0.1') > 0) {
|
||||
if (strpos(helper::baseUrl(false), 'localhost') > 0 or strpos(helper::baseUrl(false), '127.0.0.1') > 0) {
|
||||
$site = 'https://zwiicms.fr/';
|
||||
} else {
|
||||
$site = helper::baseUrl(false);
|
||||
@ -299,14 +303,15 @@ class config extends common {
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl() . 'config',
|
||||
'notification' => $notification,
|
||||
'state' => ($success === false OR empty($token)) ? false : true
|
||||
'state' => ($success === false or empty($token)) ? false : true
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Procédure d'importation
|
||||
*/
|
||||
public function restore() {
|
||||
public function restore()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
|
||||
@ -393,20 +398,24 @@ class config extends common {
|
||||
$zip->close();
|
||||
|
||||
// Restaurer les users originaux d'une v10 si option cochée
|
||||
if (!empty($users) &&
|
||||
if (
|
||||
!empty($users) &&
|
||||
$version >= 10 &&
|
||||
$this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true) {
|
||||
$this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true
|
||||
) {
|
||||
$this->setData(['user', $users]);
|
||||
}
|
||||
}
|
||||
|
||||
// Conversion vers des Url relatives
|
||||
/*
|
||||
if ($this->getData(['core', 'baseUrl'])) {
|
||||
$url = str_replace('?', '', $this->getData(['core', 'baseUrl']));
|
||||
// Suppresion de la base Url
|
||||
// Suppression de la base Url
|
||||
$this->updateBaseUrl($url);
|
||||
// Effacer la baseUrl
|
||||
$this->deleteData(['core', 'baseUrl']);
|
||||
}
|
||||
}*/
|
||||
|
||||
// Message de notification
|
||||
$notification = $success === true ? 'Restaurer effectuée avec succès' : 'Erreur inconnue';
|
||||
@ -432,13 +441,16 @@ class config extends common {
|
||||
/**
|
||||
* Configuration
|
||||
*/
|
||||
public function index() {
|
||||
public function index()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
|
||||
// Basculement en mise à jour auto, remise à 0 du compteur
|
||||
if ($this->getData(['config','autoUpdate']) === false &&
|
||||
$this->getInput('configAutoUpdate', helper::FILTER_BOOLEAN) === true) {
|
||||
if (
|
||||
$this->getData(['config', 'autoUpdate']) === false &&
|
||||
$this->getInput('configAutoUpdate', helper::FILTER_BOOLEAN) === true
|
||||
) {
|
||||
$this->setData(['core', 'lastAutoUpdate', 0]);
|
||||
}
|
||||
|
||||
@ -500,8 +512,7 @@ class config extends common {
|
||||
// Efface les fichiers de backup lorsque l'option est désactivée
|
||||
if ($this->getInput('configFileBackup', helper::FILTER_BOOLEAN) === false) {
|
||||
$path = realpath('site/data');
|
||||
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename)
|
||||
{
|
||||
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename) {
|
||||
if (strpos($filename, 'backup.json')) {
|
||||
unlink($filename);
|
||||
}
|
||||
@ -516,7 +527,7 @@ class config extends common {
|
||||
$rewrite = $this->getInput('configRewrite', helper::FILTER_BOOLEAN);
|
||||
if (
|
||||
$rewrite
|
||||
AND helper::checkRewrite() === false
|
||||
and helper::checkRewrite() === false
|
||||
) {
|
||||
// Ajout des lignes dans le .htaccess
|
||||
$fileContent = file_get_contents('.htaccess');
|
||||
@ -541,7 +552,7 @@ class config extends common {
|
||||
// Désactive la réécriture d'URL
|
||||
elseif (
|
||||
$rewrite === false
|
||||
AND helper::checkRewrite()
|
||||
and helper::checkRewrite()
|
||||
) {
|
||||
// Suppression des lignes dans le .htaccess
|
||||
$fileContent = file_get_contents('.htaccess');
|
||||
@ -580,7 +591,8 @@ class config extends common {
|
||||
}
|
||||
|
||||
|
||||
public function script() {
|
||||
public function script()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
// Ecrire les fichiers de script
|
||||
@ -615,7 +627,8 @@ class config extends common {
|
||||
* Vider le fichier de log
|
||||
*/
|
||||
|
||||
public function logReset() {
|
||||
public function logReset()
|
||||
{
|
||||
if (file_exists(self::DATA_DIR . 'journal.log')) {
|
||||
unlink(self::DATA_DIR . 'journal.log');
|
||||
// Créer les en-têtes des journaux
|
||||
@ -637,7 +650,6 @@ class config extends common {
|
||||
'state' => false
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -645,7 +657,8 @@ class config extends common {
|
||||
/**
|
||||
* Télécharger le fichier de log
|
||||
*/
|
||||
public function logDownload() {
|
||||
public function logDownload()
|
||||
{
|
||||
$fileName = self::DATA_DIR . 'journal.log';
|
||||
if (file_exists($fileName)) {
|
||||
ob_start();
|
||||
@ -670,7 +683,8 @@ class config extends common {
|
||||
/**
|
||||
* Tableau des IP blacklistés
|
||||
*/
|
||||
public function blacklistDownload () {
|
||||
public function blacklistDownload()
|
||||
{
|
||||
ob_start();
|
||||
$fileName = self::TEMP_DIR . 'blacklist.log';
|
||||
$d = 'Date dernière tentative;Heure dernière tentative;Id;Adresse IP;Nombre d\'échecs' . PHP_EOL;
|
||||
@ -708,7 +722,8 @@ class config extends common {
|
||||
* Réinitialiser les ip blacklistées
|
||||
*/
|
||||
|
||||
public function blacklistReset() {
|
||||
public function blacklistReset()
|
||||
{
|
||||
if (file_exists(self::DATA_DIR . 'blacklist.json')) {
|
||||
$this->setData(['blacklist', []]);
|
||||
// Valeurs en sortie
|
||||
@ -732,7 +747,8 @@ class config extends common {
|
||||
/**
|
||||
* Récupération des backups auto dans le gestionnaire de fichiers
|
||||
*/
|
||||
public function copyBackups() {
|
||||
public function copyBackups()
|
||||
{
|
||||
|
||||
$success = $this->copyDir(self::BACKUP_DIR, self::FILE_DIR . 'source/backup');
|
||||
|
||||
@ -748,15 +764,15 @@ class config extends common {
|
||||
/**
|
||||
* Vider le dosser des sauvegardes automatisées
|
||||
*/
|
||||
public function delBackups() {
|
||||
public function delBackups()
|
||||
{
|
||||
$path = realpath(self::BACKUP_DIR);
|
||||
$success = $fail = 0;
|
||||
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename)
|
||||
{
|
||||
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename) {
|
||||
if (strpos($filename, '.zip')) {
|
||||
|
||||
$r = unlink($filename);
|
||||
$success = $r === true ? $succes + 1 : $success;
|
||||
$success = $r === true ? $success + 1 : $success;
|
||||
$fail = $r === false ? $fail + 1 : $fail;
|
||||
}
|
||||
}
|
||||
@ -768,7 +784,4 @@ class config extends common {
|
||||
'state' => true
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -47,7 +47,8 @@
|
||||
<label id="helpBlacklist">Liste noire :
|
||||
<?php echo template::help(
|
||||
'La liste noire énumère les tentatives de connexion à partir de comptes inexistants. Sont stockés : la date, l\'heure, le nom du compte et l\'IP.
|
||||
Après le nombre de tentatives autorisées, l\'IP et le compte sont bloqués.');
|
||||
Après le nombre de tentatives autorisées, l\'IP et le compte sont bloqués.'
|
||||
);
|
||||
?>
|
||||
</label>
|
||||
<?php echo template::button('ConnectBlackListDownload', [
|
||||
|
@ -14,7 +14,8 @@
|
||||
*/
|
||||
|
||||
|
||||
class install extends common {
|
||||
class install extends common
|
||||
{
|
||||
|
||||
public static $actions = [
|
||||
'index' => self::GROUP_VISITOR,
|
||||
@ -41,7 +42,8 @@ class install extends common {
|
||||
/**
|
||||
* Pré-installation - choix de la langue
|
||||
*/
|
||||
public function index() {
|
||||
public function index()
|
||||
{
|
||||
// Accès refusé
|
||||
if ($this->getData(['user']) !== []) {
|
||||
// Valeurs en sortie
|
||||
@ -87,7 +89,8 @@ class install extends common {
|
||||
/**
|
||||
* post Installation
|
||||
*/
|
||||
public function postInstall() {
|
||||
public function postInstall()
|
||||
{
|
||||
// Accès refusé
|
||||
if ($this->getData(['user']) !== []) {
|
||||
// Valeurs en sortie
|
||||
@ -152,7 +155,8 @@ class install extends common {
|
||||
|
||||
// Effacer le dossier de contenu fr créé par défaut si la langue est différente.
|
||||
|
||||
if (self::$i18nContent !== 'fr_FR'
|
||||
if (
|
||||
self::$i18nContent !== 'fr_FR'
|
||||
&& is_dir('site/data/fr')
|
||||
) {
|
||||
$this->removeDir('site/data/fr');
|
||||
@ -245,7 +249,8 @@ class install extends common {
|
||||
/**
|
||||
* Étapes de mise à jour
|
||||
*/
|
||||
public function steps() {
|
||||
public function steps()
|
||||
{
|
||||
switch ($this->getInput('step', helper::FILTER_INT)) {
|
||||
// Préparation
|
||||
case 1:
|
||||
@ -344,7 +349,8 @@ class install extends common {
|
||||
);
|
||||
}
|
||||
// Recopie htaccess
|
||||
if ($this->getData(['config','autoUpdateHtaccess']) &&
|
||||
if (
|
||||
$this->getData(['config', 'autoUpdateHtaccess']) &&
|
||||
$success && file_exists('.htaccess.bak')
|
||||
) {
|
||||
// L'écraser avec le backup
|
||||
@ -367,7 +373,8 @@ class install extends common {
|
||||
/**
|
||||
* Mise à jour
|
||||
*/
|
||||
public function update() {
|
||||
public function update()
|
||||
{
|
||||
// Nouvelle version
|
||||
self::$newVersion = helper::getUrlContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/version');
|
||||
// Valeurs en sortie
|
||||
@ -377,6 +384,4 @@ class install extends common {
|
||||
'view' => 'update'
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -13,7 +13,8 @@
|
||||
* @link http://zwiicms.fr/
|
||||
*/
|
||||
|
||||
class maintenance extends common {
|
||||
class maintenance extends common
|
||||
{
|
||||
|
||||
public static $actions = [
|
||||
'index' => self::GROUP_VISITOR
|
||||
@ -22,15 +23,18 @@ class maintenance extends common {
|
||||
/**
|
||||
* Maintenance
|
||||
*/
|
||||
public function index() {
|
||||
public function index()
|
||||
{
|
||||
// Redirection vers l'accueil après rafraîchissement et que la maintenance est terminée.
|
||||
if ($this->getData(['config', 'maintenance']) == False) {
|
||||
header('Location:' . helper::baseUrl());
|
||||
exit();
|
||||
}
|
||||
// Page perso définie et existante
|
||||
if ($this->getData(['locale','page302']) !== 'none'
|
||||
AND $this->getData(['page',$this->getData(['locale','page302'])]) ) {
|
||||
if (
|
||||
$this->getData(['locale', 'page302']) !== 'none'
|
||||
and $this->getData(['page', $this->getData(['locale', 'page302'])])
|
||||
) {
|
||||
$this->addOutput([
|
||||
'display' => self::DISPLAY_LAYOUT_LIGHT,
|
||||
'title' => $this->getData(['page', $this->getData(['locale', 'page302']), 'hideTitle'])
|
||||
@ -49,5 +53,4 @@ class maintenance extends common {
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -14,7 +14,8 @@
|
||||
* @link http://zwiicms.fr/
|
||||
*/
|
||||
|
||||
class page extends common {
|
||||
class page extends common
|
||||
{
|
||||
|
||||
public static $actions = [
|
||||
'add' => self::GROUP_MODERATOR,
|
||||
@ -68,7 +69,8 @@ class page extends common {
|
||||
/**
|
||||
* Duplication
|
||||
*/
|
||||
public function duplicate() {
|
||||
public function duplicate()
|
||||
{
|
||||
// Adresse sans le token
|
||||
$url = explode('&', $this->getUrl(2));
|
||||
// La page n'existe pas
|
||||
@ -84,8 +86,7 @@ class page extends common {
|
||||
'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
|
||||
'notification' => 'Jeton invalide'
|
||||
]);
|
||||
}
|
||||
elseif ($_GET['csrf'] !== $_SESSION['csrf']) {
|
||||
} elseif ($_GET['csrf'] !== $_SESSION['csrf']) {
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
|
||||
@ -126,7 +127,8 @@ class page extends common {
|
||||
/**
|
||||
* Création
|
||||
*/
|
||||
public function add() {
|
||||
public function add()
|
||||
{
|
||||
$pageTitle = 'Nouvelle page';
|
||||
$pageId = helper::increment(helper::filter($pageTitle, helper::FILTER_ID), $this->getData(['page']));
|
||||
$this->setData([
|
||||
@ -181,7 +183,8 @@ class page extends common {
|
||||
/**
|
||||
* Suppression
|
||||
*/
|
||||
public function delete() {
|
||||
public function delete()
|
||||
{
|
||||
// $url prend l'adresse sans le token
|
||||
$url = explode('&', $this->getUrl(2));
|
||||
// La page n'existe pas
|
||||
@ -197,8 +200,7 @@ class page extends common {
|
||||
'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
|
||||
'notification' => 'Jeton invalide'
|
||||
]);
|
||||
}
|
||||
elseif ($_GET['csrf'] !== $_SESSION['csrf']) {
|
||||
} elseif ($_GET['csrf'] !== $_SESSION['csrf']) {
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
|
||||
@ -260,8 +262,7 @@ class page extends common {
|
||||
'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
|
||||
'notification' => 'Jeton invalide'
|
||||
]);
|
||||
}
|
||||
elseif ($_GET['csrf'] !== $_SESSION['csrf']) {
|
||||
} elseif ($_GET['csrf'] !== $_SESSION['csrf']) {
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
|
||||
@ -282,7 +283,8 @@ class page extends common {
|
||||
// Effacer le dossier du module
|
||||
$moduleId = $this->getData(['page', $url[0], 'moduleId']);
|
||||
$modulesData = helper::getModules();
|
||||
if ( array_key_exists($moduleId, $modulesData)
|
||||
if (
|
||||
array_key_exists($moduleId, $modulesData)
|
||||
&& is_dir($modulesData[$moduleId]['dataDirectory'] . $url[0])
|
||||
) {
|
||||
$this->removeDir($modulesData[$moduleId]['dataDirectory'] . $url[0]);
|
||||
@ -310,7 +312,8 @@ class page extends common {
|
||||
/**
|
||||
* Édition
|
||||
*/
|
||||
public function edit() {
|
||||
public function edit()
|
||||
{
|
||||
// La page n'existe pas
|
||||
if ($this->getData(['page', $this->getUrl(2)]) === null) {
|
||||
// Valeurs en sortie
|
||||
@ -414,13 +417,11 @@ class page extends common {
|
||||
// Incrémente pour la prochaine position
|
||||
$lastPosition++;
|
||||
}
|
||||
|
||||
}
|
||||
if ($this->getinput('pageEditBlock') !== 'bar') {
|
||||
$barLeft = $this->getinput('pageEditBarLeft');
|
||||
$barRight = $this->getinput('pageEditBarRight');
|
||||
$hideTitle = $this->getInput('pageEditHideTitle', helper::FILTER_BOOLEAN);
|
||||
|
||||
} else {
|
||||
// Une barre ne peut pas avoir de barres
|
||||
$barLeft = "";
|
||||
@ -535,8 +536,10 @@ class page extends common {
|
||||
}
|
||||
// Pages barre latérales
|
||||
foreach ($this->getHierarchy(null, false, true) as $parentPageId => $childrenPageIds) {
|
||||
if($parentPageId !== $this->getUrl(2) &&
|
||||
$this->getData(['page', $parentPageId, 'block']) === 'bar') {
|
||||
if (
|
||||
$parentPageId !== $this->getUrl(2) &&
|
||||
$this->getData(['page', $parentPageId, 'block']) === 'bar'
|
||||
) {
|
||||
self::$pagesBarId[$parentPageId] = $this->getData(['page', $parentPageId, 'title']);
|
||||
}
|
||||
}
|
||||
@ -554,11 +557,13 @@ class page extends common {
|
||||
/**
|
||||
* Éditeur de feuille de style
|
||||
*/
|
||||
public function cssEditor() {
|
||||
public function cssEditor()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
// Enregistre le CSS
|
||||
$this->setData(['page', $this->getUrl(2), 'css',
|
||||
$this->setData([
|
||||
'page', $this->getUrl(2), 'css',
|
||||
$this->getInput('pageCssEditorContent', null)
|
||||
]);
|
||||
// Valeurs en sortie
|
||||
@ -581,11 +586,13 @@ class page extends common {
|
||||
/**
|
||||
* Éditeur de feuille de style
|
||||
*/
|
||||
public function jsEditor() {
|
||||
public function jsEditor()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
// Enregistre le JS
|
||||
$this->setData(['page', $this->getUrl(2), 'js',
|
||||
$this->setData([
|
||||
'page', $this->getUrl(2), 'js',
|
||||
$this->getInput('pageJsEditorContent', null)
|
||||
]);
|
||||
// Valeurs en sortie
|
||||
@ -604,5 +611,4 @@ class page extends common {
|
||||
'view' => 'jsEditor'
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -14,7 +14,8 @@
|
||||
* @link http://zwiicms.fr/
|
||||
*/
|
||||
|
||||
class plugin extends common {
|
||||
class plugin extends common
|
||||
{
|
||||
|
||||
public static $actions = [
|
||||
'index' => self::GROUP_ADMIN,
|
||||
@ -52,7 +53,8 @@ class plugin extends common {
|
||||
/*
|
||||
* Effacement d'un module installé et non utilisé
|
||||
*/
|
||||
public function delete() {
|
||||
public function delete()
|
||||
{
|
||||
|
||||
// Jeton incorrect
|
||||
if ($this->getUrl(3) !== $_SESSION['csrf']) {
|
||||
@ -62,8 +64,7 @@ class plugin extends common {
|
||||
'state' => false,
|
||||
'notification' => 'Action non autorisée'
|
||||
]);
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
// Suppression des dossiers
|
||||
$infoModules = helper::getModules();
|
||||
$module = $this->getUrl(2);
|
||||
@ -79,8 +80,7 @@ class plugin extends common {
|
||||
$notification = 'Module ' . $module . ' désinstallé, il reste des données dans ' . $infoModules[$this->getUrl(2)]['dataDirectory'];
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
$success = false;
|
||||
$notification = 'La suppression a échouée';
|
||||
}
|
||||
@ -98,7 +98,8 @@ class plugin extends common {
|
||||
* Installation d'un module
|
||||
* Fonction utilisée par upload et storeUpload
|
||||
*/
|
||||
private function install($moduleFileName, $checkValid){
|
||||
private function install($moduleFileName, $checkValid)
|
||||
{
|
||||
|
||||
// Dossier temporaire
|
||||
$tempFolder = uniqid() . '/';
|
||||
@ -127,8 +128,7 @@ class plugin extends common {
|
||||
* 'download" => 'module/download'
|
||||
*/
|
||||
|
||||
if (file_exists(self::TEMP_DIR . $tempFolder . 'desc.json')
|
||||
) {
|
||||
if (file_exists(self::TEMP_DIR . $tempFolder . 'desc.json')) {
|
||||
$module = json_decode(file_get_contents(self::TEMP_DIR . $tempFolder . 'desc.json'), true);
|
||||
} else {
|
||||
// Message de retour
|
||||
@ -227,7 +227,8 @@ class plugin extends common {
|
||||
$t = isset($versionInstalled) ? ' actualisé' : 'installé';
|
||||
$this->removeDir(self::TEMP_DIR . $tempFolder);
|
||||
$zip->close();
|
||||
return(['success' => $success,
|
||||
return ([
|
||||
'success' => $success,
|
||||
'notification' => $success ? 'Le module ' . $module['name'] . ' a été ' . $t
|
||||
: 'Erreur inconnue, le module n\'est pas installé'
|
||||
]);
|
||||
@ -242,17 +243,18 @@ class plugin extends common {
|
||||
}
|
||||
} else {
|
||||
// Message de retour
|
||||
return(['success' => $success,
|
||||
return ([
|
||||
'success' => false,
|
||||
'notification' => 'Impossible d\'ouvrir l\'archive'
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/***
|
||||
* Installation d'un module à partir du gestionnaire de fichier
|
||||
*/
|
||||
public function upload() {
|
||||
public function upload()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
// Installation d'un module
|
||||
@ -281,7 +283,8 @@ class plugin extends common {
|
||||
/***
|
||||
* Installation d'un module depuis le catalogue
|
||||
*/
|
||||
public function uploadItem() {
|
||||
public function uploadItem()
|
||||
{
|
||||
// Jeton incorrect
|
||||
if ($this->getUrl(3) !== $_SESSION['csrf']) {
|
||||
// Valeurs en sortie
|
||||
@ -333,7 +336,8 @@ class plugin extends common {
|
||||
/**
|
||||
* Catalogue des modules sur le site ZwiiCMS.fr
|
||||
*/
|
||||
public function store() {
|
||||
public function store()
|
||||
{
|
||||
$store = json_decode(helper::getUrlContents(self::BASEURL_STORE . self::MODULE_STORE . 'list'), true);
|
||||
if ($store) {
|
||||
// Modules installés
|
||||
@ -389,7 +393,8 @@ class plugin extends common {
|
||||
/**
|
||||
* Détail d'un objet du catalogue
|
||||
*/
|
||||
public function item() {
|
||||
public function item()
|
||||
{
|
||||
$store = json_decode(helper::getUrlContents(self::BASEURL_STORE . self::MODULE_STORE . 'list'), true);
|
||||
self::$storeItem = $store[$this->getUrl(2)];
|
||||
self::$storeItem['fileDate'] = mb_detect_encoding(strftime('%d %B %Y', self::$storeItem['fileDate']), 'UTF-8', true)
|
||||
@ -405,12 +410,15 @@ class plugin extends common {
|
||||
/**
|
||||
* Gestion des modules
|
||||
*/
|
||||
public function index() {
|
||||
public function index()
|
||||
{
|
||||
|
||||
// Tableau des langues rédigées
|
||||
foreach (self::$languages as $key => $value) {
|
||||
if ($this->getData(['config','i18n', $key]) === 'site' ||
|
||||
$key === 'fr_FR') {
|
||||
if (
|
||||
$this->getData(['config', 'i18n', $key]) === 'site' ||
|
||||
$key === 'fr_FR'
|
||||
) {
|
||||
$i18nSites[$key] = $value;
|
||||
}
|
||||
}
|
||||
@ -446,7 +454,6 @@ class plugin extends common {
|
||||
if (array_search($key, $pagesModules[$keyi18n])) {
|
||||
unset($orphans[$key]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
$orphans = array_flip($orphans);
|
||||
@ -503,12 +510,12 @@ class plugin extends common {
|
||||
// Avec les commandes de sauvegarde et de restauration
|
||||
|
||||
$keyi18n = self::$i18nContent;
|
||||
if (isset($pagesInfos) &&
|
||||
is_array($pagesInfos[self::$i18nContent]) )
|
||||
{
|
||||
if (
|
||||
isset($pagesInfos) &&
|
||||
is_array($pagesInfos[self::$i18nContent])
|
||||
) {
|
||||
foreach ($pagesInfos[self::$i18nContent] as $keyPage => $value) {
|
||||
if (isset($infoModules[$pagesInfos[$keyi18n][$keyPage]['moduleId']]))
|
||||
{
|
||||
if (isset($infoModules[$pagesInfos[$keyi18n][$keyPage]['moduleId']])) {
|
||||
// Co[nstruire le tableau de sortie
|
||||
self::$modulesData[] = [
|
||||
$infoModules[$pagesInfos[$keyi18n][$keyPage]['moduleId']]['realName'],
|
||||
@ -548,7 +555,8 @@ class plugin extends common {
|
||||
* Sauvegarde un module sans les données
|
||||
*/
|
||||
|
||||
public function save() {
|
||||
public function save()
|
||||
{
|
||||
// Jeton incorrect
|
||||
if ($this->getUrl(4) !== $_SESSION['csrf']) {
|
||||
// Valeurs en sortie
|
||||
@ -608,7 +616,8 @@ class plugin extends common {
|
||||
* 4 : pageId
|
||||
* 5 : CSRF
|
||||
*/
|
||||
public function dataDelete() {
|
||||
public function dataDelete()
|
||||
{
|
||||
// Jeton incorrect
|
||||
if ($this->getUrl(5) !== $_SESSION['csrf']) {
|
||||
// Valeurs en sortie
|
||||
@ -627,8 +636,6 @@ class plugin extends common {
|
||||
'state' => true
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -640,7 +647,8 @@ class plugin extends common {
|
||||
* 4 : pageId
|
||||
* 5 : CSRF
|
||||
*/
|
||||
public function dataExport() {
|
||||
public function dataExport()
|
||||
{
|
||||
// Jeton incorrect
|
||||
if ($this->getUrl(5) !== $_SESSION['csrf']) {
|
||||
// Valeurs en sortie
|
||||
@ -675,8 +683,7 @@ class plugin extends common {
|
||||
|
||||
|
||||
// création du zip
|
||||
if ($success)
|
||||
{
|
||||
if ($success) {
|
||||
$fileName = $this->getUrl(2) . '-' . $this->getUrl(3) . '-' . $this->getUrl(4) . '.zip';
|
||||
$this->makeZip($fileName, $tmpFolder);
|
||||
if (file_exists($fileName)) {
|
||||
@ -705,7 +712,8 @@ class plugin extends common {
|
||||
/*
|
||||
* Importer des données d'un module externes ou interne à module.json
|
||||
*/
|
||||
public function dataImport(){
|
||||
public function dataImport()
|
||||
{
|
||||
|
||||
// Soumission du formulaire d'importation du module dans une page libre
|
||||
if ($this->isPost()) {
|
||||
@ -773,7 +781,8 @@ class plugin extends common {
|
||||
*/
|
||||
self::$pagesList = $this->getHierarchy(null, null, null);
|
||||
foreach (self::$pagesList as $page => $pageId) {
|
||||
if ($this->getData(['page',$page,'block']) === 'bar' ||
|
||||
if (
|
||||
$this->getData(['page', $page, 'block']) === 'bar' ||
|
||||
//$this->getData(['page',$page,'disable']) === true ||
|
||||
$this->getData(['page', $page, 'moduleId']) !== ''
|
||||
) {
|
||||
@ -788,7 +797,4 @@ class plugin extends common {
|
||||
'view' => 'dataImport'
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -38,8 +38,10 @@ class sitemap extends common
|
||||
}
|
||||
// ou articles d'un blog
|
||||
|
||||
if ($this->getData(['page', $parentId, 'moduleId']) === 'blog' &&
|
||||
!empty($this->getData(['module',$parentId, 'posts' ]))) {
|
||||
if (
|
||||
$this->getData(['page', $parentId, 'moduleId']) === 'blog' &&
|
||||
!empty($this->getData(['module', $parentId, 'posts']))
|
||||
) {
|
||||
$items .= '<ul>';
|
||||
// Ids des articles par ordre de publication
|
||||
$articleIdsPublishedOns = helper::arrayColumn($this->getData(['module', $parentId, 'posts']), 'publishedOn', 'SORT_DESC');
|
||||
@ -74,8 +76,10 @@ class sitemap extends common
|
||||
$items .= '</li>';
|
||||
|
||||
// Articles d'une sous-page blog
|
||||
if ($this->getData(['page', $childId, 'moduleId']) === 'blog' &&
|
||||
!empty($this->getData(['module', $childId, 'posts' ]))) {
|
||||
if (
|
||||
$this->getData(['page', $childId, 'moduleId']) === 'blog' &&
|
||||
!empty($this->getData(['module', $childId, 'posts']))
|
||||
) {
|
||||
$items .= '<ul>';
|
||||
// Ids des articles par ordre de publication
|
||||
$articleIdsPublishedOns = helper::arrayColumn($this->getData(['module', $childId, 'posts']), 'publishedOn', 'SORT_DESC');
|
||||
|
@ -14,7 +14,8 @@
|
||||
* @copyright Copyright (C) 2018-2022, Frédéric Tempez
|
||||
*/
|
||||
|
||||
class theme extends common {
|
||||
class theme extends common
|
||||
{
|
||||
|
||||
public static $actions = [
|
||||
'advanced' => self::GROUP_ADMIN,
|
||||
@ -51,21 +52,25 @@ class theme extends common {
|
||||
public static $footerblocks = [
|
||||
1 => [
|
||||
'hide' => 'Masqué',
|
||||
'center' => 'Affiché' ],
|
||||
'center' => 'Affiché'
|
||||
],
|
||||
2 => [
|
||||
'hide' => 'Masqué',
|
||||
'left' => 'À gauche',
|
||||
'right' => 'À droite' ],
|
||||
'right' => 'À droite'
|
||||
],
|
||||
3 => [
|
||||
'hide' => 'Masqué',
|
||||
'left' => 'À gauche',
|
||||
'center' => 'Au centre',
|
||||
'right' => 'À droite' ],
|
||||
'right' => 'À droite'
|
||||
],
|
||||
4 => [
|
||||
'hide' => 'Masqué',
|
||||
'left' => 'En haut',
|
||||
'center' => 'Au milieu',
|
||||
'right' => 'En bas' ]
|
||||
'right' => 'En bas'
|
||||
]
|
||||
];
|
||||
|
||||
public static $fontWeights = [
|
||||
@ -240,7 +245,8 @@ class theme extends common {
|
||||
/**
|
||||
* Thème des écrans d'administration
|
||||
*/
|
||||
public function admin() {
|
||||
public function admin()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
$this->setData(['admin', [
|
||||
@ -283,7 +289,8 @@ class theme extends common {
|
||||
/**
|
||||
* Mode avancé
|
||||
*/
|
||||
public function advanced() {
|
||||
public function advanced()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
// Enregistre le CSS
|
||||
@ -308,7 +315,8 @@ class theme extends common {
|
||||
/**
|
||||
* Options de l'arrière plan
|
||||
*/
|
||||
public function body() {
|
||||
public function body()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
$this->setData(['theme', 'body', [
|
||||
@ -341,12 +349,15 @@ class theme extends common {
|
||||
/**
|
||||
* Options du pied de page
|
||||
*/
|
||||
public function footer() {
|
||||
public function footer()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
if ( $this->getInput('themeFooterCopyrightPosition') === 'hide' &&
|
||||
if (
|
||||
$this->getInput('themeFooterCopyrightPosition') === 'hide' &&
|
||||
$this->getInput('themeFooterSocialsPosition') === 'hide' &&
|
||||
$this->getInput('themeFooterTextPosition') === 'hide' ) {
|
||||
$this->getInput('themeFooterTextPosition') === 'hide'
|
||||
) {
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'notification' => 'Sélectionnez au moins un contenu à afficher',
|
||||
@ -399,8 +410,10 @@ class theme extends common {
|
||||
// Liste des pages
|
||||
self::$pagesList = $this->getData(['page']);
|
||||
foreach (self::$pagesList as $page => $pageId) {
|
||||
if ($this->getData(['page',$page,'block']) === 'bar' ||
|
||||
$this->getData(['page',$page,'disable']) === true) {
|
||||
if (
|
||||
$this->getData(['page', $page, 'block']) === 'bar' ||
|
||||
$this->getData(['page', $page, 'disable']) === true
|
||||
) {
|
||||
unset(self::$pagesList[$page]);
|
||||
}
|
||||
}
|
||||
@ -422,7 +435,8 @@ class theme extends common {
|
||||
/**
|
||||
* Options de la bannière
|
||||
*/
|
||||
public function header() {
|
||||
public function header()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
// Modification des URL des images dans la bannière perso
|
||||
@ -464,16 +478,15 @@ class theme extends common {
|
||||
'featureFiles' => $files
|
||||
]]);
|
||||
// Modification de la position du menu selon la position de la bannière
|
||||
if ( $this->getData(['theme','header','position']) == 'site' )
|
||||
{
|
||||
if ($this->getData(['theme', 'header', 'position']) == 'site') {
|
||||
$this->setData(['theme', 'menu', 'position', str_replace('body-', 'site-', $this->getData(['theme', 'menu', 'position']))]);
|
||||
}
|
||||
if ( $this->getData(['theme','header','position']) == 'body')
|
||||
{
|
||||
if ($this->getData(['theme', 'header', 'position']) == 'body') {
|
||||
$this->setData(['theme', 'menu', 'position', str_replace('site-', 'body-', $this->getData(['theme', 'menu', 'position']))]);
|
||||
}
|
||||
// Menu accroché à la bannière qui devient cachée
|
||||
if ( $this->getData(['theme','header','position']) == 'hide' &&
|
||||
if (
|
||||
$this->getData(['theme', 'header', 'position']) == 'hide' &&
|
||||
in_array($this->getData(['theme', 'menu', 'position']), ['body-first', 'site-first', 'body-first', 'site-second'])
|
||||
) {
|
||||
$this->setData(['theme', 'menu', 'position', 'site']);
|
||||
@ -503,7 +516,8 @@ class theme extends common {
|
||||
/**
|
||||
* Accueil de la personnalisation
|
||||
*/
|
||||
public function index() {
|
||||
public function index()
|
||||
{
|
||||
|
||||
// Restaurer les fontes utilisateurs
|
||||
$this->setFonts('user');
|
||||
@ -518,7 +532,8 @@ class theme extends common {
|
||||
/**
|
||||
* Options du menu
|
||||
*/
|
||||
public function menu() {
|
||||
public function menu()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
$this->setData(['theme', 'menu', [
|
||||
@ -569,7 +584,8 @@ class theme extends common {
|
||||
/**
|
||||
* Options des fontes
|
||||
*/
|
||||
public function fonts() {
|
||||
public function fonts()
|
||||
{
|
||||
|
||||
// Toutes les fontes installées sont chargées
|
||||
$this->setFonts('all');
|
||||
@ -637,7 +653,8 @@ class theme extends common {
|
||||
/**
|
||||
* Ajouter une fonte
|
||||
*/
|
||||
public function fontAdd() {
|
||||
public function fontAdd()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
// Type d'import en ligne ou local
|
||||
@ -657,17 +674,20 @@ class theme extends common {
|
||||
$this->deleteData(['fonts', $typeFlip, $fontId]);
|
||||
}
|
||||
// Stocker la fonte
|
||||
$this->setData(['fonts',
|
||||
$this->setData([
|
||||
'fonts',
|
||||
$type,
|
||||
$fontId, [
|
||||
'name' => $fontName,
|
||||
'font-family' => $fontFamilyName,
|
||||
'resource' => $ressource
|
||||
]]);
|
||||
]
|
||||
]);
|
||||
|
||||
|
||||
// Copier la fonte si le nom du fichier est fourni
|
||||
if ( $type === 'files' &&
|
||||
if (
|
||||
$type === 'files' &&
|
||||
file_exists(self::FILE_DIR . 'source/' . $ressource)
|
||||
) {
|
||||
copy(self::FILE_DIR . 'source/' . $ressource, self::DATA_DIR . 'fonts/' . $ressource);
|
||||
@ -699,7 +719,8 @@ class theme extends common {
|
||||
/**
|
||||
* Ajouter une fonte
|
||||
*/
|
||||
public function fontEdit() {
|
||||
public function fontEdit()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
// Type d'import en ligne ou local
|
||||
@ -718,15 +739,18 @@ class theme extends common {
|
||||
$this->deleteData(['fonts', $typeFlip, $fontId]);
|
||||
}
|
||||
// Stocker les fontes
|
||||
$this->setData(['fonts',
|
||||
$this->setData([
|
||||
'fonts',
|
||||
$type,
|
||||
$fontId, [
|
||||
'name' => $fontName,
|
||||
'font-family' => $fontFamilyName,
|
||||
'resource' => $ressource
|
||||
]]);
|
||||
]
|
||||
]);
|
||||
// Copier la fonte si le nom du fichier est fourni
|
||||
if ( $type === 'files' &&
|
||||
if (
|
||||
$type === 'files' &&
|
||||
file_exists(self::FILE_DIR . 'source/' . $ressource)
|
||||
) {
|
||||
copy(self::FILE_DIR . 'source/' . $ressource, self::DATA_DIR . 'fonts/' . $ressource);
|
||||
@ -749,7 +773,8 @@ class theme extends common {
|
||||
/**
|
||||
* Effacer une fonte
|
||||
*/
|
||||
public function fontDelete() {
|
||||
public function fontDelete()
|
||||
{
|
||||
// Jeton incorrect
|
||||
if ($this->getUrl(4) !== $_SESSION['csrf']) {
|
||||
// Valeurs en sortie
|
||||
@ -765,8 +790,10 @@ class theme extends common {
|
||||
$this->deleteData(['fonts', $this->getUrl(2), $this->getUrl(3)]);
|
||||
|
||||
// Effacer le fichier existant
|
||||
if ( $this->getUrl(2) === 'file' &&
|
||||
file_exists(self::DATA_DIR . $this->getUrl(2)) ) {
|
||||
if (
|
||||
$this->getUrl(2) === 'file' &&
|
||||
file_exists(self::DATA_DIR . $this->getUrl(2))
|
||||
) {
|
||||
unlink(self::DATA_DIR . $this->getUrl(2));
|
||||
}
|
||||
|
||||
@ -783,12 +810,14 @@ class theme extends common {
|
||||
/**
|
||||
* Réinitialisation de la personnalisation avancée
|
||||
*/
|
||||
public function reset() {
|
||||
public function reset()
|
||||
{
|
||||
// $url prend l'adresse sans le token
|
||||
$url = explode('&', $this->getUrl(2));
|
||||
|
||||
if ( isset($_GET['csrf'])
|
||||
AND $_GET['csrf'] === $_SESSION['csrf']
|
||||
if (
|
||||
isset($_GET['csrf'])
|
||||
and $_GET['csrf'] === $_SESSION['csrf']
|
||||
) {
|
||||
// Réinitialisation
|
||||
$redirect = '';
|
||||
@ -827,7 +856,8 @@ class theme extends common {
|
||||
/**
|
||||
* Options du site
|
||||
*/
|
||||
public function site() {
|
||||
public function site()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
$this->setData(['theme', 'title', [
|
||||
@ -881,7 +911,8 @@ class theme extends common {
|
||||
/**
|
||||
* Import du thème
|
||||
*/
|
||||
public function manage() {
|
||||
public function manage()
|
||||
{
|
||||
if ($this->isPost()) {
|
||||
|
||||
$zipFilename = $this->getInput('themeManageImport', helper::FILTER_STRING_SHORT, true);
|
||||
@ -911,10 +942,13 @@ class theme extends common {
|
||||
* @param @return array contenant $success = true ou false ; $ notification string message à afficher
|
||||
*/
|
||||
|
||||
public function import($zipName = '') {
|
||||
public function import($zipName = '')
|
||||
{
|
||||
|
||||
if ($zipName !== '' &&
|
||||
file_exists($zipName)) {
|
||||
if (
|
||||
$zipName !== '' &&
|
||||
file_exists($zipName)
|
||||
) {
|
||||
// Init variables de retour
|
||||
$success = false;
|
||||
$notification = '';
|
||||
@ -929,20 +963,18 @@ class theme extends common {
|
||||
// Archive de thème ?
|
||||
if (
|
||||
file_exists(self::TEMP_DIR . $tempFolder . '/site/data/custom.css')
|
||||
AND file_exists(self::TEMP_DIR . $tempFolder . '/site/data/theme.css')
|
||||
AND file_exists(self::TEMP_DIR . $tempFolder . '/site/data/theme.json')
|
||||
and file_exists(self::TEMP_DIR . $tempFolder . '/site/data/theme.css')
|
||||
and file_exists(self::TEMP_DIR . $tempFolder . '/site/data/theme.json')
|
||||
) {
|
||||
$modele = 'theme';
|
||||
}
|
||||
if (
|
||||
file_exists(self::TEMP_DIR . $tempFolder . '/site/data/admin.json')
|
||||
AND file_exists(self::TEMP_DIR . $tempFolder . '/site/data/admin.css')
|
||||
and file_exists(self::TEMP_DIR . $tempFolder . '/site/data/admin.css')
|
||||
) {
|
||||
$modele = 'admin';
|
||||
|
||||
}
|
||||
if (!empty($modele)
|
||||
) {
|
||||
if (!empty($modele)) {
|
||||
// traiter l'archive
|
||||
$success = $zip->extractTo('.');
|
||||
|
||||
@ -950,8 +982,9 @@ class theme extends common {
|
||||
if ($modele = 'theme') {
|
||||
$c = $this->subFonts(self::DATA_DIR . 'theme.json');
|
||||
// Un remplacement nécessite la régénération de la feuille de style
|
||||
if ($c > 0
|
||||
AND file_exists(self::DATA_DIR . 'theme.css')
|
||||
if (
|
||||
$c > 0
|
||||
and file_exists(self::DATA_DIR . 'theme.css')
|
||||
) {
|
||||
unlink(self::DATA_DIR . 'theme.css');
|
||||
}
|
||||
@ -959,8 +992,9 @@ class theme extends common {
|
||||
if ($modele = 'admin') {
|
||||
$c = $this->subFonts(self::DATA_DIR . 'admin.json');
|
||||
// Un remplacement nécessite la régénération de la feuille de style
|
||||
if ($c > 0
|
||||
AND file_exists(self::DATA_DIR . 'admin.css')
|
||||
if (
|
||||
$c > 0
|
||||
and file_exists(self::DATA_DIR . 'admin.css')
|
||||
) {
|
||||
unlink(self::DATA_DIR . 'admin.css');
|
||||
}
|
||||
@ -968,8 +1002,6 @@ class theme extends common {
|
||||
|
||||
// traitement d'erreur
|
||||
$notification = $success ? 'Le thème a été importé' : 'Erreur lors de l\'extraction, vérifiez les permissions.';
|
||||
|
||||
|
||||
} else {
|
||||
// pas une archive de thème
|
||||
$success = false;
|
||||
@ -994,7 +1026,8 @@ class theme extends common {
|
||||
/**
|
||||
* Export du thème
|
||||
*/
|
||||
public function export() {
|
||||
public function export()
|
||||
{
|
||||
// Make zip
|
||||
$zipFilename = $this->zipTheme($this->getUrl(2));
|
||||
// Téléchargement du ZIP
|
||||
@ -1012,7 +1045,8 @@ class theme extends common {
|
||||
/**
|
||||
* Export du thème
|
||||
*/
|
||||
public function save() {
|
||||
public function save()
|
||||
{
|
||||
// Make zip
|
||||
$zipFilename = $this->zipTheme($this->getUrl(2));
|
||||
// Téléchargement du ZIP
|
||||
@ -1034,7 +1068,8 @@ class theme extends common {
|
||||
* construction du zip Fonction appelée par export() et save()
|
||||
* @param string $modele theme ou admin
|
||||
*/
|
||||
private function zipTheme($modele) {
|
||||
private function zipTheme($modele)
|
||||
{
|
||||
// Creation du dossier
|
||||
$zipFilename = $modele . date('Y-m-d-H-i-s', time()) . '.zip';
|
||||
$zip = new ZipArchive();
|
||||
@ -1060,21 +1095,25 @@ class theme extends common {
|
||||
$zip->addFile(self::DATA_DIR . 'custom.css', self::DATA_DIR . 'custom.css');
|
||||
// Traite l'image dans le body
|
||||
if ($this->getData(['theme', 'body', 'image']) !== '') {
|
||||
$zip->addFile(self::FILE_DIR.'source/'.$this->getData(['theme','body','image']),
|
||||
$zip->addFile(
|
||||
self::FILE_DIR . 'source/' . $this->getData(['theme', 'body', 'image']),
|
||||
self::FILE_DIR . 'source/' . $this->getData(['theme', 'body', 'image'])
|
||||
);
|
||||
}
|
||||
// Traite l'image dans le header
|
||||
if ($this->getData(['theme', 'header', 'image']) !== '') {
|
||||
$zip->addFile(self::FILE_DIR.'source/'.$this->getData(['theme','header','image']),
|
||||
$zip->addFile(
|
||||
self::FILE_DIR . 'source/' . $this->getData(['theme', 'header', 'image']),
|
||||
self::FILE_DIR . 'source/' . $this->getData(['theme', 'header', 'image'])
|
||||
);
|
||||
}
|
||||
// Traite les images du header perso
|
||||
if (!empty($this->getData(['theme', 'header', 'featureFiles']))) {
|
||||
foreach ($this->getData(['theme', 'header', 'featureFiles']) as $value) {
|
||||
$zip->addFile(self::FILE_DIR . 'source/' . $value,
|
||||
self::FILE_DIR . 'source/' . $value );
|
||||
$zip->addFile(
|
||||
self::FILE_DIR . 'source/' . $value,
|
||||
self::FILE_DIR . 'source/' . $value
|
||||
);
|
||||
}
|
||||
}
|
||||
// Ajoute les fontes
|
||||
@ -1100,7 +1139,8 @@ class theme extends common {
|
||||
* @param string $file, nom du fichier json à convertir
|
||||
* @return int nombre de substitution effectuées
|
||||
*/
|
||||
private function subFonts($file) {
|
||||
private function subFonts($file)
|
||||
{
|
||||
// Tableau de substitution des fontes
|
||||
$fonts = [
|
||||
'Abril+Fatface' => 'abril-fatface',
|
||||
@ -1151,7 +1191,8 @@ class theme extends common {
|
||||
|
||||
// Retourne un tableau simple des fonts installées idfont avec le nom
|
||||
// Cette fonction est utile aux sélecteurs de fonts dans les formulaires.
|
||||
public function enumFonts() {
|
||||
public function enumFonts()
|
||||
{
|
||||
/**
|
||||
* Récupère la liste des fontes installées et construit deux tableaux
|
||||
* id - nom
|
||||
@ -1178,10 +1219,12 @@ class theme extends common {
|
||||
* Création d'un fichier de liens d'appel des fontes
|
||||
* @param string $scope vaut all pour toutes les fontes ; 'user' pour les fontes utilisateurs
|
||||
*/
|
||||
private function setFonts($scope = 'all') {
|
||||
private function setFonts($scope = 'all')
|
||||
{
|
||||
|
||||
// Filtrage par fontes installées
|
||||
$fontsInstalled = [ $this->getData(['theme', 'text', 'font']),
|
||||
$fontsInstalled = [
|
||||
$this->getData(['theme', 'text', 'font']),
|
||||
$this->getData(['theme', 'title', 'font']),
|
||||
$this->getData(['theme', 'header', 'font']),
|
||||
$this->getData(['theme', 'menu', 'font']),
|
||||
@ -1248,7 +1291,5 @@ class theme extends common {
|
||||
file_put_contents(self::DATA_DIR . 'fonts/fonts.html', $fileContent);
|
||||
// Enregistre la personnalisation
|
||||
file_put_contents(self::DATA_DIR . 'fonts/fonts.css', $fileContentCss);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php if (
|
||||
$this->getData(['theme', 'header', 'position']) === 'hide'
|
||||
OR $this->getData(['theme', 'menu', 'position']) === 'hide'
|
||||
OR $this->getData(['theme', 'footer', 'position']) === 'hide'
|
||||
or $this->getData(['theme', 'menu', 'position']) === 'hide'
|
||||
or $this->getData(['theme', 'footer', 'position']) === 'hide'
|
||||
) : ?>
|
||||
<?php echo template::speech('Cliquez sur une zone afin d\'accéder à ses options de personnalisation. Vous pouvez également afficher les zones cachées à l\'aide du bouton ci-dessous.'); ?>
|
||||
<div class="row">
|
||||
|
@ -28,8 +28,8 @@
|
||||
<div class="row">
|
||||
<div class="col6">
|
||||
<?php
|
||||
if ( $this->getData(['theme', 'header', 'position']) == "site")
|
||||
{ echo template::select('themeMenuPosition', $module::$menuPositionsSite, [
|
||||
if ($this->getData(['theme', 'header', 'position']) == "site") {
|
||||
echo template::select('themeMenuPosition', $module::$menuPositionsSite, [
|
||||
'label' => 'Position',
|
||||
'selected' => $this->getData(['theme', 'menu', 'position'])
|
||||
]);
|
||||
@ -37,7 +37,8 @@
|
||||
echo template::select('themeMenuPosition', $module::$menuPositionsBody, [
|
||||
'label' => 'Position',
|
||||
'selected' => $this->getData(['theme', 'menu', 'position'])
|
||||
]); }
|
||||
]);
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<div class="col6">
|
||||
|
@ -13,7 +13,8 @@
|
||||
* @link http://zwiicms.fr/
|
||||
*/
|
||||
|
||||
class translate extends common {
|
||||
class translate extends common
|
||||
{
|
||||
|
||||
public static $actions = [
|
||||
'index' => self::GROUP_ADMIN,
|
||||
@ -45,7 +46,8 @@ class translate extends common {
|
||||
/**
|
||||
* Configuration avancée des langues
|
||||
*/
|
||||
public function copy() {
|
||||
public function copy()
|
||||
{
|
||||
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
@ -104,7 +106,8 @@ class translate extends common {
|
||||
/**
|
||||
* Configuration
|
||||
*/
|
||||
public function index() {
|
||||
public function index()
|
||||
{
|
||||
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
@ -145,7 +148,6 @@ class translate extends common {
|
||||
])
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
// Activation du bouton de copie
|
||||
self::$siteCopy = count(self::$languagesInstalled) > 1 ? false : true;
|
||||
@ -177,7 +179,8 @@ class translate extends common {
|
||||
* Ajouter une langue de contenu
|
||||
*/
|
||||
|
||||
public function add() {
|
||||
public function add()
|
||||
{
|
||||
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
@ -206,7 +209,6 @@ class translate extends common {
|
||||
// Capturer et sauver
|
||||
$db->set($key, init::$defaultData[$key]);
|
||||
$db->save;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -233,13 +235,14 @@ class translate extends common {
|
||||
'title' => 'Ajouter',
|
||||
'view' => 'add'
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
public function edit() {
|
||||
public function edit()
|
||||
{
|
||||
|
||||
// Jeton incorrect ou URl avec le code langue incorrecte
|
||||
if ( $this->getUrl(3) !== $_SESSION['csrf']
|
||||
if (
|
||||
$this->getUrl(3) !== $_SESSION['csrf']
|
||||
|| !array_key_exists($this->getUrl(2), self::$languages)
|
||||
) {
|
||||
// Valeurs en sortie
|
||||
@ -254,7 +257,8 @@ class translate extends common {
|
||||
if ($this->isPost()) {
|
||||
|
||||
// Sauvegarder les locales
|
||||
$data = ['locale' => [
|
||||
$data = [
|
||||
'locale' => [
|
||||
'homePageId' => $this->getInput('localeHomePageId', helper::FILTER_ID, true),
|
||||
'page404' => $this->getInput('localePage404'),
|
||||
'page403' => $this->getInput('localePage403'),
|
||||
@ -321,17 +325,21 @@ class translate extends common {
|
||||
// Générer la liste des pages disponibles
|
||||
self::$pagesList = $this->getData(['page']);
|
||||
foreach (self::$pagesList as $page => $pageId) {
|
||||
if ($this->getData(['page',$page,'block']) === 'bar' ||
|
||||
$this->getData(['page',$page,'disable']) === true) {
|
||||
if (
|
||||
$this->getData(['page', $page, 'block']) === 'bar' ||
|
||||
$this->getData(['page', $page, 'disable']) === true
|
||||
) {
|
||||
unset(self::$pagesList[$page]);
|
||||
}
|
||||
}
|
||||
|
||||
self::$orphansList = $this->getData(['page']);
|
||||
foreach (self::$orphansList as $page => $pageId) {
|
||||
if ($this->getData(['page',$page,'block']) === 'bar' ||
|
||||
if (
|
||||
$this->getData(['page', $page, 'block']) === 'bar' ||
|
||||
$this->getData(['page', $page, 'disable']) === true ||
|
||||
$this->getdata(['page',$page, 'position']) !== 0) {
|
||||
$this->getdata(['page', $page, 'position']) !== 0
|
||||
) {
|
||||
unset(self::$orphansList[$page]);
|
||||
}
|
||||
}
|
||||
@ -346,10 +354,13 @@ class translate extends common {
|
||||
/***
|
||||
* Effacer une langue de contenu
|
||||
*/
|
||||
public function delete() {
|
||||
public function delete()
|
||||
{
|
||||
// Jeton incorrect ou URl avec le code langue incorrecte
|
||||
if ( $this->getUrl(3) !== $_SESSION['csrf']
|
||||
|| !array_key_exists($this->getUrl(2), self::$languages) ) {
|
||||
if (
|
||||
$this->getUrl(3) !== $_SESSION['csrf']
|
||||
|| !array_key_exists($this->getUrl(2), self::$languages)
|
||||
) {
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl() . 'translate',
|
||||
@ -374,7 +385,8 @@ class translate extends common {
|
||||
* Traitement du changement de langue
|
||||
* Fonction utilisée par le noyau
|
||||
*/
|
||||
public function i18n() {
|
||||
public function i18n()
|
||||
{
|
||||
|
||||
// Activation du drapeau
|
||||
if ($this->getInput('ZWII_I18N_' . strtoupper($this->getUrl(3))) !== $this->getUrl(2)) {
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
<?php echo template::formOpen('translateAddForm'); ?>
|
||||
<div class="row">
|
||||
<div class="col1">
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
<?php echo template::formOpen('translateLocaleForm'); ?>
|
||||
|
||||
<div class="row">
|
||||
|
@ -13,7 +13,8 @@
|
||||
* @link http://zwiicms.fr/
|
||||
*/
|
||||
|
||||
class user extends common {
|
||||
class user extends common
|
||||
{
|
||||
|
||||
public static $actions = [
|
||||
'add' => self::GROUP_ADMIN,
|
||||
@ -50,7 +51,8 @@ class user extends common {
|
||||
/**
|
||||
* Ajout
|
||||
*/
|
||||
public function add() {
|
||||
public function add()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
$check = true;
|
||||
@ -122,13 +124,14 @@ class user extends common {
|
||||
/**
|
||||
* Suppression
|
||||
*/
|
||||
public function delete() {
|
||||
public function delete()
|
||||
{
|
||||
// Accès refusé
|
||||
if (
|
||||
// L'utilisateur n'existe pas
|
||||
$this->getData(['user', $this->getUrl(2)]) === null
|
||||
// Groupe insuffisant
|
||||
AND ($this->getUrl('group') < self::GROUP_MODERATOR)
|
||||
and ($this->getUrl('group') < self::GROUP_MODERATOR)
|
||||
) {
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
@ -166,9 +169,12 @@ class user extends common {
|
||||
/**
|
||||
* Édition
|
||||
*/
|
||||
public function edit() {
|
||||
if ($this->getUrl(3) !== $_SESSION['csrf'] &&
|
||||
$this->getUrl(4) !== $_SESSION['csrf']) {
|
||||
public function edit()
|
||||
{
|
||||
if (
|
||||
$this->getUrl(3) !== $_SESSION['csrf'] &&
|
||||
$this->getUrl(4) !== $_SESSION['csrf']
|
||||
) {
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl() . 'user',
|
||||
@ -180,14 +186,13 @@ class user extends common {
|
||||
// L'utilisateur n'existe pas
|
||||
$this->getData(['user', $this->getUrl(2)]) === null
|
||||
// Droit d'édition
|
||||
AND (
|
||||
and (
|
||||
// Impossible de s'auto-éditer
|
||||
(
|
||||
$this->getUser('id') === $this->getUrl(2)
|
||||
AND $this->getUrl('group') <= self::GROUP_VISITOR
|
||||
($this->getUser('id') === $this->getUrl(2)
|
||||
and $this->getUrl('group') <= self::GROUP_VISITOR
|
||||
)
|
||||
// Impossible d'éditer un autre utilisateur
|
||||
OR ($this->getUrl('group') < self::GROUP_MODERATOR)
|
||||
or ($this->getUrl('group') < self::GROUP_MODERATOR)
|
||||
)
|
||||
) {
|
||||
// Valeurs en sortie
|
||||
@ -212,31 +217,27 @@ class user extends common {
|
||||
helper::deleteCookie('ZWII_USER_ID');
|
||||
helper::deleteCookie('ZWII_USER_PASSWORD');
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
self::$inputNotices['userEditConfirmPassword'] = 'Incorrect';
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
self::$inputNotices['userEditOldPassword'] = 'Incorrect';
|
||||
}
|
||||
}
|
||||
// Modification du groupe
|
||||
if (
|
||||
$this->getUser('group') === self::GROUP_ADMIN
|
||||
AND $this->getUrl(2) !== $this->getUser('id')
|
||||
and $this->getUrl(2) !== $this->getUser('id')
|
||||
) {
|
||||
$newGroup = $this->getInput('userEditGroup', helper::FILTER_INT, true);
|
||||
}
|
||||
else {
|
||||
} 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{
|
||||
} else {
|
||||
$newfirstname = $this->getData(['user', $this->getUrl(2), 'firstname']);
|
||||
$newlastname = $this->getData(['user', $this->getUrl(2), 'lastname']);
|
||||
}
|
||||
@ -262,7 +263,7 @@ class user extends common {
|
||||
]
|
||||
]);
|
||||
// Redirection spécifique si l'utilisateur change son mot de passe
|
||||
if($this->getUser('id') === $this->getUrl(2) AND $this->getInput('userEditNewPassword')) {
|
||||
if ($this->getUser('id') === $this->getUrl(2) and $this->getInput('userEditNewPassword')) {
|
||||
$redirect = helper::baseUrl() . 'user/login/' . str_replace('/', '_', $this->getUrl());
|
||||
}
|
||||
// Redirection si retour en arrière possible
|
||||
@ -291,7 +292,8 @@ class user extends common {
|
||||
/**
|
||||
* Mot de passe perdu
|
||||
*/
|
||||
public function forgot() {
|
||||
public function forgot()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
if ($this->isPost()) {
|
||||
$userId = $this->getInput('userForgotId', helper::FILTER_ID, true);
|
||||
@ -335,7 +337,8 @@ class user extends common {
|
||||
/**
|
||||
* Liste des utilisateurs
|
||||
*/
|
||||
public function index() {
|
||||
public function index()
|
||||
{
|
||||
$userIdsFirstnames = helper::arrayColumn($this->getData(['user']), 'firstname');
|
||||
ksort($userIdsFirstnames);
|
||||
foreach ($userIdsFirstnames as $userId => $userFirstname) {
|
||||
@ -368,7 +371,8 @@ class user extends common {
|
||||
/**
|
||||
* Connexion
|
||||
*/
|
||||
public function login() {
|
||||
public function login()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
$logStatus = '';
|
||||
if ($this->isPost()) {
|
||||
@ -377,8 +381,8 @@ class user extends common {
|
||||
// Check le captcha
|
||||
if (
|
||||
$this->getData(['config', 'connect', 'captcha'])
|
||||
AND password_verify($this->getInput('userLoginCaptcha', helper::FILTER_INT), $this->getInput('userLoginCaptchaResult') ) === false )
|
||||
{
|
||||
and password_verify($this->getInput('userLoginCaptcha', helper::FILTER_INT), $this->getInput('userLoginCaptchaResult')) === false
|
||||
) {
|
||||
$captcha = false;
|
||||
} else {
|
||||
$captcha = true;
|
||||
@ -400,8 +404,10 @@ class user extends common {
|
||||
]);
|
||||
// Verrouillage des IP
|
||||
$ipBlackList = helper::arrayColumn($this->getData(['blacklist']), 'ip');
|
||||
if ( $this->getData(['blacklist',$userId,'connectFail']) >= $this->getData(['config', 'connect', 'attempt'])
|
||||
AND in_array($this->getData(['blacklist',$userId,'ip']),$ipBlackList) ) {
|
||||
if (
|
||||
$this->getData(['blacklist', $userId, 'connectFail']) >= $this->getData(['config', 'connect', 'attempt'])
|
||||
and in_array($this->getData(['blacklist', $userId, 'ip']), $ipBlackList)
|
||||
) {
|
||||
$logStatus = 'Compte inconnu verrouillé';
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
@ -420,8 +426,10 @@ class user extends common {
|
||||
*/
|
||||
} else {
|
||||
// Cas 4 : le délai de blocage est dépassé et le compte est au max - Réinitialiser
|
||||
if ($this->getData(['user',$userId,'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) < time()
|
||||
AND $this->getData(['user',$userId,'connectFail']) === $this->getData(['config', 'connect', 'attempt']) ) {
|
||||
if (
|
||||
$this->getData(['user', $userId, 'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) < time()
|
||||
and $this->getData(['user', $userId, 'connectFail']) === $this->getData(['config', 'connect', 'attempt'])
|
||||
) {
|
||||
$this->setData(['user', $userId, 'connectFail', 0]);
|
||||
$this->setData(['user', $userId, 'connectTimeout', 0]);
|
||||
}
|
||||
@ -429,10 +437,10 @@ class user extends common {
|
||||
// Vérification du mot de passe et du groupe
|
||||
if (
|
||||
($this->getData(['user', $userId, 'connectTimeout']) + $this->getData(['config', 'connect', 'timeout'])) < time()
|
||||
AND $this->getData(['user',$userId,'connectFail']) < $this->getData(['config', 'connect', 'attempt'])
|
||||
AND password_verify($this->getInput('userLoginPassword', helper::FILTER_STRING_SHORT, true), $this->getData(['user', $userId, 'password']))
|
||||
AND $this->getData(['user', $userId, 'group']) >= self::GROUP_MEMBER
|
||||
AND $captcha === true
|
||||
and $this->getData(['user', $userId, 'connectFail']) < $this->getData(['config', 'connect', 'attempt'])
|
||||
and password_verify($this->getInput('userLoginPassword', helper::FILTER_STRING_SHORT, true), $this->getData(['user', $userId, 'password']))
|
||||
and $this->getData(['user', $userId, 'group']) >= self::GROUP_MEMBER
|
||||
and $captcha === true
|
||||
) {
|
||||
// RAZ
|
||||
$this->setData(['user', $userId, 'connectFail', 0]);
|
||||
@ -446,7 +454,7 @@ class user extends common {
|
||||
// Valeurs en sortie lorsque le site est en maintenance et que l'utilisateur n'est pas administrateur
|
||||
if (
|
||||
$this->getData(['config', 'maintenance'])
|
||||
AND $this->getData(['user', $userId, 'group']) < self::GROUP_ADMIN
|
||||
and $this->getData(['user', $userId, 'group']) < self::GROUP_ADMIN
|
||||
) {
|
||||
$this->addOutput([
|
||||
'notification' => 'Seul un administrateur peut se connecter lors d\'une maintenance',
|
||||
@ -513,7 +521,8 @@ class user extends common {
|
||||
/**
|
||||
* Déconnexion
|
||||
*/
|
||||
public function logout() {
|
||||
public function logout()
|
||||
{
|
||||
helper::deleteCookie('ZWII_USER_ID');
|
||||
helper::deleteCookie('ZWII_USER_PASSWORD');
|
||||
session_destroy();
|
||||
@ -528,15 +537,16 @@ class user extends common {
|
||||
/**
|
||||
* Réinitialisation du mot de passe
|
||||
*/
|
||||
public function reset() {
|
||||
public function reset()
|
||||
{
|
||||
// Accès refusé
|
||||
if (
|
||||
// L'utilisateur n'existe pas
|
||||
$this->getData(['user', $this->getUrl(2)]) === null
|
||||
// Lien de réinitialisation trop vieux
|
||||
OR $this->getData(['user', $this->getUrl(2), 'forgot']) + 86400 < time()
|
||||
or $this->getData(['user', $this->getUrl(2), 'forgot']) + 86400 < time()
|
||||
// Id unique incorrecte
|
||||
OR $this->getUrl(3) !== md5(json_encode($this->getData(['user', $this->getUrl(2)])))
|
||||
or $this->getUrl(3) !== md5(json_encode($this->getData(['user', $this->getUrl(2)])))
|
||||
) {
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
@ -553,8 +563,7 @@ class user extends common {
|
||||
if ($this->getInput('userResetNewPassword', helper::FILTER_STRING_SHORT, true) !== $this->getInput('userResetConfirmPassword', helper::FILTER_STRING_SHORT, true)) {
|
||||
$newPassword = $this->getData(['user', $this->getUrl(2), 'password']);
|
||||
self::$inputNotices['userResetConfirmPassword'] = 'Incorrect';
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$newPassword = $this->getInput('userResetNewPassword', helper::FILTER_PASSWORD, true);
|
||||
}
|
||||
// Modifie le mot de passe
|
||||
@ -585,7 +594,8 @@ class user extends common {
|
||||
/**
|
||||
* Importation CSV d'utilisateurs
|
||||
*/
|
||||
public function import() {
|
||||
public function import()
|
||||
{
|
||||
// Soumission du formulaire
|
||||
$notification = '';
|
||||
$success = true;
|
||||
@ -593,9 +603,11 @@ class user extends common {
|
||||
// Lecture du CSV et construction du tableau
|
||||
$file = $this->getInput('userImportCSVFile', helper::FILTER_STRING_SHORT, true);
|
||||
$filePath = self::FILE_DIR . 'source/' . $file;
|
||||
if ($file AND file_exists($filePath)) {
|
||||
if ($file and file_exists($filePath)) {
|
||||
// Analyse et extraction du CSV
|
||||
$rows = array_map(function($row) { return str_getcsv($row, $this->getInput('userImportSeparator') ); }, file($filePath));
|
||||
$rows = array_map(function ($row) {
|
||||
return str_getcsv($row, $this->getInput('userImportSeparator'));
|
||||
}, file($filePath));
|
||||
$header = array_shift($rows);
|
||||
$csv = array();
|
||||
foreach ($rows as $row) {
|
||||
@ -604,24 +616,24 @@ class user extends common {
|
||||
// Traitement des données
|
||||
foreach ($csv as $item) {
|
||||
// Données valides
|
||||
if( array_key_exists('id', $item)
|
||||
AND array_key_exists('prenom',$item)
|
||||
AND array_key_exists('nom',$item)
|
||||
AND array_key_exists('groupe',$item)
|
||||
AND array_key_exists('email',$item)
|
||||
AND $item['nom']
|
||||
AND $item['prenom']
|
||||
AND $item['id']
|
||||
AND $item['email']
|
||||
AND $item['groupe']
|
||||
if (
|
||||
array_key_exists('id', $item)
|
||||
and array_key_exists('prenom', $item)
|
||||
and array_key_exists('nom', $item)
|
||||
and array_key_exists('groupe', $item)
|
||||
and array_key_exists('email', $item)
|
||||
and $item['nom']
|
||||
and $item['prenom']
|
||||
and $item['id']
|
||||
and $item['email']
|
||||
and $item['groupe']
|
||||
) {
|
||||
// Validation du groupe
|
||||
$item['groupe'] = (int) $item['groupe'];
|
||||
$item['groupe'] = ( $item['groupe'] >= self::GROUP_BANNED AND $item['groupe'] <= self::GROUP_ADMIN )
|
||||
$item['groupe'] = ($item['groupe'] >= self::GROUP_BANNED and $item['groupe'] <= self::GROUP_ADMIN)
|
||||
? $item['groupe'] : 1;
|
||||
// L'utilisateur existe
|
||||
if ( $this->getData(['user',helper::filter($item['id'] , helper::FILTER_ID)]))
|
||||
{
|
||||
if ($this->getData(['user', helper::filter($item['id'], helper::FILTER_ID)])) {
|
||||
// Notification du doublon
|
||||
$item['notification'] = template::ico('cancel');
|
||||
// Création du tableau de confirmation
|
||||
@ -655,12 +667,15 @@ class user extends common {
|
||||
"accessUrl" => null,
|
||||
"accessTimer" => null,
|
||||
"accessCsrf" => null
|
||||
]]);
|
||||
]
|
||||
]);
|
||||
// Icône de notification
|
||||
$item['notification'] = $create ? template::ico('check') : template::ico('cancel');
|
||||
// Envoi du mail
|
||||
if ($create
|
||||
AND $this->getInput('userImportNotification',helper::FILTER_BOOLEAN) === true) {
|
||||
if (
|
||||
$create
|
||||
and $this->getInput('userImportNotification', helper::FILTER_BOOLEAN) === true
|
||||
) {
|
||||
$sent = $this->sendMail(
|
||||
$item['email'],
|
||||
'Compte créé sur ' . $this->getData(['locale', 'title']),
|
||||
@ -707,5 +722,4 @@ class user extends common {
|
||||
'state' => $success
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -86,8 +86,11 @@
|
||||
'autocomplete' => 'off',
|
||||
'label' => 'Confirmation'
|
||||
]); ?>
|
||||
<?php echo template::checkbox('userAddSendMail', true,
|
||||
'Prévenir l\'utilisateur par mail');
|
||||
<?php echo template::checkbox(
|
||||
'userAddSendMail',
|
||||
true,
|
||||
'Prévenir l\'utilisateur par mail'
|
||||
);
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user