Compare commits

...

84 Commits

Author SHA1 Message Date
SylvainLelievre fe0bd22668 Texte d'aide config view index 2 days ago
SylvainLelievre a9c01cb906 Bug sitemap $parent remplacé par $parentId 2 days ago
Fred Tempez e1ef89b1c2 news : add publishoff 3 days ago
Fred Tempez 293cf382c0 news : add publishoff 3 days ago
SylvainLelievre 35efa6f16b Modification mineure dans le texte d'aide de la gestion des modules 4 days ago
SylvainLelievre c3e436c75e Personnalisation du bouton d'aide 4 days ago
SylvainLelievre 612ad106e8 Mise à jour du système d'aide dans addon 5 days ago
SylvainLelievre d335660d30 Suppression du copié collé dans tinymce 7 days ago
fredtempez 364e6e4be5 News 3.1 dépublication 1 week ago
fredtempez 3908d75240 News : titre d'article h1 en h2 pour respecter la hiérarchie 1 week ago
fredtempez 1fe067aa25 gitignore 1 week ago
fredtempez bd3630f718 Bug core version 1 week ago
fredtempez 6506679466 News : Bug theme par defaut 1 week ago
fredtempez 3a88ae8dca gitignore 1 week ago
fredtempez a89f3e9329 Commentaire 1 week ago
fredtempez f8decc4ce3 News bug import + bug couleur arrière-plan sombre 1 week ago
fredtempez 12e59b0b4b Supp module download 1 week ago
fredtempez 524bf2223a Structure datadirectory dossier racine 1 week ago
SylvainLelievre 01da51ac9b Logo dans le mail envoyé par form 1 week ago
fredtempez 479a546679 Merge branch '10504' into 10600 2 weeks ago
fredtempez b1418461ad Merge branch '10504' into 10600 2 weeks ago
fredtempez 346b2a8cec Merge branch '10504' into 10600 2 weeks ago
fredtempez 59f0fe537f DATADIRECTORY chemins corrects 2 weeks ago
fredtempez d79861cbdf Version 5.0 (mise à jour du bug effacement des commentaires dans 10504) 2 weeks ago
fredtempez 54426593d5 Blog 5.1 bug bouton effacement des commentaires 2 weeks ago
fredtempez 0b8ae49b70 DATADIRECTORY supprimer le dossier modules 2 weeks ago
SylvainLelievre a55c2b9de4 Chemin des feuilles de style .../class_du_module/pages/instance/theme.css 2 weeks ago
SylvainLelievre 97374fafb4 Page.php, mise à jour et effacement du dossier au nom du module et de l'instance 3 weeks ago
fredtempez b1b77d767c news effet blur avec arrière plan contrasté 3 weeks ago
fredtempez 2b94ba426a Fautes de frappe dans un commentaire 3 weeks ago
fredtempez a7158cf366 Merge branch 'master' into 10600 4 weeks ago
fredtempez f4f8cfe885 suppression items par page de la config 4 weeks ago
fredtempez 06ec036d9a Form gestion des données nombre de lignes par page 4 weeks ago
fredtempez a08367a992 Merge branch '10503' into 10600 1 month ago
fredtempez 1442f75f15 changes 1 month ago
fredtempez b4da3b7d98 Simplification + gestion des ressources de module au niveau de la page 1 month ago
fredtempez 2f5a8c565d change 1 month ago
fredtempez d25dbd3a81 Blog bouton déplacé 1 month ago
fredtempez cde0e52528 Gallery sample defalutdata 1 month ago
fredtempez 4d17eebdd6 Blog Nettoyage des espaces inutiles 1 month ago
fredtempez 452123813e Blog site sample Positions not set 1 month ago
fredtempez 26fe5fb214 blog example defaultdata 1 month ago
fredtempez 39a449d92a activation core auto update modules 1 month ago
fredtempez 1c1a97c22a Gallery WIP 1 month ago
fredtempez 080a601c3f News option blur ok 1 month ago
F Tempez 5e481ca3d7 News OK + blur option 1 month ago
fredtempez 1f32a6e7cc News tester update 1 month ago
fredtempez 1f37f1ca91 Search OK !!! 1 month ago
fredtempez 0f3cdfe3c6 search en test 1 month ago
fredtempez 6084179d1d update search ok 1 month ago
fredtempez 490d39a9ba uodate news ok 1 month ago
F Tempez 08bed9fc33 Merge branch '10598' of https://forge.chapril.org/ZwiiCMS-Team/ZwiiCMS into 10600 1 month ago
F Tempez 9240883e59 fix gallery from 10502 1 month ago
fredtempez 36ed072667 core modules autnomes update 1 month ago
F Tempez babebc5a7e fix setData mal placé 1 month ago
F Tempez 43da5f03db Appel automatique des initCSS lors de la mise à jour vers 10600 1 month ago
F Tempez 55c921025a News : initCss 1 month ago
F Tempez 3247e14a83 initCss variable d'instance 1 month ago
F Tempez e3744bf7d8 Bug module initcss manque style 1 month ago
F Tempez 695abf314a warning stristr deprecated 1 month ago
fredtempez fc2fbf2103 init 1 month ago
fredtempez 4c0e0bd4b6 i18n pour la v11 1 month ago
F Tempez 6f7efd7420 Bug variable non déclarée dans config 1 month ago
F Tempez 9de4b08d20 addon effacement des données 1 month ago
F Tempez 04fab0e06c Merge branch '10600' of https://forge.chapril.org/ZwiiCMS-Team/ZwiiCMS into 10600 1 month ago
F Tempez 6a9d194942 export nouveau datadirectory 1 month ago
SylvainLelievre 2ad1036a7f Mise à jour de 'core/class/helper.class.php' 1 month ago
fredtempez e90da78bad Modules : datadirectory type string 1 month ago
F Tempez ba1d5bbf1f Gallery datadirectory 1 month ago
fredtempez 03ae2b84f9 changes et readme 1 month ago
fredtempez 2510a1bc8d Search bouton loupe si pas de texte 1 month ago
fredtempez 687a98df15 Icône search 1 month ago
fredtempez 77fc370e28 Fonction initCss 1 month ago
fredtempez a1d934ad7b search initCSS 1 month ago
fredtempez 9a8592cb68 Search fonction initialisation 1 month ago
fredtempez cba87d3295 news Effet blur 1 month ago
fredtempez 374439755c Gallery correction init 1 month ago
fredtempez 89a5828d99 suprresion des options de langues commentées 1 month ago
fredtempez c45fdc4895 config advanced emplacements des sélecteurs 1 month ago
fredtempez df778fbee1 config objets par page 1 month ago
fredtempez 9630f093cd defaultdata de la v11 1 month ago
fredtempez c2c67b55ff Modules de v11 1 month ago
fredtempez fd8a15812b Style perso 1 month ago
fredtempez e2f1d5e0e3 gitignore 1 month ago
  1. 9
      .gitignore
  2. 9
      CHANGES.md
  3. 11
      README.md
  4. 11
      core/class/helper.class.php
  5. 19
      core/core.js.php
  6. 42
      core/core.php
  7. 19
      core/layout/common.css
  8. 15
      core/layout/mail.php
  9. 228
      core/module/addon/addon.php
  10. 9
      core/module/addon/view/index/index.help.html
  11. 35
      core/module/addon/view/index/index.php
  12. 14
      core/module/config/config.php
  13. 20
      core/module/config/view/advanced/advanced.php
  14. 10
      core/module/config/view/index/index.help.html
  15. 13
      core/module/config/view/index/index.php
  16. 118
      core/module/install/ressource/defaultdata.php
  17. 18
      core/module/page/page.php
  18. 2
      core/module/sitemap/view/index/index.php
  19. 1
      core/module/theme/theme.php
  20. 14
      core/module/theme/view/admin/admin.php
  21. 4
      core/vendor/tinymce/init.js
  22. 1
      core/vendor/zwiico/css/zwiico-codes.css
  23. 13
      core/vendor/zwiico/css/zwiico-embedded.css
  24. 1
      core/vendor/zwiico/css/zwiico-ie7-codes.css
  25. 1
      core/vendor/zwiico/css/zwiico-ie7.css
  26. 15
      core/vendor/zwiico/css/zwiico.css
  27. BIN
      core/vendor/zwiico/font/zwiico.eot
  28. 2
      core/vendor/zwiico/font/zwiico.svg
  29. BIN
      core/vendor/zwiico/font/zwiico.ttf
  30. BIN
      core/vendor/zwiico/font/zwiico.woff
  31. BIN
      core/vendor/zwiico/font/zwiico.woff2
  32. 49
      module/blog/blog.php
  33. 6
      module/blog/view/article/article.php
  34. 2
      module/blog/view/comment/comment.js.php
  35. 8
      module/blog/view/config/config.php
  36. 1
      module/blog/view/edit/edit.php
  37. 24
      module/form/form.php
  38. 49
      module/form/view/config/config.js.php
  39. 21
      module/form/view/config/config.php
  40. 234
      module/gallery/gallery.php
  41. 5
      module/gallery/ressource/defaultdata.php
  42. 16
      module/gallery/view/edit/edit.php
  43. 79
      module/gallery/view/gallery/gallery.css
  44. 2
      module/gallery/view/gallery/gallery.php
  45. 79
      module/gallery/view/index/index.css
  46. 28
      module/gallery/view/theme/theme.php
  47. 249
      module/news/news.php
  48. 14
      module/news/ressource/defaultdata.php
  49. 11
      module/news/view/add/add.php
  50. 20
      module/news/view/article/article.css
  51. 63
      module/news/view/config/config.php
  52. 11
      module/news/view/edit/edit.php
  53. 38
      module/news/view/index/index.css
  54. 34
      module/news/view/index/index.php
  55. 2
      module/redirection/redirection.php
  56. 7
      module/search/ressource/defaultdata.php
  57. 201
      module/search/search.php
  58. 10
      module/search/view/config/config.php
  59. 8
      module/search/view/index/index.php
  60. 1
      site/data/news/pages/accueil/theme.css
  61. 1
      site/data/news/pages/telechargement/theme.css
  62. 1
      site/data/search/pages/recherche/theme.css

