parent
329f252d82
commit
23a1e929a3
|
@ -17,6 +17,27 @@ class helper {
|
||||||
const FILTER_TIMESTAMP = 10;
|
const FILTER_TIMESTAMP = 10;
|
||||||
const FILTER_URL = 11;
|
const FILTER_URL = 11;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupérer l'adresse IP sans tenit compte du proxy
|
||||||
|
* @return string IP adress
|
||||||
|
* Cette focntion est utilisé par user
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static function getIp() {
|
||||||
|
if(!empty($_SERVER['HTTP_CLIENT_IP'])){
|
||||||
|
$ip=$_SERVER['HTTP_CLIENT_IP'];
|
||||||
|
}
|
||||||
|
elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
|
||||||
|
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$ip=$_SERVER['REMOTE_ADDR'];
|
||||||
|
}
|
||||||
|
return $ip;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fonction pour récupérer le numéro de version en ligne
|
* Fonction pour récupérer le numéro de version en ligne
|
||||||
* @param string $url à récupérer
|
* @param string $url à récupérer
|
||||||
|
|
|
@ -125,7 +125,7 @@ core.end = function() {
|
||||||
// Ignore :
|
// Ignore :
|
||||||
// - TinyMCE car il gère lui même le message
|
// - TinyMCE car il gère lui même le message
|
||||||
// - Les champs avec data-no-dirty
|
// - Les champs avec data-no-dirty
|
||||||
var inputsDOM = formDOM.find("input:not([data-no-dirty]), select:not([data-no-dirty]), textarea:not(.editorWysiwyg,.editorWysiwygComment):not([data-no-dirty])");
|
var inputsDOM = formDOM.find("input:not([data-no-dirty]), select:not([data-no-dirty]), textarea:not(.editorWysiwyg):not([data-no-dirty])");
|
||||||
var inputSerialize = inputsDOM.serialize();
|
var inputSerialize = inputsDOM.serialize();
|
||||||
$(window).on("beforeunload", function() {
|
$(window).on("beforeunload", function() {
|
||||||
if(inputsDOM.serialize() !== inputSerialize) {
|
if(inputsDOM.serialize() !== inputSerialize) {
|
||||||
|
@ -225,7 +225,7 @@ core.start = function() {
|
||||||
if(document.cookie.indexOf("ZWII_COOKIE_CONSENT") === -1) {
|
if(document.cookie.indexOf("ZWII_COOKIE_CONSENT") === -1) {
|
||||||
$("body").append(
|
$("body").append(
|
||||||
$("<div>").attr("id", "cookieConsent").append(
|
$("<div>").attr("id", "cookieConsent").append(
|
||||||
$("<span>").text("En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies."),
|
$("<span>").text("En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies et de vos données de visite."),
|
||||||
$("<span>")
|
$("<span>")
|
||||||
.attr("id", "cookieConsentConfirm")
|
.attr("id", "cookieConsentConfirm")
|
||||||
.text("OK")
|
.text("OK")
|
||||||
|
|
|
@ -39,7 +39,7 @@ class common {
|
||||||
const ACCESS_TIMER = 1800;
|
const ACCESS_TIMER = 1800;
|
||||||
|
|
||||||
// Numéro de version
|
// Numéro de version
|
||||||
const ZWII_VERSION = '10.2.00.dev34';
|
const ZWII_VERSION = '10.2.02';
|
||||||
const ZWII_UPDATE_CHANNEL = "v10";
|
const ZWII_UPDATE_CHANNEL = "v10";
|
||||||
|
|
||||||
public static $actions = [];
|
public static $actions = [];
|
||||||
|
@ -1314,21 +1314,48 @@ class common {
|
||||||
}
|
}
|
||||||
// Version 10.2.00
|
// Version 10.2.00
|
||||||
if ($this->getData(['core', 'dataVersion']) < 10200) {
|
if ($this->getData(['core', 'dataVersion']) < 10200) {
|
||||||
$this->deleteData(['admin','colorButtonText']);
|
// Paramètres du compte connecté
|
||||||
$this->setData(['config', 'connect', 'attempt',999]);
|
if ($this->getUser('id')) {
|
||||||
$this->setData(['config', 'connect', 'timeout',0]);
|
$this->setData(['user', $this->getUser('id'), 'connectFail',0]);
|
||||||
$this->setData(['config', 'connect', 'log',false]);
|
$this->setData(['user', $this->getUser('id'), 'connectTimeout',0]);
|
||||||
// Remettre à zéro le thème pour la génération du CSS du blog
|
$this->setData(['user', $this->getUser('id'), 'accessTimer',0]);
|
||||||
if (file_exists(self::DATA_DIR . 'theme.css')) {
|
$this->setData(['user', $this->getUser('id'), 'accessUrl','']);
|
||||||
unlink(self::DATA_DIR . 'theme.css');
|
$this->setData(['user', $this->getUser('id'), 'accessCsrf',$_SESSION['csrf']]);
|
||||||
}
|
}
|
||||||
// Créer les en-têtes du journal
|
// Paramètres de sécurité
|
||||||
$d = 'Date;Heure;Id;Action' . PHP_EOL;
|
$this->setData(['config', 'connect', 'attempt',999]);
|
||||||
file_put_contents(self::DATA_DIR . 'journal.log',$d);
|
$this->setData(['config', 'connect', 'timeout',0]);
|
||||||
// Init préservation htaccess
|
$this->setData(['config', 'connect', 'log',false]);
|
||||||
$this->setData(['config','autoUpdateHtaccess',false]);
|
// Thème
|
||||||
|
$this->deleteData(['admin','colorButtonText']);
|
||||||
|
// Remettre à zéro le thème pour la génération du CSS du blog
|
||||||
|
if (file_exists(self::DATA_DIR . 'theme.css')) {
|
||||||
|
unlink(self::DATA_DIR . 'theme.css');
|
||||||
|
}
|
||||||
|
// Créer les en-têtes du journal
|
||||||
|
$d = 'Date;Heure;IP;Id;Action' . PHP_EOL;
|
||||||
|
file_put_contents(self::DATA_DIR . 'journal.log',$d);
|
||||||
|
// Init préservation htaccess
|
||||||
|
$this->setData(['config','autoUpdateHtaccess',false]);
|
||||||
|
// Options de barre de membre simple
|
||||||
|
$this->setData(['theme','menu','memberBar',true]);
|
||||||
|
|
||||||
|
// Thème Menu : couleur de page active non définie
|
||||||
|
if (!$this->getData(['theme','menu','activeTextColor']) ) {
|
||||||
|
$this->setData(['theme','menu','activeTextColor', $this->getData(['theme','menu','textColor']) ]);
|
||||||
|
}
|
||||||
|
$this->setData(['core', 'updateAvailable', false]);
|
||||||
$this->setData(['core', 'dataVersion', 10200]);
|
$this->setData(['core', 'dataVersion', 10200]);
|
||||||
}
|
}
|
||||||
|
// Version 10.2.01
|
||||||
|
if ($this->getData(['core', 'dataVersion']) < 10201) {
|
||||||
|
// Options de barre de membre simple
|
||||||
|
$this->setData(['theme','footer','displayMemberBar',false]);
|
||||||
|
$this->setData(['theme','menu','memberBar',true]);
|
||||||
|
$this->deleteData(['theme','footer','displayMemberAccount']);
|
||||||
|
$this->deleteData(['theme','footer','displayMemberLogout']);
|
||||||
|
$this->setData(['core', 'dataVersion', 10201]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1425,9 +1452,9 @@ class core extends common {
|
||||||
$css .= 'a:hover{color:' . $colors['darken'] . '}';
|
$css .= 'a:hover{color:' . $colors['darken'] . '}';
|
||||||
$css .= 'body,.row > div{font-size:' . $this->getData(['theme', 'text', 'fontSize']) . '}';
|
$css .= 'body,.row > div{font-size:' . $this->getData(['theme', 'text', 'fontSize']) . '}';
|
||||||
$css .= 'body{color:' . $this->getData(['theme', 'text', 'textColor']) . '}';
|
$css .= 'body{color:' . $this->getData(['theme', 'text', 'textColor']) . '}';
|
||||||
|
$css .= 'select,input[type=\'password\'],input[type=\'email\'],input[type=\'text\'],.inputFile,select,textarea{color:' . $this->getData(['theme', 'text', 'textColor']) .';background-color:'.$this->getData(['theme', 'site', 'backgroundColor']).';}';
|
||||||
// spécifiques au module de blog
|
// spécifiques au module de blog
|
||||||
$css .= '.blogDate {color:' . $this->getData(['theme', 'text', 'textColor']) . ';}.blogPicture img{border:1px solid ' . $this->getData(['theme', 'text', 'textColor']) . '; box-shadow: 1px 1px 5px ' . $this->getData(['theme', 'text', 'textColor']) . ';}';
|
$css .= '.blogDate {color:' . $this->getData(['theme', 'text', 'textColor']) . ';}.blogPicture img{border:1px solid ' . $this->getData(['theme', 'text', 'textColor']) . '; box-shadow: 1px 1px 5px ' . $this->getData(['theme', 'text', 'textColor']) . ';}';
|
||||||
$css .= 'select,input[type=\'email\'],input[type=\'text\'],textarea{color:' . $this->getData(['theme', 'text', 'textColor']) .';background-color:'.$this->getData(['theme', 'site', 'backgroundColor']).';}';
|
|
||||||
// Couleur fixée dans admin.css
|
// Couleur fixée dans admin.css
|
||||||
//$css .= '.button.buttonGrey,.button.buttonGrey:hover{color:' . $this->getData(['theme', 'text', 'textColor']) . '}';
|
//$css .= '.button.buttonGrey,.button.buttonGrey:hover{color:' . $this->getData(['theme', 'text', 'textColor']) . '}';
|
||||||
$css .= '.container{max-width:' . $this->getData(['theme', 'site', 'width']) . '}';
|
$css .= '.container{max-width:' . $this->getData(['theme', 'site', 'width']) . '}';
|
||||||
|
@ -1436,7 +1463,6 @@ class core extends common {
|
||||||
$css .= $this->getData(['theme', 'site', 'width']) === '750px' ? '.button, button{font-size:0.8em;}' : '';
|
$css .= $this->getData(['theme', 'site', 'width']) === '750px' ? '.button, button{font-size:0.8em;}' : '';
|
||||||
$css .= '#site{background-color:' . $this->getData(['theme', 'site', 'backgroundColor']) . ';border-radius:' . $this->getData(['theme', 'site', 'radius']) . ';box-shadow:' . $this->getData(['theme', 'site', 'shadow']) . ' #212223;}';
|
$css .= '#site{background-color:' . $this->getData(['theme', 'site', 'backgroundColor']) . ';border-radius:' . $this->getData(['theme', 'site', 'radius']) . ';box-shadow:' . $this->getData(['theme', 'site', 'shadow']) . ' #212223;}';
|
||||||
$css .= '.editorWysiwyg {background-color:' . $this->getData(['theme', 'site', 'backgroundColor']) . ';}';
|
$css .= '.editorWysiwyg {background-color:' . $this->getData(['theme', 'site', 'backgroundColor']) . ';}';
|
||||||
$css .= '.editorWysiwygComment {background-color:' . $this->getData(['theme', 'site', 'backgroundColor']) . ';}';
|
|
||||||
$colors = helper::colorVariants($this->getData(['theme', 'button', 'backgroundColor']));
|
$colors = helper::colorVariants($this->getData(['theme', 'button', 'backgroundColor']));
|
||||||
$css .= '.speechBubble,.button,.button:hover,button[type=\'submit\'],.pagination a,.pagination a:hover,input[type=\'checkbox\']:checked + label:before,input[type=\'radio\']:checked + label:before,.helpContent{background-color:' . $colors['normal'] . ';color:' . $colors['text'] . '}';
|
$css .= '.speechBubble,.button,.button:hover,button[type=\'submit\'],.pagination a,.pagination a:hover,input[type=\'checkbox\']:checked + label:before,input[type=\'radio\']:checked + label:before,.helpContent{background-color:' . $colors['normal'] . ';color:' . $colors['text'] . '}';
|
||||||
$css .= '.helpButton span{color:' . $colors['normal'] . '}';
|
$css .= '.helpButton span{color:' . $colors['normal'] . '}';
|
||||||
|
@ -1450,7 +1476,6 @@ class core extends common {
|
||||||
// Les blocs
|
// Les blocs
|
||||||
$colors = helper::colorVariants($this->getData(['theme', 'block', 'backgroundColor']));
|
$colors = helper::colorVariants($this->getData(['theme', 'block', 'backgroundColor']));
|
||||||
$css .= '.block {border: 1px solid ' . $this->getdata(['theme','block','borderColor']) . ';}.block h4 {background-color:'. $colors['normal'] . ';color:' . $colors['text'] .';}';
|
$css .= '.block {border: 1px solid ' . $this->getdata(['theme','block','borderColor']) . ';}.block h4 {background-color:'. $colors['normal'] . ';color:' . $colors['text'] .';}';
|
||||||
// Contour du bloc édition de tinymce hors administration
|
|
||||||
$css .= '.mce-tinymce {border: 1px solid ' . $this->getdata(['theme','block','borderColor']) .' !important;}';
|
$css .= '.mce-tinymce {border: 1px solid ' . $this->getdata(['theme','block','borderColor']) .' !important;}';
|
||||||
// Bannière
|
// Bannière
|
||||||
$colors = helper::colorVariants($this->getData(['theme', 'header', 'backgroundColor']));
|
$colors = helper::colorVariants($this->getData(['theme', 'header', 'backgroundColor']));
|
||||||
|
@ -1511,26 +1536,31 @@ class core extends common {
|
||||||
|
|
||||||
$css .= '#toggle span,#menu a{padding:' . $this->getData(['theme', 'menu', 'height']) .';font-family:"' . str_replace('+', ' ', $this->getData(['theme', 'menu', 'font'])) . '",sans-serif;font-weight:' . $this->getData(['theme', 'menu', 'fontWeight']) . ';font-size:' . $this->getData(['theme', 'menu', 'fontSize']) . ';text-transform:' . $this->getData(['theme', 'menu', 'textTransform']) . '}';
|
$css .= '#toggle span,#menu a{padding:' . $this->getData(['theme', 'menu', 'height']) .';font-family:"' . str_replace('+', ' ', $this->getData(['theme', 'menu', 'font'])) . '",sans-serif;font-weight:' . $this->getData(['theme', 'menu', 'fontWeight']) . ';font-size:' . $this->getData(['theme', 'menu', 'fontSize']) . ';text-transform:' . $this->getData(['theme', 'menu', 'textTransform']) . '}';
|
||||||
// Pied de page
|
// Pied de page
|
||||||
|
|
||||||
$colors = helper::colorVariants($this->getData(['theme', 'footer', 'backgroundColor']));
|
$colors = helper::colorVariants($this->getData(['theme', 'footer', 'backgroundColor']));
|
||||||
if($this->getData(['theme', 'footer', 'margin'])) {
|
if($this->getData(['theme', 'footer', 'margin'])) {
|
||||||
$css .= 'footer{padding:0 20px;}';
|
$css .= 'footer{padding:0 20px;}';
|
||||||
} else {
|
} else {
|
||||||
$css .= 'footer{padding:0}';
|
$css .= 'footer{padding:0}';
|
||||||
}
|
}
|
||||||
|
|
||||||
$css .= 'footer span, #footerText > p {color:' . $this->getData(['theme', 'footer', 'textColor']) . ';font-family:"' . str_replace('+', ' ', $this->getData(['theme', 'footer', 'font'])) . '",sans-serif;font-weight:' . $this->getData(['theme', 'footer', 'fontWeight']) . ';font-size:' . $this->getData(['theme', 'footer', 'fontSize']) . ';text-transform:' . $this->getData(['theme', 'footer', 'textTransform']) . '}';
|
$css .= 'footer span, #footerText > p {color:' . $this->getData(['theme', 'footer', 'textColor']) . ';font-family:"' . str_replace('+', ' ', $this->getData(['theme', 'footer', 'font'])) . '",sans-serif;font-weight:' . $this->getData(['theme', 'footer', 'fontWeight']) . ';font-size:' . $this->getData(['theme', 'footer', 'fontSize']) . ';text-transform:' . $this->getData(['theme', 'footer', 'textTransform']) . '}';
|
||||||
$css .= 'footer{background-color:' . $colors['normal'] . ';color:' . $this->getData(['theme', 'footer', 'textColor']) . '}';
|
$css .= 'footer{background-color:' . $colors['normal'] . ';color:' . $this->getData(['theme', 'footer', 'textColor']) . '}';
|
||||||
$css .= 'footer a{color:' . $this->getData(['theme', 'footer', 'textColor']) . '}';
|
$css .= 'footer a{color:' . $this->getData(['theme', 'footer', 'textColor']) . '}';
|
||||||
$css .= 'footer #footersite > div {margin:' . $this->getData(['theme', 'footer', 'height']) . ' 0}';
|
$css .= 'footer #footersite > div {margin:' . $this->getData(['theme', 'footer', 'height']) . ' 0}';
|
||||||
|
|
||||||
$css .= 'footer #footerbody > div {margin:' . $this->getData(['theme', 'footer', 'height']) . ' 0}';
|
$css .= 'footer #footerbody > div {margin:' . $this->getData(['theme', 'footer', 'height']) . ' 0}';
|
||||||
$css .= '#footerSocials{text-align:' . $this->getData(['theme', 'footer', 'socialsAlign']) . '}';
|
$css .= '#footerSocials{text-align:' . $this->getData(['theme', 'footer', 'socialsAlign']) . '}';
|
||||||
$css .= '#footerText > p {text-align:' . $this->getData(['theme', 'footer', 'textAlign']) . '}';
|
$css .= '#footerText > p {text-align:' . $this->getData(['theme', 'footer', 'textAlign']) . '}';
|
||||||
$css .= '#footerCopyright{text-align:' . $this->getData(['theme', 'footer', 'copyrightAlign']) . '}';
|
$css .= '#footerCopyright{text-align:' . $this->getData(['theme', 'footer', 'copyrightAlign']) . '}';
|
||||||
|
|
||||||
// Marge supplémentaire lorsque le pied de page est fixe
|
// Marge supplémentaire lorsque le pied de page est fixe
|
||||||
if ( $this->getData(['theme', 'footer', 'fixed']) === true &&
|
if ( $this->getData(['theme', 'footer', 'fixed']) === true &&
|
||||||
$this->getData(['theme', 'footer', 'position']) === 'body') {
|
$this->getData(['theme', 'footer', 'position']) === 'body') {
|
||||||
$css .= "@media (min-width: 769px) { #site {margin-bottom: 100px;} }";
|
$css .= "@media (min-width: 769px) { #site {margin-bottom: 100px;} }";
|
||||||
$css .= "@media (max-width: 768px) { #site {margin-bottom: 150px;} }";
|
$css .= "@media (max-width: 768px) { #site {margin-bottom: 150px;} }";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enregistre la personnalisation
|
// Enregistre la personnalisation
|
||||||
file_put_contents(self::DATA_DIR.'theme.css', $css);
|
file_put_contents(self::DATA_DIR.'theme.css', $css);
|
||||||
// Effacer le cache pour tenir compte de la couleur de fond TinyMCE
|
// Effacer le cache pour tenir compte de la couleur de fond TinyMCE
|
||||||
|
@ -1549,7 +1579,7 @@ class core extends common {
|
||||||
$css .= '#site{background-color:' . $colors['normal']. ';}';
|
$css .= '#site{background-color:' . $colors['normal']. ';}';
|
||||||
$css .= 'body, .row > div {font:' . $this->getData(['admin','fontSize']) . ' "' . $this->getData(['admin','fontText']) . '", sans-serif;}';
|
$css .= 'body, .row > div {font:' . $this->getData(['admin','fontSize']) . ' "' . $this->getData(['admin','fontText']) . '", sans-serif;}';
|
||||||
$css .= 'body h1, h2, h3, h4, h5, h6 {font-family:' . $this->getData(['admin','fontTitle' ]) . ', sans-serif;color:' . $this->getData(['admin','colorTitle' ]) . ';}';
|
$css .= 'body h1, h2, h3, h4, h5, h6 {font-family:' . $this->getData(['admin','fontTitle' ]) . ', sans-serif;color:' . $this->getData(['admin','colorTitle' ]) . ';}';
|
||||||
$css .= 'body:not(.editorWysiwyg),body:not(.editorWysiwygComment),span .zwiico-help {color:' . $this->getData(['admin','colorText']) . ';}';
|
$css .= 'body:not(.editorWysiwyg),span .zwiico-help {color:' . $this->getData(['admin','colorText']) . ';}';
|
||||||
$colors = helper::colorVariants($this->getData(['admin','backgroundColorButton']));
|
$colors = helper::colorVariants($this->getData(['admin','backgroundColorButton']));
|
||||||
$css .= 'input[type="checkbox"]:checked + label::before,.speechBubble{background-color:' . $colors['normal'] . ';color:' . $colors['text'] . ';}';
|
$css .= 'input[type="checkbox"]:checked + label::before,.speechBubble{background-color:' . $colors['normal'] . ';color:' . $colors['text'] . ';}';
|
||||||
$css .= '.speechBubble::before {border-color:' . $colors['normal'] . ' transparent transparent transparent;}';
|
$css .= '.speechBubble::before {border-color:' . $colors['normal'] . ' transparent transparent transparent;}';
|
||||||
|
@ -1562,7 +1592,7 @@ class core extends common {
|
||||||
$css .= 'button[type=submit] {background-color: ' . $colors['normal'] . ';color: ' . $colors['text'] . '}button[type=submit]:hover {background-color: ' . $colors['darken'] . ';color: ' . $colors['text'] .';}button[type=submit]:active {background-color: ' . $colors['darken'] . ';color: ' .$colors['text'] .';}';
|
$css .= 'button[type=submit] {background-color: ' . $colors['normal'] . ';color: ' . $colors['text'] . '}button[type=submit]:hover {background-color: ' . $colors['darken'] . ';color: ' . $colors['text'] .';}button[type=submit]:active {background-color: ' . $colors['darken'] . ';color: ' .$colors['text'] .';}';
|
||||||
$colors = helper::colorVariants($this->getData(['admin','backgroundBlockColor']));
|
$colors = helper::colorVariants($this->getData(['admin','backgroundBlockColor']));
|
||||||
$css .= '.block {border: 1px solid ' . $this->getData(['admin','borderBlockColor']) . ';}.block h4 {background-color: ' . $colors['normal'] . ';color:' . $colors['text'] . ';}';
|
$css .= '.block {border: 1px solid ' . $this->getData(['admin','borderBlockColor']) . ';}.block h4 {background-color: ' . $colors['normal'] . ';color:' . $colors['text'] . ';}';
|
||||||
$css .= 'table tr,input[type=email],input[type=text],input[type=password],select:not(#barSelectPage),textarea:not(.editorWysiwyg),textarea:not(.editorWysiwygComment),.inputFile{background-color: ' . $colors['normal'] . ';color:' . $colors['text'] . ';border: 1px solid ' . $this->getData(['admin','borderBlockColor']) . ';}';
|
$css .= 'table tr,input[type=email],input[type=text],input[type=password],select:not(#barSelectPage),textarea:not(.editorWysiwyg),.inputFile{background-color: ' . $colors['normal'] . ';color:' . $colors['text'] . ';border: 1px solid ' . $this->getData(['admin','borderBlockColor']) . ';}';
|
||||||
// Bordure du contour TinyMCE
|
// Bordure du contour TinyMCE
|
||||||
$css .= '.mce-tinymce{border: 1px solid '. $this->getData(['admin','borderBlockColor']) . '!important;}';
|
$css .= '.mce-tinymce{border: 1px solid '. $this->getData(['admin','borderBlockColor']) . '!important;}';
|
||||||
// Enregistre la personnalisation
|
// Enregistre la personnalisation
|
||||||
|
@ -1605,6 +1635,7 @@ class core extends common {
|
||||||
}
|
}
|
||||||
// Journalisation
|
// Journalisation
|
||||||
$dataLog = strftime('%d/%m/%y',time()) . ';' . strftime('%R',time()) . ';' ;
|
$dataLog = strftime('%d/%m/%y',time()) . ';' . strftime('%R',time()) . ';' ;
|
||||||
|
$dataLog .= helper::getIp() . ';';
|
||||||
$dataLog .= $this->getUser('id') ? $this->getUser('id') . ';' : 'anonyme' . ';';
|
$dataLog .= $this->getUser('id') ? $this->getUser('id') . ';' : 'anonyme' . ';';
|
||||||
$dataLog .= $this->getUrl();
|
$dataLog .= $this->getUrl();
|
||||||
$dataLog .= PHP_EOL;
|
$dataLog .= PHP_EOL;
|
||||||
|
@ -2123,6 +2154,16 @@ class layout extends common {
|
||||||
strip_tags(str_replace('/', '_', $this->getUrl())) .
|
strip_tags(str_replace('/', '_', $this->getUrl())) .
|
||||||
'" data-tippy-content="Connexion à l\'administration" rel="nofollow">Connexion</a></span>';
|
'" data-tippy-content="Connexion à l\'administration" rel="nofollow">Connexion</a></span>';
|
||||||
}
|
}
|
||||||
|
// Affichage de la barre de membre simple
|
||||||
|
if ( $this->getUser('group') === self::GROUP_MEMBER
|
||||||
|
&& $this->getData(['theme','footer','displayMemberBar']) === true
|
||||||
|
) {
|
||||||
|
$items .= '<span id="footerDisplayMemberAccount"';
|
||||||
|
$items .= $this->getData(['theme','footer','displaymemberAccount']) === false ? ' class="displayNone"' : '';
|
||||||
|
$items .= '><wbr> |<a href="' . helper::baseUrl() . 'user/edit/' . $this->getUser('id'). '/' . $_SESSION['csrf'] . '" data-tippy-content="Gérer mon compte" >' . template::ico('user', 'all') . '</a>';
|
||||||
|
$items .= '<wbr><a id="barLogout" href="' . helper::baseUrl() . 'user/logout" data-tippy-content="Me déconnecter">' . template::ico('logout','left') . '</a>';
|
||||||
|
$items .= '</span>';
|
||||||
|
}
|
||||||
// Fermeture du bloc copyright
|
// Fermeture du bloc copyright
|
||||||
$items .= '</span></div>';
|
$items .= '</span></div>';
|
||||||
echo $items;
|
echo $items;
|
||||||
|
@ -2332,6 +2373,15 @@ class layout extends common {
|
||||||
strip_tags(str_replace('/', '_', $this->getUrl())) .
|
strip_tags(str_replace('/', '_', $this->getUrl())) .
|
||||||
'">Connexion</a></li>';
|
'">Connexion</a></li>';
|
||||||
}
|
}
|
||||||
|
// Commandes pour les membres simples
|
||||||
|
if($this->getUser('group') == self::GROUP_MEMBER
|
||||||
|
&& ( $this->getData(['theme','menu','memberBar']) === true
|
||||||
|
|| $this->getData(['theme','footer','displayMemberBar']) === false
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
$items .= '<li><a href="' . helper::baseUrl() . 'user/edit/' . $this->getUser('id'). '/' . $_SESSION['csrf'] . '" data-tippy-content="Gérer mon compte">' . template::ico('user', 'right') . '</a></li>';
|
||||||
|
$items .= '<li><a id="barLogout" href="' . helper::baseUrl() . 'user/logout" data-tippy-content="Me déconnecter">' . template::ico('logout') . '</a></li>';
|
||||||
|
}
|
||||||
// Retourne les items du menu
|
// Retourne les items du menu
|
||||||
echo '<ul class="navLevel1">' . $items . '</ul>';
|
echo '<ul class="navLevel1">' . $items . '</ul>';
|
||||||
}
|
}
|
||||||
|
@ -2595,7 +2645,7 @@ class layout extends common {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$rightItems .= '<li><a href="' . helper::baseUrl() . 'user/edit/' . $this->getUser('id'). '/' . $_SESSION['csrf'] . '" data-tippy-content="Configurer mon compte">' . template::ico('user', 'right') . '<span id="displayUsername">' . $this->getUser('firstname') . ' ' . $this->getUser('lastname') . '</span></a></li>';
|
$rightItems .= '<li><a href="' . helper::baseUrl() . 'user/edit/' . $this->getUser('id'). '/' . $_SESSION['csrf'] . '" data-tippy-content="Configurer mon compte">' . template::ico('user', 'right') . '<span id="displayUsername">' . $this->getUser('firstname') . ' ' . $this->getUser('lastname') . '</span></a></li>';
|
||||||
$rightItems .= '<li><a id="barLogout" href="' . helper::baseUrl() . 'user/logout" data-tippy-content="Se déconnecter">' . template::ico('logout') . '</a></li>';
|
$rightItems .= '<li><a id="barLogout" href="' . helper::baseUrl() . 'user/logout" data-tippy-content="Me déconnecter">' . template::ico('logout') . '</a></li>';
|
||||||
// Barre de membre
|
// Barre de membre
|
||||||
echo '<div id="bar"><div class="container"><ul id="barLeft">' . $leftItems . '</ul><ul id="barRight">' . $rightItems . '</ul></div></div>';
|
echo '<div id="bar"><div class="container"><ul id="barLeft">' . $leftItems . '</ul><ul id="barRight">' . $rightItems . '</ul></div></div>';
|
||||||
}
|
}
|
||||||
|
@ -2669,4 +2719,4 @@ class layout extends common {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -372,7 +372,7 @@ td > .col12 {
|
||||||
border: 0;
|
border: 0;
|
||||||
color: #111112;
|
color: #111112;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
background-color: rgba(255, 255, 255, 1);
|
background-color: rgba(255, 255, 255, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 768px) {
|
@media (min-width: 768px) {
|
||||||
|
@ -891,7 +891,7 @@ input[type='password'],
|
||||||
select,
|
select,
|
||||||
textarea {
|
textarea {
|
||||||
padding: 10px; /* -1px à cause des bordures */
|
padding: 10px; /* -1px à cause des bordures */
|
||||||
background: #FFF;
|
/*background: #FFF;*/
|
||||||
border: 1px solid #D8DFE3;
|
border: 1px solid #D8DFE3;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
|
@ -1351,4 +1351,4 @@ th.col12 {
|
||||||
}
|
}
|
||||||
.accordion-content {
|
.accordion-content {
|
||||||
padding: 7px;
|
padding: 7px;
|
||||||
}
|
}
|
|
@ -20,7 +20,9 @@
|
||||||
}?>
|
}?>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<?php $layout->showBar(); ?>
|
<?php if($this->getUser('group') > self::GROUP_MEMBER): ?>
|
||||||
|
<?php $layout->showBar(); ?>
|
||||||
|
<?php endif;?>
|
||||||
<?php $layout->showNotification(); ?>
|
<?php $layout->showNotification(); ?>
|
||||||
<?php if($this->getData(['theme', 'menu', 'position']) === 'body-first' || $this->getData(['theme', 'menu', 'position']) === 'top' ): ?>
|
<?php if($this->getData(['theme', 'menu', 'position']) === 'body-first' || $this->getData(['theme', 'menu', 'position']) === 'top' ): ?>
|
||||||
<!-- Menu dans le fond du site avant la bannière -->
|
<!-- Menu dans le fond du site avant la bannière -->
|
||||||
|
|
|
@ -283,18 +283,17 @@ class config extends common {
|
||||||
$data = str_replace('_','/',$googlePagespeedData['lighthouseResult']['audits']['final-screenshot']['details']['data']);
|
$data = str_replace('_','/',$googlePagespeedData['lighthouseResult']['audits']['final-screenshot']['details']['data']);
|
||||||
$data = str_replace('-','+',$data);
|
$data = str_replace('-','+',$data);
|
||||||
$img = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $data));
|
$img = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $data));
|
||||||
// Effacer la miniature
|
$success = file_put_contents( self::FILE_DIR.'source/screenshot.jpg',$img) ;
|
||||||
if (file_exists(self::FILE_DIR.'thumb/screenshot.jpg')) {
|
// Effacer la miniature png
|
||||||
unlink (self::FILE_DIR.'thumb/screenshot.jpg');
|
if (file_exists(self::FILE_DIR.'source/screenshot.png')) {
|
||||||
|
unlink (self::FILE_DIR.'source/screenshot.png');
|
||||||
}
|
}
|
||||||
file_put_contents( self::FILE_DIR.'source/screenshot.jpg',$img);
|
|
||||||
$success =true;
|
|
||||||
}
|
}
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'notification' => $success === true ? 'Image Open Graph réinitialisée' : 'Erreur : image Open Graph non créée',
|
'notification' => $success === false ? 'Service inaccessible ou erreur d\'écriture de l\'image' : 'Image générée avec succès',
|
||||||
'redirect' => helper::baseUrl() . 'config',
|
'redirect' => helper::baseUrl() . 'config',
|
||||||
'state' => $success
|
'state' => $success === false ? false : true
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,8 +358,7 @@ class config extends common {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
// Préserver les comptes des utilisateurs d'une version 9 si option cochée
|
// Préserver les comptes des utilisateurs d'une version 9 si option cochée
|
||||||
// Positionnement d'une variable de session lue au constructeur
|
// Positionnement d'une variable de session lue au constructeurs
|
||||||
echo $version;
|
|
||||||
if ($version === '9') {
|
if ($version === '9') {
|
||||||
$_SESSION['KEEP_USERS'] = $this->getInput('configManageImportUser', helper::FILTER_BOOLEAN);
|
$_SESSION['KEEP_USERS'] = $this->getInput('configManageImportUser', helper::FILTER_BOOLEAN);
|
||||||
}
|
}
|
||||||
|
@ -612,7 +610,7 @@ class config extends common {
|
||||||
if ( file_exists(self::DATA_DIR . 'journal.log') ) {
|
if ( file_exists(self::DATA_DIR . 'journal.log') ) {
|
||||||
unlink(self::DATA_DIR . 'journal.log');
|
unlink(self::DATA_DIR . 'journal.log');
|
||||||
// Créer les en-têtes des journaux
|
// Créer les en-têtes des journaux
|
||||||
$d = 'Date;Heure;Id;Action' . PHP_EOL;
|
$d = 'Date;Heure;IP;Id;Action' . PHP_EOL;
|
||||||
file_put_contents(self::DATA_DIR . 'journal.log',$d);
|
file_put_contents(self::DATA_DIR . 'journal.log',$d);
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
|
|
|
@ -81,8 +81,7 @@ class install extends common {
|
||||||
'group' => self::GROUP_ADMIN,
|
'group' => self::GROUP_ADMIN,
|
||||||
'lastname' => $userLastname,
|
'lastname' => $userLastname,
|
||||||
'mail' => $userMail,
|
'mail' => $userMail,
|
||||||
'password' => $this->getInput('installPassword', helper::FILTER_PASSWORD, true),
|
'password' => $this->getInput('installPassword', helper::FILTER_PASSWORD, true)
|
||||||
'pseudo' => $userFirstname
|
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
if ($success === true) { // Formulaire complété envoi du mail
|
if ($success === true) { // Formulaire complété envoi du mail
|
||||||
|
|
|
@ -56,7 +56,7 @@ $( document ).ready(function() {
|
||||||
* Initialisation des blocs
|
* Initialisation des blocs
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var i = ["info", "layout", "setup", "position", "advanced", "ceo" ];
|
var i = ["info", "layout", "setup", "location", "advanced", "ceo" ];
|
||||||
$.each(i,function(e) {
|
$.each(i,function(e) {
|
||||||
if (getCookie(i[e]) === "true") {
|
if (getCookie(i[e]) === "true") {
|
||||||
$("#" + i[e]).find(".zwiico-plus").hide();
|
$("#" + i[e]).find(".zwiico-plus").hide();
|
||||||
|
@ -65,30 +65,25 @@ $( document ).ready(function() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* Lire un cookie s'il existe
|
|
||||||
*/
|
|
||||||
function getCookie(name) {
|
|
||||||
var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
|
|
||||||
return v ? v[2] : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Blocs dépliants
|
* Blocs dépliants
|
||||||
|
*
|
||||||
|
* Sauvegarder la position des blocs
|
||||||
|
* true = bloc déplié
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$("div .block").click(function(e) {
|
$("div .block").click(function(e) {
|
||||||
$(this).find(".zwiico-plus").toggle();
|
$(this).find(".zwiico-plus").toggle();
|
||||||
$(this).find(".zwiico-minus").toggle();
|
$(this).find(".zwiico-minus").toggle();
|
||||||
$(this).find(".blockContainer").slideToggle();
|
$(this).find(".blockContainer").slideToggle();
|
||||||
/*
|
/*
|
||||||
* Sauvegarder la position des blocs
|
* Sauvegarder la position des blocs
|
||||||
* true = bloc déplié
|
* true = bloc déplié
|
||||||
*/
|
*/
|
||||||
document.cookie = $(this).attr('id') + "=" + $(this).find(".zwiico-minus").is(":visible");
|
document.cookie = $(this).attr('id') + "=" + $(this).find(".zwiico-minus").is(":visible");
|
||||||
}).on("click", "span > input, input, textarea, label, option, button, a, .blockContainer", function(e) {
|
}).on("click", "span > input, input, textarea, label, option, button, a:not(.inputFile) , .blockContainer", function(e) {
|
||||||
// Empêcher les déclenchements dans les blocs
|
// Empêcher les déclenchements dans les blocs
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -262,9 +257,9 @@ $( document ).ready(function() {
|
||||||
$("#pageEditHideMenuChildrenWrapper").slideDown();
|
$("#pageEditHideMenuChildrenWrapper").slideDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cache le l'option "ne pas afficher les pages enfants dans le menu horizontal" lorsque la page est désactivée
|
* Cache le l'option "ne pas afficher les pages enfants dans le menu horizontal" lorsque la page est désactivée
|
||||||
*/
|
*/
|
||||||
if ($("#pageEditDisable").is(':checked') ) {
|
if ($("#pageEditDisable").is(':checked') ) {
|
||||||
$("#pageEditHideMenuChildrenWrapper").removeClass("disabled");
|
$("#pageEditHideMenuChildrenWrapper").removeClass("disabled");
|
||||||
$("#pageEditHideMenuChildrenWrapper").slideUp();
|
$("#pageEditHideMenuChildrenWrapper").slideUp();
|
||||||
|
@ -471,6 +466,17 @@ pageEditBlockDOM.on("change", function() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lire un cookie s'il existe
|
||||||
|
*/
|
||||||
|
function getCookie(name) {
|
||||||
|
var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
|
||||||
|
return v ? v[2] : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Masquer ou afficher le chemin de fer
|
* Masquer ou afficher le chemin de fer
|
||||||
* Quand le titre est masqué
|
* Quand le titre est masqué
|
||||||
|
|
|
@ -375,7 +375,8 @@ class theme extends common {
|
||||||
'displaySiteMap' => $this->getInput('themefooterDisplaySiteMap', helper::FILTER_BOOLEAN),
|
'displaySiteMap' => $this->getInput('themefooterDisplaySiteMap', helper::FILTER_BOOLEAN),
|
||||||
'displayCopyright' => $this->getInput('themefooterDisplayCopyright', helper::FILTER_BOOLEAN),
|
'displayCopyright' => $this->getInput('themefooterDisplayCopyright', helper::FILTER_BOOLEAN),
|
||||||
'displayLegal' => $this->getInput('themeFooterDisplayLegal', helper::FILTER_BOOLEAN),
|
'displayLegal' => $this->getInput('themeFooterDisplayLegal', helper::FILTER_BOOLEAN),
|
||||||
'displaySearch' => $this->getInput('themeFooterDisplaySearch', helper::FILTER_BOOLEAN),
|
'displaySearch' => $this->getInput('themeFooterDisplaySearch', helper::FILTER_BOOLEAN),
|
||||||
|
'displayMemberBar'=> $this->getInput('themeFooterDisplayMemberBar', helper::FILTER_BOOLEAN),
|
||||||
'template' => $this->getInput('themeFooterTemplate')
|
'template' => $this->getInput('themeFooterTemplate')
|
||||||
]]);
|
]]);
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
|
@ -504,7 +505,8 @@ class theme extends common {
|
||||||
'activeColor' => $this->getInput('themeMenuActiveColor'),
|
'activeColor' => $this->getInput('themeMenuActiveColor'),
|
||||||
'activeTextColor' => $this->getInput('themeMenuActiveTextColor'),
|
'activeTextColor' => $this->getInput('themeMenuActiveTextColor'),
|
||||||
'radius' => $this->getInput('themeMenuRadius'),
|
'radius' => $this->getInput('themeMenuRadius'),
|
||||||
'burgerTitle' => $this->getInput('themeMenuBurgerTitle', helper::FILTER_BOOLEAN)
|
'burgerTitle' => $this->getInput('themeMenuBurgerTitle', helper::FILTER_BOOLEAN),
|
||||||
|
'memberBar' => $this->getInput('themeMenuMemberBar', helper::FILTER_BOOLEAN)
|
||||||
]]);
|
]]);
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
|
|
|
@ -57,6 +57,12 @@
|
||||||
'help' => (bool) empty($this->getData(['config', 'legalPageId'])) ? 'Pour activer cette option, sélectionnez la page contenant les mentions légales dans la gestion du site' : ''
|
'help' => (bool) empty($this->getData(['config', 'legalPageId'])) ? 'Pour activer cette option, sélectionnez la page contenant les mentions légales dans la gestion du site' : ''
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<?php echo template::checkbox('themeFooterDisplayMemberBar', true, 'Barre des membres', [
|
||||||
|
'checked' => $this->getData(['theme', 'footer', 'displayMemberBar']),
|
||||||
|
'help' => 'Affiche les icônes de gestion du compte et de déconnexion. Uniquement pour les membres simples une fois connectés.'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@ -65,19 +71,16 @@
|
||||||
'help' => 'Un plan du site permet un meilleur référencement.'
|
'help' => 'Un plan du site permet un meilleur référencement.'
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<?php echo template::checkbox('themeFooterDisplaySearch', true, 'Rechercher', [
|
||||||
|
'checked' => $this->getData(['theme', 'footer', 'displaySearch'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<?php echo template::checkbox('themeFooterLoginLink', true, 'Lien de connexion', [
|
<?php echo template::checkbox('themeFooterLoginLink', true, 'Lien de connexion', [
|
||||||
'checked' => $this->getData(['theme', 'footer', 'loginLink'])
|
'checked' => $this->getData(['theme', 'footer', 'loginLink'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
|
||||||
<?php echo template::checkbox('themeFooterDisplaySearch', true, 'Rechercher', [
|
|
||||||
'checked' => $this->getData(['theme', 'footer', 'displaySearch']),
|
|
||||||
]); ?>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col12">
|
|
||||||
<em>Le paramétrage des mentions légales s'effectue dans la configuration du site.</em>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -110,7 +113,7 @@
|
||||||
<div class="col3">
|
<div class="col3">
|
||||||
<?php echo template::select('themeFooterFontSize', $module::$footerFontSizes, [
|
<?php echo template::select('themeFooterFontSize', $module::$footerFontSizes, [
|
||||||
'label' => 'Taille',
|
'label' => 'Taille',
|
||||||
'help' => 'Proportionnelle à celle définie dans le site.',
|
'help' => 'Proportionnelle à celle définie dans le site.',
|
||||||
'selected' => $this->getData(['theme', 'footer', 'fontSize'])
|
'selected' => $this->getData(['theme', 'footer', 'fontSize'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
|
@ -136,7 +139,7 @@
|
||||||
<h4>Configuration</h4>
|
<h4>Configuration</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
|
|
||||||
<?php $footerBlockPosition = is_null($this->getData(['theme', 'footer', 'template'])) ? $module::$footerblocks[3] : $module::$footerblocks [$this->getData(['theme', 'footer', 'template'])] ;?>
|
<?php $footerBlockPosition = is_null($this->getData(['theme', 'footer', 'template'])) ? $module::$footerblocks[3] : $module::$footerblocks [$this->getData(['theme', 'footer', 'template'])] ;?>
|
||||||
<?php echo template::select('themeFooterTemplate', $module::$footerTemplate, [
|
<?php echo template::select('themeFooterTemplate', $module::$footerTemplate, [
|
||||||
'label' => 'Disposition',
|
'label' => 'Disposition',
|
||||||
|
@ -199,13 +202,13 @@
|
||||||
'checked' => $this->getData(['theme', 'footer', 'margin'])
|
'checked' => $this->getData(['theme', 'footer', 'margin'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
<div id="themeFooterPositionFixed" class="displayNone">
|
<div id="themeFooterPositionFixed" class="displayNone">
|
||||||
<?php echo template::checkbox('themeFooterFixed', true, 'Pied de page fixe', [
|
<?php echo template::checkbox('themeFooterFixed', true, 'Pied de page fixe', [
|
||||||
'checked' => $this->getData(['theme', 'footer', 'fixed'])
|
'checked' => $this->getData(['theme', 'footer', 'fixed'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
// Menu fixe à afficher
|
// Menu fixe à afficher
|
||||||
if($("#themeMenuPosition").val() === 'top') {
|
if($("#themeMenuPosition").val() === 'top') {
|
||||||
$("#themeMenuPositionFixed").slideDown();
|
$("#themeMenuPositionFixed").slideDown();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$("#themeMenuPositionFixed").slideUp(function() {
|
$("#themeMenuPositionFixed").slideUp(function() {
|
||||||
|
@ -23,7 +23,7 @@ $(document).ready(function(){
|
||||||
|
|
||||||
// Option de menu à afficher
|
// Option de menu à afficher
|
||||||
if($("#themeMenuPosition").val() === 'site-first' || $(this).val() === 'site-second') {
|
if($("#themeMenuPosition").val() === 'site-first' || $(this).val() === 'site-second') {
|
||||||
$("#themeMenuPositionOptions").slideDown();
|
$("#themeMenuPositionOptions").slideDown();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$("#themeMenuPositionOptions").slideUp(function() {
|
$("#themeMenuPositionOptions").slideUp(function() {
|
||||||
|
@ -42,7 +42,7 @@ $("input, select").on("change", function() {
|
||||||
var menuFont = $("#themeMenuFont").val();
|
var menuFont = $("#themeMenuFont").val();
|
||||||
var css = "@import url('https://fonts.googleapis.com/css?family=" + menuFont + "');";
|
var css = "@import url('https://fonts.googleapis.com/css?family=" + menuFont + "');";
|
||||||
var colors = core.colorVariants($("#themeMenuBackgroundColor").val());
|
var colors = core.colorVariants($("#themeMenuBackgroundColor").val());
|
||||||
// Couleurs du menu
|
// Couleurs du menu
|
||||||
css += "nav,nav a{background-color:" + colors.normal + "}";
|
css += "nav,nav a{background-color:" + colors.normal + "}";
|
||||||
css += "nav a,#toggle span,nav a:hover{color:" + $("#themeMenuTextColor").val() + "}";
|
css += "nav a,#toggle span,nav a:hover{color:" + $("#themeMenuTextColor").val() + "}";
|
||||||
css += "nav a:hover{background-color:" + colors.darken + "}";
|
css += "nav a:hover{background-color:" + colors.darken + "}";
|
||||||
|
@ -50,7 +50,7 @@ $("input, select").on("change", function() {
|
||||||
css += "nav a:hover{background-color:" + colors.veryDarken + ";color:" + $('#themeMenuActiveTextColor').val() + ";}";
|
css += "nav a:hover{background-color:" + colors.veryDarken + ";color:" + $('#themeMenuActiveTextColor').val() + ";}";
|
||||||
} else {
|
} else {
|
||||||
css += "nav a:hover{background-color:" + $("#themeMenuActiveColor").val() + ";color:" + $('#themeMenuActiveTextColor').val() + ";}";
|
css += "nav a:hover{background-color:" + $("#themeMenuActiveColor").val() + ";color:" + $('#themeMenuActiveTextColor').val() + ";}";
|
||||||
}
|
}
|
||||||
// Taille, hauteur, épaisseur et capitalisation de caractères du menu
|
// Taille, hauteur, épaisseur et capitalisation de caractères du menu
|
||||||
css += "#toggle span,#menu a{padding:" + $("#themeMenuHeight").val() + ";font-family:'" + menuFont.replace(/\+/g, " ") + "',sans-serif;font-weight:" + $("#themeMenuFontWeight").val() + ";font-size:" + $("#themeMenuFontSize").val() + ";text-transform:" + $("#themeMenuTextTransform").val() + "}";
|
css += "#toggle span,#menu a{padding:" + $("#themeMenuHeight").val() + ";font-family:'" + menuFont.replace(/\+/g, " ") + "',sans-serif;font-weight:" + $("#themeMenuFontWeight").val() + ";font-size:" + $("#themeMenuFontSize").val() + ";text-transform:" + $("#themeMenuTextTransform").val() + "}";
|
||||||
// Alignement du menu
|
// Alignement du menu
|
||||||
|
@ -105,7 +105,7 @@ $("input, select").on("change", function() {
|
||||||
$("#menu").removeClass('container-large');
|
$("#menu").removeClass('container-large');
|
||||||
$("nav").removeAttr('id');
|
$("nav").removeAttr('id');
|
||||||
$("#menu").addClass('container');
|
$("#menu").addClass('container');
|
||||||
break;
|
break;
|
||||||
case 'body-second':
|
case 'body-second':
|
||||||
if(<?php echo json_encode($this->getData(['theme', 'header', 'position']) === 'body'); ?>) {
|
if(<?php echo json_encode($this->getData(['theme', 'header', 'position']) === 'body'); ?>) {
|
||||||
$("nav").show().insertAfter("header");
|
$("nav").show().insertAfter("header");
|
||||||
|
@ -123,7 +123,7 @@ $("input, select").on("change", function() {
|
||||||
break;
|
break;
|
||||||
case 'site':
|
case 'site':
|
||||||
$("nav").show().prependTo("#site");
|
$("nav").show().prependTo("#site");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//
|
//
|
||||||
|
@ -140,7 +140,7 @@ $("#themeMenuLoginLink").on("change", function() {
|
||||||
// Affiche / Cache les options de la position
|
// Affiche / Cache les options de la position
|
||||||
$("#themeMenuPosition").on("change", function() {
|
$("#themeMenuPosition").on("change", function() {
|
||||||
if($(this).val() === 'site-first' || $(this).val() === 'site-second') {
|
if($(this).val() === 'site-first' || $(this).val() === 'site-second') {
|
||||||
$("#themeMenuPositionOptions").slideDown();
|
$("#themeMenuPositionOptions").slideDown();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$("#themeMenuPositionOptions").slideUp(function() {
|
$("#themeMenuPositionOptions").slideUp(function() {
|
||||||
|
@ -152,7 +152,7 @@ $("#themeMenuPosition").on("change", function() {
|
||||||
// Affiche / Cache les options du menu fixe
|
// Affiche / Cache les options du menu fixe
|
||||||
$("#themeMenuPosition").on("change", function() {
|
$("#themeMenuPosition").on("change", function() {
|
||||||
if($(this).val() === 'top') {
|
if($(this).val() === 'top') {
|
||||||
$("#themeMenuPositionFixed").slideDown();
|
$("#themeMenuPositionFixed").slideDown();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$("#themeMenuPositionFixed").slideUp(function() {
|
$("#themeMenuPositionFixed").slideUp(function() {
|
||||||
|
@ -165,7 +165,7 @@ $("#themeMenuPosition").on("change", function() {
|
||||||
$("#themeMenuActiveColorAuto").on("change", function() {
|
$("#themeMenuActiveColorAuto").on("change", function() {
|
||||||
if ($(this).is(':checked') ) {
|
if ($(this).is(':checked') ) {
|
||||||
$("#themeMenuActiveColorWrapper").slideUp();
|
$("#themeMenuActiveColorWrapper").slideUp();
|
||||||
} else {
|
} else {
|
||||||
$("#themeMenuActiveColorWrapper").slideDown();
|
$("#themeMenuActiveColorWrapper").slideDown();
|
||||||
}
|
}
|
||||||
}).trigger("change");
|
}).trigger("change");
|
|
@ -20,19 +20,19 @@
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
<?php echo template::text('themeMenuTextColor', [
|
<?php echo template::text('themeMenuTextColor', [
|
||||||
'class' => 'colorPicker',
|
'class' => 'colorPicker',
|
||||||
'help' => 'Le curseur horizontal règle le niveau de transparence.',
|
'help' => 'Le curseur horizontal règle le niveau de transparence.',
|
||||||
'label' => 'Texte',
|
'label' => 'Texte',
|
||||||
'value' => $this->getData(['theme', 'menu', 'textColor'])
|
'value' => $this->getData(['theme', 'menu', 'textColor'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
<?php echo template::text('themeMenuBackgroundColor', [
|
<?php echo template::text('themeMenuBackgroundColor', [
|
||||||
'class' => 'colorPicker',
|
'class' => 'colorPicker',
|
||||||
'help' => 'Le curseur horizontal règle le niveau de transparence.',
|
'help' => 'Le curseur horizontal règle le niveau de transparence.',
|
||||||
'label' => 'Fond',
|
'label' => 'Fond',
|
||||||
'value' => $this->getData(['theme', 'menu', 'backgroundColor'])
|
'value' => $this->getData(['theme', 'menu', 'backgroundColor'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -40,31 +40,31 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col12">
|
<div class="col12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4>Page active</h4>
|
<h4>Page active</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
<?php echo template::text('themeMenuActiveTextColor', [
|
<?php echo template::text('themeMenuActiveTextColor', [
|
||||||
'class' => 'colorPicker',
|
'class' => 'colorPicker',
|
||||||
'help' => 'Le curseur horizontal règle le niveau de transparence.',
|
'help' => 'Le curseur horizontal règle le niveau de transparence.',
|
||||||
'label' => 'Texte',
|
'label' => 'Texte',
|
||||||
'value' => $this->getData(['theme', 'menu', 'activeTextColor'])
|
'value' => $this->getData(['theme', 'menu', 'activeTextColor'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col4 verticalAlignBottom">
|
<div class="col4 verticalAlignBottom">
|
||||||
<?php
|
<?php
|
||||||
echo template::checkbox('themeMenuActiveColorAuto', true, 'Couleur du fond automatique', [
|
echo template::checkbox('themeMenuActiveColorAuto', true, 'Couleur du fond automatique', [
|
||||||
'checked' => $this->getData(['theme', 'menu', 'activeColorAuto']),
|
'checked' => $this->getData(['theme', 'menu', 'activeColorAuto']),
|
||||||
'help' => 'La couleur de fond de la page active peut être définie automatique ou selon une couleur définie, comme par exemple celle de fond des pages.'
|
'help' => 'La couleur de fond de la page active peut être définie automatique ou selon une couleur définie, comme par exemple celle de fond des pages.'
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
<?php echo template::text('themeMenuActiveColor', [
|
<?php echo template::text('themeMenuActiveColor', [
|
||||||
'class' => 'colorPicker',
|
'class' => 'colorPicker',
|
||||||
'help' => 'Couleur de fond de la page sélectionnée dans le menu.<br>Le curseur horizontal règle le niveau de transparence.',
|
'help' => 'Couleur de fond de la page sélectionnée dans le menu.<br>Le curseur horizontal règle le niveau de transparence.',
|
||||||
'label' => 'Fond',
|
'label' => 'Fond',
|
||||||
'value' => $this->getData(['theme', 'menu', 'activeColor'])
|
'value' => $this->getData(['theme', 'menu', 'activeColor'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -84,7 +84,7 @@
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
<?php echo template::select('themeMenuFontSize', $module::$menuFontSizes, [
|
<?php echo template::select('themeMenuFontSize', $module::$menuFontSizes, [
|
||||||
'label' => 'Taille',
|
'label' => 'Taille',
|
||||||
'help' => 'Proportionnelle à celle définie dans le site',
|
'help' => 'Proportionnelle à celle définie dans le site',
|
||||||
'selected' => $this->getData(['theme', 'menu', 'fontSize'])
|
'selected' => $this->getData(['theme', 'menu', 'fontSize'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
|
@ -168,18 +168,25 @@
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4>Contenus</h4>
|
<h4>Contenus</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col6">
|
<div class="col4">
|
||||||
<?php echo template::checkbox('themeMenuLoginLink', true, 'Lien de connexion', [
|
<?php echo template::checkbox('themeMenuLoginLink', true, 'Lien de connexion', [
|
||||||
'checked' => $this->getData(['theme', 'menu', 'loginLink'])
|
'checked' => $this->getData(['theme', 'menu', 'loginLink']),
|
||||||
|
'help' => 'L\'activation de cette option n\'est pas recommandée'
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col6">
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('themeMenuMemberBar', true, 'Barre de membre', [
|
||||||
|
'checked' => $this->getData(['theme', 'menu', 'memberBar']),
|
||||||
|
'help' => 'Icônes de gestion de compte et de déconnexion. Uniquement pour les membres connectés'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
<?php echo template::checkbox('themeMenuBurgerTitle', true, 'Titre du site dans le menu réduit', [
|
<?php echo template::checkbox('themeMenuBurgerTitle', true, 'Titre du site dans le menu réduit', [
|
||||||
'checked' => $this->getData(['theme', 'menu', 'burgerTitle']),
|
'checked' => $this->getData(['theme', 'menu', 'burgerTitle']),
|
||||||
'help' => 'Le menu burger remplace le menu complet lorsque la largeur de l\'écran n\'est pas suffisante.'
|
'help' => 'Le menu burger remplace le menu complet lorsque la largeur de l\'écran n\'est pas suffisante.'
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -26,15 +26,6 @@ class user extends common {
|
||||||
];
|
];
|
||||||
public static $users = [];
|
public static $users = [];
|
||||||
|
|
||||||
//Paramètre pour choix de la signature
|
|
||||||
public static $signature = [
|
|
||||||
1 => 'Identifiant',
|
|
||||||
2 => 'Pseudo',
|
|
||||||
3 => 'Prénom Nom',
|
|
||||||
4 => 'Nom Prénom'
|
|
||||||
];
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ajout
|
* Ajout
|
||||||
*/
|
*/
|
||||||
|
@ -57,12 +48,9 @@ class user extends common {
|
||||||
$userFirstname = $this->getInput('userAddFirstname', helper::FILTER_STRING_SHORT, true);
|
$userFirstname = $this->getInput('userAddFirstname', helper::FILTER_STRING_SHORT, true);
|
||||||
$userLastname = $this->getInput('userAddLastname', helper::FILTER_STRING_SHORT, true);
|
$userLastname = $this->getInput('userAddLastname', helper::FILTER_STRING_SHORT, true);
|
||||||
$userMail = $this->getInput('userAddMail', helper::FILTER_MAIL, true);
|
$userMail = $this->getInput('userAddMail', helper::FILTER_MAIL, true);
|
||||||
$userPseudo = $this->getInput('userAddPseudo', helper::FILTER_STRING_SHORT, true);
|
|
||||||
$usersignature = $this->getInput('userAddSignature', helper::FILTER_STRING_SHORT, true);
|
|
||||||
// Pas de nom saisi
|
// Pas de nom saisi
|
||||||
if (empty($userFirstname) ||
|
if (empty($userFirstname) ||
|
||||||
empty($userLastname) ||
|
empty($userLastname) ||
|
||||||
empty($userPseudo) ||
|
|
||||||
empty($this->getInput('userAddPassword', helper::FILTER_STRING_SHORT, true)) ||
|
empty($this->getInput('userAddPassword', helper::FILTER_STRING_SHORT, true)) ||
|
||||||
empty($this->getInput('userAddConfirmPassword', helper::FILTER_STRING_SHORT, true))) {
|
empty($this->getInput('userAddConfirmPassword', helper::FILTER_STRING_SHORT, true))) {
|
||||||
$check=false;
|
$check=false;
|
||||||
|
@ -77,10 +65,8 @@ class user extends common {
|
||||||
'forgot' => 0,
|
'forgot' => 0,
|
||||||
'group' => $this->getInput('userAddGroup', helper::FILTER_INT, true),
|
'group' => $this->getInput('userAddGroup', helper::FILTER_INT, true),
|
||||||
'lastname' => $userLastname,
|
'lastname' => $userLastname,
|
||||||
'pseudo' => $userPseudo,
|
|
||||||
'signature' => $usersignature,
|
|
||||||
'mail' => $userMail,
|
'mail' => $userMail,
|
||||||
'password' => $this->getInput('userAddPassword', helper::FILTER_PASSWORD, true)
|
'password' => $this->getInput('userAddPassword', helper::FILTER_PASSWORD, true),
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
@ -224,26 +210,15 @@ class user extends common {
|
||||||
else {
|
else {
|
||||||
$newGroup = $this->getData(['user', $this->getUrl(2), 'group']);
|
$newGroup = $this->getData(['user', $this->getUrl(2), 'group']);
|
||||||
}
|
}
|
||||||
// Modification de nom Prénom
|
|
||||||
if($this->getUser('group') === self::GROUP_ADMIN){
|
|
||||||
$newfirstname = $this->getInput('userEditFirstname', helper::FILTER_STRING_SHORT, true);
|
|
||||||
$newlastname = $this->getInput('userEditLastname', helper::FILTER_STRING_SHORT, true);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$newfirstname = $this->getData(['user', $this->getUrl(2), 'firstname']);
|
|
||||||
$newlastname = $this->getData(['user', $this->getUrl(2), 'lastname']);
|
|
||||||
}
|
|
||||||
// Modifie l'utilisateur
|
// Modifie l'utilisateur
|
||||||
$this->setData([
|
$this->setData([
|
||||||
'user',
|
'user',
|
||||||
$this->getUrl(2),
|
$this->getUrl(2),
|
||||||
[
|
[
|
||||||
'firstname' => $newfirstname,
|
'firstname' => $this->getInput('userEditFirstname', helper::FILTER_STRING_SHORT, true),
|
||||||
'forgot' => 0,
|
'forgot' => 0,
|
||||||
'group' => $newGroup,
|
'group' => $newGroup,
|
||||||
'lastname' => $newlastname,
|
'lastname' => $this->getInput('userEditLastname', helper::FILTER_STRING_SHORT, true),
|
||||||
'pseudo' => $this->getInput('userEditPseudo', helper::FILTER_STRING_SHORT, true),
|
|
||||||
'signature' => $this->getInput('userEditSignature', helper::FILTER_INT, true),
|
|
||||||
'mail' => $this->getInput('userEditMail', helper::FILTER_MAIL, true),
|
'mail' => $this->getInput('userEditMail', helper::FILTER_MAIL, true),
|
||||||
'password' => $newPassword,
|
'password' => $newPassword,
|
||||||
'connectFail' => $this->getData(['user',$this->getUrl(2),'connectFail']),
|
'connectFail' => $this->getData(['user',$this->getUrl(2),'connectFail']),
|
||||||
|
@ -363,96 +338,107 @@ class user extends common {
|
||||||
if($this->isPost()) {
|
if($this->isPost()) {
|
||||||
$userId = $this->getInput('userLoginId', helper::FILTER_ID, true);
|
$userId = $this->getInput('userLoginId', helper::FILTER_ID, true);
|
||||||
|
|
||||||
// le userId n'existe pas, créer ou mettre à jour une entrée dans la liste noire
|
/**
|
||||||
if( !$this->getData(['user', $userId])) {
|
* Aucun compte existant
|
||||||
|
*/
|
||||||
|
if ( !$this->getData(['user', $userId])) {
|
||||||
//Stockage de l'IP
|
//Stockage de l'IP
|
||||||
$this->setData([
|
$this->setData([
|
||||||
'blacklist',
|
'blacklist',
|
||||||
$userId,
|
$userId,
|
||||||
[
|
[
|
||||||
'connectFail' => $this->getData(['blacklist',$userId,'connectFail']) ? $this->getData(['blacklist',$userId,'connectFail']) + 1 : 1,
|
'connectFail' => $this->getData(['blacklist',$userId,'connectFail']) + 1,
|
||||||
'lastFail' => time(),
|
'lastFail' => time(),
|
||||||
'ip' => $_SERVER['REMOTE_ADDR']
|
'ip' => helper::getIp()
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
$notification = 'Identifiant ou mot de passe incorrect';
|
// Verrouillage des IP
|
||||||
}
|
$ipBlackList = helper::arrayCollumn($this->getData(['blacklist']), 'ip');
|
||||||
|
if ( $this->getData(['blacklist',$userId,'connectFail']) >= $this->getData(['config', 'connect', 'attempt'])
|
||||||
/**
|
OR in_array($this->getData(['blacklist',$userId,'ip']),$ipBlackList) ) {
|
||||||
* Compte valide :
|
// Valeurs en sortie
|
||||||
* Mot de passe
|
|
||||||
* 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
|
|
||||||
) {
|
|
||||||
$expire = $this->getInput('userLoginLongTime') ? strtotime("+1 year") : 0;
|
|
||||||
setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false));
|
|
||||||
setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false));
|
|
||||||
// Accès multiples avec le même compte
|
|
||||||
$this->setData(['user',$userId,'accessCsrf',$_SESSION['csrf']]);
|
|
||||||
// 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
|
|
||||||
) {
|
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'notification' => 'Seul un administrateur peut se connecter lors d\'une maintenance',
|
'notification' => 'Trop de tentatives, compte verrouillé',
|
||||||
'redirect' => helper::baseUrl(),
|
'redirect' => helper::baseUrl(),
|
||||||
'state' => false
|
'state' => false
|
||||||
]);
|
]);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
// RAZ compteur échec connexion
|
|
||||||
$this->setData(['user',$userId,'connectFail',0 ]);
|
|
||||||
$this->setData(['user',$userId,'connectTimeout',0 ]);
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'notification' => 'Connexion réussie',
|
'notification' => 'Identifiant ou mot de passe incorrect'
|
||||||
'redirect' => helper::baseUrl() . str_replace('_', '/', str_replace('__', '#', $this->getUrl(2))),
|
|
||||||
'state' => true
|
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
/**
|
||||||
// Sinon notification d'échec
|
* Le compte existe
|
||||||
else {
|
*/
|
||||||
// L'utilisateur existe : incrémenter le compteur d'échec de connexion
|
} else {
|
||||||
if ( is_array($this->getdata(['user',$userId]))
|
// 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']) ) {
|
||||||
|
$this->setData(['user',$userId,'connectFail',0 ]);
|
||||||
|
$this->setData(['user',$userId,'connectTimeout',0 ]);
|
||||||
|
}
|
||||||
|
// Check la présence des variables et contrôle du blocage du compte si valeurs dépassées
|
||||||
|
// 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
|
||||||
) {
|
) {
|
||||||
$this->setData(['user',$userId,'connectFail',$this->getdata(['user',$userId,'connectFail']) + 1 ]);
|
$expire = $this->getInput('userLoginLongTime') ? strtotime("+1 year") : 0;
|
||||||
// Mettre à jour le timer et notifier
|
setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false));
|
||||||
if ( $this->getdata(['user',$userId,'connectFail']) >= $this->getData(['config', 'connect', 'attempt'])
|
setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false));
|
||||||
|
// Accès multiples avec le même compte
|
||||||
|
$this->setData(['user',$userId,'accessCsrf',$_SESSION['csrf']]);
|
||||||
|
// 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
|
||||||
) {
|
) {
|
||||||
$notification = 'Trop de tentatives, accès bloqué durant ' . ($this->getData(['config', 'connect', 'timeout']) / 60) . ' minutes.';
|
$this->addOutput([
|
||||||
// Incrémenter le timer
|
'notification' => 'Seul un administrateur peut se connecter lors d\'une maintenance',
|
||||||
if ($this->getData(['user',$userId,'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) < time() ) {
|
'redirect' => helper::baseUrl(),
|
||||||
$this->setData(['user',$userId,'connectTimeout', time()]);
|
'state' => false
|
||||||
}
|
]);
|
||||||
} else {
|
} else {
|
||||||
$notification = 'Identifiant ou mot de passe incorrect';
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'notification' => 'Connexion réussie',
|
||||||
|
'redirect' => helper::baseUrl() . str_replace('_', '/', str_replace('__', '#', $this->getUrl(2))),
|
||||||
|
'state' => true
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
// L'utilisateur n'existe pas
|
// Sinon notification d'échec
|
||||||
// Bloquer l'IP après les tentatives autorisées avec ce compte,
|
} else {
|
||||||
} elseif (
|
$notification = 'Identifiant ou mot de passe incorrect';
|
||||||
$this->getData(['blacklist',$userId,'connectFail']) >= $this->getData(['config', 'connect', 'attempt'])
|
// Cas 1 le nombre de connexions est inférieur aux tentatives autorisées : incrément compteur d'échec
|
||||||
) {
|
if ($this->getData(['user',$userId,'connectFail']) < $this->getData(['config', 'connect', 'attempt'])) {
|
||||||
$notification = 'Trop de tentatives, compte verrouillé';
|
$this->setData(['user',$userId,'connectFail',$this->getdata(['user',$userId,'connectFail']) + 1 ]);
|
||||||
|
}
|
||||||
|
// Cas 2 la limite du nombre de connexion est atteinte : placer le timer
|
||||||
|
if ( $this->getdata(['user',$userId,'connectFail']) == $this->getData(['config', 'connect', 'attempt']) ) {
|
||||||
|
$this->setData(['user',$userId,'connectTimeout', time()]);
|
||||||
|
}
|
||||||
|
// Cas 3 le délai de bloquage court
|
||||||
|
if ($this->getData(['user',$userId,'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) > time() ) {
|
||||||
|
$notification = 'Trop de tentatives, accès bloqué durant ' . ($this->getData(['config', 'connect', 'timeout']) / 60) . ' minutes.';
|
||||||
|
}
|
||||||
|
// Journalisation
|
||||||
|
$dataLog = strftime('%d/%m/%y',time()) . ';' . strftime('%R',time()) . ';' ;
|
||||||
|
$dataLog .= helper::getIp() . ';';
|
||||||
|
$dataLog .= $userId . ';' ;
|
||||||
|
$dataLog .= $this->getUrl() .';' ;
|
||||||
|
$dataLog .= 'échec de connexion' ;
|
||||||
|
$dataLog .= PHP_EOL;
|
||||||
|
if ($this->getData(['config','connect','log'])) {
|
||||||
|
file_put_contents(self::DATA_DIR . 'journal.log', $dataLog, FILE_APPEND);
|
||||||
|
}
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'notification' => $notification
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
// Journalisation
|
|
||||||
$dataLog = strftime('%d/%m/%y',time()) . ';' . strftime('%R',time()) . ';' ;
|
|
||||||
$dataLog .= $userId . ';' ;
|
|
||||||
$dataLog .= $this->getUrl() .';' ;
|
|
||||||
$dataLog .= 'échec de connexion' ;
|
|
||||||
$dataLog .= PHP_EOL;
|
|
||||||
if ($this->getData(['config','connect','log'])) {
|
|
||||||
file_put_contents(self::DATA_DIR . 'journal.log', $dataLog, FILE_APPEND);
|
|
||||||
}
|
|
||||||
// Valeurs en sortie
|
|
||||||
$this->addOutput([
|
|
||||||
'notification' => $notification
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
|
@ -529,4 +515,4 @@ class user extends common {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -30,14 +30,6 @@
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php echo template::text('userAddPseudo', [
|
|
||||||
'autocomplete' => 'off',
|
|
||||||
'label' => 'Pseudo'
|
|
||||||
]); ?>
|
|
||||||
<?php echo template::select('userAddSignature', $module::$signature, [
|
|
||||||
'label' => 'Signature',
|
|
||||||
'selected' => 1
|
|
||||||
]); ?>
|
|
||||||
<?php echo template::mail('userAddMail', [
|
<?php echo template::mail('userAddMail', [
|
||||||
'autocomplete' => 'off',
|
'autocomplete' => 'off',
|
||||||
'label' => 'Adresse mail'
|
'label' => 'Adresse mail'
|
||||||
|
@ -81,9 +73,9 @@
|
||||||
'label' => 'Confirmation'
|
'label' => 'Confirmation'
|
||||||
]); ?>
|
]); ?>
|
||||||
<?php echo template::checkbox('userAddSendMail', true,
|
<?php echo template::checkbox('userAddSendMail', true,
|
||||||
'Prévenir l\'utilisateur par mail');
|
'Prévenir l\'utilisateur par mail');
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php echo template::formClose(); ?>
|
<?php echo template::formClose(); ?>
|
|
@ -1,10 +1,7 @@
|
||||||
<?php echo template::formOpen('userEditForm'); ?>
|
<?php echo template::formOpen('userEditForm'); ?>
|
||||||
<?php if( $this->getUser('group') > 2): $readonly = false;
|
|
||||||
else: $readonly = true;
|
|
||||||
endif;?>
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col2">
|
<div class="col2">
|
||||||
<?php if($this->getUrl(3)): ?>
|
<?php if($this->getUser('group') === self::GROUP_ADMIN): ?>
|
||||||
<?php echo template::button('userEditBack', [
|
<?php echo template::button('userEditBack', [
|
||||||
'class' => 'buttonGrey',
|
'class' => 'buttonGrey',
|
||||||
'href' => helper::baseUrl() . 'user',
|
'href' => helper::baseUrl() . 'user',
|
||||||
|
@ -32,7 +29,6 @@
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
<?php echo template::text('userEditFirstname', [
|
<?php echo template::text('userEditFirstname', [
|
||||||
'autocomplete' => 'off',
|
'autocomplete' => 'off',
|
||||||
'disabled' => $readonly,
|
|
||||||
'label' => 'Prénom',
|
'label' => 'Prénom',
|
||||||
'value' => $this->getData(['user', $this->getUrl(2), 'firstname'])
|
'value' => $this->getData(['user', $this->getUrl(2), 'firstname'])
|
||||||
]); ?>
|
]); ?>
|
||||||
|
@ -40,21 +36,11 @@
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
<?php echo template::text('userEditLastname', [
|
<?php echo template::text('userEditLastname', [
|
||||||
'autocomplete' => 'off',
|
'autocomplete' => 'off',
|
||||||
'disabled' => $readonly,
|
|
||||||
'label' => 'Nom',
|
'label' => 'Nom',
|
||||||
'value' => $this->getData(['user', $this->getUrl(2), 'lastname'])
|
'value' => $this->getData(['user', $this->getUrl(2), 'lastname'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php echo template::text('userEditPseudo', [
|
|
||||||
'autocomplete' => 'off',
|
|
||||||
'label' => 'Pseudo',
|
|
||||||
'value' => $this->getData(['user', $this->getUrl(2), 'pseudo'])
|
|
||||||
]); ?>
|
|
||||||
<?php echo template::select('userEditSignature', $module::$signature, [
|
|
||||||
'label' => 'Signature',
|
|
||||||
'selected' => $this->getData(['user', $this->getUrl(2), 'signature'])
|
|
||||||
]); ?>
|
|
||||||
<?php echo template::mail('userEditMail', [
|
<?php echo template::mail('userEditMail', [
|
||||||
'autocomplete' => 'off',
|
'autocomplete' => 'off',
|
||||||
'label' => 'Adresse mail',
|
'label' => 'Adresse mail',
|
||||||
|
@ -112,4 +98,4 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php echo template::formClose(); ?>
|
<?php echo template::formClose(); ?>
|
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue