Normalisation + bugs de variables

This commit is contained in:
Fred Tempez 2022-09-29 08:45:59 +02:00
parent 32b4f3b7de
commit 469581e37f
62 changed files with 5060 additions and 4849 deletions

View File

@ -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" />&nbsp;<strong>' . $operator . '</strong>&nbsp;<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" />&nbsp;<strong>' . $operator . '</strong>&nbsp;<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

File diff suppressed because it is too large Load Diff

View File

@ -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',

View File

@ -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
]);
}
}

View File

@ -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', [

View File

@ -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'
]);
}
}

View File

@ -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 {
]);
}
}
}

View File

@ -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'
]);
}
}

View File

@ -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'
]);
}
}

View File

@ -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');

View File

@ -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);
}
}

View File

@ -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">

View File

@ -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">

View File

@ -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)) {

View File

@ -1,4 +1,3 @@
<?php echo template::formOpen('translateAddForm'); ?>
<div class="row">
<div class="col1">

View File

@ -1,4 +1,3 @@
<?php echo template::formOpen('translateLocaleForm'); ?>
<div class="row">

View File

@ -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
]);
}
}

View File

@ -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>