Merge branch 'dev' into 12-dev
This commit is contained in:
commit
3532288fcf
@ -86,7 +86,7 @@ class helper {
|
|||||||
* @param string $sort Type de tri à appliquer au tableau (SORT_ASC, SORT_DESC, ou null)
|
* @param string $sort Type de tri à appliquer au tableau (SORT_ASC, SORT_DESC, ou null)
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function arrayCollumn($array, $column, $sort = null) {
|
public static function arrayColumn($array, $column, $sort = null) {
|
||||||
$newArray = [];
|
$newArray = [];
|
||||||
if(empty($array) === false) {
|
if(empty($array) === false) {
|
||||||
$newArray = array_map(function($element) use($column) {
|
$newArray = array_map(function($element) use($column) {
|
||||||
|
@ -620,13 +620,6 @@ class template {
|
|||||||
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']];
|
$attributes['selected'] = common::$inputBefore[$attributes['id']];
|
||||||
}
|
}
|
||||||
// Liste des polices à intégrer
|
|
||||||
//var_dump(core::$fonts);
|
|
||||||
if ($attributes['fonts'] === true) {
|
|
||||||
foreach (core::$fonts as $fontId => $font) {
|
|
||||||
echo "<link href='https://fonts.cdnfonts.com/css/" . $fontId . "' rel='stylesheet' type='text/css'>\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Début du wrapper
|
// Début du wrapper
|
||||||
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="inputWrapper ' . $attributes['classWrapper'] . '">';
|
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="inputWrapper ' . $attributes['classWrapper'] . '">';
|
||||||
// Label
|
// Label
|
||||||
|
181
core/core.php
181
core/core.php
@ -179,22 +179,18 @@ class common {
|
|||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
// Fontes
|
|
||||||
public static $fonts = [
|
|
||||||
];
|
|
||||||
|
|
||||||
public static $fontsWebSafe = [
|
public static $fontsWebSafe = [
|
||||||
'arial' => 'Arial, Helvetica, sans-serif;',
|
'arial' => 'Arial, Helvetica, sans-serif;',
|
||||||
'arial-black' => 'Arial Black, Gadget, sans-serif;',
|
'arial-black' => '"Arial Black", Gadget, sans-serif;',
|
||||||
'courrier' => 'Courier, Liberation Mono, monospace;',
|
'courrier' => 'Courier, "Liberation Mono", monospace;',
|
||||||
'courrier-new' => 'Courier New, Courier, monospace',
|
'courrier-new' => '"Courier New", Courier, monospace',
|
||||||
'garamond' => 'Garamond, serif',
|
'garamond' => 'Garamond, serif',
|
||||||
'georgia' => 'Georgia, serif;',
|
'georgia' => 'Georgia, serif;',
|
||||||
'impact' => 'Impact, Charcoal, sans-serif;',
|
'impact' => 'Impact, Charcoal, sans-serif;',
|
||||||
'lucida' => 'Lucida Sans Unicode, Lucida Grande, sans-serif',
|
'lucida' => '"Lucida Sans Unicode", "Lucida Grande", sans-serif',
|
||||||
'tahoma' => 'Tahoma, Geneva, sans-serif;',
|
'tahoma' => 'Tahoma, Geneva, sans-serif;',
|
||||||
'times-new-roman' => 'Times New Roman, Liberation Serif, serif;',
|
'times-new-roman' => '"Times New Roman", "Liberation Serif", serif;',
|
||||||
'trebuchet' => 'Trebuchet MS, Arial, Helvetica, sans-serif;',
|
'trebuchet' => '"Trebuchet MS", Arial, Helvetica, sans-serif;',
|
||||||
'tahoma' => 'Tahoma, Geneva, sans-serif;',
|
'tahoma' => 'Tahoma, Geneva, sans-serif;',
|
||||||
'verdana' => 'Verdana, Geneva, sans-serif;',
|
'verdana' => 'Verdana, Geneva, sans-serif;',
|
||||||
];
|
];
|
||||||
@ -294,7 +290,7 @@ class common {
|
|||||||
|
|
||||||
// Construit la liste des pages parents/enfants
|
// Construit la liste des pages parents/enfants
|
||||||
if($this->hierarchy['all'] === []) {
|
if($this->hierarchy['all'] === []) {
|
||||||
$pages = helper::arrayCollumn($this->getData(['page']), 'position', 'SORT_ASC');
|
$pages = helper::arrayColumn($this->getData(['page']), 'position', 'SORT_ASC');
|
||||||
// Parents
|
// Parents
|
||||||
foreach($pages as $pageId => $pagePosition) {
|
foreach($pages as $pageId => $pagePosition) {
|
||||||
if(
|
if(
|
||||||
@ -407,6 +403,48 @@ class common {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construit la liste des fontes dans un tableau
|
||||||
|
* @return array @fonts
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function getFonts() {
|
||||||
|
|
||||||
|
// Fusionne la liste des fontes avec les webSafe
|
||||||
|
foreach (self::$fontsWebSafe as $fontId => $fontValue) {
|
||||||
|
$fontName = explode (',', $fontValue);
|
||||||
|
$f ['websafe'] [$fontId] = [
|
||||||
|
'name' => str_replace('"', '', $fontName[0]),
|
||||||
|
'font-family'=> $fontValue
|
||||||
|
];
|
||||||
|
}
|
||||||
|
// Ajoute les polices importées
|
||||||
|
$fontsImported = $this->getData(['fonts', 'imported']);
|
||||||
|
if (is_array($fontsImported)
|
||||||
|
) {
|
||||||
|
foreach ($fontsImported as $fontId => $fontValue) {
|
||||||
|
$f ['imported'] [$fontId] = [
|
||||||
|
'name' => $fontValue ['name'],
|
||||||
|
'font-family'=> $fontValue ['font-family'],
|
||||||
|
'ressource' => $fontValue ['ressource']
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Ajoute les polices locales
|
||||||
|
$fontsFiles = $this->getData(['fonts', 'files']);
|
||||||
|
if (is_array($fontsFiles)
|
||||||
|
) {
|
||||||
|
foreach ($fontsFiles as $fontId => $fontValue) {
|
||||||
|
$f ['files'] [$fontId] = [
|
||||||
|
'name' => $fontValue ['name'],
|
||||||
|
'font-family'=> $fontValue ['font-family'],
|
||||||
|
'ressource' => $fontValue ['ressource']
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $f;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check du token CSRF (true = bo
|
* Check du token CSRF (true = bo
|
||||||
*/
|
*/
|
||||||
@ -2232,27 +2270,6 @@ class core extends common {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Traitement des polices de caractères
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Fusionne la liste des fontes avec les webSafe
|
|
||||||
foreach (self::$fontsWebSafe as $fontId => $fontValue) {
|
|
||||||
$fontName = explode (',', $fontValue);
|
|
||||||
self::$fonts [$fontId] = $fontName[0];
|
|
||||||
}
|
|
||||||
// Importe les polices personnalisées
|
|
||||||
$fontsImported = $this->getData(['fonts', 'imported']);
|
|
||||||
if (is_array($fontsImported) &&
|
|
||||||
!empty ($fontsImported)
|
|
||||||
) {
|
|
||||||
// Fusionner avec les fontes installées
|
|
||||||
self::$fonts = array_merge(self::$fonts, $fontsImported);
|
|
||||||
|
|
||||||
}
|
|
||||||
// Tri Alphabétique
|
|
||||||
asort(self::$fonts);
|
|
||||||
|
|
||||||
// Crée le fichier de personnalisation avancée
|
// Crée le fichier de personnalisation avancée
|
||||||
if(file_exists(self::DATA_DIR.'custom.css') === false) {
|
if(file_exists(self::DATA_DIR.'custom.css') === false) {
|
||||||
file_put_contents(self::DATA_DIR.'custom.css', file_get_contents('core/module/theme/resource/custom.css'));
|
file_put_contents(self::DATA_DIR.'custom.css', file_get_contents('core/module/theme/resource/custom.css'));
|
||||||
@ -2268,18 +2285,24 @@ class core extends common {
|
|||||||
file_put_contents(self::DATA_DIR.'admin.css', '');
|
file_put_contents(self::DATA_DIR.'admin.css', '');
|
||||||
chmod(self::DATA_DIR.'admin.css', 0755);
|
chmod(self::DATA_DIR.'admin.css', 0755);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check la version rafraichissement du theme
|
// Check la version rafraichissement du theme
|
||||||
$cssVersion = preg_split('/\*+/', file_get_contents(self::DATA_DIR.'theme.css'));
|
$cssVersion = preg_split('/\*+/', file_get_contents(self::DATA_DIR.'theme.css'));
|
||||||
if(empty($cssVersion[1]) OR $cssVersion[1] !== md5(json_encode($this->getData(['theme'])))) {
|
if(empty($cssVersion[1]) OR $cssVersion[1] !== md5(json_encode($this->getData(['theme'])))) {
|
||||||
// Version
|
// Version
|
||||||
$css = '/*' . md5(json_encode($this->getData(['theme']))) . '*/';
|
$css = '/*' . md5(json_encode($this->getData(['theme']))) . '*/';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Import des polices de caractères
|
* Import des polices de caractères
|
||||||
* A partir du CDN
|
* A partir du CDN
|
||||||
* ou dans le dossier site/file/source/fonts
|
* ou dans le dossier site/file/source/fonts
|
||||||
* ou pas du tout si fonte webSafe
|
* ou pas du tout si fonte webSafe
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Fonts disponibles
|
||||||
|
$fontsAvailable = $this->getFonts();
|
||||||
|
// Fontes installées
|
||||||
$fonts = [ $this->getData(['theme', 'text', 'font']),
|
$fonts = [ $this->getData(['theme', 'text', 'font']),
|
||||||
$this->getData(['theme', 'title', 'font']),
|
$this->getData(['theme', 'title', 'font']),
|
||||||
$this->getData(['theme', 'header', 'font']),
|
$this->getData(['theme', 'header', 'font']),
|
||||||
@ -2290,51 +2313,50 @@ class core extends common {
|
|||||||
$fonts = array_unique($fonts);
|
$fonts = array_unique($fonts);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fontes Web Safe, ne sont pas chargées.
|
* Charge les fontes websafe
|
||||||
*/
|
*/
|
||||||
|
$fontFile = '';
|
||||||
foreach ($fonts as $fontId) {
|
foreach ($fonts as $fontId) {
|
||||||
if (array_key_exists($fontId, self::$fontsWebSafe) ) {
|
if ( isset($fontsAvailable['websafe'][$fontId])) {
|
||||||
unset($fonts[$fontId]);
|
$fonts [$fontId] = $fontsAvailable['websafe'][$fontId]['font-family'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Chargement des polices en ligne dans un fichier séparé
|
* Chargement des polices en ligne dans un fichier fonts.html inclus dans main.php
|
||||||
*/
|
*/
|
||||||
// Lire le fichier des fontes locales
|
|
||||||
$localFonts = $this->getData(['fonts', 'files']);
|
|
||||||
$fontFile = '';
|
$fontFile = '';
|
||||||
foreach ($fonts as $fontId) {
|
foreach ($fonts as $fontId) {
|
||||||
if (!array_key_exists($fontId, $localFonts) ) {
|
if ( isset($fontsAvailable['imported'][$fontId])) {
|
||||||
$fontFile .= '<link href="https://fonts.cdnfonts.com/css/' . $fontId .'" rel="stylesheet">';
|
$fontFile .= '<link href="' . $fontsAvailable['imported'][$fontId]['ressource'] .'" rel="stylesheet">';
|
||||||
// Supprimer l'élément des fontes chargées en ligne
|
// Tableau pour la construction de la feuille de style
|
||||||
unset($fonts[$fontId]);
|
$fonts [$fontId] = $fontsAvailable['imported'][$fontId]['font-family'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Enregistre la personnalisation
|
||||||
|
file_put_contents(self::DATA_DIR.'fonts/fonts.html', $fontFile);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fontes installées localement
|
* Fontes installées localement
|
||||||
*/
|
*/
|
||||||
// Validité du format
|
foreach ($fonts as $fontId) {
|
||||||
if ( !empty($localFonts)
|
|
||||||
) {
|
|
||||||
foreach ($localFonts as $fontId => $fontName) {
|
|
||||||
// Validité du tableau :
|
// Validité du tableau :
|
||||||
if ( array_key_exists($fontId, self::$fonts) &&
|
if ( isset($fontsAvailable['files'][$fontId]) &&
|
||||||
file_exists(self::DATA_DIR . 'fonts/' . $fontName) ) {
|
file_exists(self::DATA_DIR . 'fonts/' . $f) ) {
|
||||||
// Chargement de la police
|
// Chargement de la police
|
||||||
//$formatFont = explode('.', self::DATA_DIR . 'fonts/' . $fontName);
|
//$formatFont = explode('.', self::DATA_DIR . 'fonts/' . $fontName);
|
||||||
$css .= '@font-face {font-family:"' . self::$fonts[$fontId] . '";';
|
$css .= '@font-face {font-family:"' . $fontsAvailable['files'][$fontId]['font-family'] . '";';
|
||||||
$css .= 'src: url("' . helper::baseUrl(false) . self::DATA_DIR . 'fonts/' . $fontName . '");}';
|
$css .= 'src: url("' . helper::baseUrl(false) . self::DATA_DIR . 'fonts/' .$fontsAvailable['files'][$fontId]['ressource'] . '");}';
|
||||||
|
// Tableau pour la construction de la feuille de style
|
||||||
|
$fonts [$fontId] = $fontsAvailable['files'][$fontId]['font-family'];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Fond du body
|
// Fond du body
|
||||||
$colors = helper::colorVariants($this->getData(['theme', 'body', 'backgroundColor']));
|
$colors = helper::colorVariants($this->getData(['theme', 'body', 'backgroundColor']));
|
||||||
// Body
|
// Body
|
||||||
$css .= 'body{font-family:"' . self::$fonts[$this->getData(['theme', 'text', 'font'])] . '",sans-serif}';
|
$css .= 'body{font-family:' . $fonts[$this->getData(['theme', 'text', 'font'])] . ';}';
|
||||||
if($themeBodyImage = $this->getData(['theme', 'body', 'image'])) {
|
if($themeBodyImage = $this->getData(['theme', 'body', 'image'])) {
|
||||||
// Image dans html pour éviter les déformations.
|
// Image dans html pour éviter les déformations.
|
||||||
$css .= 'html {background-image:url("../file/source/' . $themeBodyImage . '");background-position:' . $this->getData(['theme', 'body', 'imagePosition']) . ';background-attachment:' . $this->getData(['theme', 'body', 'imageAttachment']) . ';background-size:' . $this->getData(['theme', 'body', 'imageSize']) . ';background-repeat:' . $this->getData(['theme', 'body', 'imageRepeat']) . '}';
|
$css .= 'html {background-image:url("../file/source/' . $themeBodyImage . '");background-position:' . $this->getData(['theme', 'body', 'imagePosition']) . ';background-attachment:' . $this->getData(['theme', 'body', 'imageAttachment']) . ';background-size:' . $this->getData(['theme', 'body', 'imageSize']) . ';background-repeat:' . $this->getData(['theme', 'body', 'imageRepeat']) . '}';
|
||||||
@ -2352,7 +2374,7 @@ class core extends common {
|
|||||||
$colors = helper::colorVariants($this->getData(['theme', 'text', 'linkColor']));
|
$colors = helper::colorVariants($this->getData(['theme', 'text', 'linkColor']));
|
||||||
$css .= 'a{color:' . $colors['normal'] . '}';
|
$css .= 'a{color:' . $colors['normal'] . '}';
|
||||||
// Couleurs de site dans TinyMCe
|
// Couleurs de site dans TinyMCe
|
||||||
$css .= 'div.mce-edit-area {font-family:"' . self::$fonts[$this->getData(['theme', 'text', 'font'])] . '",sans-serif}';
|
$css .= 'div.mce-edit-area {font-family:' . $fonts[$this->getData(['theme', 'text', 'font'])] . ';}';
|
||||||
// Site dans TinyMCE
|
// Site dans TinyMCE
|
||||||
$css .= '.editorWysiwyg {background-color:' . $this->getData(['theme', 'site', 'backgroundColor']) . ';}';
|
$css .= '.editorWysiwyg {background-color:' . $this->getData(['theme', 'site', 'backgroundColor']) . ';}';
|
||||||
$css .= 'span.mce-text{background-color: unset !important;}';
|
$css .= 'span.mce-text{background-color: unset !important;}';
|
||||||
@ -2393,7 +2415,7 @@ class core extends common {
|
|||||||
$css .= '.helpButton span:hover{color:' . $colors['darken'] . '}';
|
$css .= '.helpButton span:hover{color:' . $colors['darken'] . '}';
|
||||||
$css .= '.button:active,button[type=\'submit\']:active,.pagination a:active{background-color:' . $colors['veryDarken'] . '}';
|
$css .= '.button:active,button[type=\'submit\']:active,.pagination a:active{background-color:' . $colors['veryDarken'] . '}';
|
||||||
$colors = helper::colorVariants($this->getData(['theme', 'title', 'textColor']));
|
$colors = helper::colorVariants($this->getData(['theme', 'title', 'textColor']));
|
||||||
$css .= 'h1,h2,h3,h4,h5,h6,h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:' . $colors['normal'] . ';font-family:"' . self::$fonts[$this->getData(['theme', 'title', 'font'])] . '",sans-serif;font-weight:' . $this->getData(['theme', 'title', 'fontWeight']) . ';text-transform:' . $this->getData(['theme', 'title', 'textTransform']) . '}';
|
$css .= 'h1,h2,h3,h4,h5,h6,h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:' . $colors['normal'] . ';font-family:' . $fonts[$this->getData(['theme', 'title', 'font'])] . ';font-weight:' . $this->getData(['theme', 'title', 'fontWeight']) . ';text-transform:' . $this->getData(['theme', 'title', 'textTransform']) . '}';
|
||||||
$css .= 'h1 a:hover,h2 a:hover,h3 a:hover,h4 a:hover,h5 a:hover,h6 a:hover{color:' . $colors['darken'] . '}';
|
$css .= 'h1 a:hover,h2 a:hover,h3 a:hover,h4 a:hover,h5 a:hover,h6 a:hover{color:' . $colors['darken'] . '}';
|
||||||
// Les blocs
|
// Les blocs
|
||||||
$colors = helper::colorVariants($this->getData(['theme', 'block', 'backgroundColor']));
|
$colors = helper::colorVariants($this->getData(['theme', 'block', 'backgroundColor']));
|
||||||
@ -2427,7 +2449,7 @@ class core extends common {
|
|||||||
$css .= 'header{background-image:url("../file/source/' . $themeHeaderImage . '");background-position:' . $this->getData(['theme', 'header', 'imagePosition']) . ';background-repeat:' . $this->getData(['theme', 'header', 'imageRepeat']) . '}';
|
$css .= 'header{background-image:url("../file/source/' . $themeHeaderImage . '");background-position:' . $this->getData(['theme', 'header', 'imagePosition']) . ';background-repeat:' . $this->getData(['theme', 'header', 'imageRepeat']) . '}';
|
||||||
}
|
}
|
||||||
$colors = helper::colorVariants($this->getData(['theme', 'header', 'textColor']));
|
$colors = helper::colorVariants($this->getData(['theme', 'header', 'textColor']));
|
||||||
$css .= 'header span{color:' . $colors['normal'] . ';font-family:"' . self::$fonts[$this->getData(['theme', 'header', 'font'])] . '",sans-serif;font-weight:' . $this->getData(['theme', 'header', 'fontWeight']) . ';font-size:' . $this->getData(['theme', 'header', 'fontSize']) . ';text-transform:' . $this->getData(['theme', 'header', 'textTransform']) . '}';
|
$css .= 'header span{color:' . $colors['normal'] . ';font-family:' . $fonts[$this->getData(['theme', 'header', 'font'])] . ';font-weight:' . $this->getData(['theme', 'header', 'fontWeight']) . ';font-size:' . $this->getData(['theme', 'header', 'fontSize']) . ';text-transform:' . $this->getData(['theme', 'header', 'textTransform']) . '}';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bannière au contenu personnalisé
|
// Bannière au contenu personnalisé
|
||||||
@ -2476,7 +2498,7 @@ class core extends common {
|
|||||||
$css .= 'nav{padding:0 10px;}';
|
$css .= 'nav{padding:0 10px;}';
|
||||||
}
|
}
|
||||||
|
|
||||||
$css .= '#toggle span,#menu a{padding:' . $this->getData(['theme', 'menu', 'height']) .';font-family:"' . self::$fonts[$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:' . $fonts[$this->getData(['theme', 'menu', 'font'])] . ';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']));
|
||||||
@ -2486,7 +2508,7 @@ class core extends common {
|
|||||||
$css .= 'footer{padding:0}';
|
$css .= 'footer{padding:0}';
|
||||||
}
|
}
|
||||||
|
|
||||||
$css .= 'footer span, #footerText > p {color:' . $this->getData(['theme', 'footer', 'textColor']) . ';font-family:"' . self::$fonts[$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:' . $fonts[$this->getData(['theme', 'footer', 'font'])] . ';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}';
|
||||||
@ -2497,10 +2519,8 @@ class core extends common {
|
|||||||
$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']) . '}';
|
||||||
|
|
||||||
|
|
||||||
// Enregistre la personnalisation
|
// Enregistre la personnalisation
|
||||||
file_put_contents(self::DATA_DIR.'theme.css', $css);
|
file_put_contents(self::DATA_DIR.'theme.css', $css);
|
||||||
file_put_contents(self::DATA_DIR.'fonts/fonts.html', $fontFile);
|
|
||||||
// Effacer le cache pour tenir compte de la couleur de fond TinyMCE
|
// Effacer le cache pour tenir compte de la couleur de fond TinyMCE
|
||||||
header("Expires: Tue, 01 Jan 2000 00:00:00 GMT");
|
header("Expires: Tue, 01 Jan 2000 00:00:00 GMT");
|
||||||
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
|
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
|
||||||
@ -2527,52 +2547,51 @@ class core extends common {
|
|||||||
$fonts = array_unique($fonts);
|
$fonts = array_unique($fonts);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fontes Web Safe, ne sont pas chargées.
|
* Charge les fontes websafe
|
||||||
*/
|
*/
|
||||||
|
$fontFile = '';
|
||||||
foreach ($fonts as $fontId) {
|
foreach ($fonts as $fontId) {
|
||||||
if (array_key_exists($fontId, self::$fontsWebSafe) ) {
|
if ( isset($fontsAvailable['websafe'][$fontId])) {
|
||||||
unset($fonts[$fontId]);
|
$fonts [$fontId] = $fontsAvailable['websafe'][$fontId]['font-family'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lire le fichier des fontes locales
|
|
||||||
$localFonts = $this->getData(['fonts', 'files']);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Chargement des polices en ligne
|
* Chargement des polices en ligne dans un fichier fonts.html inclus dans main.php
|
||||||
*/
|
*/
|
||||||
|
$fontFile = '';
|
||||||
foreach ($fonts as $fontId) {
|
foreach ($fonts as $fontId) {
|
||||||
if (!array_key_exists($fontId, $localFonts) ) {
|
if ( isset($fontsAvailable['imported'][$fontId])) {
|
||||||
$css .= '@import url("http://fonts.cdnfonts.com/css/' . $fontId . '");';
|
$fontFile .= '<link href="' . $fontsAvailable['imported'][$fontId]['ressource'] .'" rel="stylesheet">';
|
||||||
// Supprimer l'élément des fontes chargées en ligne
|
// Tableau pour la construction de la feuille de style
|
||||||
unset($fonts[$fontId]);
|
$fonts [$fontId] = $fontsAvailable['imported'][$fontId]['font-family'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Enregistre la personnalisation
|
||||||
|
file_put_contents(self::DATA_DIR.'fonts/fonts.html', $fontFile);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fontes installées localement
|
* Fontes installées localement
|
||||||
*/
|
*/
|
||||||
// Validité du format
|
foreach ($fonts as $fontId) {
|
||||||
if ( !empty($localFonts)
|
|
||||||
) {
|
|
||||||
foreach ($localFonts as $fontId => $fontName) {
|
|
||||||
// Validité du tableau :
|
// Validité du tableau :
|
||||||
if ( array_key_exists($fontId, self::$fonts) &&
|
if ( isset($fontsAvailable['files'][$fontId]) &&
|
||||||
file_exists(self::DATA_DIR . 'fonts/' . $fontName) ) {
|
file_exists(self::DATA_DIR . 'fonts/' . $f) ) {
|
||||||
// Chargement de la police
|
// Chargement de la police
|
||||||
//$formatFont = explode('.', self::DATA_DIR . 'fonts/' . $fontName);
|
//$formatFont = explode('.', self::DATA_DIR . 'fonts/' . $fontName);
|
||||||
$css .= '@font-face {font-family:"' . self::$fonts[$fontId] . '";';
|
$css .= '@font-face {font-family:"' . $fontsAvailable['files'][$fontId]['font-family'] . '";';
|
||||||
$css .= 'src: url("' . helper::baseUrl(false) . self::DATA_DIR . 'fonts/' . $fontName . '");}';
|
$css .= 'src: url("' . helper::baseUrl(false) . self::DATA_DIR . 'fonts/' .$fontsAvailable['files'][$fontId]['ressource'] . '");}';
|
||||||
|
// Tableau pour la construction de la feuille de style
|
||||||
|
$fonts [$fontId] = $fontsAvailable['files'][$fontId]['font-family'];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Thème Administration
|
// Thème Administration
|
||||||
$colors = helper::colorVariants($this->getData(['admin','backgroundColor']));
|
$colors = helper::colorVariants($this->getData(['admin','backgroundColor']));
|
||||||
$css .= '#site{background-color:' . $colors['normal']. ';}';
|
$css .= '#site{background-color:' . $colors['normal']. ';}';
|
||||||
$css .= '.row > div {font:' . $this->getData(['admin','fontSize']) . ' "' . self::$fonts[$this->getData(['admin','fontText'])] . '", sans-serif;}';
|
$css .= '.row > div {font:' . $fonts[$this->getData(['admin','fontText'])] . ';font-size:' . $this->getData(['admin','fontSize']) .'}';
|
||||||
$css .= 'body h1, h2, h3, h4 a, h5, h6 {font-family:"' . self::$fonts[$this->getData(['admin','fontTitle'])] . '", sans-serif;color:' . $this->getData(['admin','colorTitle' ]) . ';}';
|
$css .= 'body h1, h2, h3, h4 a, h5, h6 {font-family:' . $fonts[$this->getData(['admin','fontTitle'])] . ';color:' . $this->getData(['admin','colorTitle' ]) . ';}';
|
||||||
|
|
||||||
// TinyMCE
|
// TinyMCE
|
||||||
$css .= 'body:not(.editorWysiwyg),span .zwiico-help {color:' . $this->getData(['admin','colorText']) . ';}';
|
$css .= 'body:not(.editorWysiwyg),span .zwiico-help {color:' . $this->getData(['admin','colorText']) . ';}';
|
||||||
|
@ -481,7 +481,7 @@ if ($this->getData(['core', 'dataVersion']) < 10400) {
|
|||||||
foreach ($pageList as $parentKey => $parent) {
|
foreach ($pageList as $parentKey => $parent) {
|
||||||
//La page est un blog
|
//La page est un blog
|
||||||
if ($this->getData(['page',$parent,'moduleId']) === 'blog' ) {
|
if ($this->getData(['page',$parent,'moduleId']) === 'blog' ) {
|
||||||
$articleIds = array_keys(helper::arrayCollumn($this->getData(['module', $parent, 'posts']), 'publishedOn', 'SORT_DESC'));
|
$articleIds = array_keys(helper::arrayColumn($this->getData(['module', $parent, 'posts']), 'publishedOn', 'SORT_DESC'));
|
||||||
foreach ($articleIds as $key => $article) {
|
foreach ($articleIds as $key => $article) {
|
||||||
// Droits les deux groupes
|
// Droits les deux groupes
|
||||||
$this->setData(['module', $parent, 'posts', $article,'editConsent', 3]);
|
$this->setData(['module', $parent, 'posts', $article,'editConsent', 3]);
|
||||||
@ -874,26 +874,106 @@ if ($this->getData(['core', 'dataVersion']) < 11400) {
|
|||||||
// Version 12.0.00
|
// Version 12.0.00
|
||||||
if ($this->getData(['core', 'dataVersion']) < 12000) {
|
if ($this->getData(['core', 'dataVersion']) < 12000) {
|
||||||
$fonts = [
|
$fonts = [
|
||||||
'arimo' => 'Arimo',
|
'arimo'=> [
|
||||||
'arvo' => 'Arvo',
|
'name' => 'Arimo',
|
||||||
'dancing-script' => 'Dancing Script',
|
'font-family' => 'Arimo, sans-serif',
|
||||||
'droid-sans-2' => 'Droid Sans',
|
'url' => 'https://fonts.cdnfonts.com/css/arimo'
|
||||||
'droid-serif-2' => 'Droid Serif',
|
],
|
||||||
'indie-flower' => 'Indie Flower',
|
'arvo'=> [
|
||||||
'liberation-sans' => 'Liberation Sans',
|
'name' => 'Arvo',
|
||||||
'liberation-serif' => 'Liberation Serif',
|
'font-family' => 'Arvo, sans-serif',
|
||||||
'lobster-2' => 'Lobster',
|
'url' => 'https://fonts.cdnfonts.com/css/arvo'
|
||||||
'lora' => 'Lora',
|
],
|
||||||
'lato' => 'Lato',
|
'dancing-script' => [
|
||||||
'old-standard-tt-3' => 'Old Standard TT',
|
'name' => 'Dancing Script',
|
||||||
'open-sans' => 'Open Sans',
|
'font-family' => '"Dancing Script", sans-serif',
|
||||||
'oswald-4' => 'Oswald',
|
'url' => 'https://fonts.cdnfonts.com/css/dancing-script'
|
||||||
'pt-mono' => 'PT Mono',
|
],
|
||||||
'pt-serif' => 'PT Serif',
|
'droid-sans-2'=> [
|
||||||
'rancho' => 'Rancho',
|
'name' => 'Droid Sans',
|
||||||
'roboto' => 'Roboto',
|
'font-family' => '"Droid Sans", sans-serif',
|
||||||
'ubuntu' => 'Ubuntu',
|
'url' => 'https://fonts.cdnfonts.com/css/droid-sans-2'
|
||||||
'vollkorn' => 'Vollkorn'
|
],
|
||||||
|
'droid-serif-2'=> [
|
||||||
|
'name' => 'Droid Serif',
|
||||||
|
'font-family' => '"Droid Serif", serif',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/droid-serif-2'
|
||||||
|
],
|
||||||
|
'indie-flower'=> [
|
||||||
|
'name' => 'Indie Flower',
|
||||||
|
'font-family' => '"Indie Flower", sans-serif',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/indie-flower'
|
||||||
|
],
|
||||||
|
'liberation-sans'=> [
|
||||||
|
'name' => 'Liberation Sans',
|
||||||
|
'font-family' => '"Liberation Sans", sans-serif',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/liberation-sans'
|
||||||
|
],
|
||||||
|
'liberation-serif'=> [
|
||||||
|
'name' => 'Liberation Serif',
|
||||||
|
'font-family' => '"Liberation Serif", serif',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/liberation-serif'
|
||||||
|
],
|
||||||
|
'lobster-2'=> [
|
||||||
|
'name' => 'Lobster',
|
||||||
|
'font-family' => 'Lobster, sans-serif',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/lobster-2'
|
||||||
|
],
|
||||||
|
'lato'=> [
|
||||||
|
'name' => 'lato',
|
||||||
|
'font-family' => 'Lato, sans-serif',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/lato'
|
||||||
|
],
|
||||||
|
'lora'=> [
|
||||||
|
'name' => 'Lora',
|
||||||
|
'font-family' => 'Lora, serif',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/lora'
|
||||||
|
],
|
||||||
|
'old-standard-tt-3'=> [
|
||||||
|
'name' => 'Old Standard TT',
|
||||||
|
'font-family' => '"Old Standard TT", serif',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/old-standard-tt-3'
|
||||||
|
],
|
||||||
|
'open-sans' => [
|
||||||
|
'name' => 'Open Sans',
|
||||||
|
'font-family' => '"Open Sans", sans-serif',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/open-sans'
|
||||||
|
],
|
||||||
|
'oswald-4'=> [
|
||||||
|
'name' => 'Oswald',
|
||||||
|
'font-family' => 'Oswald, sans-serif',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/oswald-4'
|
||||||
|
],
|
||||||
|
'pt-mono'=> [
|
||||||
|
'name' => 'PT Mono',
|
||||||
|
'font-family' => '"PT Mono", monospace',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/pt-mono'
|
||||||
|
],
|
||||||
|
'pt-serif'=> [
|
||||||
|
'name' => "PR Serif",
|
||||||
|
'font-family' => '"PT Serif", serif',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/pt-serif'
|
||||||
|
],
|
||||||
|
'rancho'=> [
|
||||||
|
'name' => 'Rancho',
|
||||||
|
'font-family' => 'Rancho, sans-serif',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/rancho'
|
||||||
|
],
|
||||||
|
'roboto'=> [
|
||||||
|
'name' => 'Roboto',
|
||||||
|
'font-family' => 'Roboto, sans-serif',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/roboto'
|
||||||
|
],
|
||||||
|
'ubuntu'=> [
|
||||||
|
'name' => 'Ubuntu',
|
||||||
|
'font-family' => 'Ubuntu, sans-serif',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/ubuntu'
|
||||||
|
],
|
||||||
|
'vollkorn'=> [
|
||||||
|
'name' => 'Vollkorn',
|
||||||
|
'font-family' => 'Vollkorn, serif',
|
||||||
|
'url' => 'https://fonts.cdnfonts.com/css/vollkorn'
|
||||||
|
]
|
||||||
];
|
];
|
||||||
$this->setData(['fonts', 'imported', $fonts]);
|
$this->setData(['fonts', 'imported', $fonts]);
|
||||||
|
|
||||||
|
@ -9,27 +9,15 @@
|
|||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
</h4>
|
</h4>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col3">
|
|
||||||
<?php echo template::checkbox('connectCaptcha', true, 'Captcha à la connexion', [
|
|
||||||
'checked' => $this->getData(['config', 'connect','captcha'])
|
|
||||||
]); ?>
|
|
||||||
<?php echo template::checkbox('connectCaptchaStrong', true, 'Captcha complexe', [
|
|
||||||
'checked' => $this->getData(['config', 'connect', 'captchaStrong']),
|
|
||||||
'help' => 'Option recommandée pour sécuriser la connexion. S\'applique à tous les captchas du site. Le captcha simple se limite à une addition de nombres de 0 à 10. Le captcha complexe utilise quatre opérations de nombres de 0 à 20. Activation recommandée.'
|
|
||||||
]); ?>
|
|
||||||
</div>
|
|
||||||
<div class="col3">
|
|
||||||
<?php echo template::select('connectCaptchaType', $module::$captchaTypes , [
|
|
||||||
'label' => 'Type de captcha',
|
|
||||||
'selected' => $this->getData(['config', 'connect', 'captchaType'])
|
|
||||||
]); ?>
|
|
||||||
</div>
|
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
<?php echo template::checkbox('connectAutoDisconnect', true, 'Déconnexion automatique', [
|
<?php echo template::checkbox('connectAutoDisconnect', true, 'Déconnexion automatique', [
|
||||||
'checked' => $this->getData(['config', 'connect', 'autoDisconnect']),
|
'checked' => $this->getData(['config', 'connect', 'autoDisconnect']),
|
||||||
'help' => 'Déconnecte les sessions ouvertes précédemment sur d\'autres navigateurs ou terminaux. Activation recommandée.'
|
'help' => 'Déconnecte les sessions ouvertes précédemment sur d\'autres navigateurs ou terminaux. Activation recommandée.'
|
||||||
]); ?>
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col6">
|
||||||
<?php echo template::checkbox('connectShowPassword', true, 'Dévoiler le mot de passe', [
|
<?php echo template::checkbox('connectShowPassword', true, 'Dévoiler le mot de passe', [
|
||||||
'checked' => $this->getData(['config', 'connect', 'showPassword']),
|
'checked' => $this->getData(['config', 'connect', 'showPassword']),
|
||||||
'help' => 'Dans l\'écran de connexion, active une icône dont le survol affiche temporairement le mot de passe.'
|
'help' => 'Dans l\'écran de connexion, active une icône dont le survol affiche temporairement le mot de passe.'
|
||||||
@ -39,7 +27,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col3">
|
<div class="col3">
|
||||||
<?php echo template::select('connectAttempt', $module::$connectAttempt , [
|
<?php echo template::select('connectAttempt', $module::$connectAttempt , [
|
||||||
'label' => 'Connexions successives',
|
'label' => 'Limitation des tentatives',
|
||||||
'selected' => $this->getData(['config', 'connect', 'attempt'])
|
'selected' => $this->getData(['config', 'connect', 'attempt'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
@ -71,6 +59,25 @@
|
|||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col3">
|
||||||
|
<?php echo template::checkbox('connectCaptcha', true, 'Captcha à la connexion', [
|
||||||
|
'checked' => $this->getData(['config', 'connect','captcha'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col3">
|
||||||
|
<?php echo template::checkbox('connectCaptchaStrong', true, 'Captcha complexe', [
|
||||||
|
'checked' => $this->getData(['config', 'connect', 'captchaStrong']),
|
||||||
|
'help' => 'Option recommandée pour sécuriser la connexion. S\'applique à tous les captchas du site. Le captcha simple se limite à une addition de nombres de 0 à 10. Le captcha complexe utilise quatre opérations de nombres de 0 à 20. Activation recommandée.'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col3">
|
||||||
|
<?php echo template::select('connectCaptchaType', $module::$captchaTypes , [
|
||||||
|
'label' => 'Type de captcha',
|
||||||
|
'selected' => $this->getData(['config', 'connect', 'captchaType'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -57,21 +57,21 @@
|
|||||||
</h4>
|
</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
<?php echo template::select('localeHomePageId', helper::arrayCollumn($module::$pagesList, 'title', 'SORT_ASC'), [
|
<?php echo template::select('localeHomePageId', helper::arrayColumn($module::$pagesList, 'title', 'SORT_ASC'), [
|
||||||
'label' => 'Accueil du site',
|
'label' => 'Accueil du site',
|
||||||
'selected' =>$this->getData(['locale', 'homePageId']),
|
'selected' =>$this->getData(['locale', 'homePageId']),
|
||||||
'help' => 'La première page que vos visiteurs verront.'
|
'help' => 'La première page que vos visiteurs verront.'
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
<?php echo template::select('localePage403', array_merge(['none' => 'Page par défaut'],helper::arrayCollumn($module::$orphansList, 'title', 'SORT_ASC')), [
|
<?php echo template::select('localePage403', array_merge(['none' => 'Page par défaut'],helper::arrayColumn($module::$orphansList, 'title', 'SORT_ASC')), [
|
||||||
'label' => 'Accès interdit, erreur 403',
|
'label' => 'Accès interdit, erreur 403',
|
||||||
'selected' =>$this->getData(['locale', 'page403']),
|
'selected' =>$this->getData(['locale', 'page403']),
|
||||||
'help' => 'Cette page ne doit pas apparaître dans l\'arborescence du menu. Créez une page orpheline.'
|
'help' => 'Cette page ne doit pas apparaître dans l\'arborescence du menu. Créez une page orpheline.'
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
<?php echo template::select('localePage404', array_merge(['none' => 'Page par défaut'],helper::arrayCollumn($module::$orphansList, 'title', 'SORT_ASC')), [
|
<?php echo template::select('localePage404', array_merge(['none' => 'Page par défaut'],helper::arrayColumn($module::$orphansList, 'title', 'SORT_ASC')), [
|
||||||
'label' => 'Page inexistante, erreur 404',
|
'label' => 'Page inexistante, erreur 404',
|
||||||
'selected' =>$this->getData(['locale', 'page404']),
|
'selected' =>$this->getData(['locale', 'page404']),
|
||||||
'help' => 'Cette page ne doit pas apparaître dans l\'arborescence du menu. Créez une page orpheline.'
|
'help' => 'Cette page ne doit pas apparaître dans l\'arborescence du menu. Créez une page orpheline.'
|
||||||
@ -80,14 +80,14 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
<?php echo template::select('localeLegalPageId', array_merge(['none' => 'Aucune'] , helper::arrayCollumn($module::$pagesList, 'title', 'SORT_ASC') ) , [
|
<?php echo template::select('localeLegalPageId', array_merge(['none' => 'Aucune'] , helper::arrayColumn($module::$pagesList, 'title', 'SORT_ASC') ) , [
|
||||||
'label' => 'Mentions légales',
|
'label' => 'Mentions légales',
|
||||||
'selected' => $this->getData(['locale', 'legalPageId']),
|
'selected' => $this->getData(['locale', 'legalPageId']),
|
||||||
'help' => 'Les mentions légales sont obligatoires en France. Une option du pied de page ajoute un lien discret vers cette page.'
|
'help' => 'Les mentions légales sont obligatoires en France. Une option du pied de page ajoute un lien discret vers cette page.'
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
<?php echo template::select('localeSearchPageId', array_merge(['none' => 'Aucune'] , helper::arrayCollumn($module::$pagesList, 'title', 'SORT_ASC') ) , [
|
<?php echo template::select('localeSearchPageId', array_merge(['none' => 'Aucune'] , helper::arrayColumn($module::$pagesList, 'title', 'SORT_ASC') ) , [
|
||||||
'label' => 'Recherche dans le site',
|
'label' => 'Recherche dans le site',
|
||||||
'selected' => $this->getData(['locale', 'searchPageId']),
|
'selected' => $this->getData(['locale', 'searchPageId']),
|
||||||
'help' => 'Sélectionnez une page contenant le module \'Recherche\'. Une option du pied de page ajoute un lien discret vers cette page.'
|
'help' => 'Sélectionnez une page contenant le module \'Recherche\'. Une option du pied de page ajoute un lien discret vers cette page.'
|
||||||
@ -95,7 +95,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
<?php
|
<?php
|
||||||
echo template::select('localePage302', array_merge(['none' => 'Page par défaut'],helper::arrayCollumn($module::$orphansList, 'title', 'SORT_ASC')), [
|
echo template::select('localePage302', array_merge(['none' => 'Page par défaut'],helper::arrayColumn($module::$orphansList, 'title', 'SORT_ASC')), [
|
||||||
'label' => 'Site en maintenance',
|
'label' => 'Site en maintenance',
|
||||||
'selected' =>$this->getData(['locale', 'page302']),
|
'selected' =>$this->getData(['locale', 'page302']),
|
||||||
'help' => 'Cette page ne doit pas apparaître dans l\'arborescence du menu. Créez une page orpheline.'
|
'help' => 'Cette page ne doit pas apparaître dans l\'arborescence du menu. Créez une page orpheline.'
|
||||||
|
@ -153,7 +153,7 @@ class install extends common {
|
|||||||
// Récupération de la liste des thèmes
|
// Récupération de la liste des thèmes
|
||||||
$dataThemes = file_get_contents('core/module/install/ressource/themes/themes.json');
|
$dataThemes = file_get_contents('core/module/install/ressource/themes/themes.json');
|
||||||
$dataThemes = json_decode($dataThemes, true);
|
$dataThemes = json_decode($dataThemes, true);
|
||||||
self::$themes = helper::arrayCollumn($dataThemes, 'name');
|
self::$themes = helper::arrayColumn($dataThemes, 'name');
|
||||||
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
|
@ -88,26 +88,106 @@ class init extends common {
|
|||||||
'fonts' => [
|
'fonts' => [
|
||||||
'files' => [],
|
'files' => [],
|
||||||
'imported'=> [
|
'imported'=> [
|
||||||
'arimo'=> 'Arimo',
|
'arimo'=> [
|
||||||
'arvo'=> 'Arvo',
|
'name' => 'Arimo',
|
||||||
'dancing-script' => 'Dancing Script',
|
'font-family' => 'Arimo, sans-serif',
|
||||||
'droid-sans-2'=> 'Droid Sans',
|
'ressource' => 'https://fonts.cdnfonts.com/css/arimo'
|
||||||
'droid-serif-2'=> 'Droid Serif',
|
],
|
||||||
'indie-flower'=> 'Indie Flower',
|
'arvo'=> [
|
||||||
'liberation-sans'=> 'Liberation Sans',
|
'name' => 'Arvo',
|
||||||
'liberation-serif'=> 'Liberation Serif',
|
'font-family' => 'Arvo, sans-serif',
|
||||||
'lobster-2'=> 'Lobster',
|
'ressource' => 'https://fonts.cdnfonts.com/css/arvo'
|
||||||
'lora'=> 'Lora',
|
],
|
||||||
'lato'=> 'Lato',
|
'dancing-script' => [
|
||||||
'old-standard-tt-3'=> 'Old Standard TT',
|
'name' => 'Dancing Script',
|
||||||
'open-sans'=> 'Open Sans',
|
'font-family' => '"Dancing Script", sans-serif',
|
||||||
'oswald-4'=> 'Oswald',
|
'ressource' => 'https://fonts.cdnfonts.com/css/dancing-script'
|
||||||
'pt-mono'=> 'PT Mono',
|
],
|
||||||
'pt-serif'=> 'PT Serif',
|
'droid-sans-2'=> [
|
||||||
'rancho'=> 'Rancho',
|
'name' => 'Droid Sans',
|
||||||
'roboto'=> 'Roboto',
|
'font-family' => '"Droid Sans", sans-serif',
|
||||||
'ubuntu'=> 'Ubuntu',
|
'ressource' => 'https://fonts.cdnfonts.com/css/droid-sans-2'
|
||||||
'vollkorn'=> 'Vollkorn'
|
],
|
||||||
|
'droid-serif-2'=> [
|
||||||
|
'name' => 'Droid Serif',
|
||||||
|
'font-family' => '"Droid Serif", serif',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/droid-serif-2'
|
||||||
|
],
|
||||||
|
'indie-flower'=> [
|
||||||
|
'name' => 'Indie Flower',
|
||||||
|
'font-family' => '"Indie Flower", sans-serif',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/indie-flower'
|
||||||
|
],
|
||||||
|
'liberation-sans'=> [
|
||||||
|
'name' => 'Liberation Sans',
|
||||||
|
'font-family' => '"Liberation Sans", sans-serif',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/liberation-sans'
|
||||||
|
],
|
||||||
|
'liberation-serif'=> [
|
||||||
|
'name' => 'Liberation Serif',
|
||||||
|
'font-family' => '"Liberation Serif", serif',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/liberation-serif'
|
||||||
|
],
|
||||||
|
'lobster-2'=> [
|
||||||
|
'name' => 'Lobster',
|
||||||
|
'font-family' => 'Lobster, sans-serif',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/lobster-2'
|
||||||
|
],
|
||||||
|
'lato'=> [
|
||||||
|
'name' => 'lato',
|
||||||
|
'font-family' => 'Lato, sans-serif',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/lato'
|
||||||
|
],
|
||||||
|
'lora'=> [
|
||||||
|
'name' => 'Lora',
|
||||||
|
'font-family' => 'Lora, serif',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/lora'
|
||||||
|
],
|
||||||
|
'old-standard-tt-3'=> [
|
||||||
|
'name' => 'Old Standard TT',
|
||||||
|
'font-family' => '"Old Standard TT", serif',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/old-standard-tt-3'
|
||||||
|
],
|
||||||
|
'open-sans' => [
|
||||||
|
'name' => 'Open Sans',
|
||||||
|
'font-family' => '"Open Sans", sans-serif',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/open-sans'
|
||||||
|
],
|
||||||
|
'oswald-4'=> [
|
||||||
|
'name' => 'Oswald',
|
||||||
|
'font-family' => 'Oswald, sans-serif',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/oswald-4'
|
||||||
|
],
|
||||||
|
'pt-mono'=> [
|
||||||
|
'name' => 'PT Mono',
|
||||||
|
'font-family' => '"PT Mono", monospace',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/pt-mono'
|
||||||
|
],
|
||||||
|
'pt-serif'=> [
|
||||||
|
'name' => "PR Serif",
|
||||||
|
'font-family' => '"PT Serif", serif',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/pt-serif'
|
||||||
|
],
|
||||||
|
'rancho'=> [
|
||||||
|
'name' => 'Rancho',
|
||||||
|
'font-family' => 'Rancho, sans-serif',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/rancho'
|
||||||
|
],
|
||||||
|
'roboto'=> [
|
||||||
|
'name' => 'Roboto',
|
||||||
|
'font-family' => 'Roboto, sans-serif',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/roboto'
|
||||||
|
],
|
||||||
|
'ubuntu'=> [
|
||||||
|
'name' => 'Ubuntu',
|
||||||
|
'font-family' => 'Ubuntu, sans-serif',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/ubuntu'
|
||||||
|
],
|
||||||
|
'vollkorn'=> [
|
||||||
|
'name' => 'Vollkorn',
|
||||||
|
'font-family' => 'Vollkorn, serif',
|
||||||
|
'ressource' => 'https://fonts.cdnfonts.com/css/vollkorn'
|
||||||
|
]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
'page' => [
|
'page' => [
|
||||||
@ -153,7 +233,7 @@ class init extends common {
|
|||||||
],
|
],
|
||||||
'footer' => [
|
'footer' => [
|
||||||
'backgroundColor' => 'rgba(255, 255, 255, 1)',
|
'backgroundColor' => 'rgba(255, 255, 255, 1)',
|
||||||
'font' => 'open-sans',
|
'font' => 'georgia',
|
||||||
'fontSize' => '.8em',
|
'fontSize' => '.8em',
|
||||||
'fontWeight' => 'normal',
|
'fontWeight' => 'normal',
|
||||||
'height' => '5px',
|
'height' => '5px',
|
||||||
@ -180,7 +260,7 @@ class init extends common {
|
|||||||
],
|
],
|
||||||
'header' => [
|
'header' => [
|
||||||
'backgroundColor' => 'rgba(32, 59, 82, 1)',
|
'backgroundColor' => 'rgba(32, 59, 82, 1)',
|
||||||
'font' => 'oswald-4',
|
'font' => 'arial',
|
||||||
'fontSize' => '2em',
|
'fontSize' => '2em',
|
||||||
'fontWeight' => 'normal',
|
'fontWeight' => 'normal',
|
||||||
'height' => '150px',
|
'height' => '150px',
|
||||||
@ -203,7 +283,7 @@ class init extends common {
|
|||||||
'menu' => [
|
'menu' => [
|
||||||
'backgroundColor' => 'rgba(32, 59, 82, 1)',
|
'backgroundColor' => 'rgba(32, 59, 82, 1)',
|
||||||
'backgroundColorSub' => 'rgba(32, 59, 82, 1)',
|
'backgroundColorSub' => 'rgba(32, 59, 82, 1)',
|
||||||
'font' => 'open-sans',
|
'font' => 'georgia',
|
||||||
'fontSize' => '1em',
|
'fontSize' => '1em',
|
||||||
'fontWeight' => 'normal',
|
'fontWeight' => 'normal',
|
||||||
'height' => '15px 10px',
|
'height' => '15px 10px',
|
||||||
@ -234,13 +314,13 @@ class init extends common {
|
|||||||
'borderColor' => 'rgba(236, 239, 241, 1)'
|
'borderColor' => 'rgba(236, 239, 241, 1)'
|
||||||
],
|
],
|
||||||
'text' => [
|
'text' => [
|
||||||
'font' => 'open-sans',
|
'font' => 'georgia',
|
||||||
'fontSize' => '13px',
|
'fontSize' => '13px',
|
||||||
'textColor' => 'rgba(33, 34, 35, 1)',
|
'textColor' => 'rgba(33, 34, 35, 1)',
|
||||||
'linkColor' => 'rgba(74, 105, 189, 1)'
|
'linkColor' => 'rgba(74, 105, 189, 1)'
|
||||||
],
|
],
|
||||||
'title' => [
|
'title' => [
|
||||||
'font' => 'oswald-4',
|
'font' => 'arial',
|
||||||
'fontWeight' => 'normal',
|
'fontWeight' => 'normal',
|
||||||
'textColor' => 'rgba(74, 105, 189, 1)',
|
'textColor' => 'rgba(74, 105, 189, 1)',
|
||||||
'textTransform' => 'none'
|
'textTransform' => 'none'
|
||||||
@ -252,9 +332,9 @@ class init extends common {
|
|||||||
],
|
],
|
||||||
'admin' => [
|
'admin' => [
|
||||||
'backgroundColor' => 'rgba(255, 255, 255, 1)',
|
'backgroundColor' => 'rgba(255, 255, 255, 1)',
|
||||||
'fontText' => 'open-sans',
|
'fontText' => 'georgia',
|
||||||
'fontSize' => '13px',
|
'fontSize' => '13px',
|
||||||
'fontTitle' => 'oswald-4',
|
'fontTitle' => 'arial',
|
||||||
'colorText' => 'rgba(33, 34, 35, 1)',
|
'colorText' => 'rgba(33, 34, 35, 1)',
|
||||||
'colorTitle' => 'rgba(74, 105, 189, 1)',
|
'colorTitle' => 'rgba(74, 105, 189, 1)',
|
||||||
'backgroundColorButton' => 'rgba(63, 125, 250, 1)',
|
'backgroundColorButton' => 'rgba(63, 125, 250, 1)',
|
||||||
|
@ -392,7 +392,11 @@ class page extends common {
|
|||||||
$lastPosition = 1;
|
$lastPosition = 1;
|
||||||
$hierarchy = $this->getInput('pageEditParentPageId') ? $this->getHierarchy($this->getInput('pageEditParentPageId')) : array_keys($this->getHierarchy());
|
$hierarchy = $this->getInput('pageEditParentPageId') ? $this->getHierarchy($this->getInput('pageEditParentPageId')) : array_keys($this->getHierarchy());
|
||||||
$position = $this->getInput('pageEditPosition', helper::FILTER_INT);
|
$position = $this->getInput('pageEditPosition', helper::FILTER_INT);
|
||||||
|
$extraPosition = $this->getinput('pageEditExtraPosition', helper::FILTER_BOOLEAN);
|
||||||
foreach($hierarchy as $hierarchyPageId) {
|
foreach($hierarchy as $hierarchyPageId) {
|
||||||
|
|
||||||
|
// Ne traite que les pages du menu sélectionné
|
||||||
|
if ($this->getData(['page', $hierarchyPageId, 'extraPosition']) === $extraPosition ) {
|
||||||
// Ignore la page en cours de modification
|
// Ignore la page en cours de modification
|
||||||
if($hierarchyPageId === $this->getUrl(2) ) {
|
if($hierarchyPageId === $this->getUrl(2) ) {
|
||||||
continue;
|
continue;
|
||||||
@ -406,6 +410,8 @@ class page extends common {
|
|||||||
// Incrémente pour la prochaine position
|
// Incrémente pour la prochaine position
|
||||||
$lastPosition++;
|
$lastPosition++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
if ($this->getinput('pageEditBlock') !== 'bar') {
|
if ($this->getinput('pageEditBlock') !== 'bar') {
|
||||||
$barLeft = $this->getinput('pageEditBarLeft');
|
$barLeft = $this->getinput('pageEditBarLeft');
|
||||||
$barRight = $this->getinput('pageEditBarRight');
|
$barRight = $this->getinput('pageEditBarRight');
|
||||||
@ -516,7 +522,7 @@ class page extends common {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self::$moduleIds = array_merge( ['' => 'Aucun'] , helper::arrayCollumn(helper::getModules(),'realName','SORT_ASC')); // Pages sans parent
|
self::$moduleIds = array_merge( ['' => 'Aucun'] , helper::arrayColumn(helper::getModules(),'realName','SORT_ASC')); // Pages sans parent
|
||||||
foreach($this->getHierarchy() as $parentPageId => $childrenPageIds) {
|
foreach($this->getHierarchy() as $parentPageId => $childrenPageIds) {
|
||||||
if($parentPageId !== $this->getUrl(2)) {
|
if($parentPageId !== $this->getUrl(2)) {
|
||||||
self::$pagesNoParentId[$parentPageId] = $this->getData(['page', $parentPageId, 'title']);
|
self::$pagesNoParentId[$parentPageId] = $this->getData(['page', $parentPageId, 'title']);
|
||||||
|
@ -42,8 +42,8 @@ class sitemap extends common
|
|||||||
!empty($this->getData(['module',$parentId, 'posts' ]))) {
|
!empty($this->getData(['module',$parentId, 'posts' ]))) {
|
||||||
$items .= '<ul>';
|
$items .= '<ul>';
|
||||||
// Ids des articles par ordre de publication
|
// Ids des articles par ordre de publication
|
||||||
$articleIdsPublishedOns = helper::arrayCollumn($this->getData(['module', $parentId,'posts']), 'publishedOn', 'SORT_DESC');
|
$articleIdsPublishedOns = helper::arrayColumn($this->getData(['module', $parentId,'posts']), 'publishedOn', 'SORT_DESC');
|
||||||
$articleIdsStates = helper::arrayCollumn($this->getData(['module', $parentId, 'posts']), 'state', 'SORT_DESC');
|
$articleIdsStates = helper::arrayColumn($this->getData(['module', $parentId, 'posts']), 'state', 'SORT_DESC');
|
||||||
$articleIds = [];
|
$articleIds = [];
|
||||||
foreach ($articleIdsPublishedOns as $articleId => $articlePublishedOn) {
|
foreach ($articleIdsPublishedOns as $articleId => $articlePublishedOn) {
|
||||||
if ($articlePublishedOn <= time() and $articleIdsStates[$articleId]) {
|
if ($articlePublishedOn <= time() and $articleIdsStates[$articleId]) {
|
||||||
@ -78,8 +78,8 @@ class sitemap extends common
|
|||||||
!empty($this->getData(['module', $childId, 'posts' ]))) {
|
!empty($this->getData(['module', $childId, 'posts' ]))) {
|
||||||
$items .= '<ul>';
|
$items .= '<ul>';
|
||||||
// Ids des articles par ordre de publication
|
// Ids des articles par ordre de publication
|
||||||
$articleIdsPublishedOns = helper::arrayCollumn($this->getData(['module', $childId,'posts']), 'publishedOn', 'SORT_DESC');
|
$articleIdsPublishedOns = helper::arrayColumn($this->getData(['module', $childId,'posts']), 'publishedOn', 'SORT_DESC');
|
||||||
$articleIdsStates = helper::arrayCollumn($this->getData(['module', $childId, 'posts']), 'state', 'SORT_DESC');
|
$articleIdsStates = helper::arrayColumn($this->getData(['module', $childId, 'posts']), 'state', 'SORT_DESC');
|
||||||
$articleIds = [];
|
$articleIds = [];
|
||||||
foreach ($articleIdsPublishedOns as $articleId => $articlePublishedOn) {
|
foreach ($articleIdsPublishedOns as $articleId => $articlePublishedOn) {
|
||||||
if ($articlePublishedOn <= time() and $articleIdsStates[$articleId]) {
|
if ($articlePublishedOn <= time() and $articleIdsStates[$articleId]) {
|
||||||
|
@ -32,6 +32,7 @@ class theme extends common {
|
|||||||
'save' => self::GROUP_ADMIN,
|
'save' => self::GROUP_ADMIN,
|
||||||
'fonts' => self::GROUP_ADMIN,
|
'fonts' => self::GROUP_ADMIN,
|
||||||
'fontAdd' => self::GROUP_ADMIN,
|
'fontAdd' => self::GROUP_ADMIN,
|
||||||
|
'fontEdit' => self::GROUP_ADMIN,
|
||||||
'fontDelete' => self::GROUP_ADMIN
|
'fontDelete' => self::GROUP_ADMIN
|
||||||
];
|
];
|
||||||
public static $aligns = [
|
public static $aligns = [
|
||||||
@ -232,6 +233,8 @@ class theme extends common {
|
|||||||
public static $pagesList = [];
|
public static $pagesList = [];
|
||||||
// Variable pour construire la liste des fontes installées
|
// Variable pour construire la liste des fontes installées
|
||||||
public static $fontsList = [];
|
public static $fontsList = [];
|
||||||
|
// Variable pour détailler les fontes installées
|
||||||
|
public static $fontsDetail = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Thème des écrans d'administration
|
* Thème des écrans d'administration
|
||||||
@ -396,7 +399,8 @@ class theme extends common {
|
|||||||
unset(self::$pagesList[$page]);
|
unset(self::$pagesList[$page]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Lire les fontes installées
|
||||||
|
$this->enumFonts();
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'title' => 'Personnalisation du pied de page',
|
'title' => 'Personnalisation du pied de page',
|
||||||
@ -475,6 +479,8 @@ class theme extends common {
|
|||||||
'state' => true
|
'state' => true
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
// Lire les fontes installées
|
||||||
|
$this->enumFonts();
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'title' => 'Personnalisation de la bannière',
|
'title' => 'Personnalisation de la bannière',
|
||||||
@ -534,6 +540,8 @@ class theme extends common {
|
|||||||
'state' => true
|
'state' => true
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
// Lire les fontes installées
|
||||||
|
$this->enumFonts();
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'title' => 'Personnalisation du menu',
|
'title' => 'Personnalisation du menu',
|
||||||
@ -549,9 +557,6 @@ class theme extends common {
|
|||||||
*/
|
*/
|
||||||
public function fonts() {
|
public function fonts() {
|
||||||
|
|
||||||
// Polices trouvées dans la configuration
|
|
||||||
$fonts = $this->getData(['fonts']);
|
|
||||||
|
|
||||||
// Polices liées au thème
|
// Polices liées au thème
|
||||||
$used = [
|
$used = [
|
||||||
'Bannière' => $this->getData (['theme', 'header', 'font']),
|
'Bannière' => $this->getData (['theme', 'header', 'font']),
|
||||||
@ -563,34 +568,44 @@ class theme extends common {
|
|||||||
'Admin (texte)' => $this->getData (['admin', 'fontText' ])
|
'Admin (texte)' => $this->getData (['admin', 'fontText' ])
|
||||||
];
|
];
|
||||||
|
|
||||||
// Parcourir les fontes installées et construire le tableau pour le formulaire
|
// Récupérer le détail des fontes installées
|
||||||
foreach (self::$fonts as $fontId => $fontName) {
|
$f = $this->getFonts();
|
||||||
|
|
||||||
// Fontes utilisées par le thème
|
// Parcourir les fontes disponibles et construire le tableau pour le formulaire
|
||||||
|
foreach ($f as $type => $typeValue) {
|
||||||
|
|
||||||
|
foreach ($typeValue as $fontId => $fontValue) {
|
||||||
|
// Fontes utilisées par les thèmes
|
||||||
$fontUsed[$fontId] = '';
|
$fontUsed[$fontId] = '';
|
||||||
foreach ($used as $key => $value) {
|
foreach ($used as $key => $value) {
|
||||||
if ( $value === $fontId) {
|
if ( $value === $fontId) {
|
||||||
$fontUsed[$fontId] .= $key . '<br/>';
|
$fontUsed[$fontId] .= $key . '<br/>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self::$fontsList [] = [
|
self::$fontsDetail [] = [
|
||||||
'<span style="font-family:' . $fontName . '">' . $fontName . '</span>' ,
|
|
||||||
$fontId,
|
$fontId,
|
||||||
|
'<span style="font-family:' . $f[$type][$fontId]['font-family'] . '">' . $f[$type][$fontId]['name'] . '</span>' ,
|
||||||
|
$f[$type][$fontId]['font-family'],
|
||||||
$fontUsed[$fontId],
|
$fontUsed[$fontId],
|
||||||
//array_key_exists($fontId, $fonts['imported']) ? 'Importée' : '',
|
$type,
|
||||||
array_key_exists($fontId, $fonts['files']) ?
|
$type !== 'websafe' ? template::button('themeFontEdit' . $fontId, [
|
||||||
$fonts['files'][$fontId] :
|
'class' => 'themeFontEdit',
|
||||||
(array_key_exists($fontId, self::$fontsWebSafe) ? 'WebSafe' : 'CDN Fonts'),
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/fontEdit/' . $type . '/' . $fontId . '/' . $_SESSION['csrf'],
|
||||||
array_key_exists($fontId, $fonts['imported']) || array_key_exists($fontId, $fonts['files'])
|
'value' => template::ico('pencil'),
|
||||||
? template::button('themeFontDelete' . $fontId, [
|
'disabled' => !empty($fontUsed[$fontId])
|
||||||
|
])
|
||||||
|
: '',
|
||||||
|
$type !== 'websafe' ? template::button('themeFontDelete' . $fontId, [
|
||||||
'class' => 'themeFontDelete buttonRed',
|
'class' => 'themeFontDelete buttonRed',
|
||||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/fontDelete/' . $fontId . '/' . $_SESSION['csrf'],
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/fontDelete/' . $type . '/' . $fontId . '/' . $_SESSION['csrf'],
|
||||||
'value' => template::ico('trash'),
|
'value' => template::ico('cancel'),
|
||||||
'disabled' => !empty($fontUsed[$fontId])
|
'disabled' => !empty($fontUsed[$fontId])
|
||||||
])
|
])
|
||||||
: ''
|
: ''
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
sort(self::$fontsDetail);
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'title' => 'Gestion des fontes',
|
'title' => 'Gestion des fontes',
|
||||||
@ -604,57 +619,48 @@ class theme extends common {
|
|||||||
public function fontAdd() {
|
public function fontAdd() {
|
||||||
// Soumission du formulaire
|
// Soumission du formulaire
|
||||||
if ($this->isPost()) {
|
if ($this->isPost()) {
|
||||||
|
// Type d'import en ligne ou local
|
||||||
$fontId = $this->getInput('fontAddFontId', null, true);
|
$type = $this->getInput('fontAddFontImported', helper::FILTER_BOOLEAN) ? 'imported' : 'files';
|
||||||
$fontName = $this->getInput('fontAddFontName', null, true);
|
$ressource = $type === 'imported' ? $this->getInput('fontAddUrl', helper::FILTER_STRING_SHORT) : $this->getInput('fontAddFile', helper::FILTER__SHORT_STRING);
|
||||||
$filePath = $this->getInput('fontAddFile', null);
|
$fontId = $this->getInput('fontAddFontId', helper::FILTER_STRING_SHORT, true);
|
||||||
$e = explode ('/', $filePath);
|
$fontName = $this->getInput('fontAddFontName', helper::FILTER_STRING_SHORT, true);
|
||||||
$file = $e[count($e) - 1 ];
|
$fontFamilyName = $this->getInput('fontAddFontFamilyName', helper::FILTER_STRING_SHORT, true);
|
||||||
|
|
||||||
// Vérifier l'existence de fontId et validité de family name si usage en ligne de cdnFonts
|
// Vérifier l'existence de fontId et validité de family name si usage en ligne de cdnFonts
|
||||||
$data = helper::getUrlContents('https://www.cdnfonts.com/' . $fontId . '.font');
|
|
||||||
|
|
||||||
if ( $filePath === ''
|
|
||||||
&& $fontName !== ''
|
|
||||||
&& strpos($data, $fontName) === false
|
|
||||||
) {
|
|
||||||
|
|
||||||
// Valeurs en sortie
|
|
||||||
$this->addOutput([
|
|
||||||
'notification' => 'Erreur de nom de fonte ou d\'identifiant',
|
|
||||||
'redirect' => helper::baseUrl() . 'theme/fontAdd',
|
|
||||||
'state' => false
|
|
||||||
]);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
// Charger les données des fontes
|
// Charger les données des fontes
|
||||||
$files = $this->getData(['fonts', 'files']);
|
$fonts = $this->getData(['fonts']);
|
||||||
$imported = $this->getData(['fonts', 'imported']);
|
|
||||||
|
|
||||||
// Concaténation dans les tableaux existants
|
// Concaténation dans les tableaux existants
|
||||||
$imported = array_merge([$fontId => $fontName], $imported);
|
$t = [ $fontId => [
|
||||||
$files = array_merge([$fontId => $file], $files);
|
'name' => $fontName,
|
||||||
|
'font-family' => $fontFamilyName,
|
||||||
|
'ressource' => $ressource
|
||||||
|
]];
|
||||||
|
|
||||||
|
// Stocker les fontes
|
||||||
|
$this->setData(['fonts', $type, [ $fontId =>
|
||||||
|
[
|
||||||
|
'name' => $fontName,
|
||||||
|
'font-family' => $fontFamilyName,
|
||||||
|
'ressource' => $ressource
|
||||||
|
]]
|
||||||
|
]);
|
||||||
|
|
||||||
// Copier la fonte si le nom du fichier est fourni
|
// Copier la fonte si le nom du fichier est fourni
|
||||||
if (!empty($filePath)) {
|
if ( $type === 'files' &&
|
||||||
copy ( self::FILE_DIR . 'source/' . $filePath, self::DATA_DIR . 'fonts/' . $file );
|
is_file(self::FILE_DIR . 'source/' . $ressource)
|
||||||
}
|
) {
|
||||||
|
copy ( self::FILE_DIR . 'source/' . $ressource, self::DATA_DIR . 'fonts/' . $ressource );
|
||||||
// Mettre à jour le fichier des fontes
|
|
||||||
$this->setData(['fonts', 'imported', $imported ]);
|
|
||||||
if (!empty($filePath) ) {
|
|
||||||
$this->setData(['fonts', 'files', $files ]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'notification' => 'La fonte a été importée',
|
'notification' => 'La fonte a été créée',
|
||||||
'redirect' => helper::baseUrl() . 'theme/fonts',
|
'redirect' => helper::baseUrl() . 'theme/fonts',
|
||||||
'state' => true
|
'state' => true
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'title' => 'Ajouter une fonte',
|
'title' => 'Ajouter une fonte',
|
||||||
@ -662,12 +668,68 @@ class theme extends common {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ajouter une fonte
|
||||||
|
*/
|
||||||
|
public function fontEdit() {
|
||||||
|
// Soumission du formulaire
|
||||||
|
if ($this->isPost()) {
|
||||||
|
// Type d'import en ligne ou local
|
||||||
|
$type = $this->getInput('fontEditFontImported', helper::FILTER_BOOLEAN) ? 'imported' : 'files';
|
||||||
|
$ressource = $type === 'imported' ? $this->getInput('fontEditUrl', helper::FILTER_STRING_SHORT) : $this->getInput('fontEditFile', helper::FILTER__SHORT_STRING);
|
||||||
|
$fontId = $this->getInput('fontEditFontId', helper::FILTER_STRING_SHORT, true);
|
||||||
|
$fontName = $this->getInput('fontEditFontName', helper::FILTER_STRING_SHORT, true);
|
||||||
|
$fontFamilyName = $this->getInput('fontEditFontFamilyName', helper::FILTER_STRING_SHORT, true);
|
||||||
|
|
||||||
|
// Vérifier l'existence de fontId et validité de family name si usage en ligne de cdnFonts
|
||||||
|
|
||||||
|
// Charger les données des fontes
|
||||||
|
$fonts = $this->getData(['fonts']);
|
||||||
|
|
||||||
|
// Concaténation dans les tableaux existants
|
||||||
|
$t = [ $fontId => [
|
||||||
|
'name' => $fontName,
|
||||||
|
'font-family' => $fontFamilyName,
|
||||||
|
'ressource' => $ressource
|
||||||
|
]];
|
||||||
|
|
||||||
|
// Stocker les fontes
|
||||||
|
$this->setData(['fonts', $type, [ $fontId =>
|
||||||
|
[
|
||||||
|
'name' => $fontName,
|
||||||
|
'font-family' => $fontFamilyName,
|
||||||
|
'ressource' => $ressource
|
||||||
|
]]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Copier la fonte si le nom du fichier est fourni
|
||||||
|
if ( $type === 'files' &&
|
||||||
|
is_file(self::FILE_DIR . 'source/' . $ressource)
|
||||||
|
) {
|
||||||
|
copy ( self::FILE_DIR . 'source/' . $ressource, self::DATA_DIR . 'fonts/' . $ressource );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'notification' => 'La fonte a été actualisée',
|
||||||
|
'redirect' => helper::baseUrl() . 'theme/fonts',
|
||||||
|
'state' => true
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'title' => 'Editer une fonte',
|
||||||
|
'view' => 'fontEdit'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Effacer une fonte
|
* Effacer une fonte
|
||||||
*/
|
*/
|
||||||
public function fontDelete() {
|
public function fontDelete() {
|
||||||
// Jeton incorrect
|
// Jeton incorrect
|
||||||
if ($this->getUrl(3) !== $_SESSION['csrf']) {
|
if ($this->getUrl(4) !== $_SESSION['csrf']) {
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'redirect' => helper::baseUrl() . 'theme/fonts',
|
'redirect' => helper::baseUrl() . 'theme/fonts',
|
||||||
@ -677,26 +739,19 @@ class theme extends common {
|
|||||||
// Suppression
|
// Suppression
|
||||||
else {
|
else {
|
||||||
|
|
||||||
// Charger les données des fontes
|
// Effacer la fonte de la base
|
||||||
$files = $this->getData(['fonts', 'files']);
|
$this->deleteData(['fonts', $this->getUrl(2), $this->getUrl(3)]);
|
||||||
$imported = $this->getData(['fonts', 'imported']);
|
|
||||||
|
|
||||||
// Effacer le fichier existant
|
// Effacer le fichier existant
|
||||||
if ( file_exists(self::DATA_DIR . $files[$this->getUrl(2)]) ) {
|
if ( $this->getUrl(2) === 'file' &&
|
||||||
unlink(self::DATA_DIR . $files[$this->getUrl(2)]);
|
file_exists(self::DATA_DIR . $this->getUrl(2)) ) {
|
||||||
|
unlink(self::DATA_DIR . $this->getUrl(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Supprimer les entrées
|
|
||||||
unset($files[$this->getUrl(2)]);
|
|
||||||
unset($imported[$this->getUrl(2)]);
|
|
||||||
|
|
||||||
// Mettre à jour le fichier des fontes
|
|
||||||
$this->setData(['fonts', 'files', $files ]);
|
|
||||||
$this->setData(['fonts', 'imported', $imported ]);
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'redirect' => helper::baseUrl() . 'theme/fonts',
|
'redirect' => helper::baseUrl() . 'theme/fonts',
|
||||||
'notification' => 'Fonte supprimée',
|
'notification' => 'La fonte a été supprimée',
|
||||||
'state' => true
|
'state' => true
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@ -786,6 +841,8 @@ class theme extends common {
|
|||||||
'state' => true
|
'state' => true
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
// Lire les fontes installées
|
||||||
|
$this->enumFonts();
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'title' => 'Personnalisation du site',
|
'title' => 'Personnalisation du site',
|
||||||
@ -994,7 +1051,8 @@ class theme extends common {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Subsitution des fontes de Google Fonts vers CdnFont grâce à un tableau de conversion
|
* Substitution des fontes de Google Fonts vers CdnFont grâce à un tableau de conversion
|
||||||
|
* Cette fonction est utilisée par l'import.
|
||||||
* @param string $file, nom du fichier json à convertir
|
* @param string $file, nom du fichier json à convertir
|
||||||
* @return int nombre de substitution effectuées
|
* @return int nombre de substitution effectuées
|
||||||
*/
|
*/
|
||||||
@ -1046,4 +1104,19 @@ class theme extends common {
|
|||||||
return ($count);
|
return ($count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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() {
|
||||||
|
// Récupère la liste des fontes installées
|
||||||
|
$f = $this->getFonts();
|
||||||
|
// Construit un tableau avec leur ID et leur famille
|
||||||
|
foreach(['websafe', 'imported', 'files'] as $type) {
|
||||||
|
foreach ($f[$type] as $fontId => $fontValue ) {
|
||||||
|
$fonts [$fontId] = $fontValue['name'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ksort($fonts);
|
||||||
|
self::$fontsList = $fonts;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,8 @@
|
|||||||
*/
|
*/
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
$('input[name=fontAddFontImported]').prop('checked', true);
|
$('input[name=fontAddFontImported]').prop('checked', true);
|
||||||
$('#fontAddFileWrapper').hide();
|
$('input[name=fontAddFontUrl]').prop('checked', false);
|
||||||
|
$('#containerFontAddFile').hide();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -28,7 +29,8 @@ $("input[name=fontAddFontImported]").on("click", function() {
|
|||||||
} else {
|
} else {
|
||||||
$('input[name=fontAddFontFile]').prop('checked', true);
|
$('input[name=fontAddFontFile]').prop('checked', true);
|
||||||
}
|
}
|
||||||
$('#fontAddFileWrapper').hide();
|
$('#containerFontAddFile').hide();
|
||||||
|
$('#containerFontAddUrl').show();
|
||||||
});
|
});
|
||||||
|
|
||||||
$("input[name=fontAddFontFile]").on("click", function() {
|
$("input[name=fontAddFontFile]").on("click", function() {
|
||||||
@ -37,5 +39,6 @@ $("input[name=fontAddFontFile]").on("click", function() {
|
|||||||
} else {
|
} else {
|
||||||
$('input[name=fontAddFontImported]').prop('checked', true);
|
$('input[name=fontAddFontImported]').prop('checked', true);
|
||||||
}
|
}
|
||||||
$('#fontAddFileWrapper').show();
|
$('#containerFontAddFile').show();
|
||||||
|
$('#containerFontAddUrl').hide();
|
||||||
});
|
});
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col2">
|
<div class="col2">
|
||||||
<?php echo template::button('pageEditHelp', [
|
<?php echo template::button('fontAddHelp', [
|
||||||
'href' => 'https://doc.zwiicms.fr/fontes#add',
|
'href' => 'https://doc.zwiicms.fr/fontes#add',
|
||||||
'target' => '_blank',
|
'target' => '_blank',
|
||||||
'ico' => 'help',
|
'ico' => 'help',
|
||||||
@ -30,14 +30,10 @@
|
|||||||
<h4>Identité de la fonte</h4>
|
<h4>Identité de la fonte</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
<?php echo template::checkbox('fontAddFontImported', true, 'Fonte téléchargée sur cdnFonts', [
|
<?php echo template::checkbox('fontAddFontImported', true, 'Fonte en ligne', []); ?>
|
||||||
'help' => 'Police utilisée en ligne, se connecter sur cdnFonts pour récupérer les informations nécessaires.'
|
|
||||||
]); ?>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
<?php echo template::checkbox('fontAddFontFile', true,'Fonte installée', [
|
<?php echo template::checkbox('fontAddFontFile', true,'Fonte installée', []); ?>
|
||||||
'help' => '<br/>Sélectionnez un fichier de fonte au format WOFF.'
|
|
||||||
]); ?>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -45,23 +41,39 @@
|
|||||||
<?php echo template::text('fontAddFontId', [
|
<?php echo template::text('fontAddFontId', [
|
||||||
'autocomplete' => 'off',
|
'autocomplete' => 'off',
|
||||||
'label' => 'Identifiant (sans espace ni majuscule)',
|
'label' => 'Identifiant (sans espace ni majuscule)',
|
||||||
'placeholder' => 'perry-gothic'
|
'placeholder' => 'big-marker-extrude'
|
||||||
|
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
<?php echo template::text('fontAddFontName', [
|
<?php echo template::text('fontAddFontName', [
|
||||||
'autocomplete' => 'off',
|
'autocomplete' => 'off',
|
||||||
'label' => 'Nom (Font Family)',
|
'label' => 'Nom',
|
||||||
'placeholder' => 'PerryGothic'
|
'placeholder' => 'Big Marker Extrude'
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<?php echo template::text('fontAddFontFamilyName', [
|
||||||
|
'autocomplete' => 'off',
|
||||||
|
'label' => 'Famille',
|
||||||
|
'placeholder' => "'Big Marker Extrude', sans-serif"
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row" id="containerFontAddFile">
|
||||||
<div class="col12">
|
<div class="col12">
|
||||||
<?php echo template::file('fontAddFile', [
|
<?php echo template::file('fontAddFile', [
|
||||||
'label' => 'Fichier de police (Format WOFF)',
|
'label' => 'Fichier de fonte (Format WOFF)'
|
||||||
'placeholder' => 'https://fonts.cdnfonts.com/s/7896/PERRYGOT.woff'
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row" id="containerFontAddUrl">
|
||||||
|
<div class="col12">
|
||||||
|
<?php echo template::text('fontAddUrl', [
|
||||||
|
'label' => 'Url du fichier de fonte',
|
||||||
|
'placeholder' => 'https://fonts.cdnfonts.com/css/big-marker-extrude'
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
18
core/module/theme/view/fontEdit/fontEdit.css
Normal file
18
core/module/theme/view/fontEdit/fontEdit.css
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2022, Frédéric Tempez
|
||||||
|
* @license GNU General Public License, version 3
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** NE PAS EFFACER
|
||||||
|
* admin.css
|
||||||
|
*/
|
44
core/module/theme/view/fontEdit/fontEdit.js.php
Normal file
44
core/module/theme/view/fontEdit/fontEdit.js.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2022, Frédéric Tempez
|
||||||
|
* @license GNU General Public License, version 3
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Option par défaut du sélecteur de mode
|
||||||
|
*/
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('input[name=fontEditFontImported]').prop('checked', true);
|
||||||
|
$('input[name=fontEditFontUrl]').prop('checked', false);
|
||||||
|
$('#containerfontEditFile').hide();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mode téléchargement en ligne de la fonte ou installation locale
|
||||||
|
*/
|
||||||
|
$("input[name=fontEditFontImported]").on("click", function() {
|
||||||
|
if( $('input[name=fontEditFontImported]').is(':checked') ){
|
||||||
|
$('input[name=fontEditFontFile]').prop('checked', false);
|
||||||
|
} else {
|
||||||
|
$('input[name=fontEditFontFile]').prop('checked', true);
|
||||||
|
}
|
||||||
|
$('#containerfontEditFile').hide();
|
||||||
|
$('#containerfontEditUrl').show();
|
||||||
|
});
|
||||||
|
|
||||||
|
$("input[name=fontEditFontFile]").on("click", function() {
|
||||||
|
if( $('input[name=fontEditFontFile]').is(':checked') ){
|
||||||
|
$('input[name=fontEditFontImported]').prop('checked', false);
|
||||||
|
} else {
|
||||||
|
$('input[name=fontEditFontImported]').prop('checked', true);
|
||||||
|
}
|
||||||
|
$('#containerfontEditFile').show();
|
||||||
|
$('#containerfontEditUrl').hide();
|
||||||
|
});
|
87
core/module/theme/view/fontEdit/fontEdit.php
Normal file
87
core/module/theme/view/fontEdit/fontEdit.php
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<?php echo template::formOpen('fontEditForm'); ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col2">
|
||||||
|
<?php echo template::button('fontEditBack', [
|
||||||
|
'class' => 'buttonGrey',
|
||||||
|
'href' => helper::baseUrl() . 'theme/fonts',
|
||||||
|
'ico' => 'left',
|
||||||
|
'value' => 'Retour'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col2">
|
||||||
|
<?php echo template::button('fontEditHelp', [
|
||||||
|
'href' => 'https://doc.zwiicms.fr/fontes#add',
|
||||||
|
'target' => '_blank',
|
||||||
|
'ico' => 'help',
|
||||||
|
'value' => 'Aide',
|
||||||
|
'class' => 'buttonHelp'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col2 offset6">
|
||||||
|
<?php echo template::submit('fontEditPublish', [
|
||||||
|
'value' => 'Valider',
|
||||||
|
'uniqueSubmission' => true
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<div class="block">
|
||||||
|
<h4>Identité de la fonte</h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::checkbox('fontEditFontImported', true, 'Fonte en ligne', [
|
||||||
|
'checked' => $this->getUrl(2) === 'imported' ? true : false
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::checkbox('fontEditFontFile', true,'Fonte installée', [
|
||||||
|
'checked' => $this->getUrl(2) === 'file' ? true : false
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::text('fontEditFontId', [
|
||||||
|
'autocomplete' => 'off',
|
||||||
|
'label' => 'Identifiant (sans espace ni majuscule)',
|
||||||
|
'value' => $this->getUrl(3)
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::text('fontEditFontName', [
|
||||||
|
'autocomplete' => 'off',
|
||||||
|
'label' => 'Nom',
|
||||||
|
'value' => $this->getData(['fonts', $this->getUrl(2), $this->getUrl(3), 'name'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<?php echo template::text('fontEditFontFamilyName', [
|
||||||
|
'autocomplete' => 'off',
|
||||||
|
'label' => 'Famille',
|
||||||
|
'value' => $this->getData(['fonts', $this->getUrl(2), $this->getUrl(3), 'font-family'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row" id="containerfontEditFile">
|
||||||
|
<div class="col12">
|
||||||
|
<?php echo template::file('fontEditFile', [
|
||||||
|
'label' => 'Fichier de fonte (Format WOFF)',
|
||||||
|
'value' => $this->getUrl(2) === 'file' ? $this->getData(['fonts', $this->getUrl(2), $this->getUrl(3), 'ressource']) : ''
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row" id="containerfontEditUrl">
|
||||||
|
<div class="col12">
|
||||||
|
<?php echo template::text('fontEditUrl', [
|
||||||
|
'label' => 'Url du fichier de fonte',
|
||||||
|
'value' => $this->getUrl(2) === 'imported' ? $this->getData(['fonts', $this->getUrl(2), $this->getUrl(3), 'ressource']) : ''
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php echo template::formClose(); ?>
|
@ -23,8 +23,8 @@
|
|||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php if($module::$fontsList): ?>
|
<?php if($module::$fontsDetail): ?>
|
||||||
<?php echo template::table([3, 3, 3, 3, 1], $module::$fontsList, ['Family Name', 'Font Id', 'Affectation', 'Ressource', 'Effacer']); ?>
|
<?php echo template::table([2, 2, 3, 2, 1, 1, 1], $module::$fontsDetail, ['FontId', 'Nom', 'Famille', 'Affectation', 'Origine', '', '']); ?>
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
<?php echo template::speech('Aucune fonte !'); ?>
|
<?php echo template::speech('Aucune fonte !'); ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
@ -133,7 +133,7 @@
|
|||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col3">
|
<div class="col3">
|
||||||
<?php echo template::select('configLegalPageId', array_merge(['none' => 'Aucune'] , helper::arrayCollumn($module::$pagesList, 'title', 'SORT_ASC') ) , [
|
<?php echo template::select('configLegalPageId', array_merge(['none' => 'Aucune'] , helper::arrayColumn($module::$pagesList, 'title', 'SORT_ASC') ) , [
|
||||||
'label' => 'Page "Mentions légales" ' . template::flag('site', '20px'),
|
'label' => 'Page "Mentions légales" ' . template::flag('site', '20px'),
|
||||||
'selected' => $this->getData(['locale', 'legalPageId'])
|
'selected' => $this->getData(['locale', 'legalPageId'])
|
||||||
]); ?>
|
]); ?>
|
||||||
@ -147,7 +147,7 @@
|
|||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col3">
|
<div class="col3">
|
||||||
<?php echo template::select('configSearchPageId', array_merge(['none' => 'Aucune'] , helper::arrayCollumn($module::$pagesList, 'title', 'SORT_ASC') ) , [
|
<?php echo template::select('configSearchPageId', array_merge(['none' => 'Aucune'] , helper::arrayColumn($module::$pagesList, 'title', 'SORT_ASC') ) , [
|
||||||
'label' => 'Page "Rechercher" ' . template::flag('site', '20px'),
|
'label' => 'Page "Rechercher" ' . template::flag('site', '20px'),
|
||||||
'selected' => $this->getData(['locale', 'searchPageId'])
|
'selected' => $this->getData(['locale', 'searchPageId'])
|
||||||
]); ?>
|
]); ?>
|
||||||
@ -171,7 +171,7 @@
|
|||||||
<h4>Mise en forme du texte</h4>
|
<h4>Mise en forme du texte</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col3">
|
<div class="col3">
|
||||||
<?php echo template::select('themeFooterFont', self::$fonts, [
|
<?php echo template::select('themeFooterFont', $module::$fontsList, [
|
||||||
'label' => 'Police',
|
'label' => 'Police',
|
||||||
'selected' => $this->getData(['theme', 'footer', 'font']),
|
'selected' => $this->getData(['theme', 'footer', 'font']),
|
||||||
'fonts' => true
|
'fonts' => true
|
||||||
|
@ -106,7 +106,7 @@
|
|||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
<?php echo template::select('themeHeaderFont', self::$fonts, [
|
<?php echo template::select('themeHeaderFont', $module::$fontsList, [
|
||||||
'label' => 'Police',
|
'label' => 'Police',
|
||||||
'selected' => $this->getData(['theme', 'header', 'font']),
|
'selected' => $this->getData(['theme', 'header', 'font']),
|
||||||
'fonts' => true
|
'fonts' => true
|
||||||
|
@ -183,7 +183,7 @@
|
|||||||
<h4>Mise en forme du texte</h4>
|
<h4>Mise en forme du texte</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
<?php echo template::select('themeMenuFont', self::$fonts, [
|
<?php echo template::select('themeMenuFont', $module::$fontsList, [
|
||||||
'label' => 'Police',
|
'label' => 'Police',
|
||||||
'selected' => $this->getData(['theme', 'menu', 'font']),
|
'selected' => $this->getData(['theme', 'menu', 'font']),
|
||||||
'fonts' => true
|
'fonts' => true
|
||||||
|
@ -158,7 +158,7 @@
|
|||||||
<h4>Mise en forme du texte</h4>
|
<h4>Mise en forme du texte</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
<?php echo template::select('themeTextFont', self::$fonts, [
|
<?php echo template::select('themeTextFont', $module::$fontsList, [
|
||||||
'label' => 'Police',
|
'label' => 'Police',
|
||||||
'selected' => $this->getData(['theme', 'text', 'font']),
|
'selected' => $this->getData(['theme', 'text', 'font']),
|
||||||
'fonts' => true
|
'fonts' => true
|
||||||
@ -179,7 +179,7 @@
|
|||||||
<h4>Mise en forme des titres</h4>
|
<h4>Mise en forme des titres</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
<?php echo template::select('themeTitleFont', self::$fonts, [
|
<?php echo template::select('themeTitleFont', $module::$fontsList, [
|
||||||
'label' => 'Police',
|
'label' => 'Police',
|
||||||
'selected' => $this->getData(['theme', 'title', 'font']),
|
'selected' => $this->getData(['theme', 'title', 'font']),
|
||||||
'fonts' => true
|
'fonts' => true
|
||||||
|
@ -336,7 +336,7 @@ class user extends common {
|
|||||||
* Liste des utilisateurs
|
* Liste des utilisateurs
|
||||||
*/
|
*/
|
||||||
public function index() {
|
public function index() {
|
||||||
$userIdsFirstnames = helper::arrayCollumn($this->getData(['user']), 'firstname');
|
$userIdsFirstnames = helper::arrayColumn($this->getData(['user']), 'firstname');
|
||||||
ksort($userIdsFirstnames);
|
ksort($userIdsFirstnames);
|
||||||
foreach($userIdsFirstnames as $userId => $userFirstname) {
|
foreach($userIdsFirstnames as $userId => $userFirstname) {
|
||||||
if ($this->getData(['user', $userId, 'group'])) {
|
if ($this->getData(['user', $userId, 'group'])) {
|
||||||
@ -399,7 +399,7 @@ class user extends common {
|
|||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
// Verrouillage des IP
|
// Verrouillage des IP
|
||||||
$ipBlackList = helper::arrayCollumn($this->getData(['blacklist']), 'ip');
|
$ipBlackList = helper::arrayColumn($this->getData(['blacklist']), 'ip');
|
||||||
if ( $this->getData(['blacklist',$userId,'connectFail']) >= $this->getData(['config', 'connect', 'attempt'])
|
if ( $this->getData(['blacklist',$userId,'connectFail']) >= $this->getData(['config', 'connect', 'attempt'])
|
||||||
AND in_array($this->getData(['blacklist',$userId,'ip']),$ipBlackList) ) {
|
AND in_array($this->getData(['blacklist',$userId,'ip']),$ipBlackList) ) {
|
||||||
$logStatus = 'Compte inconnu verrouillé';
|
$logStatus = 'Compte inconnu verrouillé';
|
||||||
|
@ -144,8 +144,8 @@ class blog extends common {
|
|||||||
$feeds->setDate(date('r',time()));
|
$feeds->setDate(date('r',time()));
|
||||||
$feeds->addGenerator();
|
$feeds->addGenerator();
|
||||||
// Corps des articles
|
// Corps des articles
|
||||||
$articleIdsPublishedOns = helper::arrayCollumn($this->getData(['module', $this->getUrl(0), 'posts']), 'publishedOn', 'SORT_DESC');
|
$articleIdsPublishedOns = helper::arrayColumn($this->getData(['module', $this->getUrl(0), 'posts']), 'publishedOn', 'SORT_DESC');
|
||||||
$articleIdsStates = helper::arrayCollumn($this->getData(['module', $this->getUrl(0),'posts']), 'state', 'SORT_DESC');
|
$articleIdsStates = helper::arrayColumn($this->getData(['module', $this->getUrl(0),'posts']), 'state', 'SORT_DESC');
|
||||||
foreach( $articleIdsPublishedOns as $articleId => $articlePublishedOn ) {
|
foreach( $articleIdsPublishedOns as $articleId => $articlePublishedOn ) {
|
||||||
if( $articlePublishedOn <= time() AND $articleIdsStates[$articleId] ) {
|
if( $articlePublishedOn <= time() AND $articleIdsStates[$articleId] ) {
|
||||||
// Miniature
|
// Miniature
|
||||||
@ -234,7 +234,7 @@ class blog extends common {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
// Liste des utilisateurs
|
// Liste des utilisateurs
|
||||||
self::$users = helper::arrayCollumn($this->getData(['user']), 'firstname');
|
self::$users = helper::arrayColumn($this->getData(['user']), 'firstname');
|
||||||
ksort(self::$users);
|
ksort(self::$users);
|
||||||
foreach(self::$users as $userId => &$userFirstname) {
|
foreach(self::$users as $userId => &$userFirstname) {
|
||||||
$userFirstname = $userFirstname . ' ' . $this->getData(['user', $userId, 'lastname']);
|
$userFirstname = $userFirstname . ' ' . $this->getData(['user', $userId, 'lastname']);
|
||||||
@ -263,7 +263,7 @@ class blog extends common {
|
|||||||
'value' => 'Tout effacer'
|
'value' => 'Tout effacer'
|
||||||
]);
|
]);
|
||||||
// Ids des commentaires par ordre de création
|
// Ids des commentaires par ordre de création
|
||||||
$commentIds = array_keys(helper::arrayCollumn($comments, 'createdOn', 'SORT_DESC'));
|
$commentIds = array_keys(helper::arrayColumn($comments, 'createdOn', 'SORT_DESC'));
|
||||||
// Pagination
|
// Pagination
|
||||||
$pagination = helper::pagination($commentIds, $this->getUrl(),$this->getData(['module', $this->getUrl(0), 'config', 'itemsperPage']) );
|
$pagination = helper::pagination($commentIds, $this->getUrl(),$this->getData(['module', $this->getUrl(0), 'config', 'itemsperPage']) );
|
||||||
// Liste des pages
|
// Liste des pages
|
||||||
@ -503,6 +503,78 @@ class blog extends common {
|
|||||||
'state' => true
|
'state' => true
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
|
// Ids des articles par ordre de publication
|
||||||
|
$articleIds = array_keys(helper::arrayColumn($this->getData(['module', $this->getUrl(0), 'posts']), 'publishedOn', 'SORT_DESC'));
|
||||||
|
// Gestion des droits d'accès
|
||||||
|
$filterData=[];
|
||||||
|
foreach ($articleIds as $key => $value) {
|
||||||
|
if (
|
||||||
|
( // Propriétaire
|
||||||
|
$this->getData(['module', $this->getUrl(0), 'posts', $value,'editConsent']) === self::EDIT_OWNER
|
||||||
|
AND ( $this->getData(['module', $this->getUrl(0), 'posts', $value,'userId']) === $this->getUser('id')
|
||||||
|
OR $this->getUser('group') === self::GROUP_ADMIN )
|
||||||
|
)
|
||||||
|
|
||||||
|
OR (
|
||||||
|
// Groupe
|
||||||
|
$this->getData(['module', $this->getUrl(0), 'posts', $value,'editConsent']) !== self::EDIT_OWNER
|
||||||
|
AND $this->getUser('group') >= $this->getData(['module',$this->getUrl(0), 'posts', $value,'editConsent'])
|
||||||
|
)
|
||||||
|
OR (
|
||||||
|
// Tout le monde
|
||||||
|
$this->getData(['module', $this->getUrl(0), 'posts', $value,'editConsent']) === self::EDIT_ALL
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
$filterData[] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$articleIds = $filterData;
|
||||||
|
// Pagination
|
||||||
|
$pagination = helper::pagination($articleIds, $this->getUrl(),$this->getData(['module', $this->getUrl(0),'config', 'itemsperPage']));
|
||||||
|
// Liste des pages
|
||||||
|
self::$pages = $pagination['pages'];
|
||||||
|
// Articles en fonction de la pagination
|
||||||
|
for($i = $pagination['first']; $i < $pagination['last']; $i++) {
|
||||||
|
// Nombre de commentaires à approuver et approuvés
|
||||||
|
$approvals = helper::arrayColumn($this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'comment' ]),'approval', 'SORT_DESC');
|
||||||
|
if ( is_array($approvals) ) {
|
||||||
|
$a = array_values($approvals);
|
||||||
|
$toApprove = count(array_keys($a,false));
|
||||||
|
$approved = count(array_keys($a,true));
|
||||||
|
} else {
|
||||||
|
$toApprove = 0;
|
||||||
|
$approved = count($this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i],'comment']));
|
||||||
|
}
|
||||||
|
// Met en forme le tableau
|
||||||
|
$date = mb_detect_encoding(strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn'])), 'UTF-8', true)
|
||||||
|
? strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn']))
|
||||||
|
: utf8_encode(strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn'])));
|
||||||
|
$heure = mb_detect_encoding(strftime('%H:%M', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn'])), 'UTF-8', true)
|
||||||
|
? strftime('%H:%M', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn']))
|
||||||
|
: utf8_encode(strftime('%H:%M', $this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'publishedOn'])));
|
||||||
|
self::$articles[] = [
|
||||||
|
'<a href="' . helper::baseurl() . $this->getUrl(0) . '/' . $articleIds[$i] . '" target="_blank" >' .
|
||||||
|
$this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'title']) .
|
||||||
|
'</a>',
|
||||||
|
$date .' à '. $heure,
|
||||||
|
self::$states[$this->getData(['module', $this->getUrl(0), 'posts', $articleIds[$i], 'state'])],
|
||||||
|
// Bouton pour afficher les commentaires de l'article
|
||||||
|
template::button('blogConfigComment' . $articleIds[$i], [
|
||||||
|
'class' => ($toApprove || $approved ) > 0 ? '' : 'buttonGrey' ,
|
||||||
|
'href' => ($toApprove || $approved ) > 0 ? helper::baseUrl() . $this->getUrl(0) . '/comment/' . $articleIds[$i] : '',
|
||||||
|
'value' => $toApprove > 0 ? $toApprove . '/' . $approved : $approved
|
||||||
|
]),
|
||||||
|
template::button('blogConfigEdit' . $articleIds[$i], [
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/edit/' . $articleIds[$i] . '/' . $_SESSION['csrf'],
|
||||||
|
'value' => template::ico('pencil')
|
||||||
|
]),
|
||||||
|
template::button('blogConfigDelete' . $articleIds[$i], [
|
||||||
|
'class' => 'blogConfigDelete buttonRed',
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $articleIds[$i] . '/' . $_SESSION['csrf'],
|
||||||
|
'value' => template::ico('cancel')
|
||||||
|
])
|
||||||
|
];
|
||||||
|
}
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'title' => 'Options de configuration',
|
'title' => 'Options de configuration',
|
||||||
@ -612,7 +684,7 @@ class blog extends common {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
// Liste des utilisateurs
|
// Liste des utilisateurs
|
||||||
self::$users = helper::arrayCollumn($this->getData(['user']), 'firstname');
|
self::$users = helper::arrayColumn($this->getData(['user']), 'firstname');
|
||||||
ksort(self::$users);
|
ksort(self::$users);
|
||||||
foreach(self::$users as $userId => &$userFirstname) {
|
foreach(self::$users as $userId => &$userFirstname) {
|
||||||
// Les membres ne sont pas éditeurs, les exclure de la liste
|
// Les membres ne sont pas éditeurs, les exclure de la liste
|
||||||
@ -726,7 +798,7 @@ class blog extends common {
|
|||||||
// Ligne suivante si affichage du nombre total de commentaires approuvés sous l'article
|
// Ligne suivante si affichage du nombre total de commentaires approuvés sous l'article
|
||||||
self::$nbCommentsApproved = count($commentsApproved);
|
self::$nbCommentsApproved = count($commentsApproved);
|
||||||
}
|
}
|
||||||
$commentIds = array_keys(helper::arrayCollumn($commentsApproved, 'createdOn', 'SORT_DESC'));
|
$commentIds = array_keys(helper::arrayColumn($commentsApproved, 'createdOn', 'SORT_DESC'));
|
||||||
// Pagination
|
// Pagination
|
||||||
$pagination = helper::pagination($commentIds, $this->getUrl(), $this->getData(['module', $this->getUrl(0),'config', 'itemsperPage']),'#comment');
|
$pagination = helper::pagination($commentIds, $this->getUrl(), $this->getData(['module', $this->getUrl(0),'config', 'itemsperPage']),'#comment');
|
||||||
// Liste des pages
|
// Liste des pages
|
||||||
@ -766,8 +838,8 @@ class blog extends common {
|
|||||||
// Liste des articles
|
// Liste des articles
|
||||||
else {
|
else {
|
||||||
// Ids des articles par ordre de publication
|
// Ids des articles par ordre de publication
|
||||||
$articleIdsPublishedOns = helper::arrayCollumn($this->getData(['module', $this->getUrl(0),'posts']), 'publishedOn', 'SORT_DESC');
|
$articleIdsPublishedOns = helper::arrayColumn($this->getData(['module', $this->getUrl(0),'posts']), 'publishedOn', 'SORT_DESC');
|
||||||
$articleIdsStates = helper::arrayCollumn($this->getData(['module', $this->getUrl(0), 'posts']), 'state', 'SORT_DESC');
|
$articleIdsStates = helper::arrayColumn($this->getData(['module', $this->getUrl(0), 'posts']), 'state', 'SORT_DESC');
|
||||||
$articleIds = [];
|
$articleIds = [];
|
||||||
foreach($articleIdsPublishedOns as $articleId => $articlePublishedOn) {
|
foreach($articleIdsPublishedOns as $articleId => $articlePublishedOn) {
|
||||||
if($articlePublishedOn <= time() AND $articleIdsStates[$articleId]) {
|
if($articlePublishedOn <= time() AND $articleIdsStates[$articleId]) {
|
||||||
|
@ -106,6 +106,13 @@ class form extends common {
|
|||||||
* Configuration
|
* Configuration
|
||||||
*/
|
*/
|
||||||
public function config() {
|
public function config() {
|
||||||
|
// Liste des utilisateurs
|
||||||
|
$userIdsFirstnames = helper::arrayColumn($this->getData(['user']), 'firstname');
|
||||||
|
ksort($userIdsFirstnames);
|
||||||
|
self::$listUsers [] = '';
|
||||||
|
foreach($userIdsFirstnames as $userId => $userFirstname) {
|
||||||
|
self::$listUsers [] = $userId;
|
||||||
|
}
|
||||||
// Soumission du formulaire
|
// Soumission du formulaire
|
||||||
if($this->isPost()) {
|
if($this->isPost()) {
|
||||||
// Génération des données vides
|
// Génération des données vides
|
||||||
|
@ -78,7 +78,7 @@ function position() {
|
|||||||
var inputUid = 0;
|
var inputUid = 0;
|
||||||
var inputs = <?php echo json_encode($this->getData(['module', $this->getUrl(0), 'input'])); ?>;
|
var inputs = <?php echo json_encode($this->getData(['module', $this->getUrl(0), 'input'])); ?>;
|
||||||
if(inputs) {
|
if(inputs) {
|
||||||
var inputsPerPosition = <?php echo json_encode(helper::arrayCollumn($this->getData(['module', $this->getUrl(0), 'input']), 'position', 'SORT_ASC')); ?>;
|
var inputsPerPosition = <?php echo json_encode(helper::arrayColumn($this->getData(['module', $this->getUrl(0), 'input']), 'position', 'SORT_ASC')); ?>;
|
||||||
$.each(inputsPerPosition, function(id) {
|
$.each(inputsPerPosition, function(id) {
|
||||||
add(inputUid, inputs[id]);
|
add(inputUid, inputs[id]);
|
||||||
inputUid++;
|
inputUid++;
|
||||||
|
@ -320,7 +320,7 @@ class gallery extends common {
|
|||||||
|
|
||||||
//Affichage de la galerie triée
|
//Affichage de la galerie triée
|
||||||
$g = $this->getData(['module', $this->getUrl(0), 'content']);
|
$g = $this->getData(['module', $this->getUrl(0), 'content']);
|
||||||
$p = helper::arrayCollumn(helper::arrayCollumn($g,'config'),'position');
|
$p = helper::arrayColumn(helper::arrayColumn($g,'config'),'position');
|
||||||
asort($p,SORT_NUMERIC);
|
asort($p,SORT_NUMERIC);
|
||||||
$galleries = [];
|
$galleries = [];
|
||||||
foreach ($p as $positionId => $item) {
|
foreach ($p as $positionId => $item) {
|
||||||
@ -678,7 +678,7 @@ class gallery extends common {
|
|||||||
else {
|
else {
|
||||||
// Tri des galeries suivant l'ordre défini
|
// Tri des galeries suivant l'ordre défini
|
||||||
$g = $this->getData(['module', $this->getUrl(0), 'content']);
|
$g = $this->getData(['module', $this->getUrl(0), 'content']);
|
||||||
$p = helper::arrayCollumn(helper::arrayCollumn($g,'config'),'position');
|
$p = helper::arrayColumn(helper::arrayColumn($g,'config'),'position');
|
||||||
asort($p,SORT_NUMERIC);
|
asort($p,SORT_NUMERIC);
|
||||||
$galleries = [];
|
$galleries = [];
|
||||||
foreach ($p as $positionId => $item) {
|
foreach ($p as $positionId => $item) {
|
||||||
|
@ -114,8 +114,8 @@ class news extends common {
|
|||||||
$feeds->setDate(date('r',time()));
|
$feeds->setDate(date('r',time()));
|
||||||
$feeds->addGenerator();
|
$feeds->addGenerator();
|
||||||
// Corps des articles
|
// Corps des articles
|
||||||
$newsIdsPublishedOns = helper::arrayCollumn($this->getData(['module', $this->getUrl(0), 'posts']), 'publishedOn', 'SORT_DESC');
|
$newsIdsPublishedOns = helper::arrayColumn($this->getData(['module', $this->getUrl(0), 'posts']), 'publishedOn', 'SORT_DESC');
|
||||||
$newsIdsStates = helper::arrayCollumn($this->getData(['module', $this->getUrl(0), 'posts']), 'state', 'SORT_DESC');
|
$newsIdsStates = helper::arrayColumn($this->getData(['module', $this->getUrl(0), 'posts']), 'state', 'SORT_DESC');
|
||||||
foreach($newsIdsPublishedOns as $newsId => $newsPublishedOn) {
|
foreach($newsIdsPublishedOns as $newsId => $newsPublishedOn) {
|
||||||
if($newsPublishedOn <= time() AND $newsIdsStates[$newsId]) {
|
if($newsPublishedOn <= time() AND $newsIdsStates[$newsId]) {
|
||||||
$newsArticle = $feeds->createNewItem();
|
$newsArticle = $feeds->createNewItem();
|
||||||
@ -166,7 +166,7 @@ class news extends common {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
// Liste des utilisateurs
|
// Liste des utilisateurs
|
||||||
self::$users = helper::arrayCollumn($this->getData(['user']), 'firstname');
|
self::$users = helper::arrayColumn($this->getData(['user']), 'firstname');
|
||||||
ksort(self::$users);
|
ksort(self::$users);
|
||||||
foreach(self::$users as $userId => &$userFirstname) {
|
foreach(self::$users as $userId => &$userFirstname) {
|
||||||
$userFirstname = $userFirstname . ' ' . $this->getData(['user', $userId, 'lastname']);
|
$userFirstname = $userFirstname . ' ' . $this->getData(['user', $userId, 'lastname']);
|
||||||
@ -290,6 +290,49 @@ class news extends common {
|
|||||||
'state' => true
|
'state' => true
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
|
// Ids des news par ordre de publication
|
||||||
|
$newsIds = array_keys(helper::arrayColumn($this->getData(['module', $this->getUrl(0), 'posts']), 'publishedOn', 'SORT_DESC'));
|
||||||
|
// Pagination
|
||||||
|
$pagination = helper::pagination($newsIds, $this->getUrl(),$this->getData(['module', $this->getUrl(0), 'config', 'itemsperPage']) );
|
||||||
|
// Liste des pages
|
||||||
|
self::$pages = $pagination['pages'];
|
||||||
|
// News en fonction de la pagination
|
||||||
|
for($i = $pagination['first']; $i < $pagination['last']; $i++) {
|
||||||
|
// Met en forme le tableau
|
||||||
|
$dateOn = mb_detect_encoding(strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0),'posts', $newsIds[$i], 'publishedOn'])), 'UTF-8', true)
|
||||||
|
? strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0),'posts', $newsIds[$i], 'publishedOn']))
|
||||||
|
: utf8_encode(strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0),'posts', $newsIds[$i], 'publishedOn'])));
|
||||||
|
$dateOn .= ' à ';
|
||||||
|
$dateOn .= mb_detect_encoding(strftime('%H:%M', $this->getData(['module', $this->getUrl(0),'posts', $newsIds[$i], 'publishedOn'])), 'UTF-8', true)
|
||||||
|
? strftime('%H:%M', $this->getData(['module', $this->getUrl(0),'posts', $newsIds[$i], 'publishedOn']))
|
||||||
|
: utf8_encode(strftime('%H:%M', $this->getData(['module', $this->getUrl(0),'posts', $newsIds[$i], 'publishedOn'])));
|
||||||
|
if ($this->getData(['module', $this->getUrl(0),'posts', $newsIds[$i], 'publishedOff'])) {
|
||||||
|
$dateOff = mb_detect_encoding(strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0),'posts', $newsIds[$i], 'publishedOff'])), 'UTF-8', true)
|
||||||
|
? strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0),'posts', $newsIds[$i], 'publishedOff']))
|
||||||
|
: utf8_encode(strftime('%d %B %Y', $this->getData(['module', $this->getUrl(0),'posts', $newsIds[$i], 'publishedOff'])));
|
||||||
|
$dateOff .= ' à ';
|
||||||
|
$dateOff .= mb_detect_encoding(strftime('%H:%M', $this->getData(['module', $this->getUrl(0),'posts', $newsIds[$i], 'publishedOff'])), 'UTF-8', true)
|
||||||
|
? strftime('%H:%M', $this->getData(['module', $this->getUrl(0),'posts', $newsIds[$i], 'publishedOff']))
|
||||||
|
: utf8_encode(strftime('%H:%M', $this->getData(['module', $this->getUrl(0),'posts', $newsIds[$i], 'publishedOff'])));
|
||||||
|
} else {
|
||||||
|
$dateOff = 'Permanent';
|
||||||
|
}
|
||||||
|
self::$news[] = [
|
||||||
|
$this->getData(['module', $this->getUrl(0),'posts', $newsIds[$i], 'title']),
|
||||||
|
$dateOn,
|
||||||
|
$dateOff,
|
||||||
|
self::$states[$this->getData(['module', $this->getUrl(0),'posts', $newsIds[$i], 'state'])],
|
||||||
|
template::button('newsConfigEdit' . $newsIds[$i], [
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/edit/' . $newsIds[$i]. '/' . $_SESSION['csrf'],
|
||||||
|
'value' => template::ico('pencil')
|
||||||
|
]),
|
||||||
|
template::button('newsConfigDelete' . $newsIds[$i], [
|
||||||
|
'class' => 'newsConfigDelete buttonRed',
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $newsIds[$i] . '/' . $_SESSION['csrf'],
|
||||||
|
'value' => template::ico('cancel')
|
||||||
|
])
|
||||||
|
];
|
||||||
|
}
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'title' => 'Options de configuration',
|
'title' => 'Options de configuration',
|
||||||
@ -381,7 +424,7 @@ class news extends common {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
// Liste des utilisateurs
|
// Liste des utilisateurs
|
||||||
self::$users = helper::arrayCollumn($this->getData(['user']), 'firstname');
|
self::$users = helper::arrayColumn($this->getData(['user']), 'firstname');
|
||||||
ksort(self::$users);
|
ksort(self::$users);
|
||||||
foreach(self::$users as $userId => &$userFirstname) {
|
foreach(self::$users as $userId => &$userFirstname) {
|
||||||
$userFirstname = $userFirstname . ' ' . $this->getData(['user', $userId, 'lastname']);
|
$userFirstname = $userFirstname . ' ' . $this->getData(['user', $userId, 'lastname']);
|
||||||
@ -434,8 +477,8 @@ class news extends common {
|
|||||||
} else {
|
} else {
|
||||||
// Affichage index
|
// Affichage index
|
||||||
// Ids des news par ordre de publication
|
// Ids des news par ordre de publication
|
||||||
$newsIdsPublishedOns = helper::arrayCollumn($this->getData(['module', $this->getUrl(0), 'posts']), 'publishedOn', 'SORT_DESC');
|
$newsIdsPublishedOns = helper::arrayColumn($this->getData(['module', $this->getUrl(0), 'posts']), 'publishedOn', 'SORT_DESC');
|
||||||
$newsIdsStates = helper::arrayCollumn($this->getData(['module', $this->getUrl(0), 'posts']), 'state', 'SORT_DESC');
|
$newsIdsStates = helper::arrayColumn($this->getData(['module', $this->getUrl(0), 'posts']), 'state', 'SORT_DESC');
|
||||||
$newsIds = [];
|
$newsIds = [];
|
||||||
foreach($newsIdsPublishedOns as $newsId => $newsPublishedOn) {
|
foreach($newsIdsPublishedOns as $newsId => $newsPublishedOn) {
|
||||||
$newsIdsPublishedOff = $this->getData(['module', $this->getUrl(0), 'posts', $newsId, 'publishedOff']);
|
$newsIdsPublishedOff = $this->getData(['module', $this->getUrl(0), 'posts', $newsId, 'publishedOff']);
|
||||||
|
Loading…
Reference in New Issue
Block a user