9
.gitignore

@ -38,12 +38,3 @@ site/data/journal.log
.DS_Store
site/.DS_Store
site/file/.DS_Store
site/data/es/locale.json
site/data/es/module.json
site/data/es/page.json
site/data/en/locale.json
site/data/en/module.json
site/data/en/page.json
site/data/de/locale.json
site/data/de/module.json
site/data/de/page.json

9
CHANGES.md

@ -1,5 +1,14 @@
# Changelog
## version 10.6.00
Cette version apporte aux modules une autonomie complète par rapport au noyau.
- mise à jour interne (fonction update)
- feuille de style propres aux instances (fonction init)
- Modifications :
- Nombre d'éléments ou d'articles par page : l'option est propre aux modules et n'est plus gérées dans la configuration du CMS.
- Module Search : en l'absence de texte dans le bouton Rechercher, une loupe est affichée.
- Module News : présentation des articles en colonnes.
## version 10.5.04
- Modifications :
- Sitemap : tri des articles de blog selon la date de publication

11
README.md

@ -1,5 +1,5 @@
# ZwiiCMS 10.5.04
# ZwiiCMS 10.6.00
Zwii est un CMS sans base de données (flat-file) qui permet de créer et gérer facilement un site web sans aucune connaissance en programmation.
@ -60,22 +60,23 @@ Pour revenir à la version 8, renommez ce fichier "data.json".
[R] vendor Librairies extérieures
[F] core.js.php Cœur javascript
[F] core.php Cœur PHP
[R] module Modules de page
[R] blog Blog
[R] form Gestionnaire de formulaires
[R] gallery Galerie
[R] news Nouvelles
[R] redirection Redirection
[R] site Contenu du site
[R] backup Sauvegardes automatiques
[R] data Répertoire des données
[R] fr Dossier localisé
[F] page.json Données des pages
[F] module.json Données des modules de pages
[R] modules Personnalisation des modules ou données propres
[F] admin.css Thème des pages d'administration
[F] admin.json Données de thème des pages d'administration
[F] admin.json Données de thème des pages d'administration
[F] blacklist.json Journalisation des tentatives de connexion avec des comptes inconnus
[F] config.json Configuration du site
[F] core.json Configuration du noyau
@ -89,7 +90,7 @@ Pour revenir à la version 8, renommez ce fichier "data.json".
[R] source Ressources diverses
[R] thumb Miniatures des images
[R] tmp Répertoire temporaire
[F] index.php Fichier d'initialisation de ZwiiCMS
[F] robots.txt Filtrage des répertoires accessibles aux robots des moteurs de recherche
[F] sitemap.xml Plan du site

11
core/class/helper.class.php

@ -21,9 +21,9 @@ class helper {
/**
* Récupérer l'adresse IP sans tenit compte du proxy
* Récupérer l'adresse IP sans tenir compte du proxy
* @return string IP adress
* Cette focntion est utilisé par user
* Cette fonction est utilisée par user
*/
public static function getIp() {
@ -177,13 +177,10 @@ class helper {
$delete = true;
}
// Constante DATADIRECTORY
if ( array_key_exists('DATADIRECTORY', $class_constants)
&& $class_constants['DATADIRECTORY'] !== []
&& is_array($class_constants['DATADIRECTORY'])
) {
if ( array_key_exists('DATADIRECTORY', $class_constants)) {
$dataDirectory = $value::DATADIRECTORY;
} else {
$dataDirectory = [];
$dataDirectory = '';
}
// Affection
$modules [$value] = [

19
core/core.js.php

@ -479,14 +479,17 @@ $(document).ready(function(){
*
*/
$(".helpDisplayButton").on({
mouseenter: function () {
$(".helpDisplayContent").slideDown();
},
mouseleave: function () {
$(".helpDisplayContent").slideUp();
}
});
$(".buttonHelp").on({
click: function () {
$(".helpDisplayContent").slideToggle();
if( $(".buttonHelp").css('opacity') > '0.75'){
$(".buttonHelp").css('opacity','0.5');
}
else{
$(".buttonHelp").css('opacity','1');
}
}
});
/**
* Remove ID Facebook from URL

42
core/core.php

@ -44,7 +44,7 @@ class common {
const ACCESS_TIMER = 1800;
// Numéro de version
const ZWII_VERSION = '10.5.03';
const ZWII_VERSION = '10.6.00';
const ZWII_UPDATE_CHANNEL = "v10";
public static $actions = [];
@ -1585,6 +1585,38 @@ class common {
}
$this->setData(['core', 'dataVersion', 10502]);
}
// Version 10.6.00
if ($this->getData(['core', 'dataVersion']) < 10600) {
// Mise à jour des données des modules autonomes
// Liste des pages dans pageList
$pageList = array();
foreach ($this->getHierarchy(null,null,null) as $parentKey=>$parentValue) {
$pageList [] = $parentKey;
foreach ($parentValue as $childKey) {
$pageList [] = $childKey;
}
}
// Parcourir pageList et rechercher les modules au CSS autonomes
foreach ($pageList as $parentKey => $parent) {
if (
$this->getData(['page',$parent,'moduleId']) === 'search'
|| $this->getData(['page',$parent,'moduleId']) === 'gallery'
|| $this->getData(['page',$parent,'moduleId']) === 'news'
){
if(class_exists($parent)) {
$module = new $moduleId;
$module->update($parent);
}
}
}
// Suppression de l'option d'objets par page gérées par les modules
$this->deleteData(['config','itemsperPage']);
$this->setData(['core', 'dataVersion', 10600]);
}
}
}
@ -1840,6 +1872,8 @@ class core extends common {
$css .= '.button.buttonGrey {background-color: ' . $colors['normal'] . ';color: ' . $colors['text'] . ';}.button.buttonGrey:hover {background-color:' . $colors['darken'] . ';color:' . $colors['text'] . ';}.button.buttonGrey:active {background-color:' . $colors['veryDarken'] . ';color:' . $colors['text'] . ';}';
$colors = helper::colorVariants($this->getData(['admin','backgroundColorButtonRed']));
$css .= '.button.buttonRed {background-color: ' . $colors['normal'] . ';color: ' . $colors['text'] . ';}.button.buttonRed:hover {background-color:' . $colors['darken'] . ';color:' . $colors['text'] . ';}.button.buttonRed:active {background-color:' . $colors['veryDarken'] . ';color:' . $colors['text'] . ';}';
$colors = helper::colorVariants($this->getData(['admin','backgroundColorButtonHelp']));
$css .= '.button.buttonHelp {background-color: ' . $colors['normal'] . ';color: ' . $colors['text'] . ';}.button.buttonHelp:hover {background-color:' . $colors['darken'] . ';color:' . $colors['text'] . ';}.button.buttonHelp:active {background-color:' . $colors['veryDarken'] . ';color:' . $colors['text'] . ';}';
$colors = helper::colorVariants($this->getData(['admin','backgroundColorButtonGreen']));
$css .= '.button.buttonGreen, button[type=submit] {background-color: ' . $colors['normal'] . ';color: ' . $colors['text'] . ';}.button.buttonGreen:hover, button[type=submit]:hover {background-color: ' . $colors['darken'] . ';color: ' . $colors['text'] .';}.button.buttonGreen:active, button[type=submit]:active {background-color: ' . $colors['darken'] . ';color: ' .$colors['text'] .';}';
$colors = helper::colorVariants($this->getData(['admin','backgroundBlockColor']));
@ -2134,6 +2168,11 @@ class core extends common {
'style' => file_get_contents($stylePath)
]);
}
if ($output['style']) {
$this->addOutput([
'style' => $this->output['style'] . file_get_contents($output['style'])
]);
}
// JS
$scriptPath = $modulePath . 'module/' . $moduleId . '/view/' . $output['view'] . '/' . $output['view'] . '.js.php';
if(file_exists($scriptPath)) {
@ -2928,7 +2967,6 @@ class layout extends common {
if($this->getUser('group') >= self::GROUP_ADMIN) {
$rightItems .= '<li><a href="' . helper::baseUrl() . 'user" data-tippy-content="Configurer les utilisateurs">' . template::ico('users') . '</a></li>';
$rightItems .= '<li><a href="' . helper::baseUrl() . 'theme" data-tippy-content="Personnaliser les thèmes">' . template::ico('brush') . '</a></li>';
//$rightItems .= '<li><a href="' . helper::baseUrl() . 'translate" data-tippy-content="Gestion des langues">' . template::ico('flag') . '</a></li>';
$rightItems .= '<li><a href="' . helper::baseUrl() . 'addon" data-tippy-content="Gérer les modules">' . template::ico('puzzle') . '</a></li>';
$rightItems .= '<li><a href="' . helper::baseUrl() . 'config" data-tippy-content="Configurer le site">' . template::ico('cog-alt') . '</a></li>';
// Mise à jour automatique

19
core/layout/common.css

@ -1703,19 +1703,10 @@ th.col12 {
.helpDisplayContent {
display: none;
position: fixed;
width: 100%;
bottom: 15px;
padding: 2px 10px;
margin-left: -20px;
-webkit-box-shadow: 5px 5px 11px 0px #222222;
box-shadow: 5px 5px 11px 0px #222222;
border-radius: 5px;
background-color:#333;
color: white;
z-index: 30;
}
.helpDisplayButton {
cursor: pointer;
padding: 10px 10px;
-webkit-box-shadow: 5px 5px 11px 0px #222222;
box-shadow: 5px 5px 11px 0px #222222;
border-radius: 5px;
z-index: 30;
}

15
core/layout/mail.php

@ -109,7 +109,18 @@
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="border-top: 1px solid #EBEEF2; padding: 20px; text-align: center; font-family: 'Open Sans', sans-serif; font-size: 12px; line-height: 17px; color: #212223;">
<a href="<?php echo helper::baseUrl(false); ?>" target="_blank"><?php echo $this->getData(['locale', 'title']); ?></a>
<a href="<?php echo helper::baseUrl(false); ?>" target="_blank">
<?php
if($this->getData(['module', $this->getUrl(0), 'config', 'signature' ]) === 'logo' && is_file( 'site/file/source/'. $this->getData(['module', $this->getUrl(0), 'config', 'logoUrl' ]))){
$imageFile = helper::baseUrl(false).'site/file/source/'. $this->getData(['module', $this->getUrl(0), 'config', 'logoUrl' ]) ;
$imageBase64 = base64_encode(file_get_contents($imageFile));
?><img src=" data:image/<?php echo pathinfo($imageFile, PATHINFO_EXTENSION); ?>;base64,<?php echo $imageBase64; ?>" border="0" width="<?php echo $this->getData(['module', $this->getUrl(0), 'config', 'logoWidth']) ?>%" >
<?php
}
else{
echo $this->getData(['locale', 'title']);
} ?>
</a>
</td>
</tr>
</table>
@ -124,4 +135,4 @@
</div>
</center>
</body>
</html>
</html>

228
core/module/addon/addon.php

@ -50,19 +50,13 @@ class addon extends common {
$infoModules = helper::getModules();
$module = $this->getUrl(2);
//Liste des dossiers associés au module non effacés
$list = '';
foreach( $infoModules[$module]['dataDirectory'] as $moduleId){
if (strpos($moduleId,'module.json') === false && strpos($moduleId,'page.json') === false) {
$list === '' ? $list = self::DATA_DIR.$moduleId : $list .= ', '.self::DATA_DIR. $moduleId;
}
}
if( $this->removeDir('./module/'.$module ) === true){
if( $this->removeDir('./module/'.$module ) === true ){
$success = true;
if( $list === ''){
$notification = 'Module '.$module .' désinstallé';
}
else{
$notification = 'Module '.$module .' désinstallé, il reste des données dans '.$list;
$notification = 'Module '. $module .' désinstallé';
if(($infoModules[$this->getUrl(2)]['dataDirectory']) ) {
if (!$this->removeDir($infoModules[$this->getUrl(2)]['dataDirectory'])){
$notification = 'Module '.$module .' désinstallé, il reste des données dans ' . $infoModules[$this->getUrl(2)]['dataDirectory'];
}
}
}
else{
@ -110,16 +104,15 @@ class addon extends common {
'value' => template::ico('cancel')
])
: '',
is_array($infoModules[$key]['dataDirectory']) && implode(', ',array_keys($inPages,$key)) !== ''
implode(', ',array_keys($inPages,$key)) !== ''
? template::button('moduleExport' . $key, [
'href' => helper::baseUrl(). $this->getUrl(0) . '/export/' . $key,// appel de fonction vaut exécution, utiliser un paramètre
'href' => helper::baseUrl(). $this->getUrl(0) . '/export/' . $key . '/' . $_SESSION['csrf'],// appel de fonction vaut exécution, utiliser un paramètre
'value' => template::ico('download')
])
: '',
'',
is_array($infoModules[$key]['dataDirectory']) && implode(', ',array_keys($inPages,$key)) === ''
implode(', ',array_keys($inPages,$key)) === ''
? template::button('moduleExport' . $key, [
'href' => helper::baseUrl(). $this->getUrl(0) . '/import/' . $key.'/' . $_SESSION['csrf'],// appel de fonction vaut exécution, utiliser un paramètre
'href' => helper::baseUrl(). $this->getUrl(0) . '/import/' . $key . '/' . $_SESSION['csrf'],// appel de fonction vaut exécution, utiliser un paramètre
'value' => template::ico('upload')
])
: ''
@ -251,108 +244,97 @@ class addon extends common {
]);
}
/*
* Copie récursive de dossiers
*
*/
private function custom_copy($src, $dst) {
// open the source directory
$dir = opendir($src);
// Make the destination directory if not exist
if (!is_dir($dst)) {
mkdir($dst);
}
// Loop through the files in source directory
while( $file = readdir($dir) ) {
if (( $file != '.' ) && ( $file != '..' )) {
if ( is_dir($src . '/' . $file) ){
// Recursively calling custom copy function
// for sub directory
$this -> custom_copy($src . '/' . $file, $dst . '/' . $file);
}
else {
copy($src . '/' . $file, $dst . '/' . $file);
}
}
}
closedir($dir);
}
/*
* Export des données d'un module externes ou interne à module.json
*/
public function export(){
// Lire les données du module
$infoModules = helper::getModules();
// Créer un dossier par défaut
$tmpFolder = self::TEMP_DIR . uniqid();
//$tmpFolder = self::TEMP_DIR . 'test';
if (!is_dir($tmpFolder)) {
mkdir($tmpFolder);
// Jeton incorrect
if ($this->getUrl(3) !== $_SESSION['csrf']) {
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . 'addon',
'state' => false,
'notification' => 'Action non autorisée'
]);
}
// Clés moduleIds dans les pages
$inPages = helper::arrayCollumn($this->getData(['page']),'moduleId', 'SORT_DESC');
// Parcourir les pages utilisant le module
foreach (array_keys($inPages,$this->getUrl(2)) as $pageId) {
// Export des pages hébergeant le module
$pageContent[$pageId] = $this->getData(['page',$pageId]);
// Export de fr/module.json
$moduleId = 'fr/module.json';
// Création de l'arborescence des langues
// Pas de nom dossier de langue - dossier par défaut
$t = explode ('/',$moduleId);
if ( is_array($t)) {
$lang = 'fr';
} else {
$lang = $t[0];
else {
// Lire les données du module
$infoModules = helper::getModules();
// Créer un dossier par défaut
$tmpFolder = self::TEMP_DIR . uniqid();
//$tmpFolder = self::TEMP_DIR . 'test';
if (!is_dir($tmpFolder)) {
mkdir($tmpFolder);
}
// Créer le dossier si inexistant
if (!is_dir($tmpFolder . '/' . $lang)) {
mkdir ($tmpFolder . '/' . $lang);
// Clés moduleIds dans les pages
$inPages = helper::arrayCollumn($this->getData(['page']),'moduleId', 'SORT_DESC');
// Parcourir les pages utilisant le module
foreach (array_keys($inPages,$this->getUrl(2)) as $pageId) {
// Export des pages hébergeant le module
$pageContent[$pageId] = $this->getData(['page',$pageId]);
// Export de fr/module.json
$moduleId = 'fr/module.json';
$moduleDir = str_replace('site/data/','',$infoModules[$this->getUrl(2)]['dataDirectory']);
// Création de l'arborescence des langues
// Pas de nom dossier de langue - dossier par défaut
$t = explode ('/',$moduleId);
if ( is_array($t)) {
$lang = 'fr';
} else {
$lang = $t[0];
}
// Créer le dossier temporaire si inexistant sinon le nettoie et le créer
if (!is_dir($tmpFolder . '/' . $lang)) {
mkdir ($tmpFolder . '/' . $lang, 0777, true);
} else {
$this->removeDir($tmpFolder . '/' . $lang);
mkdir ($tmpFolder . '/' . $lang, 0777, true);
}
// Créer le dossier temporaire des données du module
if ($infoModules[$this->getUrl(2)]['dataDirectory']) {
if (!is_dir($tmpFolder . '/' . $moduleDir)) {
mkdir ($tmpFolder . '/' . $moduleDir, 0777, true) ;
}
}
// Sauvegarde si données non vides
$tmpData [$pageId] = $this->getData(['module',$pageId ]);
if ($tmpData [$pageId] !== null) {
file_put_contents($tmpFolder . '/' . $moduleId, json_encode($tmpData));
}
// Export des données localisées dans le dossier de données du module
if ($infoModules[$this->getUrl(2)]['dataDirectory'] &&
is_dir($infoModules[$this->getUrl(2)]['dataDirectory'])) {
$this->custom_copy ($infoModules[$this->getUrl(2)]['dataDirectory'], $tmpFolder . '/' . $moduleDir);
}
}
// Sauvegarde si données non vides
$tmpData [$pageId] = $this->getData(['module',$pageId ]);
if ($tmpData [$pageId] !== null) {
file_put_contents($tmpFolder . '/' . $moduleId, json_encode($tmpData));
// Enregistrement des pages dans le dossier de langue identique à module
if (!file_exists($tmpFolder . '/' . $lang . '/page.json')) {
file_put_contents($tmpFolder . '/' . $lang . '/page.json', json_encode($pageContent));
}
// Export des données localisées dans des dossiers
foreach ($infoModules[$this->getUrl(2)]['dataDirectory'] as $dirId) {
if ( file_exists(self::DATA_DIR . '/' . $dirId)
&& !file_exists($tmpFolder . '/' . $dirId ) ) {
$this->custom_copy ( self::DATA_DIR . '/' . $dirId, $tmpFolder . '/' . $dirId );
}
// création du zip
$fileName = $this->getUrl(2) . '.zip';
$this->makeZip ($fileName, $tmpFolder, []);
if (file_exists($fileName)) {
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Content-Length: ' . filesize($fileName));
readfile( $fileName);
// Valeurs en sortie
$this->addOutput([
'display' => self::DISPLAY_RAW
]);
unlink($fileName);
$this->removeDir($tmpFolder);
exit();
} else {
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . 'addon',
'notification' => 'Quelque chose s\'est mal passé',
'state' => false
]);
}
}
// Enregistrement des pages dans le dossier de langue identique à module
if (!file_exists($tmpFolder . '/' . $lang . '/page.json')) {
file_put_contents($tmpFolder . '/' . $lang . '/page.json', json_encode($pageContent));
}
// création du zip
$fileName = $this->getUrl(2) . '.zip';
$this->makeZip ($fileName, $tmpFolder, []);
if (file_exists($fileName)) {
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Content-Length: ' . filesize($fileName));
readfile( $fileName);
// Valeurs en sortie
$this->addOutput([
'display' => self::DISPLAY_RAW
]);
unlink($fileName);
$this->removeDir($tmpFolder);
exit();
} else {
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . 'addon',
'notification' => 'Quelque chose s\'est mal passé',
'state' => false
]);
}
}
/*
@ -441,4 +423,32 @@ class addon extends common {
]);
}
}
/*
* Copie récursive de dossiers
*
*/
private function custom_copy($src, $dst) {
// open the source directory
$dir = opendir($src);
// Make the destination directory if not exist
if (!is_dir($dst)) {
mkdir($dst);
}
// Loop through the files in source directory
while( $file = readdir($dir) ) {
if (( $file != '.' ) && ( $file != '..' )) {
if ( is_dir($src . '/' . $file) ){
// Recursively calling custom copy function
// for sub directory
$this -> custom_copy($src . '/' . $file, $dst . '/' . $file);
}
else {
copy($src . '/' . $file, $dst . '/' . $file);
}
}
}
closedir($dir);
}
}

9
core/module/addon/view/index/index.help.html

@ -0,0 +1,9 @@
<h3>IMPORTER OU METTRE A JOUR</h3>
<p>Vous avez au préalable charger le fichier zip du module sur votre serveur par 'Gérer les fichiers'.</p>
<p>Lors d'une mise à jour Zwii contrôle la version du module à installer, pour réinstaller un module de même numéro de version vous devez cocher 'Mise à jour forcée'.
Il est déconseillé d'installer un module plus ancien.</p>
<h3>EXPORTER IMPORTER</h3>
<p>Exporter produit une archive au nom du module contenant les pages concernées ainsi que les données et ressources utilisées par le module dans ces pages.</p>
<p>Vous pouvez vous en servir comme d'une sauvegarde partielle ou pour transférer les pages et les données du module vers un autre site.</p>
<p>Une fois le module installé l'import permet de restaurer les pages et les données sauvegardées. Vous devrez avoir au préalable transféré le fichier zip d'un export sur votre serveur par 'Gérer les fichiers'.
Si une page de même nom existe sur votre site vous serez invité à modifier son nom.</p>

35
core/module/addon/view/index/index.php

@ -8,13 +8,26 @@
'value' => 'Retour'
]); ?>
</div>
<div class="col2 offset8">
<?php echo template::submit('configModulesSubmit',[
'value' => 'Valider',
'ico' => 'check'
]); ?>
</div>
</div>
<div class="col2">
<?php echo template::button('addonIndexHelp', [
'class' => 'buttonHelp',
'ico' => 'help',
'value' => 'Aide'
]); ?>
</div>
<div class="col2 offset6">
<?php echo template::submit('configModulesSubmit',[
'value' => 'Valider',
'ico' => 'check'
]); ?>
</div>
</div>
<!-- Aide à propos de la gestion des modules, view index -->
<div class="helpDisplayContent">
<?php echo file_get_contents( 'core/module/addon/view/index/index.help.html') ;?>
</div>
<div class="row">
<div class="col12">
<div class="block">
@ -40,13 +53,7 @@
</div>
<?php echo template::formClose(); ?>
<?php if($module::$modInstal): ?>
<?php echo template::table([2, 2, 2, 2, 1, 1, 1, 1], $module::$modInstal, ['Module installé', 'Alias', 'Version', 'Page(s)', 'Supprimer', 'Exporter', '<span class="helpDisplayButton">'.template::ico('help', 'left').'</span>', 'Importer']); ?>
<?php echo template::table([2, 2, 2, 2, 1, 1, 1], $module::$modInstal, ['Module installé', 'Alias', 'Version', 'Page(s)', 'Supprimer', 'Exporter', 'Importer']); ?>
<?php else: ?>
<?php echo template::speech('Aucun module installé.'); ?>
<?php endif; ?>
<div class="helpDisplayContent">
<p>Exporter produit une archive au nom du module contenant les pages concernées ainsi que les données et ressources utilisées par le module dans ces pages.</p>
<p>Vous pouvez vous en servir comme d'une sauvegarde partielle ou pour transférer les pages et les données du module vers un autre site.</p>
<p>Une fois le module installé l'import permet de restaurer les pages et les données sauvegardées.
Si une page de même nom existe sur votre site vous serez invité à modifier son nom.</p>
</div>

14
core/module/config/config.php

@ -146,13 +146,6 @@ class config extends common {
'Pacific/Fiji' => '(GMT+12:00) Fiji',
'Asia/Kamchatka' => '(GMT+12:00) Kamchatka'
];
// Nombre d'objets par page
public static $ItemsList = [
5 => '5 articles',
10 => '10 articles',
15 => '15 articles',
20 => '20 articles'
];
// Type de proxy
public static $proxyType = [
'tcp://' => 'TCP',
@ -429,7 +422,6 @@ class config extends common {
public function advanced() {
// Soumission du formulaire
if($this->isPost()) {
$success = true;
// Basculement en mise à jour auto
// Remise à 0 du compteur
if ($this->getData(['config','autoUpdate']) === false &&
@ -457,7 +449,6 @@ class config extends common {
'githubId' => $this->getInput('configAdvancedSocialGithubId')
],
'timezone' => $this->getInput('configAdvancedTimezone', helper::FILTER_STRING_SHORT, true),
'itemsperPage' => $this->getInput('configAdvancedItemsperPage', helper::FILTER_INT,true),
'autoUpdate' => $this->getInput('configAdvancedAutoUpdate', helper::FILTER_BOOLEAN),
'autoUpdateHtaccess' => $this->getInput('configAdvancedAutoUpdateHtaccess', helper::FILTER_BOOLEAN),
'proxyType' => $this->getInput('configAdvancedProxyType'),
@ -536,11 +527,10 @@ class config extends common {
// Générer robots.txt et sitemap
$this->generateFiles();
// Valeurs en sortie
$notification = $notification . 'Modifications enregistrées';
$this->addOutput([
'redirect' => helper::baseUrl() . $this->getUrl(),
'notification' => $notification,
'state' => $success
'notification' => 'Modifications enregistrées',
'state' => true
]);
}
// Valeurs en sortie

20
core/module/config/view/advanced/advanced.php

@ -60,15 +60,6 @@
'value' => $this->getData(['config', 'faviconDark'])
]); ?>
</div>
<div class="col4">
<?php echo template::select('configAdvancedItemsperPage', $module::$ItemsList, [
'label' => 'Articles par page',
'selected' => $this->getData(['config', 'itemsperPage']),
'help' => 'Modules Blog et News'
]); ?>
</div>
</div>
<div class="row">
<div class="col4">
<?php echo template::select('configAdvancedTimezone', $module::$timezones, [
'label' => 'Fuseau horaire',
@ -76,25 +67,28 @@
'help' => 'Le fuseau horaire est utile au bon référencement'
]); ?>
</div>
<div class="col4 verticalAlignBottom">
</div>
<div class="row">
<div class="col4">
<?php echo template::checkbox('configAdvancedCookieConsent', true, 'Consentement aux cookies', [
'checked' => $this->getData(['config', 'cookieConsent'])
]); ?>
</div>
<div class="col4 verticalAlignBottom">
<div class="col4">
<?php echo template::checkbox('configAdvancedCaptchaStrong', true, 'Captcha renforcé', [
'checked' => $this->getData(['config','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 renforcé utilise quatre opérations de nombres de 0 à 20.'
]); ?>
</div>
</div>
<div class="row">
<div class="col4">
<?php echo template::checkbox('rewrite', true, 'Réécriture d\'URL', [
'checked' => helper::checkRewrite(),
'help' => 'Vérifiez d\'abord que votre serveur l\'autorise : ce n\'est pas le cas chez Free.'
]); ?>
</div>
</div>
<div class="row">
<div class="col4">
<?php echo template::checkbox('configAdvancedAutoBackup', true, 'Sauvegarde quotidienne', [
'checked' => $this->getData(['config', 'autoBackup']),

10
core/module/config/view/index/index.help.html

@ -0,0 +1,10 @@
<h3>MENTIONS LEGALES</h3>
<p>Pour faire apparaître un lien 'Mentions légales' dans le pied de page, vous sélectionnez la page puis
dans la barre d'administration vous sélectionnez 'Personnaliser les thèmes', vous cliquez sur le pied de page et vous cochez la case 'Mentions légales'.<br>
Vous pouvez personnaliser la page 'Mentions légales', accessible en choisissant cette page dans la barre d'administration, ou créer votre propre page.<br>
<a href="https://www.service-public.fr/professionnels-entreprises/vosdroits/F31228" target="_blank" rel="noopener">Ce site officiel vous indique les mentions obligatoires à y faire figurer</a></p>
<h3>RECHERCHE</h3>
<p>Pour faire apparaître un lien 'Recherche' dans le pied de page, vous procédez de manière similaire.</p>
<h3>ERREURS ET SITE EN MAINTENANCE</h3>
<p>Les pages par défaut sont 'Erreur403', 'Erreur 404' et 'Site en maintenance'. Vous pouvez les modifier, en les choisissant à partir de la barre
d'administration, ou créer vos propres pages orphelines (en édition de page sélectionnez dans le bloc 'Emplacement dans le menu' : 'Ne pas afficher').</p>

13
core/module/config/view/index/index.php

@ -8,7 +8,14 @@
'value' => 'Accueil'
]); ?>
</div>
<div class="col2 offset6">
<div class="col2">
<?php echo template::button('addonIndexHelp', [
'class' => 'buttonHelp',
'ico' => 'help',
'value' => 'Aide'
]); ?>
</div>
<div class="col2 offset4">
<?php echo template::button('configAdvancedButton', [
'href' => helper::baseUrl() . 'config/advanced',
'value' => 'Avancée',
@ -19,6 +26,10 @@
<?php echo template::submit('configSubmit'); ?>
</div>
</div>
<!-- Aide à propos de la configuration du site, view index -->
<div class="helpDisplayContent">
<?php echo file_get_contents( 'core/module/config/view/index/index.help.html') ;?>
</div>
<div class="row">
<div class="col12">
<div class="block">

118
core/module/install/ressource/defaultdata.php

@ -21,7 +21,6 @@ class init extends common {
'githubId' => ''
],
'timezone' => 'Europe/Paris',
'itemsperPage' => 10,
'proxyUrl' => '',
'proxyPort' => '',
'proxyType' => 'tcp://',
@ -33,10 +32,10 @@ class init extends common {
'attempt' => 3,
'log' => false,
'captcha' => true
],
]
],
'core' => [
'dataVersion' => 10400,
'dataVersion' => 11000,
'lastBackup' => 0,
'lastClearTmp' => 0,
'lastAutoUpdate' => 0,
@ -84,6 +83,19 @@ class init extends common {
],
'module' => [],
'user' => [],
'translate' => [
'scriptGoogle' => false,
'showCredits' => false,
'autoDetect' => false,
'admin' => false,
'fr' => 'none',
'de' => 'none',
'en' => 'none',
'es' => 'none',
'it' => 'none',
'nl' => 'none',
'pt' => 'none'
],
'theme' => [
'body' => [
'backgroundColor' => 'rgba(236, 239, 241, 1)',
@ -198,6 +210,7 @@ class init extends common {
'backgroundColorButtonGrey' => 'rgba(170, 180, 188, 1)',
'backgroundColorButtonRed' => 'rgba(217, 95, 78, 1)',
'backgroundColorButtonGreen' => 'rgba(162, 223, 57, 1)',
'backgroundColorButtonHelp' => 'rgba(255, 153, 0, 1)',
'backgroundBlockColor' => 'rgba(236, 239, 241, 1)',
'borderBlockColor' => 'rgba(190, 202, 209, 1)'
],
@ -650,7 +663,8 @@ class init extends common {
'blog' => [
'config' => [
'feeds' => true,
'feedsLabel' => "Syndication RSS"
'feedsLabel' => "Syndication RSS",
'itemsperPage' => 4
],
'posts' => [
'mon-premier-article' => [
@ -669,6 +683,7 @@ class init extends common {
'picturePosition' => 'left',
'hidePicture' => false,
'pictureSize' => 20,
'picturePosition' => 'left',
'publishedOn' => 1548790902,
'state' => true,
'title' => 'Mon premier article',
@ -688,6 +703,7 @@ class init extends common {
'hidePicture' => false,
'picturePosition' => 'right',
'pictureSize' => 40,
'picturePosition' => 'right',
'publishedOn' => 1550432502,
'state' => true,
'title' => 'Mon deuxième article',
@ -707,6 +723,7 @@ class init extends common {
'hidePicture' => false,
'picturePosition' => 'left',
'pictureSize' => 100,
'picturePosition' => 'left',
'publishedOn' => 1550864502,
'state' => true,
'title' => 'Mon troisième article',
@ -721,44 +738,66 @@ class init extends common {
],
],
'galeries' => [
'beaux-paysages' => [
'config' => [
'name' => 'Beaux paysages',
'directory' => self::FILE_DIR.'source/galerie/landscape',
'homePicture' => 'iceberg.jpg',
'sort' => 'SORT_ASC',
'position' => 1
'content' => [
'beaux-paysages' => [
'config' => [
'name' => 'Beaux paysages',
'directory' => self::FILE_DIR.'source/galerie/landscape',
'homePicture' => 'iceberg.jpg',
'sort' => 'SORT_ASC',
'position' => 1
],
'legend' => [
'desertjpg' => 'Un désert',
'icebergjpg' => 'Un iceberg',
'meadowjpg' => 'Une prairie'
],
'positions' => [
'desertjpg' => 3,
'icebergjpg' => 1,
'meadowjpg' => 2
]
],
'legend' => [
'desertjpg' => 'Un désert',
'icebergjpg' => 'Un iceberg',
'meadowjpg' => 'Une prairie'
'espace' => [
'config' => [
'name' => 'Espace',
'directory' => self::FILE_DIR.'source/galerie/space',
'homePicture' => 'nebula.jpg',
'sort' => 'SORT_ASC',
'position' => 2
],
'legend' => [
'earthjpg' => 'La Terre et la Lune',
'cosmosjpg' => 'Le cosmos',
'nebulajpg' => 'Une nébuleuse'
],
'positions' => [
'earthjpg' => 1,
'cosmosjpg' => 3,
'nebulajpg' => 2
]
],
'positions' => [
'desertjpg' => 3,
'icebergjpg' => 1,
'meadowjpg' => 2
]
],
'espace' => [
'config' => [
'name' => 'Espace',
'directory' => self::FILE_DIR.'source/galerie/space',
'homePicture' => 'nebula.jpg',
'sort' => 'SORT_ASC',
'position' => 2
],
'legend' => [
'earthjpg' => 'La Terre et la Lune',
'cosmosjpg' => 'Le cosmos',
'nebulajpg' => 'Une nébuleuse'
],
'positions' => [
'earthjpg' => 1,
'cosmosjpg' => 3,
'nebulajpg' => 2
]
]
'theme' => [
'thumbAlign' => 'center',
'thumbWidth' => '18em',
'thumbHeight' => '15em',
'thumbMargin' => '.5em',
'thumbBorder' => '.1em',
'thumbOpacity' => '.7',
'thumbBorderColor' => 'rgba(221, 221, 221, 1)',
'thumbRadius' => '.3em',
'thumbShadows' => '1px 1px 10px',
'thumbShadowsColor'=> 'rgba(125, 125, 125, 1)',
'legendHeight' => '.375em',
'legendAlign' => 'center',
'legendTextColor' => 'rgba(255, 255, 255, 1)',
'legendBgColor' => 'rgba(0, 0, 0, .6)',
'style' => 'site/data/modules/gallery/galeries.css'
],
'config' => [
'versionData' => '3.0'
],
],
'site-de-zwii' => [
'url' => 'https://zwiicms.fr/',
@ -800,4 +839,3 @@ class init extends common {
]
];
}

18
core/module/page/page.php

@ -258,6 +258,13 @@ class page extends common {
}
// Suppression
else {
// Effacer le dossier du module
$moduleId = $this->getData(['page',$url[0],'moduleId']);
$modulesData = helper::getModules();
if (is_dir($modulesData[$moduleId]['dataDirectory'].'pages/'.$url[0])) {
$this->removeDir( $modulesData[$moduleId]['dataDirectory'].'pages/'.$url[0] );
}
// Effacer la page
$this->deleteData(['page', $url[0]]);
$this->deleteData(['module', $url[0]]);
@ -312,6 +319,17 @@ class page extends common {
if ($this->getData(['module', $this->getUrl(2)]) !== null ) {
$this->setData(['module', $pageId, $this->getData(['module', $this->getUrl(2)])]);
$this->deleteData(['module', $this->getUrl(2)]);
// Renommer le dossier du module
$moduleId = $this->getData(['page',$this->getUrl(2),'moduleId']);
$modulesData = helper::getModules();
if (is_dir($modulesData[$moduleId]['dataDirectory'].'pages/'.$this->getUrl(2))) {
// Placer la feuille de style dans un dossier au nom de la nouvelle instance
mkdir( $modulesData[$moduleId]['dataDirectory'].'pages/'.$pageId );
copy( $modulesData[$moduleId]['dataDirectory'].'pages/'.$this->getUrl(2), $modulesData[$moduleId]['dataDirectory'].'pages/'.$pageId);
$this->removeDir($modulesData[$moduleId]['dataDirectory'].'pages/'.$this->getUrl(2));
// Mettre à jour le nom de la feuille de style
$this->setData(['module',$pageId,'theme','style', $modulesData[$moduleId]['dataDirectory'].'pages/'.$pageId]);
}
}
// Si la page correspond à la page d'accueil, change l'id dans la configuration du site
if($this->getData(['locale', 'homePageId']) === $this->getUrl(2)) {

2
core/module/sitemap/view/index/index.php

@ -63,7 +63,7 @@
foreach($articleIds as $articleId => $article): ?>
<?php if($this->getData(['module',$parentId,'posts',$article,'state']) === true ): ?>
<li>
<a href="<?php echo helper::baseUrl() . $parent. '/' . $article;?>"><?php echo $this->getData(['module',$parentId,'posts',$article,'title']); ?></a>
<a href="<?php echo helper::baseUrl() . $parentId. '/' . $article;?>"><?php echo $this->getData(['module',$parentId,'posts',$article,'title']); ?></a>
</li>
<?php endif; ?>
<?php endforeach;

1
core/module/theme/theme.php

@ -255,6 +255,7 @@ class theme extends common {
'backgroundColorButtonGrey' => $this->getInput('adminColorGrey'),
'backgroundColorButtonRed' => $this->getInput('adminColorRed'),
'backgroundColorButtonGreen'=> $this->getInput('adminColorGreen'),
'backgroundColorButtonHelp'=> $this->getInput('adminColorHelp'),
'fontText' => $this->getInput('adminFontText'),
'fontSize' => $this->getInput('adminFontTextSize'),
'fontTitle' => $this->getInput('adminFontTitle'),

14
core/module/theme/view/admin/admin.php

@ -59,7 +59,7 @@
</div>
</div>
<div class="row">
<div class="col6">
<div class="col4">
<?php echo template::text('adminBackGroundBlockColor', [
'class' => 'colorPicker',
'help' => 'Couleur visible en l\'absence d\'une image.<br />Le curseur horizontal règle le niveau de transparence. La couleur du texte est automatique.',
@ -67,7 +67,7 @@
'value' => $this->getData(['admin', 'backgroundBlockColor'])
]); ?>
</div>
<div class="col6">
<div class="col4">
<?php echo template::text('adminBorderBlockColor', [
'class' => 'colorPicker',
'help' => 'Couleur visible en l\'absence d\'une image.<br />Le curseur horizontal règle le niveau de transparence.',
@ -75,6 +75,14 @@
'value' => $this->getData(['admin', 'borderBlockColor'])
]); ?>
</div>
<div class="col3 offset1">
<?php echo template::text('adminColorHelp', [
'class' => 'colorPicker',
'help' => 'Couleur visible en l\'absence d\'une image.<br />Le curseur horizontal règle le niveau de transparence.',
'label' => 'Bouton Aide',
'value' => $this->getData(['admin', 'backgroundColorButtonHelp'])
]); ?>
</div>
</div>
<div class="row">
<div class="col3">
@ -143,4 +151,4 @@
</div>
</div>
</div>
<?php echo template::formClose(); ?>
<?php echo template::formClose(); ?>

4
core/vendor/tinymce/init.js

@ -97,7 +97,7 @@ tinymce.init({
// Cache la barre de statut
statusbar: false,
// Active le copié collé à partir du Web
paste_data_images: true,
paste_data_images: false,
// Active le copié collé à partir du presse papier
paste_filter_drop: false,
/* Eviter BLOB à tester
@ -296,7 +296,7 @@ tinymce.init({
// Cache la barre de statut
statusbar: false,
// Autorise le copié collé à partir du web
paste_data_images: true,
paste_data_images: false,
// Bloque le dimensionnement des médias (car automatiquement en fullsize avec fitvids pour le responsive)
media_dimensions: true,
// Désactiver la dimension des images

1
core/vendor/zwiico/css/zwiico-codes.css

@ -38,6 +38,7 @@
.zwiico-mimi:before { content: '\e823'; } /* '' */
.zwiico-divide:before { content: '\e824'; } /* '' */
.zwiico-flag:before { content: '\e825'; } /* '' */
.zwiico-search:before { content: '\e826'; } /* '' */
.zwiico-spin:before { content: '\e831'; } /* '' */
.zwiico-twitter:before { content: '\f099'; } /* '' */
.zwiico-facebook:before { content: '\f09a'; } /* '' */

13
core/vendor/zwiico/css/zwiico-embedded.css
File diff suppressed because it is too large
View File

1
core/vendor/zwiico/css/zwiico-ie7-codes.css

@ -38,6 +38,7 @@
.zwiico-mimi { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe823;&nbsp;'); }
.zwiico-divide { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe824;&nbsp;'); }
.zwiico-flag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe825;&nbsp;'); }
.zwiico-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe826;&nbsp;'); }
.zwiico-spin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe831;&nbsp;'); }
.zwiico-twitter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf099;&nbsp;'); }
.zwiico-facebook { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09a;&nbsp;'); }

1
core/vendor/zwiico/css/zwiico-ie7.css

@ -49,6 +49,7 @@
.zwiico-mimi { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe823;&nbsp;'); }
.zwiico-divide { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe824;&nbsp;'); }
.zwiico-flag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe825;&nbsp;'); }
.zwiico-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe826;&nbsp;'); }
.zwiico-spin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe831;&nbsp;'); }
.zwiico-twitter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf099;&nbsp;'); }
.zwiico-facebook { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09a;&nbsp;'); }

15
core/vendor/zwiico/css/zwiico.css

@ -1,11 +1,11 @@
@font-face {
font-family: 'zwiico';
src: url('../font/zwiico.eot?44489499');
src: url('../font/zwiico.eot?44489499#iefix') format('embedded-opentype'),
url('../font/zwiico.woff2?44489499') format('woff2'),
url('../font/zwiico.woff?44489499') format('woff'),
url('../font/zwiico.ttf?44489499') format('truetype'),
url('../font/zwiico.svg?44489499#zwiico') format('svg');
src: url('../font/zwiico.eot?32340763');
src: url('../font/zwiico.eot?32340763#iefix') format('embedded-opentype'),
url('../font/zwiico.woff2?32340763') format('woff2'),
url('../font/zwiico.woff?32340763') format('woff'),
url('../font/zwiico.ttf?32340763') format('truetype'),
url('../font/zwiico.svg?32340763#zwiico') format('svg');
font-weight: normal;
font-style: normal;
}
@ -15,7 +15,7 @@
@media screen and (-webkit-min-device-pixel-ratio:0) {
@font-face {
font-family: 'zwiico';
src: url('../font/zwiico.svg?44489499#zwiico') format('svg');
src: url('../font/zwiico.svg?32340763#zwiico') format('svg');
}
}
*/
@ -94,6 +94,7 @@
.zwiico-mimi:before { content: '\e823'; } /* '' */
.zwiico-divide:before { content: '\e824'; } /* '' */
.zwiico-flag:before { content: '\e825'; } /* '' */
.zwiico-search:before { content: '\e826'; } /* '' */
.zwiico-spin:before { content: '\e831'; } /* '' */
.zwiico-twitter:before { content: '\f099'; } /* '' */
.zwiico-facebook:before { content: '\f09a'; } /* '' */

BIN
core/vendor/zwiico/font/zwiico.eot

2
core/vendor/zwiico/font/zwiico.svg

@ -84,6 +84,8 @@
<glyph glyph-name="flag" unicode="&#xe825;" d="M179 707q0-40-36-61v-707q0-7-5-12t-13-6h-36q-7 0-12 6t-6 12v707q-35 21-35 61 0 30 21 51t50 21 51-21 21-51z m821-36v-425q0-14-7-22t-22-15q-120-65-206-65-34 0-69 12t-60 27-65 27-79 12q-107 0-259-81-10-5-19-5-14 0-25 10t-10 25v415q0 17 17 30 12 8 44 24 132 67 235 67 60 0 112-16t122-49q21-11 49-11 30 0 65 12t62 26 49 26 30 12q15 0 25-10t11-26z" horiz-adv-x="1000" />
<glyph glyph-name="search" unicode="&#xe826;" d="M643 386q0 103-73 176t-177 74-177-74-73-176 73-177 177-73 177 73 73 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 153-31 125-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
<glyph glyph-name="spin" unicode="&#xe831;" d="M46 144l0 0c0 0-1 0-1 0-8 18-15 37-21 55-6 19-11 38-15 58-19 99-8 203 35 298 3 6 10 8 15 5 1 0 2 0 2-1l0 0 80-59c5-3 6-9 4-14-5-12-9-25-12-37-4-13-7-26-9-40-11-67-3-137 23-201 2-5 0-10-4-13l0 0-80-56c-5-4-12-2-16 3-1 0-1 1-1 2l0 0z m120 574l0 0c0 1 0 1 0 1 15 13 30 25 46 37 16 11 33 22 51 31 89 50 192 72 297 60 6-1 10-6 10-13 0-1-1-1-1-2l0 0-31-94c-2-5-8-8-13-7-13 0-27 0-40 0-14-1-27-2-40-4-68-11-133-40-186-84-4-3-10-3-14 0l0 0-79 58c-5 3-6 11-2 16 0 0 1 1 2 1l0 0z m588 65l0 0c0 0 1 0 1 0 17-10 34-21 50-32 16-12 31-25 46-38 74-69 127-160 148-262 2-6-2-12-9-13-1 0-1 0-2 0l0 0-100 1c-5 0-10 4-11 9-3 13-8 26-12 38-5 12-10 25-17 36-31 61-78 113-137 150-5 3-6 8-5 13l0 0 31 92c2 6 9 9 15 7 1 0 2-1 2-1l0 0z m244-535l0 0c0 0 0 0 0 0-4-20-9-39-15-57-7-19-14-37-22-55-44-92-114-170-205-221-6-3-13-1-16 4 0 1-1 2-1 2l0 0-30 94c-2 6 1 12 6 14 11 7 22 15 32 23 11 9 21 18 30 27 49 48 84 109 101 176 2 5 6 8 11 8l0 0 98-1c6 0 11-5 11-11 0-1 0-2 0-3l0 0z m-438-395l0 0c0 0 0 0 0 0-20-2-40-3-60-3-20 0-40 1-59 4-102 12-198 54-276 125-5 4-5 11 0 16 0 0 1 1 1 1l0 0 81 58c5 3 12 2 16-2 10-8 20-16 32-23 11-7 22-14 34-20 62-31 131-45 200-41 6 0 10-3 12-8l0 0 29-92c2-6-1-12-7-14-1-1-2-1-3-1l0 0z" horiz-adv-x="1000" />
<glyph glyph-name="twitter" unicode="&#xf099;" d="M904 622q-37-54-90-93 0-8 0-23 0-73-21-145t-64-139-103-117-144-82-181-30q-151 0-276 81 19-2 43-2 126 0 224 77-59 1-105 36t-64 89q19-3 34-3 24 0 48 6-63 13-104 62t-41 115v2q38-21 82-23-37 25-59 64t-22 86q0 49 25 91 68-83 164-133t208-55q-5 21-5 41 0 75 53 127t127 53q79 0 132-57 61 12 115 44-21-64-80-100 52 6 104 28z" horiz-adv-x="928.6" />

BIN
core/vendor/zwiico/font/zwiico.ttf

BIN
core/vendor/zwiico/font/zwiico.woff

BIN
core/vendor/zwiico/font/zwiico.woff2

49
module/blog/blog.php

@ -15,11 +15,11 @@
class blog extends common {
const VERSION = '4.5';
const VERSION = '5.0';
const REALNAME = 'Blog';
const DELETE = true;
const UPDATE = '0.0';
const DATADIRECTORY = []; // Contenu localisé inclus par défaut (page.json et module.json)
const DATADIRECTORY = ''; // Contenu localisé inclus par défaut (page.json et module.json)
const EDIT_OWNER = 'owner';
const EDIT_GROUP = 'group';
@ -75,6 +75,15 @@ class blog extends common {
'right' => 'À droite ',
];
// Nombre d'objets par page
public static $ItemsList = [
4 => '4 articles',
8 => '8 articles',
12 => '12 articles',
16 => '16 articles',
22 => '22 articles'
];
//Paramètre longueur maximale des commentaires en nb de caractères
public static $commentLength = [
'500' => '500',
@ -94,7 +103,23 @@ class blog extends common {