Compare commits
225 Commits
Author | SHA1 | Date | |
---|---|---|---|
7a4b1589af | |||
da9d8d9d62 | |||
e3bc6ce1d3 | |||
ecd0f5827a | |||
c8be7f84a4 | |||
826e6264eb | |||
cc0b6edb34 | |||
0e564a24c9 | |||
7da12be242 | |||
095e317f3b | |||
67eeef26a0 | |||
2273812b2d | |||
4842e3f62b | |||
01c69f0712 | |||
baa5b762e2 | |||
76cd034fd3 | |||
5ea3e12e26 | |||
141a22b6ff | |||
3f1d19f53e | |||
dfceb941db | |||
9db6e5ac13 | |||
12c7682a26 | |||
5d282a4cc4 | |||
a8bf3ec857 | |||
bb9573a82f | |||
15534ba9fa | |||
6aecf5e796 | |||
25f81af87b | |||
6daeb9e474 | |||
14068d24a8 | |||
c78b43f7b0 | |||
5986e8a378 | |||
dd7ee7f2ef | |||
0f1bd2377e | |||
5326b94c04 | |||
17f8fb3b58 | |||
ceca7b10b5 | |||
89c0ae5ead | |||
89be290465 | |||
3c3b122fe4 | |||
61369e7ad1 | |||
2c31e1aefc | |||
eb28a76636 | |||
86afa350fa | |||
6864132afc | |||
49ab83efd3 | |||
27d7b07239 | |||
48ee5c5e1b | |||
be87e4c740 | |||
7f6d010b9c | |||
62437c8fac | |||
2d3b999d27 | |||
72655e6673 | |||
de0749b51b | |||
3598ab2954 | |||
67d94bce61 | |||
fa158effc3 | |||
3e3781bc28 | |||
bc70f39ba5 | |||
998eb3b8a1 | |||
8fd4d2f9bc | |||
f04bc17e28 | |||
ca0561d97c | |||
2251d34122 | |||
eb832f42e5 | |||
83b4103788 | |||
1b9c65189d | |||
c2281b93ef | |||
1b3601ce87 | |||
78905834bd | |||
c270546a9b | |||
ad15e8b827 | |||
f84bcbb878 | |||
62d4d8243a | |||
3e238af50a | |||
54a0add941 | |||
d84f94817b | |||
2939545c8c | |||
c4dc05a4c1 | |||
87b763ddae | |||
c745711a2e | |||
49c8f567e6 | |||
2a1b5e2900 | |||
f2ab357654 | |||
8ad199ee3d | |||
6ddadfd8e5 | |||
cee8b784a4 | |||
f8e2dd5fab | |||
20a4cc45d7 | |||
8db6367cba | |||
090a4318b3 | |||
d17fa93bb7 | |||
f030c2f064 | |||
323cea2e0b | |||
f81fad1c49 | |||
ad3e9aba65 | |||
b035efb710 | |||
ffc373e68f | |||
e42f0bd538 | |||
b86f7fbd4a | |||
96b12bf0d4 | |||
97e50f245c | |||
9d32fa2b86 | |||
5937915d21 | |||
ca15d8f362 | |||
f097111d70 | |||
177541bef3 | |||
3f2a33a7fe | |||
cd9c62b3a3 | |||
4a2d59e4b8 | |||
c702c41fed | |||
b3e3ead5ac | |||
9bfa8280fd | |||
55b4e7335d | |||
f7c2aab390 | |||
cdab4659a6 | |||
fc69015448 | |||
9e656294a6 | |||
8e91faf2d2 | |||
36c8619b63 | |||
d77afce37b | |||
bca34949a9 | |||
07baed8713 | |||
6687c324e5 | |||
03d1dacb88 | |||
77d8296642 | |||
999370646b | |||
d8f4af660f | |||
5f146bfbdc | |||
950ba8cc9d | |||
2448e50793 | |||
5e29699563 | |||
b78fc84a89 | |||
665c8dea6d | |||
159297e421 | |||
fc502a1c64 | |||
457c8e0f66 | |||
660398bad7 | |||
fad19249db | |||
060aa9e4d5 | |||
9052247e53 | |||
df06b1f7ba | |||
8d324f9c79 | |||
f18d4eee1d | |||
fd51122918 | |||
15bd0400ea | |||
1147b5c5e1 | |||
2cbd3d5923 | |||
11753b4476 | |||
f2a6d35351 | |||
c4a23de744 | |||
a47cbe49fe | |||
5f5815cbd9 | |||
e811660d7c | |||
10083e7ee8 | |||
d89455d86a | |||
5e7c9597cd | |||
49180ab4ed | |||
c4fc466876 | |||
75203d6e8e | |||
f61c2a977a | |||
a02ce894c8 | |||
2d92bd3963 | |||
b8c0b47faf | |||
2a8563ce9a | |||
f924a2b2b3 | |||
5846c111fe | |||
f86f38d8b0 | |||
68d0aaff84 | |||
f5f04c90d9 | |||
d8525bf123 | |||
25d6192e0e | |||
90a5a8a96a | |||
69852c82bc | |||
f3ae03a133 | |||
9b5cc38c94 | |||
890cf97127 | |||
87a1f2cd18 | |||
50fc319afd | |||
a2f53e1e58 | |||
e6b9cb16b5 | |||
6f2447533c | |||
6f946b32ac | |||
33e2dca864 | |||
a890a70beb | |||
e92c709796 | |||
bcf75ebfbd | |||
c8a6a21f9c | |||
a176556081 | |||
949373b39e | |||
e26beac06c | |||
4bfc75288f | |||
d1e4c9761f | |||
dbafb6f4bb | |||
7ad8e3ea05 | |||
e142f961d9 | |||
5c97b5cea6 | |||
d21cfcba78 | |||
c9300e5979 | |||
8cefdd027d | |||
c3ade0fe0f | |||
d3284c67d8 | |||
6b3085ef27 | |||
748e6d0873 | |||
a9abe8aaa1 | |||
1fbf91a9cb | |||
9485ebe4cb | |||
88e7cb8761 | |||
857a6ff808 | |||
2d6bbcec9e | |||
748bb3befb | |||
29d6b1c758 | |||
696ca111b7 | |||
a8381b4c18 | |||
0895abc30b | |||
3539c3b04e | |||
77aa46f753 | |||
42ef876963 | |||
3bfcaa4187 | |||
5a5e9dc72c | |||
4606d987b2 | |||
b403816c88 | |||
470c017184 | |||
0720db7b17 | |||
1a61f34c19 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -9,3 +9,5 @@ site/i18n/*.json
|
|||||||
core/vendor/tinymce/link_list.json
|
core/vendor/tinymce/link_list.json
|
||||||
robots.txt
|
robots.txt
|
||||||
sitemap.xml
|
sitemap.xml
|
||||||
|
.gitignore
|
||||||
|
core/module/config/tool/data.key
|
11
.htaccess
11
.htaccess
@ -32,5 +32,16 @@ Options -Indexes
|
|||||||
Options -MultiViews
|
Options -MultiViews
|
||||||
</IfModule>
|
</IfModule>
|
||||||
|
|
||||||
|
# Enlever le slash final des URL
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
|
RewriteCond %{REQUEST_URI} ^(.+)/$
|
||||||
|
RewriteRule ^ %1 [R=301,L]
|
||||||
|
|
||||||
# ne pas supprimer la ligne URL rewriting !
|
# ne pas supprimer la ligne URL rewriting !
|
||||||
# URL rewriting
|
# URL rewriting
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
146
CHANGES.md
146
CHANGES.md
@ -1,14 +1,154 @@
|
|||||||
# Changelog
|
# Notes de mises à jour
|
||||||
|
|
||||||
|
## Versions 13.4.00
|
||||||
|
** Améliorations :**
|
||||||
|
- Change le mode d'authentification, le hash du mot de passe n'est plus stocké dans un cookie.
|
||||||
|
- Le sélecteur de fichier affiche le chemin d'accès du fichier présent dans le champ dans le gestionnaire de fichier.
|
||||||
|
- Slider en version 7.1, corrections diverses.
|
||||||
|
- Connexion persistante renforcée.
|
||||||
|
- Script Datatables.net filtrage des éléments, nombre d'éléments et position sur l'écran.
|
||||||
|
- Slider 7.2, le dossier sélectionné est affiché par défaut dans la page update.
|
||||||
|
- Augmente la dimension des miniatures après le transfert dans RFM.
|
||||||
|
- Search 3.3 n'effectue qu'une seule lecture du fichier module.json en prévention des bots agressifs.
|
||||||
|
- Modification du contenu de robots.txt afin de n'autoriser que les moteurs de recherche et d'interdire les bots.
|
||||||
|
- Suppression des cookies mémorisant le dernier onglet affiché dans l'édition de la page et dans la configuration du site. Cette information est désormais stockée dans la fiche de l'utilisateur connecté.
|
||||||
|
|
||||||
|
**Corrections : **
|
||||||
|
- Change les paramètres du cookie de consentement.
|
||||||
|
- Isole la session dans l'onglet actif.
|
||||||
|
- Edition de page, delete et duplicate renvoyant vers une mauvaise page.
|
||||||
|
- Supprime un warning à la création d'une page.
|
||||||
|
- Bouton de génération du site inopérant.
|
||||||
|
- Affichage intempestif des boutons de navigation de pages dans les vues des modules.
|
||||||
|
|
||||||
|
|
||||||
|
## Versions 13.3.06
|
||||||
|
** Corrections : **
|
||||||
|
- Corrige un bug de sécurité dans la gestion des profils.
|
||||||
|
- Répare le bouton d'effacement en mode édition d'une page.
|
||||||
|
- Corrige la feuille de style du slider les balises H1, H3 et A.
|
||||||
|
- Corrige l'absence de contenu de page lorsque le module est en position libre et que le mot clé [MODULE] n'a pas été inséré.
|
||||||
|
- Corrige l'option "Rester connecter sur ce navigateur' dont la connexion est désormais réellement persistante.
|
||||||
|
- Supprime un slash à la fin de l'URL du catalogue.
|
||||||
|
- Eviter un warning lors de la création d'une nouvelle page.
|
||||||
|
|
||||||
|
## Versions 13.3.05
|
||||||
|
** Corrections : **
|
||||||
|
- Corrige la génération des miniatures au format avif et webp.
|
||||||
|
- Corrige le filtre FLOAT du helper qui supprimait la virgule flottante.
|
||||||
|
- Corrige des bugs dans le module Slider qui passe en version 7.0, ajout d'une option d'étiquette sous les images.
|
||||||
|
|
||||||
|
** Modifications : **
|
||||||
|
- Mise à jour du module News 5.9, taille d'un bouton.
|
||||||
|
- Mise à jour du module Blog 7.10, bloque la soumission d'un commentaire vide.
|
||||||
|
- Ajoute les filtres DATE et TIME pour l'affichage correct des champs de formulaire.
|
||||||
|
|
||||||
|
## Versions 13.3.04
|
||||||
|
|
||||||
|
** Correction : **
|
||||||
|
- Mauvaise génération du descripteur d'un module lors de sa sauvegarde.
|
||||||
|
|
||||||
|
## Versions 13.3.03
|
||||||
|
|
||||||
|
** Corrections :**
|
||||||
|
- Le bug d'édition des pages avec Firefox est corrigé grâce à la suppression d'une commande forçant le chargement lassif des images dans core.js.php
|
||||||
|
- Dans la configuration, l'option Apache URL intelligente ne s'active que si le serveur est Apache et que le module Rewriter est actif. Ce qui exclut les autres serveurs non compatibles comme Nginx, Caddy etc.
|
||||||
|
- L'ajout d'un slash en fin d'adresse avec la réécriture active provoquait une mauvaise détermination des adresses des images dans TinyMCE. Résolution : une directive htaccess supprime tous les slashes en fin d'adresse.
|
||||||
|
- Lorsque la page est ouverte en édition, un clic sur le bouton édition dans la barre d'administration affiche une erreur, le lien étant incorrect. Afin d'éviter cette erreur et une redondance, le bouton d'édition est masqué lorsque la page est éditée.
|
||||||
|
- Quand des éléments inutiles sont ajoutés à l'adresse d'une page, une erreur 403 est levée.
|
||||||
|
|
||||||
|
## Versions 13.3.01 - 13.2.02
|
||||||
|
|
||||||
|
Livraison des modules blogs et news corrigeant un problème de flux RSS avec des méta vides.
|
||||||
|
|
||||||
|
## Version 13.3.00
|
||||||
|
|
||||||
|
Cette modification évite les problèmes d'édition de langues différentes dans des onglets différents du même navigateur.
|
||||||
|
|
||||||
|
## Version 13.2.02
|
||||||
|
|
||||||
|
Corrige un warning quand un module blog ou news ne contient pas d'article.
|
||||||
|
|
||||||
|
## Version 13.2.01
|
||||||
|
|
||||||
|
### Correction
|
||||||
|
|
||||||
|
Modification de la fonction d'écriture des données de la classe jsonDB dans le but de s'assurer de l'intégrité des données écrites. Un trafic intense en pointe sur des fichiers volumineux et sur un serveur peu puissant pouvait occasionner des erreurs d'écriture ou un mauvais formatage des données json.
|
||||||
|
|
||||||
|
## Version 13.1.08
|
||||||
|
|
||||||
|
### Corrections
|
||||||
|
|
||||||
|
- Corrige des erreurs quand une page parente ou des pages enfants ont des permissions limitées.
|
||||||
|
- Module Search 3.1 : initialisation du module après installation dans une page sans configuration par l'utilisateur.
|
||||||
|
|
||||||
|
### Améliorations
|
||||||
|
|
||||||
|
- Sauvegarde de l'état des sélecteurs dans les tables des fontes et des utilisateurs.
|
||||||
|
- Ajoute des contrôles d'intégrité des bases de données Json lors des opérations de chargement et de sauvegarde.
|
||||||
|
- Fournit une interface pour le contrôle des sauvegardes automatisées et de leur nettoyage par script CRON.
|
||||||
|
|
||||||
|
## Version 13.1.07
|
||||||
|
|
||||||
|
### Corrections
|
||||||
|
|
||||||
|
- Corrige une dépréciation de la sortie de la fonction Usort dans RFM.
|
||||||
|
- Module slider 6.4 : corrige plusieurs bugs dans les fonctions de tri
|
||||||
|
|
||||||
|
## Version 13.1.06
|
||||||
|
|
||||||
|
### Corrections
|
||||||
|
|
||||||
|
- Ajout d'utilisateur, étiquette non sauvegardée.
|
||||||
|
- Slider, corrige un tri non pris en compte.
|
||||||
|
|
||||||
|
## Version 13.1.05
|
||||||
|
|
||||||
|
### Corrections
|
||||||
|
|
||||||
|
- Corrige définitivement la fonction delete de la classe dot.
|
||||||
|
- Branche de mise à jour de la version 13.1.04 incorrecte.
|
||||||
|
|
||||||
|
## Version 13.1.04
|
||||||
|
|
||||||
|
### Corrections
|
||||||
|
|
||||||
|
- Evite une notice dans l'onglet social de la configuration lorsque l'image opengraph n'est pas spécifiée.
|
||||||
|
- Corrige une erreur dans la classe dot (fonction delete appelée statiquement)
|
||||||
|
- Ne redirige pas vers une page d'erreur (403 ou 404) après un login.
|
||||||
|
|
||||||
|
### Améliorations
|
||||||
|
|
||||||
|
- Mise à jour en ligne :restauration de la réécriture dans le fichier .htaccess de la racine, utilisation d'un fichier drapeau *.rewrite* pour conserver l'état de la réécriture afin de dédier la variable ```data``` (XHR) aux messages d'erreur.
|
||||||
|
- Journalise les erreurs de mise à jour automatique.
|
||||||
|
|
||||||
|
|
||||||
|
## Version 13.1.03
|
||||||
|
|
||||||
|
### Corrections
|
||||||
|
|
||||||
|
- Corrige un format de date dans la génération du sitemap.
|
||||||
|
- Limite l'affichage de l'icône du gestionnaire de fichiers dans le menu aux membres simples.
|
||||||
|
- Module blog ; format d'une variable de temps.
|
||||||
|
- Modules Blog et news, corrige un bug de paramètre de localisation erroné.
|
||||||
|
- Mot de passe oublié, une variable non définie affichant un warning.
|
||||||
|
|
||||||
|
### Améliorations
|
||||||
|
|
||||||
|
- Thèmes ; fontes : les fontes attribuées sont dans le thème administrateur sont prises en compte dans le blocage de l'effacement.
|
||||||
|
- Optimisation du code de discrimination.
|
||||||
|
|
||||||
## Version 13.1.02
|
## Version 13.1.02
|
||||||
|
|
||||||
### Corrections
|
### Corrections
|
||||||
|
|
||||||
- Thème ; fontes : corrige un problème lors de l'installation et de la désinstallation d'une fonte sous forme de fichier woff.
|
- Thème ; fontes : corrige un problème lors de l'installation et de la désinstallation d'une fonte sous forme de fichier woff.
|
||||||
- Thème ; fontes : corrige un bug de redirection vers la liste des fontes après édition ou ajout.
|
- Thème ; fontes : corrige un bug de redirection vers la liste des fontes après édition ou ajout.
|
||||||
- Utilisateur ; ajout : corrige la non prise en compte de langue.
|
- Utilisateur ; ajout : corrige la non prise en compte de la langue.
|
||||||
- Supprime le script imagemap non tenu à jour et bogué.
|
- Supprime le script imagemap non tenu à jour et bogué.
|
||||||
|
|
||||||
### Amélioration
|
### Amélioration
|
||||||
|
|
||||||
- Thèmes ; fontes : filtrage et tri des fontes installées.
|
- Thèmes ; fontes : filtrage et tri des fontes installées.
|
||||||
|
|
||||||
## Version 13.1.01
|
## Version 13.1.01
|
||||||
@ -698,7 +838,7 @@ TinyMCE, URL absolues, transformation autorisée en URL relative si effectuée m
|
|||||||
- Modifications :
|
- Modifications :
|
||||||
- Gestion des cookies :
|
- Gestion des cookies :
|
||||||
- Options de personnalisation du message d'acceptation des cookies, acceptation ou refus du cookie Google Analytics, affichage de la page des mentions légales.
|
- Options de personnalisation du message d'acceptation des cookies, acceptation ou refus du cookie Google Analytics, affichage de la page des mentions légales.
|
||||||
- Etiquette dans le footer permettant d'afficher la popup des cookies.
|
- Étiquette dans le footer permettant d'afficher la popup des cookies.
|
||||||
- Thème :
|
- Thème :
|
||||||
- Disposition des options de configuration du site.
|
- Disposition des options de configuration du site.
|
||||||
- Bannière : le contenu peut être personnalisé à l'aide d'un éditeur. La bannière au-dessus du site peut s'étendre sur la largeur de la page.
|
- Bannière : le contenu peut être personnalisé à l'aide d'un éditeur. La bannière au-dessus du site peut s'étendre sur la largeur de la page.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# ZwiiCMS 13.1.02
|
# ZwiiCMS 13.4.00 version de test
|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# ZwiiCMS 13.1.02
|
# ZwiiCMS 13.4.00 test version
|
||||||
|
|
||||||
Zwii is a database-less (flat-file) CMS that allows you to easily create and manage a web site without any programming knowledge.
|
Zwii is a database-less (flat-file) CMS that allows you to easily create and manage a web site without any programming knowledge.
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ class helper
|
|||||||
|
|
||||||
/** Filtres personnalisés */
|
/** Filtres personnalisés */
|
||||||
const FILTER_BOOLEAN = 1;
|
const FILTER_BOOLEAN = 1;
|
||||||
const FILTER_DATETIME = 2;
|
const FILTER_DATETIME = 2; // filtre pour le champ de formulaire A conserver pour la compatibilité
|
||||||
const FILTER_FLOAT = 3;
|
const FILTER_FLOAT = 3;
|
||||||
const FILTER_ID = 4;
|
const FILTER_ID = 4;
|
||||||
const FILTER_INT = 5;
|
const FILTER_INT = 5;
|
||||||
@ -16,8 +16,14 @@ class helper
|
|||||||
const FILTER_PASSWORD = 7;
|
const FILTER_PASSWORD = 7;
|
||||||
const FILTER_STRING_LONG = 8;
|
const FILTER_STRING_LONG = 8;
|
||||||
const FILTER_STRING_SHORT = 9;
|
const FILTER_STRING_SHORT = 9;
|
||||||
const FILTER_TIMESTAMP = 10;
|
const FILTER_TIMESTAMP = 10; // Saisie d'une date en locatime
|
||||||
const FILTER_URL = 11;
|
const FILTER_URL = 11;
|
||||||
|
const FILTER_DATE = 12; // filtre pour le champ de formulaire
|
||||||
|
const FILTER_TIME = 13; // filtre pour le champ de formulair
|
||||||
|
const FILTER_MONTH = 14; // filtre pour le champ de formulair
|
||||||
|
const FILTER_YEAR = 16; // filtre pour le champ de formulair
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -29,12 +35,12 @@ class helper
|
|||||||
|
|
||||||
// La traduction existe déjà dans le core
|
// La traduction existe déjà dans le core
|
||||||
/*
|
/*
|
||||||
if (array_key_exists($text, core::$dialog) === false && !empty($text)) {
|
if (array_key_exists($text, core::$dialog) === false && !empty($text)) {
|
||||||
$dialogues = json_decode(file_get_contents('core/module/install/ressource/i18n/fr_FR.json' ), true);
|
$dialogues = json_decode(file_get_contents('core/module/install/ressource/i18n/fr_FR.json' ), true);
|
||||||
$data = array_merge($dialogues,[$text => '']);
|
$data = array_merge($dialogues,[$text => '']);
|
||||||
file_put_contents ('core/module/install/ressource/i18n/fr_FR.json', json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT), LOCK_EX);
|
file_put_contents ('core/module/install/ressource/i18n/fr_FR.json', json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT), LOCK_EX);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
return (array_key_exists($text, core::$dialog) && !empty(core::$dialog[$text]) ? core::$dialog[$text] : $text);
|
return (array_key_exists($text, core::$dialog) && !empty(core::$dialog[$text]) ? core::$dialog[$text] : $text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,7 +83,7 @@ class helper
|
|||||||
// Créer la variable
|
// Créer la variable
|
||||||
$data = array_merge($data, [$text => '']);
|
$data = array_merge($data, [$text => '']);
|
||||||
}
|
}
|
||||||
file_put_contents('site/i18n/' . $to . '.json', json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT), LOCK_EX);
|
file_put_contents('site/i18n/' . $to . '.json', json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -338,13 +344,12 @@ class helper
|
|||||||
{
|
{
|
||||||
// N'interroge que le serveur Apache
|
// N'interroge que le serveur Apache
|
||||||
if (strpos($_SERVER["SERVER_SOFTWARE"], 'Apache') > 0) {
|
if (strpos($_SERVER["SERVER_SOFTWARE"], 'Apache') > 0) {
|
||||||
self::$rewriteStatus === false;
|
self::$rewriteStatus = false;
|
||||||
} elseif (self::$rewriteStatus === null) {
|
} else {
|
||||||
// Ouvre et scinde le fichier .htaccess
|
// Ouvre et scinde le fichier .htaccess
|
||||||
$htaccess = explode('# URL rewriting', file_get_contents('.htaccess'));
|
$htaccess = explode('# URL rewriting', file_get_contents('.htaccess'));
|
||||||
// Retourne un boolean en fonction du contenu de la partie réservée à l'URL rewriting
|
// Retourne un boolean en fonction du contenu de la partie réservée à l'URL rewriting
|
||||||
//self::$rewriteStatus = (empty($htaccess[1]) === false);
|
self::$rewriteStatus = (strpos($htaccess[1], 'RewriteEngine on') !== false);
|
||||||
self::$rewriteStatus = (strpos($htaccess[1], 'RewriteEngine on') > 0) ? true : false;
|
|
||||||
}
|
}
|
||||||
return self::$rewriteStatus;
|
return self::$rewriteStatus;
|
||||||
}
|
}
|
||||||
@ -368,7 +373,7 @@ class helper
|
|||||||
$version = helper::getOnlineVersion($channel);
|
$version = helper::getOnlineVersion($channel);
|
||||||
$update = false;
|
$update = false;
|
||||||
if (!empty($version)) {
|
if (!empty($version)) {
|
||||||
$update = version_compare(common::ZWII_VERSION, $version) === -1;
|
$update = version_compare(common::ZWII_VERSION, $version) == -1;
|
||||||
}
|
}
|
||||||
return $update;
|
return $update;
|
||||||
}
|
}
|
||||||
@ -390,10 +395,10 @@ class helper
|
|||||||
'text' => self::relativeLuminanceW3C($rgba) > .22 ? "#222" : "#DDD",
|
'text' => self::relativeLuminanceW3C($rgba) > .22 ? "#222" : "#DDD",
|
||||||
'rgb' => 'rgb(' . $rgba[0] . ',' . $rgba[1] . ',' . $rgba[2] . ')',
|
'rgb' => 'rgb(' . $rgba[0] . ',' . $rgba[1] . ',' . $rgba[2] . ')',
|
||||||
'invert' => 'rgba (' .
|
'invert' => 'rgba (' .
|
||||||
($rgba[0] < 128 ? 255 : 0) . ',' .
|
($rgba[0] < 128 ? 255 : 0) . ',' .
|
||||||
($rgba[1] < 128 ? 255 : 0) . ',' .
|
($rgba[1] < 128 ? 255 : 0) . ',' .
|
||||||
($rgba[1] < 128 ? 255 : 0) . ',' .
|
($rgba[1] < 128 ? 255 : 0) . ',' .
|
||||||
($rgba[0] < 128 ? 255 : 0) . ')'
|
($rgba[0] < 128 ? 255 : 0) . ')'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -403,8 +408,8 @@ class helper
|
|||||||
*/
|
*/
|
||||||
public static function deleteCookie($cookieKey)
|
public static function deleteCookie($cookieKey)
|
||||||
{
|
{
|
||||||
unset($_COOKIE[$cookieKey]);
|
|
||||||
setcookie($cookieKey, '', time() - 3600, helper::baseUrl(false, false), '', false, true);
|
setcookie($cookieKey, '', time() - 3600, helper::baseUrl(false, false), '', false, true);
|
||||||
|
unset($_COOKIE[$cookieKey]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -427,7 +432,8 @@ class helper
|
|||||||
$text = (int) $date->format('U');
|
$text = (int) $date->format('U');
|
||||||
break;
|
break;
|
||||||
case self::FILTER_FLOAT:
|
case self::FILTER_FLOAT:
|
||||||
$text = filter_var($text, FILTER_SANITIZE_NUMBER_FLOAT);
|
$text = str_replace(',', '.', $text); // Remplacer les virgules par des points
|
||||||
|
$text = filter_var($text, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
|
||||||
$text = (float) $text;
|
$text = (float) $text;
|
||||||
break;
|
break;
|
||||||
case self::FILTER_ID:
|
case self::FILTER_ID:
|
||||||
@ -474,6 +480,11 @@ class helper
|
|||||||
case self::FILTER_URL:
|
case self::FILTER_URL:
|
||||||
$text = filter_var($text, FILTER_SANITIZE_URL);
|
$text = filter_var($text, FILTER_SANITIZE_URL);
|
||||||
break;
|
break;
|
||||||
|
case self::FILTER_DATE:
|
||||||
|
$text = date('Y-m-d', $text);
|
||||||
|
break;
|
||||||
|
case self::FILTER_TIME:
|
||||||
|
$text = date('H:i', $text);
|
||||||
}
|
}
|
||||||
return $text;
|
return $text;
|
||||||
}
|
}
|
||||||
|
@ -141,7 +141,7 @@ class Dot implements \ArrayAccess, \Iterator, \Countable
|
|||||||
} elseif (is_array($key)) {
|
} elseif (is_array($key)) {
|
||||||
// Iterate array of paths
|
// Iterate array of paths
|
||||||
foreach ($key as $k) {
|
foreach ($key as $k) {
|
||||||
self::delete($k);
|
self::deleteValue($array, $k);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,12 @@ class JsonDb extends \Prowebcraft\Dot
|
|||||||
protected $db = '';
|
protected $db = '';
|
||||||
protected $data = null;
|
protected $data = null;
|
||||||
protected $config = [];
|
protected $config = [];
|
||||||
|
// Tentative d'encodage après échec
|
||||||
|
const MAX_JSON_ENCODE_ATTEMPTS = 5;
|
||||||
|
// Tentative d'écriture après échec
|
||||||
|
const MAX_FILE_WRITE_ATTEMPTS = 5;
|
||||||
|
// Délais entre deux tentaives
|
||||||
|
const RETRY_DELAY_SECONDS = 1;
|
||||||
|
|
||||||
public function __construct($config = [])
|
public function __construct($config = [])
|
||||||
{
|
{
|
||||||
@ -121,10 +127,10 @@ class JsonDb extends \Prowebcraft\Dot
|
|||||||
} else {
|
} else {
|
||||||
if ($this->config['backup']) {
|
if ($this->config['backup']) {
|
||||||
try {
|
try {
|
||||||
//todo make backup of database
|
|
||||||
copy($this->config['dir'] . DIRECTORY_SEPARATOR . $this->config['name'], $this->config['dir'] . DIRECTORY_SEPARATOR . $this->config['name'] . '.backup');
|
copy($this->config['dir'] . DIRECTORY_SEPARATOR . $this->config['name'], $this->config['dir'] . DIRECTORY_SEPARATOR . $this->config['name'] . '.backup');
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
|
error_log('Erreur de chargement : ' . $e);
|
||||||
|
exit('Erreur de chargement : ' . $e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -142,20 +148,41 @@ class JsonDb extends \Prowebcraft\Dot
|
|||||||
*/
|
*/
|
||||||
public function save()
|
public function save()
|
||||||
{
|
{
|
||||||
//$v = json_encode($this->data, JSON_UNESCAPED_UNICODE );
|
// Encode les données au format JSON avec les options spécifiées
|
||||||
$v = json_encode($this->data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT);
|
//$encoded_data = json_encode($this->data, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT | JSON_PRETTY_PRINT);
|
||||||
$l = strlen($v);
|
$encoded_data = json_encode($this->data, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT);
|
||||||
$t = 0;
|
|
||||||
while ($t < 5) {
|
// Vérifie la longueur de la chaîne JSON encodée
|
||||||
$w = file_put_contents($this->db, $v); // Multi user get a locker
|
$encoded_length = strlen($encoded_data);
|
||||||
if ($w == $l) {
|
|
||||||
|
// Initialise le compteur de tentatives
|
||||||
|
$attempt = 0;
|
||||||
|
|
||||||
|
// Tente d'encoder les données en JSON et de les sauvegarder jusqu'à 5 fois en cas d'échec
|
||||||
|
while ($attempt < 5) {
|
||||||
|
// Essaye d'écrire les données encodées dans le fichier de base de données
|
||||||
|
$write_result = file_put_contents($this->db, $encoded_data, LOCK_EX); // Les utilisateurs multiples obtiennent un verrou
|
||||||
|
|
||||||
|
// Vérifie si l'écriture a réussi
|
||||||
|
if ($write_result === $encoded_length) {
|
||||||
|
// Sort de la boucle si l'écriture a réussi
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$t++;
|
|
||||||
}
|
// Incrémente le compteur de tentatives
|
||||||
if ($w !== $l) {
|
$attempt++;
|
||||||
exit('Erreur d\'écriture, les données n\'ont pas été sauvegardées');
|
|
||||||
|
// Attente
|
||||||
|
sleep(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Vérifie si l'écriture a échoué même après plusieurs tentatives
|
||||||
|
if ($write_result !== $encoded_length) {
|
||||||
|
// Enregistre un message d'erreur dans le journal des erreurs
|
||||||
|
error_log('Erreur d\'écriture, les données n\'ont pas été sauvegardées.');
|
||||||
|
|
||||||
|
// Affiche un message d'erreur et termine le script
|
||||||
|
exit('Erreur d\'écriture, les données n\'ont pas été sauvegardées.');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -82,17 +82,25 @@ class layout extends common
|
|||||||
$content = 'col' . $blocks[1];
|
$content = 'col' . $blocks[1];
|
||||||
$blockright = 'col' . $blocks[2];
|
$blockright = 'col' . $blocks[2];
|
||||||
}
|
}
|
||||||
// Page pleine pour la configuration des modules et l'édition des pages sauf l'affichage d'un article de blog
|
// Toujours en pleine page pour la configuration des modules et l'édition des pages sauf l'affichage d'un article de blog
|
||||||
$pattern = ['config', 'edit', 'add', 'comment', 'data'];
|
$pattern = ['config', 'edit', 'add', 'comment', 'data', 'option', 'theme', 'comment', 'article', 'data', 'gallery', 'update', 'users', 'validate'];
|
||||||
if (
|
if (
|
||||||
(sizeof($blocks) === 1 ||
|
(sizeof($blocks) === 1 ||
|
||||||
in_array($this->getUrl(1), $pattern))
|
in_array($this->getUrl(1), $pattern))
|
||||||
) { // Pleine page en mode configuration
|
) { // Pleine page en mode configuration
|
||||||
if ($this->getData(['page', $this->getUrl(0), 'navLeft']) === 'top' || $this->getData(['page', $this->getUrl(0), 'navRight']) === 'top') {
|
if (
|
||||||
|
($this->getData(['page', $this->getUrl(0), 'navLeft']) === 'top'
|
||||||
|
|| $this->getData(['page', $this->getUrl(0), 'navRight']) === 'top')
|
||||||
|
&& in_array($this->getUrl(1), $pattern) === false
|
||||||
|
) {
|
||||||
$this->showNavButtons('top');
|
$this->showNavButtons('top');
|
||||||
}
|
}
|
||||||
$this->showContent();
|
$this->showContent();
|
||||||
if ($this->getData(['page', $this->getUrl(0), 'navLeft']) === 'bottom' || $this->getData(['page', $this->getUrl(0), 'navRight']) === 'bottom') {
|
if (
|
||||||
|
($this->getData(['page', $this->getUrl(0), 'navLeft']) === 'bottom'
|
||||||
|
|| $this->getData(['page', $this->getUrl(0), 'navRight']) === 'bottom')
|
||||||
|
&& in_array($this->getUrl(1), $pattern) === false
|
||||||
|
) {
|
||||||
$this->showNavButtons('bottom');
|
$this->showNavButtons('bottom');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -151,7 +159,7 @@ class layout extends common
|
|||||||
}
|
}
|
||||||
echo '</div>';
|
echo '</div>';
|
||||||
}
|
}
|
||||||
echo '</main></section>';
|
echo '</section></main>';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -330,7 +338,7 @@ class layout extends common
|
|||||||
// Affichage du lien de connexion
|
// Affichage du lien de connexion
|
||||||
if (
|
if (
|
||||||
($this->getData(['theme', 'footer', 'loginLink'])
|
($this->getData(['theme', 'footer', 'loginLink'])
|
||||||
and $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD')
|
and $this->isConnected() === false
|
||||||
)
|
)
|
||||||
or $this->getUrl(0) === 'theme'
|
or $this->getUrl(0) === 'theme'
|
||||||
) {
|
) {
|
||||||
@ -493,7 +501,7 @@ class layout extends common
|
|||||||
// Lien de connexion
|
// Lien de connexion
|
||||||
if (
|
if (
|
||||||
($this->getData(['theme', 'menu', 'loginLink'])
|
($this->getData(['theme', 'menu', 'loginLink'])
|
||||||
and $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD')
|
and $this->isConnected() === false
|
||||||
)
|
)
|
||||||
or $this->getUrl(0) === 'theme'
|
or $this->getUrl(0) === 'theme'
|
||||||
) {
|
) {
|
||||||
@ -506,7 +514,7 @@ class layout extends common
|
|||||||
}
|
}
|
||||||
// Commandes pour les membres simples
|
// Commandes pour les membres simples
|
||||||
if (
|
if (
|
||||||
$this->getUser('group') >= self::GROUP_MEMBER && $this->getUser('group') < self::GROUP_ADMIN
|
$this->getUser('group') === self::GROUP_MEMBER
|
||||||
&& $this->getData(['theme', 'menu', 'memberBar']) === true
|
&& $this->getData(['theme', 'menu', 'memberBar']) === true
|
||||||
) {
|
) {
|
||||||
if (
|
if (
|
||||||
@ -580,9 +588,9 @@ class layout extends common
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
($this->getData(['page', $parentPageId, 'disable']) === true
|
($this->getData(['page', $parentPageId, 'disable']) === true
|
||||||
and $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD')
|
and $this->isConnected() === false
|
||||||
) or ($this->getData(['page', $parentPageId, 'disable']) === true
|
) or ($this->getData(['page', $parentPageId, 'disable']) === true
|
||||||
and $this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
and $this->isConnected() === true
|
||||||
and $this->getUser('group') < self::GROUP_EDITOR
|
and $this->getUser('group') < self::GROUP_EDITOR
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
@ -646,9 +654,9 @@ class layout extends common
|
|||||||
$items .= '<li id=' . $childKey . '>';
|
$items .= '<li id=' . $childKey . '>';
|
||||||
if (
|
if (
|
||||||
($this->getData(['page', $childKey, 'disable']) === true
|
($this->getData(['page', $childKey, 'disable']) === true
|
||||||
and $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD')
|
and $this->isConnected() === false
|
||||||
) or ($this->getData(['page', $childKey, 'disable']) === true
|
) or ($this->getData(['page', $childKey, 'disable']) === true
|
||||||
and $this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
and $this->isConnected() === true
|
||||||
and $this->getUser('group') < self::GROUP_EDITOR
|
and $this->getUser('group') < self::GROUP_EDITOR
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
@ -742,7 +750,7 @@ class layout extends common
|
|||||||
$items .= '<li class="menuSideChild">';
|
$items .= '<li class="menuSideChild">';
|
||||||
if (
|
if (
|
||||||
$this->getData(['page', $parentPageId, 'disable']) === true
|
$this->getData(['page', $parentPageId, 'disable']) === true
|
||||||
and $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD')
|
and $this->isConnected() === false
|
||||||
) {
|
) {
|
||||||
$items .= '<a href="' . $this->getUrl(1) . '">';
|
$items .= '<a href="' . $this->getUrl(1) . '">';
|
||||||
} else {
|
} else {
|
||||||
@ -766,7 +774,7 @@ class layout extends common
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
$this->getData(['page', $childKey, 'disable']) === true
|
$this->getData(['page', $childKey, 'disable']) === true
|
||||||
and $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD')
|
and $this->isConnected() === false
|
||||||
) {
|
) {
|
||||||
$itemsChildren .= '<a href="' . $this->getUrl(1) . '">';
|
$itemsChildren .= '<a href="' . $this->getUrl(1) . '">';
|
||||||
} else {
|
} else {
|
||||||
@ -902,7 +910,7 @@ class layout extends common
|
|||||||
*/
|
*/
|
||||||
public function showBar()
|
public function showBar()
|
||||||
{
|
{
|
||||||
if ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')) {
|
if ($this->isConnected() === true) {
|
||||||
// Items de gauche
|
// Items de gauche
|
||||||
$leftItems = '';
|
$leftItems = '';
|
||||||
// Sélecteur de langues
|
// Sélecteur de langues
|
||||||
@ -980,7 +988,7 @@ class layout extends common
|
|||||||
// Bouton Ajouter une page
|
// Bouton Ajouter une page
|
||||||
if ($this->getUser('permission', 'page', 'add')) {
|
if ($this->getUser('permission', 'page', 'add')) {
|
||||||
$leftItems .= '<li>' . template::ico('plus', [
|
$leftItems .= '<li>' . template::ico('plus', [
|
||||||
'href' => helper::baseUrl() . 'page/add',
|
'href' => helper::baseUrl() . 'page/add/' . self::$siteContent,
|
||||||
'help' => 'Nouvelle page ou barre latérale'
|
'help' => 'Nouvelle page ou barre latérale'
|
||||||
]) . '</li>';
|
]) . '</li>';
|
||||||
}
|
}
|
||||||
@ -990,23 +998,27 @@ class layout extends common
|
|||||||
// Sur une page sans module
|
// Sur une page sans module
|
||||||
or $this->getData(['page', $this->getUrl(0), 'moduleId']) === ''
|
or $this->getData(['page', $this->getUrl(0), 'moduleId']) === ''
|
||||||
// Sur une page avec un module invalide
|
// Sur une page avec un module invalide
|
||||||
or (!is_null($this->getData(['page', $this->getUrl(2), 'moduleId'])) &&
|
or (!is_null($this->getData(['page', $this->getUrl(2), 'moduleId'])) and
|
||||||
!class_exists($this->getData(['page', $this->getUrl(2), 'moduleId']))
|
!class_exists($this->getData(['page', $this->getUrl(2), 'moduleId']))
|
||||||
)
|
)
|
||||||
// Sur une page d'accueil
|
// Sur une page d'accueil
|
||||||
or $this->getUrl(0) === ''
|
or $this->getUrl(0) === ''
|
||||||
) {
|
) {
|
||||||
// Bouton Editer une page
|
// Bouton Editer une page
|
||||||
if ($this->getUser('permission', 'page', 'edit')) {
|
if (
|
||||||
|
$this->getUser('permission', 'page', 'edit')
|
||||||
|
and $this->geturl(1) !== 'edit'
|
||||||
|
) {
|
||||||
$leftItems .= '<li>' . template::ico('pencil', [
|
$leftItems .= '<li>' . template::ico('pencil', [
|
||||||
'href' => helper::baseUrl() . 'page/edit/' . $this->getUrl(0),
|
'href' => helper::baseUrl() . 'page/edit/' . $this->getUrl(0) . '/' . self::$siteContent,
|
||||||
'help' => 'Éditer la page'
|
'help' => 'Éditer la page'
|
||||||
]) . '</li>';
|
]) . '</li>';
|
||||||
}
|
}
|
||||||
// Bouton Editer le module d'une page
|
// Bouton Editer le module d'une page
|
||||||
if (
|
if (
|
||||||
$this->getUser('permission', 'page', 'module')
|
$this->getUser('permission', 'page', 'module')
|
||||||
&& $this->getData(['page', $this->getUrl(0), 'moduleId'])
|
and $this->geturl(1) !== 'edit'
|
||||||
|
and $this->getData(['page', $this->getUrl(0), 'moduleId'])
|
||||||
) {
|
) {
|
||||||
$leftItems .= '<li>' . template::ico('gear', [
|
$leftItems .= '<li>' . template::ico('gear', [
|
||||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
@ -1016,9 +1028,10 @@ class layout extends common
|
|||||||
// Bouton dupliquer une page
|
// Bouton dupliquer une page
|
||||||
if (
|
if (
|
||||||
$this->getUser('permission', 'page', 'duplicate')
|
$this->getUser('permission', 'page', 'duplicate')
|
||||||
|
and $this->geturl(1) !== 'edit'
|
||||||
) {
|
) {
|
||||||
$leftItems .= '<li>' . template::ico('clone', [
|
$leftItems .= '<li>' . template::ico('clone', [
|
||||||
'href' => helper::baseUrl() . 'page/duplicate/' . $this->getUrl(0),
|
'href' => helper::baseUrl() . 'page/duplicate/' . $this->getUrl(0) . '/' . self::$siteContent,
|
||||||
'help' => 'Dupliquer la page'
|
'help' => 'Dupliquer la page'
|
||||||
])
|
])
|
||||||
. '</li>';
|
. '</li>';
|
||||||
@ -1026,9 +1039,11 @@ class layout extends common
|
|||||||
// Bouton Effacer une page
|
// Bouton Effacer une page
|
||||||
if (
|
if (
|
||||||
$this->getUser('permission', 'page', 'delete')
|
$this->getUser('permission', 'page', 'delete')
|
||||||
|
and $this->geturl(1) !== 'edit'
|
||||||
|
|
||||||
) {
|
) {
|
||||||
$leftItems .= '<li>' . template::ico('trash', [
|
$leftItems .= '<li>' . template::ico('trash', [
|
||||||
'href' => helper::baseUrl() . 'page/delete/' . $this->getUrl(0),
|
'href' => helper::baseUrl() . 'page/delete/' . $this->getUrl(0) . '/' . self::$siteContent,
|
||||||
'help' => 'Supprimer la page',
|
'help' => 'Supprimer la page',
|
||||||
'id' => 'pageDelete'
|
'id' => 'pageDelete'
|
||||||
])
|
])
|
||||||
@ -1056,18 +1071,14 @@ class layout extends common
|
|||||||
'help' => 'Thème',
|
'help' => 'Thème',
|
||||||
'href' => helper::baseUrl() . 'theme'
|
'href' => helper::baseUrl() . 'theme'
|
||||||
]) . '</li>';
|
]) . '</li>';
|
||||||
$rightItems .= '<li>' . template::ico('puzzle', [
|
$rightItems .= '<li>' . template::ico('users', [
|
||||||
'help' => 'Modules',
|
'help' => 'Utilisateurs',
|
||||||
'href' => helper::baseUrl() . 'plugin'
|
'href' => helper::baseUrl() . 'user'
|
||||||
]) . '</li>';
|
]) . '</li>';
|
||||||
$rightItems .= '<li>' . template::ico('cog-alt', [
|
$rightItems .= '<li>' . template::ico('cog-alt', [
|
||||||
'help' => 'Configuration',
|
'help' => 'Configuration',
|
||||||
'href' => helper::baseUrl() . 'config'
|
'href' => helper::baseUrl() . 'config'
|
||||||
]) . '</li>';
|
]) . '</li>';
|
||||||
$rightItems .= '<li>' . template::ico('users', [
|
|
||||||
'help' => 'Utilisateurs',
|
|
||||||
'href' => helper::baseUrl() . 'user'
|
|
||||||
]) . '</li>';
|
|
||||||
// Mise à jour automatique
|
// Mise à jour automatique
|
||||||
$today = mktime(0, 0, 0);
|
$today = mktime(0, 0, 0);
|
||||||
$checkUpdate = $this->getData(['core', 'lastAutoUpdate']);
|
$checkUpdate = $this->getData(['core', 'lastAutoUpdate']);
|
||||||
@ -1085,15 +1096,45 @@ class layout extends common
|
|||||||
) {
|
) {
|
||||||
$this->setData(['core', 'updateAvailable', true]);
|
$this->setData(['core', 'updateAvailable', true]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Recherche de mise à jour des modules
|
||||||
|
$store = plugin::getStore();
|
||||||
|
if (is_array($store)) {
|
||||||
|
// Modules installés
|
||||||
|
$infoModules = helper::getModules();
|
||||||
|
// Clés moduleIds dans les pages
|
||||||
|
$inPages = helper::arrayColumn($this->getData(['page']), 'moduleId', 'SORT_DESC');
|
||||||
|
// Parcourir les données des modules
|
||||||
|
foreach ($store as $key => $value) {
|
||||||
|
if (empty($key)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// Mise à jour d'un module
|
||||||
|
if (array_key_exists($key, $infoModules) === true) {
|
||||||
|
$this->setData(['core', 'updateModuleAvailable', true]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Afficher le bouton : Mise à jour détectée + activée
|
// Afficher le bouton : Mise à jour détectée + activée
|
||||||
if ($this->getData(['core', 'updateAvailable'])) {
|
if ($this->getData(['core', 'updateAvailable'])) {
|
||||||
$rightItems .= '<li><a href="' . helper::baseUrl() . 'install/update" data-tippy-content="Mettre à jour Zwii ' . common::ZWII_VERSION . ' vers ' . helper::getOnlineVersion(common::ZWII_UPDATE_CHANNEL) . '">' . template::ico('update colorRed') . '</a></li>';
|
$rightItems .= '<li><a href="' . helper::baseUrl() . 'install/update" data-tippy-content="Mettre à jour Zwii ' . common::ZWII_VERSION . ' vers ' . helper::getOnlineVersion(common::ZWII_UPDATE_CHANNEL) . '">' . template::ico('update colorRed') . '</a></li>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ($this->getData(['core', 'updateModuleAvailable'])) {
|
||||||
|
$rightItems .= '<li>' . template::ico('puzzle colorRed', [
|
||||||
|
'help' => 'Modules',
|
||||||
|
'href' => helper::baseUrl() . 'plugin'
|
||||||
|
]) . '</li>';
|
||||||
|
} else {
|
||||||
|
$rightItems .= '<li>' . template::ico('puzzle', [
|
||||||
|
'help' => 'Modules',
|
||||||
|
'href' => helper::baseUrl() . 'plugin'
|
||||||
|
]) . '</li>';
|
||||||
|
}
|
||||||
|
// Boutons depuis le groupe éditeur
|
||||||
if (
|
if (
|
||||||
$this->getUser('group') >= self::GROUP_EDITOR
|
$this->getUser('group') >= self::GROUP_EDITOR
|
||||||
&& $this->getUser('permission', 'user', 'edit')
|
&& $this->getUser('permission', 'user', 'edit')
|
||||||
@ -1181,7 +1222,7 @@ class layout extends common
|
|||||||
$vars = 'var baseUrl = ' . json_encode(helper::baseUrl(false)) . ';';
|
$vars = 'var baseUrl = ' . json_encode(helper::baseUrl(false)) . ';';
|
||||||
$vars .= 'var baseUrlQs = ' . json_encode(helper::baseUrl()) . ';';
|
$vars .= 'var baseUrlQs = ' . json_encode(helper::baseUrl()) . ';';
|
||||||
if (
|
if (
|
||||||
$this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
$this->isConnected() === true
|
||||||
and $this->getUser('group') >= self::GROUP_EDITOR
|
and $this->getUser('group') >= self::GROUP_EDITOR
|
||||||
) {
|
) {
|
||||||
$vars .= 'var privateKey = ' . json_encode(md5_file(self::DATA_DIR . 'core.json')) . ';';
|
$vars .= 'var privateKey = ' . json_encode(md5_file(self::DATA_DIR . 'core.json')) . ';';
|
||||||
@ -1230,8 +1271,8 @@ class layout extends common
|
|||||||
public function showi18n($lang)
|
public function showi18n($lang)
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
(isset($_SESSION['ZWII_CONTENT'])
|
(isset($_SESSION['ZWII_SITE_CONTENT'])
|
||||||
and $_SESSION['ZWII_CONTENT'] === $lang
|
and $_SESSION['ZWII_SITE_CONTENT'] === $lang
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
$select = ' class="i18nFlagSelected" ';
|
$select = ' class="i18nFlagSelected" ';
|
||||||
|
@ -11,16 +11,16 @@ class core extends common
|
|||||||
parent::__construct();
|
parent::__construct();
|
||||||
// Token CSRF
|
// Token CSRF
|
||||||
if (empty($_SESSION['csrf'])) {
|
if (empty($_SESSION['csrf'])) {
|
||||||
$_SESSION['csrf'] = bin2hex(openssl_random_pseudo_bytes(128));
|
$_SESSION['csrf'] = bin2hex(openssl_random_pseudo_bytes(64));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fuseau horaire
|
// Fuseau horaire
|
||||||
self::$timezone = $this->getData(['config', 'timezone']); // Utile pour transmettre le timezone à la classe helper
|
common::$timezone = $this->getData(['config', 'timezone']); // Utile pour transmettre le timezone à la classe helper
|
||||||
date_default_timezone_set(self::$timezone);
|
date_default_timezone_set(common::$timezone);
|
||||||
// Supprime les fichiers temporaires
|
// Supprime les fichiers temporaires
|
||||||
$lastClearTmp = mktime(0, 0, 0);
|
$lastClearTmp = mktime(0, 0, 0);
|
||||||
if ($lastClearTmp > $this->getData(['core', 'lastClearTmp']) + 86400) {
|
if ($lastClearTmp > $this->getData(['core', 'lastClearTmp']) + 86400) {
|
||||||
$iterator = new DirectoryIterator(self::TEMP_DIR);
|
$iterator = new DirectoryIterator(common::TEMP_DIR);
|
||||||
foreach ($iterator as $fileInfos) {
|
foreach ($iterator as $fileInfos) {
|
||||||
if (
|
if (
|
||||||
$fileInfos->isFile() &&
|
$fileInfos->isFile() &&
|
||||||
@ -43,11 +43,11 @@ class core extends common
|
|||||||
and $this->getData(['user']) // Pas de backup pendant l'installation
|
and $this->getData(['user']) // Pas de backup pendant l'installation
|
||||||
) {
|
) {
|
||||||
// Copie des fichier de données
|
// Copie des fichier de données
|
||||||
helper::autoBackup(self::BACKUP_DIR, ['backup', 'tmp', 'file']);
|
helper::autoBackup(common::BACKUP_DIR, ['backup', 'tmp', 'file']);
|
||||||
// Date du dernier backup
|
// Date du dernier backup
|
||||||
$this->setData(['core', 'lastBackup', $lastBackup]);
|
$this->setData(['core', 'lastBackup', $lastBackup]);
|
||||||
// Supprime les backups de plus de 30 jours
|
// Supprime les backups de plus de 30 jours
|
||||||
$iterator = new DirectoryIterator(self::BACKUP_DIR);
|
$iterator = new DirectoryIterator(common::BACKUP_DIR);
|
||||||
foreach ($iterator as $fileInfos) {
|
foreach ($iterator as $fileInfos) {
|
||||||
if (
|
if (
|
||||||
$fileInfos->isFile()
|
$fileInfos->isFile()
|
||||||
@ -60,23 +60,23 @@ class core extends common
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 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(common::DATA_DIR . 'custom.css') === false) {
|
||||||
file_put_contents(self::DATA_DIR . 'custom.css', file_get_contents('core/module/theme/resource/custom.css'));
|
$this->secure_file_put_contents(common::DATA_DIR . 'custom.css', file_get_contents('core/module/theme/resource/custom.css'));
|
||||||
chmod(self::DATA_DIR . 'custom.css', 0755);
|
chmod(common::DATA_DIR . 'custom.css', 0755);
|
||||||
}
|
}
|
||||||
// Crée le fichier de personnalisation
|
// Crée le fichier de personnalisation
|
||||||
if (file_exists(self::DATA_DIR . 'theme.css') === false) {
|
if (file_exists(common::DATA_DIR . 'theme.css') === false) {
|
||||||
file_put_contents(self::DATA_DIR . 'theme.css', '');
|
$this->secure_file_put_contents(common::DATA_DIR . 'theme.css', '');
|
||||||
chmod(self::DATA_DIR . 'theme.css', 0755);
|
chmod(common::DATA_DIR . 'theme.css', 0755);
|
||||||
}
|
}
|
||||||
// Crée le fichier de personnalisation de l'administration
|
// Crée le fichier de personnalisation de l'administration
|
||||||
if (file_exists(self::DATA_DIR . 'admin.css') === false) {
|
if (file_exists(common::DATA_DIR . 'admin.css') === false) {
|
||||||
file_put_contents(self::DATA_DIR . 'admin.css', '');
|
$this->secure_file_put_contents(common::DATA_DIR . 'admin.css', '');
|
||||||
chmod(self::DATA_DIR . 'admin.css', 0755);
|
chmod(common::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(common::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']))) . '*/';
|
||||||
@ -92,7 +92,7 @@ class core extends common
|
|||||||
// Fonts disponibles
|
// Fonts disponibles
|
||||||
$fontsAvailable['files'] = $this->getData(['font', 'files']);
|
$fontsAvailable['files'] = $this->getData(['font', 'files']);
|
||||||
$fontsAvailable['imported'] = $this->getData(['font', 'imported']);
|
$fontsAvailable['imported'] = $this->getData(['font', 'imported']);
|
||||||
$fontsAvailable['websafe'] = self::$fontsWebSafe;
|
$fontsAvailable['websafe'] = common::$fontsWebSafe;
|
||||||
|
|
||||||
// Fontes installées
|
// Fontes installées
|
||||||
$fonts = [
|
$fonts = [
|
||||||
@ -273,7 +273,7 @@ class core extends common
|
|||||||
$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);
|
$this->secure_file_put_contents(common::DATA_DIR . 'theme.css', $css);
|
||||||
|
|
||||||
// Effacer le cache pour tenir compte de la couleur de fond TinyMCE
|
// Effacer le cache pour tenir compte de la couleur de fond TinyMCE
|
||||||
header("Expires: Tue, 01 Jan 2000 00:00:00 GMT");
|
header("Expires: Tue, 01 Jan 2000 00:00:00 GMT");
|
||||||
@ -284,7 +284,7 @@ class core extends common
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check la version rafraichissement du theme admin
|
// Check la version rafraichissement du theme admin
|
||||||
$cssVersion = preg_split('/\*+/', file_get_contents(self::DATA_DIR . 'admin.css'));
|
$cssVersion = preg_split('/\*+/', file_get_contents(common::DATA_DIR . 'admin.css'));
|
||||||
if (empty($cssVersion[1]) or $cssVersion[1] !== md5(json_encode($this->getData(['admin'])))) {
|
if (empty($cssVersion[1]) or $cssVersion[1] !== md5(json_encode($this->getData(['admin'])))) {
|
||||||
|
|
||||||
// Version
|
// Version
|
||||||
@ -293,7 +293,7 @@ class core extends common
|
|||||||
// Fonts disponibles
|
// Fonts disponibles
|
||||||
$fontsAvailable['files'] = $this->getData(['font', 'files']);
|
$fontsAvailable['files'] = $this->getData(['font', 'files']);
|
||||||
$fontsAvailable['imported'] = $this->getData(['font', 'imported']);
|
$fontsAvailable['imported'] = $this->getData(['font', 'imported']);
|
||||||
$fontsAvailable['websafe'] = self::$fontsWebSafe;
|
$fontsAvailable['websafe'] = common::$fontsWebSafe;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Import des polices de caractères
|
* Import des polices de caractères
|
||||||
@ -367,7 +367,7 @@ class core extends common
|
|||||||
// Bordure du contour TinyMCE
|
// Bordure du contour TinyMCE
|
||||||
$css .= '.mce-tinymce{border: 1px solid ' . $this->getData(['admin', 'borderBlockColor']) . '!important;}';
|
$css .= '.mce-tinymce{border: 1px solid ' . $this->getData(['admin', 'borderBlockColor']) . '!important;}';
|
||||||
// Enregistre la personnalisation
|
// Enregistre la personnalisation
|
||||||
file_put_contents(self::DATA_DIR . 'admin.css', $css);
|
$this->secure_file_put_contents(common::DATA_DIR . 'admin.css', $css);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -383,8 +383,8 @@ class core extends common
|
|||||||
require 'core/module/' . $classPath;
|
require 'core/module/' . $classPath;
|
||||||
}
|
}
|
||||||
// Module
|
// Module
|
||||||
elseif (is_readable(self::MODULE_DIR . $classPath)) {
|
elseif (is_readable(common::MODULE_DIR . $classPath)) {
|
||||||
require self::MODULE_DIR . $classPath;
|
require common::MODULE_DIR . $classPath;
|
||||||
}
|
}
|
||||||
// Librairie
|
// Librairie
|
||||||
elseif (is_readable('core/vendor/' . $classPath)) {
|
elseif (is_readable('core/vendor/' . $classPath)) {
|
||||||
@ -415,8 +415,8 @@ class core extends common
|
|||||||
|
|
||||||
// Force la déconnexion des membres bannis ou d'une seconde session
|
// Force la déconnexion des membres bannis ou d'une seconde session
|
||||||
if (
|
if (
|
||||||
$this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
$this->isConnected() === true
|
||||||
and ($this->getUser('group') === self::GROUP_BANNED
|
and ($this->getUser('group') === common::GROUP_BANNED
|
||||||
or ($_SESSION['csrf'] !== $this->getData(['user', $this->getUser('id'), 'accessCsrf'])
|
or ($_SESSION['csrf'] !== $this->getData(['user', $this->getUser('id'), 'accessCsrf'])
|
||||||
and $this->getData(['config', 'connect', 'autoDisconnect']) === true)
|
and $this->getData(['config', 'connect', 'autoDisconnect']) === true)
|
||||||
)
|
)
|
||||||
@ -429,9 +429,9 @@ class core extends common
|
|||||||
$this->getData(['config', 'maintenance'])
|
$this->getData(['config', 'maintenance'])
|
||||||
and in_array($this->getUrl(0), ['maintenance', 'user']) === false
|
and in_array($this->getUrl(0), ['maintenance', 'user']) === false
|
||||||
and $this->getUrl(1) !== 'login'
|
and $this->getUrl(1) !== 'login'
|
||||||
and ($this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD')
|
and ($this->isConnected() === false
|
||||||
or ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
or ($this->isConnected() === true
|
||||||
and $this->getUser('group') < self::GROUP_ADMIN
|
and $this->getUser('group') < common::GROUP_ADMIN
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
@ -444,32 +444,12 @@ class core extends common
|
|||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pour éviter une 404 sur une langue étrangère, bascule dans la langue correcte.
|
|
||||||
if (is_null($this->getData(['page', $this->getUrl(0)]))) {
|
|
||||||
foreach (self::$languages as $key => $value) {
|
|
||||||
if (
|
|
||||||
is_dir(self::DATA_DIR . $key) &&
|
|
||||||
file_exists(self::DATA_DIR . $key . '/page.json')
|
|
||||||
) {
|
|
||||||
$pagesId = json_decode(file_get_contents(self::DATA_DIR . $key . '/page.json'), true);
|
|
||||||
if (
|
|
||||||
is_array($pagesId['page']) &&
|
|
||||||
array_key_exists($this->getUrl(0), $pagesId['page'])
|
|
||||||
) {
|
|
||||||
$_SESSION['ZWII_CONTENT'] = $key;
|
|
||||||
header('Refresh:0; url=' . helper::baseUrl() . $this->getUrl(0));
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check l'accès à la page
|
// Check l'accès à la page
|
||||||
$access = null;
|
$access = null;
|
||||||
if ($this->getData(['page', $this->getUrl(0)]) !== null) {
|
if ($this->getData(['page', $this->getUrl(0)]) !== null) {
|
||||||
if (
|
if (
|
||||||
$this->getData(['page', $this->getUrl(0), 'group']) === self::GROUP_VISITOR
|
$this->getData(['page', $this->getUrl(0), 'group']) === common::GROUP_VISITOR
|
||||||
or ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
or ($this->isConnected() === true
|
||||||
// and $this->getUser('group') >= $this->getData(['page', $this->getUrl(0), 'group'])
|
// and $this->getUser('group') >= $this->getData(['page', $this->getUrl(0), 'group'])
|
||||||
// Modification qui tient compte du profil de la page
|
// Modification qui tient compte du profil de la page
|
||||||
and ($this->getUser('group') * 10 + $this->getUser('profil')) >= ($this->getData(['page', $this->getUrl(0), 'group']) * 10 + $this->getData(['page', $this->getUrl(0), 'profil']))
|
and ($this->getUser('group') * 10 + $this->getUser('profil')) >= ($this->getData(['page', $this->getUrl(0), 'group']) * 10 + $this->getData(['page', $this->getUrl(0), 'profil']))
|
||||||
@ -486,14 +466,22 @@ class core extends common
|
|||||||
// Empêcher l'accès aux pages désactivées par URL directe
|
// Empêcher l'accès aux pages désactivées par URL directe
|
||||||
if (
|
if (
|
||||||
($this->getData(['page', $this->getUrl(0), 'disable']) === true
|
($this->getData(['page', $this->getUrl(0), 'disable']) === true
|
||||||
and $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD')
|
and $this->isConnected() === false
|
||||||
) or ($this->getData(['page', $this->getUrl(0), 'disable']) === true
|
) or ($this->getData(['page', $this->getUrl(0), 'disable']) === true
|
||||||
and $this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
and $this->isConnected() === true
|
||||||
and $this->getUser('group') < self::GROUP_EDITOR
|
and $this->getUser('group') < common::GROUP_EDITOR
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
$access = false;
|
$access = false;
|
||||||
}
|
}
|
||||||
|
// Lève une erreur si l'url est celle d'une page avec des éléments surnuméraires https://www.site.fr/page/truc
|
||||||
|
if (
|
||||||
|
array_key_exists($this->getUrl(0), $this->getData(['page']))
|
||||||
|
and $this->getUrl(1)
|
||||||
|
and $this->getData(['page', $this->getUrl(0), 'moduleId']) === ''
|
||||||
|
) {
|
||||||
|
$access = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -515,9 +503,9 @@ class core extends common
|
|||||||
$this->getUser('id') &&
|
$this->getUser('id') &&
|
||||||
$userId !== $this->getUser('id') &&
|
$userId !== $this->getUser('id') &&
|
||||||
$this->getData(['user', $userId, 'accessUrl']) === $this->getUrl() &&
|
$this->getData(['user', $userId, 'accessUrl']) === $this->getUrl() &&
|
||||||
array_intersect($t, self::$concurrentAccess) &&
|
array_intersect($t, common::$concurrentAccess) &&
|
||||||
//array_intersect($t, self::$accessExclude) !== false &&
|
//array_intersect($t, common::$accessExclude) !== false &&
|
||||||
time() < $this->getData(['user', $userId, 'accessTimer']) + self::ACCESS_TIMER
|
time() < $this->getData(['user', $userId, 'accessTimer']) + common::ACCESS_TIMER
|
||||||
) {
|
) {
|
||||||
$access = false;
|
$access = false;
|
||||||
$accessInfo['userName'] = $this->getData(['user', $userId, 'lastname']) . ' ' . $this->getData(['user', $userId, 'firstname']);
|
$accessInfo['userName'] = $this->getData(['user', $userId, 'lastname']) . ' ' . $this->getData(['user', $userId, 'firstname']);
|
||||||
@ -527,7 +515,7 @@ class core extends common
|
|||||||
}
|
}
|
||||||
// Accès concurrent stocke la page visitée
|
// Accès concurrent stocke la page visitée
|
||||||
if (
|
if (
|
||||||
$this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
$this->isConnected() === true
|
||||||
&& $this->getUser('id')
|
&& $this->getUser('id')
|
||||||
) {
|
) {
|
||||||
$this->setData(['user', $this->getUser('id'), 'accessUrl', $this->getUrl()]);
|
$this->setData(['user', $this->getUser('id'), 'accessUrl', $this->getUrl()]);
|
||||||
@ -554,10 +542,10 @@ class core extends common
|
|||||||
$inlineScript[] = $this->getData(['page', $this->getUrl(0), 'js']) === null ? '' : $this->getData(['page', $this->getUrl(0), 'js']);
|
$inlineScript[] = $this->getData(['page', $this->getUrl(0), 'js']) === null ? '' : $this->getData(['page', $this->getUrl(0), 'js']);
|
||||||
|
|
||||||
// Importe le contenu, le CSS et le script des barres
|
// Importe le contenu, le CSS et le script des barres
|
||||||
$contentRight = $this->getData(['page', $this->getUrl(0), 'barRight']) ? $this->getPage($this->getData(['page', $this->getUrl(0), 'barRight']), self::$siteContent) : '';
|
$contentRight = $this->getData(['page', $this->getUrl(0), 'barRight']) ? $this->getPage($this->getData(['page', $this->getUrl(0), 'barRight']), common::$siteContent) : '';
|
||||||
$inlineStyle[] = $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barRight']), 'css']) === null ? '' : $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barRight']), 'css']);
|
$inlineStyle[] = $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barRight']), 'css']) === null ? '' : $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barRight']), 'css']);
|
||||||
$inlineScript[] = $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barRight']), 'js']) === null ? '' : $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barRight']), 'js']);
|
$inlineScript[] = $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barRight']), 'js']) === null ? '' : $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barRight']), 'js']);
|
||||||
$contentLeft = $this->getData(['page', $this->getUrl(0), 'barLeft']) ? $this->getPage($this->getData(['page', $this->getUrl(0), 'barLeft']), self::$siteContent) : '';
|
$contentLeft = $this->getData(['page', $this->getUrl(0), 'barLeft']) ? $this->getPage($this->getData(['page', $this->getUrl(0), 'barLeft']), common::$siteContent) : '';
|
||||||
$inlineStyle[] = $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barLeft']), 'css']) === null ? '' : $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barLeft']), 'css']);
|
$inlineStyle[] = $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barLeft']), 'css']) === null ? '' : $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barLeft']), 'css']);
|
||||||
$inlineScript[] = $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barLeft']), 'js']) === null ? '' : $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barLeft']), 'js']);
|
$inlineScript[] = $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barLeft']), 'js']) === null ? '' : $this->getData(['page', $this->getData(['page', $this->getUrl(0), 'barLeft']), 'js']);
|
||||||
|
|
||||||
@ -575,7 +563,7 @@ class core extends common
|
|||||||
|
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
'content' => $this->getPage($this->getUrl(0), self::$siteContent),
|
'content' => $this->getPage($this->getUrl(0), common::$siteContent),
|
||||||
'metaDescription' => $this->getData(['page', $this->getUrl(0), 'metaDescription']),
|
'metaDescription' => $this->getData(['page', $this->getUrl(0), 'metaDescription']),
|
||||||
'metaTitle' => $this->getData(['page', $this->getUrl(0), 'metaTitle']),
|
'metaTitle' => $this->getData(['page', $this->getUrl(0), 'metaTitle']),
|
||||||
'typeMenu' => $this->getData(['page', $this->getUrl(0), 'typeMenu']),
|
'typeMenu' => $this->getData(['page', $this->getUrl(0), 'typeMenu']),
|
||||||
@ -601,7 +589,7 @@ class core extends common
|
|||||||
: $this->getData(['page', $this->getUrl(0), 'metaDescription']);
|
: $this->getData(['page', $this->getUrl(0), 'metaDescription']);
|
||||||
|
|
||||||
// Importe le CSS de la page principale
|
// Importe le CSS de la page principale
|
||||||
$pageContent = $this->getPage($this->getUrl(0), self::$siteContent);
|
$pageContent = $this->getPage($this->getUrl(0), common::$siteContent);
|
||||||
|
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
@ -646,8 +634,8 @@ class core extends common
|
|||||||
$output = $module->output;
|
$output = $module->output;
|
||||||
// Check le groupe de l'utilisateur
|
// Check le groupe de l'utilisateur
|
||||||
if (
|
if (
|
||||||
($module::$actions[$action] === self::GROUP_VISITOR
|
($module::$actions[$action] === common::GROUP_VISITOR
|
||||||
or ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
or ($this->isConnected() === true
|
||||||
and $this->getUser('group') >= $module::$actions[$action]
|
and $this->getUser('group') >= $module::$actions[$action]
|
||||||
and $this->getUser('permission', $moduleId, $action)
|
and $this->getUser('permission', $moduleId, $action)
|
||||||
)
|
)
|
||||||
@ -659,10 +647,10 @@ class core extends common
|
|||||||
foreach ($_POST as $postId => $postValue) {
|
foreach ($_POST as $postId => $postValue) {
|
||||||
if (is_array($postValue)) {
|
if (is_array($postValue)) {
|
||||||
foreach ($postValue as $subPostId => $subPostValue) {
|
foreach ($postValue as $subPostId => $subPostValue) {
|
||||||
self::$inputBefore[$postId . '_' . $subPostId] = $subPostValue;
|
common::$inputBefore[$postId . '_' . $subPostId] = $subPostValue;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
self::$inputBefore[$postId] = $postValue;
|
common::$inputBefore[$postId] = $postValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -702,9 +690,9 @@ class core extends common
|
|||||||
// Contenu par vue
|
// Contenu par vue
|
||||||
elseif ($output['view']) {
|
elseif ($output['view']) {
|
||||||
// Chemin en fonction d'un module du coeur ou d'un module
|
// Chemin en fonction d'un module du coeur ou d'un module
|
||||||
$modulePath = in_array($moduleId, self::$coreModuleIds) ? 'core/' : '';
|
$modulePath = in_array($moduleId, common::$coreModuleIds) ? 'core/' : '';
|
||||||
// CSS
|
// CSS
|
||||||
$stylePath = $modulePath . self::MODULE_DIR . $moduleId . '/view/' . $output['view'] . '/' . $output['view'] . '.css';
|
$stylePath = $modulePath . common::MODULE_DIR . $moduleId . '/view/' . $output['view'] . '/' . $output['view'] . '.css';
|
||||||
if (file_exists($stylePath)) {
|
if (file_exists($stylePath)) {
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'style' => file_get_contents($stylePath)
|
'style' => file_get_contents($stylePath)
|
||||||
@ -717,7 +705,7 @@ class core extends common
|
|||||||
}
|
}
|
||||||
|
|
||||||
// JS
|
// JS
|
||||||
$scriptPath = $modulePath . self::MODULE_DIR . $moduleId . '/view/' . $output['view'] . '/' . $output['view'] . '.js.php';
|
$scriptPath = $modulePath . common::MODULE_DIR . $moduleId . '/view/' . $output['view'] . '/' . $output['view'] . '.js.php';
|
||||||
if (file_exists($scriptPath)) {
|
if (file_exists($scriptPath)) {
|
||||||
ob_start();
|
ob_start();
|
||||||
include $scriptPath;
|
include $scriptPath;
|
||||||
@ -726,7 +714,7 @@ class core extends common
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
// Vue
|
// Vue
|
||||||
$viewPath = $modulePath . self::MODULE_DIR . $moduleId . '/view/' . $output['view'] . '/' . $output['view'] . '.php';
|
$viewPath = $modulePath . common::MODULE_DIR . $moduleId . '/view/' . $output['view'] . '/' . $output['view'] . '.php';
|
||||||
if (file_exists($viewPath)) {
|
if (file_exists($viewPath)) {
|
||||||
ob_start();
|
ob_start();
|
||||||
include $viewPath;
|
include $viewPath;
|
||||||
@ -735,7 +723,7 @@ class core extends common
|
|||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'content' => ob_get_clean() . ($output['showPageContent'] ? $pageContent : '')
|
'content' => ob_get_clean() . ($output['showPageContent'] ? $pageContent : '')
|
||||||
]);
|
]);
|
||||||
} else if ($modpos === 'free') {
|
} elseif ($modpos === 'free' && strstr($pageContent, '[MODULE]')) {
|
||||||
if (strstr($pageContent, '[MODULE]', true) === false) {
|
if (strstr($pageContent, '[MODULE]', true) === false) {
|
||||||
$begin = strstr($pageContent, '[]', true);
|
$begin = strstr($pageContent, '[]', true);
|
||||||
} else {
|
} else {
|
||||||
@ -813,6 +801,29 @@ class core extends common
|
|||||||
}
|
}
|
||||||
} elseif ($this->output['content'] === '') {
|
} elseif ($this->output['content'] === '') {
|
||||||
http_response_code(404);
|
http_response_code(404);
|
||||||
|
// Pour éviter une 404, bascule dans l'espace correct si la page existe dans cette langue.
|
||||||
|
// Parcourir les espaces
|
||||||
|
foreach (common::$languages as $langId => $value) {
|
||||||
|
;
|
||||||
|
if (
|
||||||
|
// l'espace existe
|
||||||
|
is_dir(common::DATA_DIR . $langId) &&
|
||||||
|
file_exists(common::DATA_DIR . $langId . '/page.json')
|
||||||
|
) {
|
||||||
|
// Lire les données des pages
|
||||||
|
$pagesId = json_decode(file_get_contents(common::DATA_DIR . $langId . '/page.json'), true);
|
||||||
|
if (
|
||||||
|
// La page existe
|
||||||
|
is_array($pagesId['page']) &&
|
||||||
|
array_key_exists($this->getUrl(0), $pagesId['page'])
|
||||||
|
) {
|
||||||
|
// Basculer
|
||||||
|
$_SESSION['ZWII_SITE_CONTENT'] = $langId;
|
||||||
|
header('Refresh:0; url=' . helper::baseUrl() . $this->getUrl());
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (
|
if (
|
||||||
$this->getData(['locale', 'page404']) !== 'none'
|
$this->getData(['locale', 'page404']) !== 'none'
|
||||||
and $this->getData(['page', $this->getData(['locale', 'page404'])])
|
and $this->getData(['page', $this->getData(['locale', 'page404'])])
|
||||||
@ -844,25 +855,25 @@ class core extends common
|
|||||||
}
|
}
|
||||||
switch ($this->output['display']) {
|
switch ($this->output['display']) {
|
||||||
// Layout brut
|
// Layout brut
|
||||||
case self::DISPLAY_RAW:
|
case common::DISPLAY_RAW:
|
||||||
echo $this->output['content'];
|
echo $this->output['content'];
|
||||||
break;
|
break;
|
||||||
// Layout vide
|
// Layout vide
|
||||||
case self::DISPLAY_LAYOUT_BLANK:
|
case common::DISPLAY_LAYOUT_BLANK:
|
||||||
require 'core/layout/blank.php';
|
require 'core/layout/blank.php';
|
||||||
break;
|
break;
|
||||||
// Affichage en JSON
|
// Affichage en JSON
|
||||||
case self::DISPLAY_JSON:
|
case common::DISPLAY_JSON:
|
||||||
header('Content-Type: application/json');
|
header('Content-Type: application/json');
|
||||||
echo json_encode($this->output['content']);
|
echo json_encode($this->output['content']);
|
||||||
break;
|
break;
|
||||||
// RSS feed
|
// RSS feed
|
||||||
case self::DISPLAY_RSS:
|
case common::DISPLAY_RSS:
|
||||||
header('Content-type: application/rss+xml; charset=UTF-8');
|
header('Content-type: application/rss+xml; charset=UTF-8');
|
||||||
echo $this->output['content'];
|
echo $this->output['content'];
|
||||||
break;
|
break;
|
||||||
// Layout allégé
|
// Layout allégé
|
||||||
case self::DISPLAY_LAYOUT_LIGHT:
|
case common::DISPLAY_LAYOUT_LIGHT:
|
||||||
ob_start();
|
ob_start();
|
||||||
require 'core/layout/light.php';
|
require 'core/layout/light.php';
|
||||||
$content = ob_get_clean();
|
$content = ob_get_clean();
|
||||||
@ -873,7 +884,7 @@ class core extends common
|
|||||||
echo $content;
|
echo $content;
|
||||||
break;
|
break;
|
||||||
// Layout principal
|
// Layout principal
|
||||||
case self::DISPLAY_LAYOUT_MAIN:
|
case common::DISPLAY_LAYOUT_MAIN:
|
||||||
ob_start();
|
ob_start();
|
||||||
require 'core/layout/main.php';
|
require 'core/layout/main.php';
|
||||||
$content = ob_get_clean();
|
$content = ob_get_clean();
|
||||||
|
@ -128,7 +128,17 @@ class SitemapGenerator
|
|||||||
*/
|
*/
|
||||||
private $sampleRobotsLines = [
|
private $sampleRobotsLines = [
|
||||||
"User-agent: *",
|
"User-agent: *",
|
||||||
|
"Disallow: /",
|
||||||
|
"User-agent: Googlebot",
|
||||||
"Allow: /",
|
"Allow: /",
|
||||||
|
"User-agent: bingbot",
|
||||||
|
"Allow: /",
|
||||||
|
"User-agent: Slurp",
|
||||||
|
"Allow: /",
|
||||||
|
"User-agent: DuckDuckBot",
|
||||||
|
"Allow: /",
|
||||||
|
"User-agent: Baiduspider",
|
||||||
|
"Allow: /"
|
||||||
];
|
];
|
||||||
/**
|
/**
|
||||||
* @var array list of valid changefreq values according to the spec
|
* @var array list of valid changefreq values according to the spec
|
||||||
|
@ -28,7 +28,7 @@ class template
|
|||||||
$attributes['value'] = helper::translate($attributes['value']);
|
$attributes['value'] = helper::translate($attributes['value']);
|
||||||
$attributes['help'] = helper::translate($attributes['help']);
|
$attributes['help'] = helper::translate($attributes['help']);
|
||||||
// Retourne le html
|
// Retourne le html
|
||||||
return sprintf(
|
return sprintf(
|
||||||
'<a %s class="button %s %s %s" %s>%s</a>',
|
'<a %s class="button %s %s %s" %s>%s</a>',
|
||||||
helper::sprintAttributes($attributes, ['class', 'disabled', 'ico', 'value']),
|
helper::sprintAttributes($attributes, ['class', 'disabled', 'ico', 'value']),
|
||||||
$attributes['disabled'] ? 'disabled' : '',
|
$attributes['disabled'] ? 'disabled' : '',
|
||||||
@ -65,12 +65,12 @@ class template
|
|||||||
// Limite addition et soustraction selon le type de captcha
|
// Limite addition et soustraction selon le type de captcha
|
||||||
$numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20];
|
$numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20];
|
||||||
$letters = ['u', 't', 's', 'r', 'q', 'p', 'o', 'n', 'm', 'l', 'k', 'j', 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a'];
|
$letters = ['u', 't', 's', 'r', 'q', 'p', 'o', 'n', 'm', 'l', 'k', 'j', 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a'];
|
||||||
$limit = $attributes['limit'] ? count($letters) - 1 : 10;
|
$limit = $attributes['limit'] ? count($letters) - 1 : 10;
|
||||||
|
|
||||||
// Tirage de l'opération
|
// Tirage de l'opération
|
||||||
mt_srand();
|
mt_srand();
|
||||||
// Captcha simple limité à l'addition
|
// Captcha simple limité à l'addition
|
||||||
$operator = $attributes['limit'] ? mt_rand(1, 4) : 1;
|
$operator = $attributes['limit'] ? mt_rand(1, 4) : 1;
|
||||||
|
|
||||||
// Limite si multiplication ou division
|
// Limite si multiplication ou division
|
||||||
if ($operator > 2) {
|
if ($operator > 2) {
|
||||||
@ -94,15 +94,15 @@ class template
|
|||||||
switch ($operator) {
|
switch ($operator) {
|
||||||
case 1:
|
case 1:
|
||||||
$operator = template::ico('plus', ['fontSize' => '2em;']);
|
$operator = template::ico('plus', ['fontSize' => '2em;']);
|
||||||
$result = $firstNumber + $secondNumber;
|
$result = $firstNumber + $secondNumber;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
$operator = template::ico('minus', ['fontSize' => '2em;']);
|
$operator = template::ico('minus', ['fontSize' => '2em;']);
|
||||||
$result = $firstNumber - $secondNumber;
|
$result = $firstNumber - $secondNumber;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
$operator = template::ico('cancel', ['fontSize' => '2em;']);
|
$operator = template::ico('cancel', ['fontSize' => '2em;']);
|
||||||
$result = $firstNumber * $secondNumber;
|
$result = $firstNumber * $secondNumber;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
$operator = template::ico('divide', ['fontSize' => '2em;']);
|
$operator = template::ico('divide', ['fontSize' => '2em;']);
|
||||||
@ -112,7 +112,7 @@ class template
|
|||||||
}
|
}
|
||||||
mt_srand();
|
mt_srand();
|
||||||
$secondNumber = mt_rand(1, $limit);
|
$secondNumber = mt_rand(1, $limit);
|
||||||
$firstNumber = $firstNumber * $secondNumber;
|
$firstNumber = $firstNumber * $secondNumber;
|
||||||
$result = $firstNumber / $secondNumber;
|
$result = $firstNumber / $secondNumber;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -125,8 +125,8 @@ class template
|
|||||||
$secondLetter = uniqid();
|
$secondLetter = uniqid();
|
||||||
|
|
||||||
// Masquage image source pour éviter un décodage
|
// Masquage image source pour éviter un décodage
|
||||||
copy('core/vendor/zwiico/png/' . $attributes['type'] . '/' . $letters[$firstNumber] . '.png', 'site/tmp/' . $firstLetter . '.png');
|
copy('core/vendor/zwiico/png/' . $attributes['type'] . '/' . $letters[$firstNumber] . '.png', 'site/tmp/' . $firstLetter . '.png');
|
||||||
copy('core/vendor/zwiico/png/' . $attributes['type'] . '/' . $letters[$secondNumber] . '.png', 'site/tmp/' . $secondLetter . '.png');
|
copy('core/vendor/zwiico/png/' . $attributes['type'] . '/' . $letters[$secondNumber] . '.png', 'site/tmp/' . $secondLetter . '.png');
|
||||||
|
|
||||||
|
|
||||||
// Début du wrapper
|
// Début du wrapper
|
||||||
@ -134,7 +134,7 @@ class template
|
|||||||
// Label
|
// Label
|
||||||
$html .= self::label(
|
$html .= self::label(
|
||||||
$attributes['id'],
|
$attributes['id'],
|
||||||
'<img class="captcha' . ucFirst($attributes['type']) . '" src="' . helper::baseUrl(false) . 'site/tmp/' . $firstLetter . '.png" /> <strong>' . $operator . '</strong> <img class="captcha' . ucFirst($attributes['type']) . '" src="' . helper::baseUrl(false) . 'site/tmp/' . $secondLetter . '.png" />' . template::ico('eq', ['fontSize' => '2em;']),
|
'<img class="captcha' . ucFirst($attributes['type']) . '" src="' . helper::baseUrl(false) . 'site/tmp/' . $firstLetter . '.png" /> <strong>' . $operator . '</strong> <img class="captcha' . ucFirst($attributes['type']) . '" src="' . helper::baseUrl(false) . 'site/tmp/' . $secondLetter . '.png" />' . template::ico('eq', ['fontSize' => '2em;']),
|
||||||
[
|
[
|
||||||
'help' => $attributes['help']
|
'help' => $attributes['help']
|
||||||
]
|
]
|
||||||
@ -224,7 +224,7 @@ class template
|
|||||||
* Crée un champ date
|
* Crée un champ date
|
||||||
* @param string $nameId Nom et id du champ
|
* @param string $nameId Nom et id du champ
|
||||||
* @param array $attributes Attributs ($key => $value)
|
* @param array $attributes Attributs ($key => $value)
|
||||||
* @param string type date time datetime-local month week
|
* @param string type date seule ; time heure seule ; datetime-local (jour et heure)
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function date($nameId, array $attributes = [])
|
public static function date($nameId, array $attributes = [])
|
||||||
@ -244,17 +244,32 @@ class template
|
|||||||
'placeholder' => '',
|
'placeholder' => '',
|
||||||
'readonly' => false,
|
'readonly' => false,
|
||||||
'value' => '',
|
'value' => '',
|
||||||
'type'=> 'date',
|
'type' => 'date',
|
||||||
], $attributes);
|
], $attributes);
|
||||||
// Traduction de l'aide et de l'étiquette
|
// Traduction de l'aide et de l'étiquette
|
||||||
$attributes['label'] = helper::translate($attributes['label']);
|
$attributes['label'] = helper::translate($attributes['label']);
|
||||||
$attributes['help'] = helper::translate($attributes['help']);
|
$attributes['help'] = helper::translate($attributes['help']);
|
||||||
//$attributes['placeholder'] = helper::translate($attributes['placeholder']);
|
//$attributes['placeholder'] = helper::translate($attributes['placeholder']);
|
||||||
|
// Filtre selon le type
|
||||||
|
switch ($attributes['type']) {
|
||||||
|
case 'datetime-local':
|
||||||
|
$filter = helper::FILTER_TIMESTAMP;
|
||||||
|
break;
|
||||||
|
case 'date':
|
||||||
|
$filter = helper::FILTER_DATE; // Pour générer une valeur uniquement sur la date
|
||||||
|
break;
|
||||||
|
case 'time':
|
||||||
|
$filter = helper::FILTER_TIME; // Pour générer une valeur uniquement sur l'heure
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$filter = null; // pas de filtre pour month and year
|
||||||
|
break;
|
||||||
|
}
|
||||||
// Sauvegarde des données en cas d'erreur
|
// Sauvegarde des données en cas d'erreur
|
||||||
if ($attributes['before'] and array_key_exists($attributes['id'], common::$inputBefore)) {
|
if ($attributes['before'] and array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||||
$attributes['value'] = common::$inputBefore[$attributes['id']];
|
$attributes['value'] = common::$inputBefore[$attributes['id']];
|
||||||
} else {
|
} else {
|
||||||
$attributes['value'] = ($attributes['value'] ? helper::filter($attributes['value'], helper::FILTER_TIMESTAMP) : '');
|
$attributes['value'] = ($attributes['value'] ? helper::filter($attributes['value'], $filter) : '');
|
||||||
}
|
}
|
||||||
// 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'] . '">';
|
||||||
@ -310,6 +325,7 @@ class template
|
|||||||
'name' => $nameId,
|
'name' => $nameId,
|
||||||
'type' => 2,
|
'type' => 2,
|
||||||
'value' => '',
|
'value' => '',
|
||||||
|
'folder' => '',
|
||||||
'language' => 'fr_FR'
|
'language' => 'fr_FR'
|
||||||
], $attributes);
|
], $attributes);
|
||||||
// Traduction de l'aide et de l'étiquette
|
// Traduction de l'aide et de l'étiquette
|
||||||
@ -346,14 +362,16 @@ class template
|
|||||||
$html .= sprintf(
|
$html .= sprintf(
|
||||||
'<a
|
'<a
|
||||||
href="' .
|
href="' .
|
||||||
helper::baseUrl(false) . 'core/vendor/filemanager/dialog.php' .
|
helper::baseUrl(false) . 'core/vendor/filemanager/dialog.php' .
|
||||||
'?relative_url=1' .
|
'?relative_url=1' .
|
||||||
'&lang=' . $attributes['language'] .
|
'&lang=' . $attributes['language'] .
|
||||||
'&field_id=' . $attributes['id'] .
|
'&field_id=' . $attributes['id'] .
|
||||||
'&type=' . $attributes['type'] .
|
'&type=' . $attributes['type'] .
|
||||||
'&akey=' . md5_file(core::DATA_DIR . 'core.json') .
|
'&akey=' . md5_file(core::DATA_DIR . 'core.json') .
|
||||||
($attributes['extensions'] ? '&extensions=' . $attributes['extensions'] : '')
|
// Ajoute le nom du dossier si la variable est passée
|
||||||
. '"
|
(!empty($attributes['folder']) ? '&fldr=' . $attributes['folder'] : '') .
|
||||||
|
($attributes['extensions'] ? '&extensions=' . $attributes['extensions'] : '')
|
||||||
|
. '"
|
||||||
class="inputFile %s %s"
|
class="inputFile %s %s"
|
||||||
%s
|
%s
|
||||||
data-lity
|
data-lity
|
||||||
@ -471,7 +489,7 @@ class template
|
|||||||
// Traduction de l'aide
|
// Traduction de l'aide
|
||||||
$attributes['help'] = helper::translate($attributes['help']);
|
$attributes['help'] = helper::translate($attributes['help']);
|
||||||
// Contenu de l'icône
|
// Contenu de l'icône
|
||||||
$alt = $attributes['help'] ? $attributes['help'] : $ico;
|
$alt = $attributes['help'] ? $attributes['help'] : $ico;
|
||||||
$item = $attributes['href'] ? '<a id="' . $attributes['id'] . '" data-tippy-content="' . $attributes['help'] . '" alt="' . $alt . '" href="' . $attributes['href'] . '" ' . $attributes['attr'] . ' >' : '';
|
$item = $attributes['href'] ? '<a id="' . $attributes['id'] . '" data-tippy-content="' . $attributes['help'] . '" alt="' . $alt . '" href="' . $attributes['href'] . '" ' . $attributes['attr'] . ' >' : '';
|
||||||
$item .= '<span class="zwiico-' . $ico . ($attributes['margin'] ? ' zwiico-margin-' . $attributes['margin'] : '') . ($attributes['animate'] ? ' animate-spin' : '') . '" style="font-size:' . $attributes['fontSize'] . '"><!----></span>';
|
$item .= '<span class="zwiico-' . $ico . ($attributes['margin'] ? ' zwiico-margin-' . $attributes['margin'] : '') . ($attributes['animate'] ? ' animate-spin' : '') . '" style="font-size:' . $attributes['fontSize'] . '"><!----></span>';
|
||||||
$item .= ($attributes['href']) ? '</a>' : '';
|
$item .= ($attributes['href']) ? '</a>' : '';
|
||||||
@ -494,8 +512,8 @@ class template
|
|||||||
$lang = $langId;
|
$lang = $langId;
|
||||||
break;
|
break;
|
||||||
case 'selected':
|
case 'selected':
|
||||||
if (isset($_SESSION['ZWII_CONTENT'])) {
|
if (isset($_SESSION['ZWII_SITE_CONTENT'])) {
|
||||||
$lang = $_SESSION['ZWII_CONTENT'];
|
$lang = $_SESSION['ZWII_SITE_CONTENT'];
|
||||||
} else {
|
} else {
|
||||||
$lang = 'fr_FR';
|
$lang = 'fr_FR';
|
||||||
}
|
}
|
||||||
@ -686,12 +704,12 @@ class template
|
|||||||
'label' => '',
|
'label' => '',
|
||||||
'name' => $nameId,
|
'name' => $nameId,
|
||||||
'selected' => '',
|
'selected' => '',
|
||||||
'font' => [],
|
'font' => [],
|
||||||
'multiple' => ''
|
'multiple' => ''
|
||||||
], $attributes);
|
], $attributes);
|
||||||
// Traduction de l'aide et de l'étiquette
|
// Traduction de l'aide et de l'étiquette
|
||||||
$attributes['label'] = helper::translate($attributes['label']);
|
$attributes['label'] = helper::translate($attributes['label']);
|
||||||
$attributes['help'] = helper::translate($attributes['help']);
|
$attributes['help'] = helper::translate($attributes['help']);
|
||||||
// Stocker les fontes et remettre à zéro le tableau des fontes transmis pour éviter une erreur de sprintAttributes
|
// Stocker les fontes et remettre à zéro le tableau des fontes transmis pour éviter une erreur de sprintAttributes
|
||||||
if (empty($attributes['font']) === false) {
|
if (empty($attributes['font']) === false) {
|
||||||
$fonts = $attributes['font'];
|
$fonts = $attributes['font'];
|
||||||
@ -728,7 +746,7 @@ class template
|
|||||||
);
|
);
|
||||||
foreach ($options as $value => $text) {
|
foreach ($options as $value => $text) {
|
||||||
// Select des liste de fontes
|
// Select des liste de fontes
|
||||||
$html .= isset($fonts) ? sprintf(
|
$html .= isset($fonts) ? sprintf(
|
||||||
'<option value="%s"%s style="font-family: %s;">%s</option>',
|
'<option value="%s"%s style="font-family: %s;">%s</option>',
|
||||||
$value,
|
$value,
|
||||||
$attributes['selected'] == $value ? ' selected' : '', // Double == pour ignorer le type de variable car $_POST change les types en string
|
$attributes['selected'] == $value ? ' selected' : '', // Double == pour ignorer le type de variable car $_POST change les types en string
|
||||||
@ -782,7 +800,7 @@ class template
|
|||||||
// Traduction de l'aide et de l'étiquette
|
// Traduction de l'aide et de l'étiquette
|
||||||
$attributes['value'] = helper::translate($attributes['value']);
|
$attributes['value'] = helper::translate($attributes['value']);
|
||||||
// Retourne le html
|
// Retourne le html
|
||||||
return sprintf(
|
return sprintf(
|
||||||
'<button type="submit" class="%s%s" %s>%s</button>',
|
'<button type="submit" class="%s%s" %s>%s</button>',
|
||||||
$attributes['class'],
|
$attributes['class'],
|
||||||
$attributes['uniqueSubmission'] ? 'uniqueSubmission' : '',
|
$attributes['uniqueSubmission'] ? 'uniqueSubmission' : '',
|
||||||
@ -810,7 +828,7 @@ class template
|
|||||||
], $attributes);
|
], $attributes);
|
||||||
// Traduction de l'aide et de l'étiquette
|
// Traduction de l'aide et de l'étiquette
|
||||||
foreach ($head as $value) {
|
foreach ($head as $value) {
|
||||||
$head[array_search($value, $head)] = helper::translate($value);
|
$head[array_search($value, $head)] = helper::translate($value);
|
||||||
}
|
}
|
||||||
// Début du wrapper
|
// Début du wrapper
|
||||||
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="tableWrapper ' . $attributes['classWrapper'] . '">';
|
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="tableWrapper ' . $attributes['classWrapper'] . '">';
|
||||||
@ -905,7 +923,7 @@ class template
|
|||||||
$html .= self::notice($attributes['id'], $notice);
|
$html .= self::notice($attributes['id'], $notice);
|
||||||
// Texte
|
// Texte
|
||||||
$html .= sprintf(
|
$html .= sprintf(
|
||||||
'<input type="' . $attributes['type']. '" %s>',
|
'<input type="' . $attributes['type'] . '" %s>',
|
||||||
helper::sprintAttributes($attributes)
|
helper::sprintAttributes($attributes)
|
||||||
);
|
);
|
||||||
// Fin du wrapper
|
// Fin du wrapper
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
@ -216,12 +216,14 @@ core.start = function () {
|
|||||||
// Variables des cookies
|
// Variables des cookies
|
||||||
var getUrl = window.location;
|
var getUrl = window.location;
|
||||||
var domain = "domain=" + getUrl.hostname + ";";
|
var domain = "domain=" + getUrl.hostname + ";";
|
||||||
|
var basePath = getUrl.pathname.substring(0, getUrl.pathname.lastIndexOf('/') + 1);
|
||||||
|
var path = "path=" + basePath + ";";
|
||||||
var e = new Date();
|
var e = new Date();
|
||||||
e.setFullYear(e.getFullYear() + 1);
|
e.setFullYear(e.getFullYear() + 1);
|
||||||
var expires = "expires=" + e.toUTCString();
|
var expires = "expires=" + e.toUTCString() + ";";
|
||||||
|
|
||||||
// Stocke le cookie d'acceptation
|
// Stocke le cookie d'acceptation
|
||||||
document.cookie = "ZWII_COOKIE_CONSENT=true;samesite=strict;" + domain + expires;
|
document.cookie = "ZWII_COOKIE_CONSENT=true; samesite=lax; " + domain + path + expires;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -291,7 +293,7 @@ core.start = function () {
|
|||||||
});
|
});
|
||||||
// Confirmation de mise à jour
|
// Confirmation de mise à jour
|
||||||
$("#barUpdate").on("click", function () {
|
$("#barUpdate").on("click", function () {
|
||||||
message = "<?php echo helper::translate('Mettre à jour') . ' ?';?>";
|
message = "<?php echo helper::translate('Mise à jour') . ' ?';?>";
|
||||||
return core.confirm(message, function () {
|
return core.confirm(message, function () {
|
||||||
$(location).attr("href", $("#barUpdate").attr("href"));
|
$(location).attr("href", $("#barUpdate").attr("href"));
|
||||||
});
|
});
|
||||||
@ -462,7 +464,7 @@ $(document).ready(function () {
|
|||||||
/**
|
/**
|
||||||
* Chargement paresseux des images et des iframes
|
* Chargement paresseux des images et des iframes
|
||||||
*/
|
*/
|
||||||
$("img,picture,iframe").attr("loading", "lazy");
|
$("img").attr("loading", "lazy");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Effet accordéon
|
* Effet accordéon
|
||||||
@ -532,7 +534,7 @@ $(document).ready(function () {
|
|||||||
var langSelected = $(this).val();
|
var langSelected = $(this).val();
|
||||||
var langSelected = langSelected.split("/");
|
var langSelected = langSelected.split("/");
|
||||||
// Lit le cookie de langue
|
// Lit le cookie de langue
|
||||||
var langSession = "<?php echo isset($_SESSION['ZWII_CONTENT']) ? $_SESSION['ZWII_CONTENT'] : '';?>";
|
var langSession = "<?php echo isset($_SESSION['ZWII_SITE_CONTENT']) ? $_SESSION['ZWII_SITE_CONTENT'] : '';?>";
|
||||||
// Découpe l'URL pour exclure le changement de page avec le thème
|
// Découpe l'URL pour exclure le changement de page avec le thème
|
||||||
var url = window.location;
|
var url = window.location;
|
||||||
var currentUrl = url.href.split("/");
|
var currentUrl = url.href.split("/");
|
||||||
|
209
core/core.php
209
core/core.php
@ -8,7 +8,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
@ -51,7 +51,7 @@ class common
|
|||||||
const ACCESS_TIMER = 1800;
|
const ACCESS_TIMER = 1800;
|
||||||
|
|
||||||
// Numéro de version
|
// Numéro de version
|
||||||
const ZWII_VERSION = '13.1.02';
|
const ZWII_VERSION = '13.4.00.test4';
|
||||||
|
|
||||||
// URL autoupdate
|
// URL autoupdate
|
||||||
const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/cms-update/raw/branch/master/';
|
const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/cms-update/raw/branch/master/';
|
||||||
@ -60,6 +60,18 @@ class common
|
|||||||
// Valeurs possibles multiple de 10, 10 autorise 9 profils, 100 autorise 99 profils
|
// Valeurs possibles multiple de 10, 10 autorise 9 profils, 100 autorise 99 profils
|
||||||
const MAX_PROFILS = 10;
|
const MAX_PROFILS = 10;
|
||||||
|
|
||||||
|
const MAX_FILE_WRITE_ATTEMPTS = 5;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nombre maximal de tentatives d'encodage JSON
|
||||||
|
*/
|
||||||
|
const MAX_JSON_ENCODE_ATTEMPTS = 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Temps d'attente entre les tentatives en secondes
|
||||||
|
*/
|
||||||
|
const RETRY_DELAY_SECONDS = 1;
|
||||||
|
|
||||||
|
|
||||||
public static $actions = [];
|
public static $actions = [];
|
||||||
public static $coreModuleIds = [
|
public static $coreModuleIds = [
|
||||||
@ -329,15 +341,15 @@ class common
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Déterminer la langue du contenu du site
|
// Déterminer la langue du contenu du site
|
||||||
if (isset($_SESSION['ZWII_CONTENT'])) {
|
if (isset($_SESSION['ZWII_SITE_CONTENT'])) {
|
||||||
// Déterminé par la session présente
|
// Déterminé par la session présente
|
||||||
self::$siteContent = $_SESSION['ZWII_CONTENT'];
|
self::$siteContent = $_SESSION['ZWII_SITE_CONTENT'];
|
||||||
} else {
|
} else {
|
||||||
// Détermine la langue par défaut
|
// Détermine la langue par défaut
|
||||||
foreach (self::$languages as $key => $value) {
|
foreach (self::$languages as $key => $value) {
|
||||||
if (file_exists(self::DATA_DIR . $key . '/.default')) {
|
if (file_exists(self::DATA_DIR . $key . '/.default')) {
|
||||||
self::$siteContent = $key;
|
self::$siteContent = $key;
|
||||||
$_SESSION['ZWII_CONTENT'] = $key;
|
$_SESSION['ZWII_SITE_CONTENT'] = $key;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -347,6 +359,7 @@ class common
|
|||||||
// Instanciation de la classe des entrées / sorties
|
// Instanciation de la classe des entrées / sorties
|
||||||
$this->jsonDB(self::$siteContent);
|
$this->jsonDB(self::$siteContent);
|
||||||
|
|
||||||
|
|
||||||
// Installation fraîche, initialisation des modules
|
// Installation fraîche, initialisation des modules
|
||||||
if ($this->user === []) {
|
if ($this->user === []) {
|
||||||
foreach ($this->dataFiles as $stageId => $item) {
|
foreach ($this->dataFiles as $stageId => $item) {
|
||||||
@ -589,9 +602,47 @@ class common
|
|||||||
public function setPage($page, $value, $lang)
|
public function setPage($page, $value, $lang)
|
||||||
{
|
{
|
||||||
|
|
||||||
return file_put_contents(self::DATA_DIR . $lang . '/content/' . $page . '.html', $value);
|
return $this->secure_file_put_contents(self::DATA_DIR . $lang . '/content/' . $page . '.html', $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Écrit les données dans un fichier avec plusieurs tentatives d'écriture et verrouillage
|
||||||
|
*
|
||||||
|
* @param string $filename Le nom du fichier
|
||||||
|
* @param string $data Les données à écrire dans le fichier
|
||||||
|
* @param int $flags Les drapeaux optionnels à passer à la fonction $this->secure_file_put_contents
|
||||||
|
* @return bool True si l'écriture a réussi, sinon false
|
||||||
|
*/
|
||||||
|
function secure_file_put_contents($filename, $data, $flags = 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Initialise le compteur de tentatives
|
||||||
|
$attempts = 0;
|
||||||
|
|
||||||
|
// Convertit les données en chaîne de caractères
|
||||||
|
$serialized_data = serialize($data);
|
||||||
|
|
||||||
|
// Vérifie la longueur des données
|
||||||
|
$data_length = strlen($serialized_data);
|
||||||
|
|
||||||
|
// Effectue jusqu'à 5 tentatives d'écriture
|
||||||
|
while ($attempts < 5) {
|
||||||
|
// Essaye d'écrire les données dans le fichier avec verrouillage exclusif
|
||||||
|
$write_result = file_put_contents($filename, $data, LOCK_EX | $flags);
|
||||||
|
|
||||||
|
// Vérifie si l'écriture a réussi
|
||||||
|
if ($write_result !== false && $write_result === $data_length) {
|
||||||
|
// Sort de la boucle si l'écriture a réussi
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Incrémente le compteur de tentatives
|
||||||
|
$attempts++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Échec de l'écriture après plusieurs tentatives
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -706,65 +757,65 @@ class common
|
|||||||
* Appelée par le core uniquement
|
* Appelée par le core uniquement
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private function buildHierarchy()
|
private function buildHierarchy()
|
||||||
{
|
{
|
||||||
|
|
||||||
$pages = helper::arrayColumn($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 (
|
||||||
// Page parent
|
// Page parent
|
||||||
$this->getData(['page', $pageId, 'parentPageId']) === ""
|
$this->getData(['page', $pageId, 'parentPageId']) === ""
|
||||||
// Ignore les pages dont l'utilisateur n'a pas accès
|
// Ignore les pages dont l'utilisateur n'a pas accès
|
||||||
and ($this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
|
and ($this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
|
||||||
or ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
or ($this->isConnected() === true
|
||||||
//and $this->getUser('group') >= $this->getData(['page', $pageId, 'group'])
|
//and $this->getUser('group') >= $this->getData(['page', $pageId, 'group'])
|
||||||
// Modification qui tient compte du profil de la page
|
// Modification qui tient compte du profil de la page
|
||||||
and ($this->getUser('group') * self::MAX_PROFILS + $this->getUser('profil')) >= ($this->getData(['page', $pageId, 'group']) * self::MAX_PROFILS + $this->getData(['page', $pageId, 'profil']))
|
and ($this->getUser('group') * self::MAX_PROFILS + $this->getUser('profil')) >= ($this->getData(['page', $pageId, 'group']) * self::MAX_PROFILS + $this->getData(['page', $pageId, 'profil']))
|
||||||
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
if ($pagePosition !== 0) {
|
if ($pagePosition !== 0) {
|
||||||
$this->hierarchy['visible'][$pageId] = [];
|
$this->hierarchy['visible'][$pageId] = [];
|
||||||
}
|
}
|
||||||
if ($this->getData(['page', $pageId, 'block']) === 'bar') {
|
if ($this->getData(['page', $pageId, 'block']) === 'bar') {
|
||||||
$this->hierarchy['bar'][$pageId] = [];
|
$this->hierarchy['bar'][$pageId] = [];
|
||||||
}
|
}
|
||||||
$this->hierarchy['all'][$pageId] = [];
|
$this->hierarchy['all'][$pageId] = [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Enfants
|
// Enfants
|
||||||
foreach ($pages as $pageId => $pagePosition) {
|
foreach ($pages as $pageId => $pagePosition) {
|
||||||
if (
|
|
||||||
// Page parent
|
|
||||||
$parentId = $this->getData(['page', $pageId, 'parentPageId'])
|
|
||||||
// Ignore les pages dont l'utilisateur n'a pas accès
|
|
||||||
and (
|
|
||||||
($this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
|
|
||||||
and $this->getData(['page', $parentId, 'group']) === self::GROUP_VISITOR
|
|
||||||
)
|
|
||||||
or ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
|
||||||
//and $this->getUser('group') >= $this->getData(['page', $parentId, 'group'])
|
|
||||||
//and $this->getUser('group') >= $this->getData(['page', $pageId, 'group'])
|
|
||||||
|
|
||||||
// Modification qui tient compte du profil de la page
|
if (
|
||||||
and ($this->getUser('group') * self::MAX_PROFILS + $this->getUser('profil')) >= ($this->getData(['page', $this->$parentId, 'group']) * self::MAX_PROFILS + $this->getData(['page', $this->$parentId, 'profil']))
|
// Page parent
|
||||||
and ($this->getUser('group') * self::MAX_PROFILS + $this->getUser('profil')) >= ($this->getData(['page', $this->$pageId, 'group']) * self::MAX_PROFILS + $this->getData(['page', $pageId, 'profil']))
|
$parentId = $this->getData(['page', $pageId, 'parentPageId'])
|
||||||
|
// Ignore les pages dont l'utilisateur n'a pas accès
|
||||||
|
and (
|
||||||
|
(
|
||||||
|
$this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
|
||||||
|
and
|
||||||
|
$this->getData(['page', $parentId, 'group']) === self::GROUP_VISITOR
|
||||||
|
)
|
||||||
|
or (
|
||||||
|
$this->isConnected() === true
|
||||||
|
and
|
||||||
|
$this->getUser('group') * self::MAX_PROFILS + $this->getUser('profil')) >= ($this->getData(['page', $pageId, 'group']) * self::MAX_PROFILS + $this->getData(['page', $pageId, 'profil'])
|
||||||
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
if ($pagePosition !== 0) {
|
if ($pagePosition !== 0) {
|
||||||
$this->hierarchy['visible'][$parentId][] = $pageId;
|
$this->hierarchy['visible'][$parentId][] = $pageId;
|
||||||
}
|
}
|
||||||
if ($this->getData(['page', $pageId, 'block']) === 'bar') {
|
if ($this->getData(['page', $pageId, 'block']) === 'bar') {
|
||||||
$this->hierarchy['bar'][$pageId] = [];
|
$this->hierarchy['bar'][$pageId] = [];
|
||||||
}
|
}
|
||||||
$this->hierarchy['all'][$parentId][] = $pageId;
|
$this->hierarchy['all'][$parentId][] = $pageId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Génère un fichier json avec la liste des pages
|
* Génère un fichier json avec la liste des pages
|
||||||
@ -977,6 +1028,16 @@ class common
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool l'utilisateur est connecté true sinon false
|
||||||
|
*/
|
||||||
|
public function isConnected() {
|
||||||
|
return (
|
||||||
|
!empty($this->getUser('authKey'))
|
||||||
|
&&
|
||||||
|
$this->getUser('authKey') === $this->getInput('ZWII_AUTH_KEY'));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check qu'une valeur est transmise par la méthode _POST
|
* Check qu'une valeur est transmise par la méthode _POST
|
||||||
* @return bool
|
* @return bool
|
||||||
@ -1068,14 +1129,15 @@ class common
|
|||||||
}
|
}
|
||||||
// Articles du blog
|
// Articles du blog
|
||||||
if (
|
if (
|
||||||
$this->getData(['page', $parentPageId, 'moduleId']) === 'blog' &&
|
$this->getData(['page', $parentPageId, 'moduleId']) === 'blog'
|
||||||
!empty($this->getData(['module', $parentPageId]))
|
&& !empty($this->getData(['module', $parentPageId]))
|
||||||
|
&& $this->getData(['module', $parentPageId, 'posts'])
|
||||||
) {
|
) {
|
||||||
foreach ($this->getData(['module', $parentPageId, 'posts']) as $articleId => $article) {
|
foreach ($this->getData(['module', $parentPageId, 'posts']) as $articleId => $article) {
|
||||||
if ($this->getData(['module', $parentPageId, 'posts', $articleId, 'state']) === true) {
|
if ($this->getData(['module', $parentPageId, 'posts', $articleId, 'state']) === true) {
|
||||||
$date = $this->getData(['module', $parentPageId, 'posts', $articleId, 'publishedOn']);
|
$date = $this->getData(['module', $parentPageId, 'posts', $articleId, 'publishedOn']);
|
||||||
$sitemap->addUrl('/' . $parentPageId . '/' . $articleId, new DateTime("@{$date}", new DateTimeZone($timezone)));
|
$sitemap->addUrl('/' . $parentPageId . '/' . $articleId, DateTime::createFromFormat('U', $date));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Sous-pages
|
// Sous-pages
|
||||||
@ -1097,7 +1159,7 @@ class common
|
|||||||
if ($this->getData(['module', $childKey, 'posts', $articleId, 'state']) === true) {
|
if ($this->getData(['module', $childKey, 'posts', $articleId, 'state']) === true) {
|
||||||
$date = $this->getData(['module', $childKey, 'posts', $articleId, 'publishedOn']);
|
$date = $this->getData(['module', $childKey, 'posts', $articleId, 'publishedOn']);
|
||||||
$sitemap->addUrl('/' . $childKey . '/' . $articleId, new DateTime("@{$date}", new DateTimeZone($timezone)));
|
$sitemap->addUrl('/' . $childKey . '/' . $articleId, new DateTime("@{$date}", new DateTimeZone($timezone)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1121,7 +1183,7 @@ class common
|
|||||||
}
|
}
|
||||||
$sitemap->updateRobots();
|
$sitemap->updateRobots();
|
||||||
} else {
|
} else {
|
||||||
file_put_contents('robots.txt', 'User-agent: *' . PHP_EOL . 'Disallow: /');
|
$this->secure_file_put_contents('robots.txt', 'User-agent: *' . PHP_EOL . 'Disallow: /');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Submit your sitemaps to Google, Yahoo, Bing and Ask.com
|
// Submit your sitemaps to Google, Yahoo, Bing and Ask.com
|
||||||
@ -1165,11 +1227,10 @@ class common
|
|||||||
$source_image = imagecreatefromwebp($src);
|
$source_image = imagecreatefromwebp($src);
|
||||||
break;
|
break;
|
||||||
case 'avif':
|
case 'avif':
|
||||||
$source_image = function_exists('imagecreatefromavif') ? imagecreatefromavif($src) : null;
|
$source_image = imagecreatefromavif($src);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
// Image valide
|
// Image valide
|
||||||
if ($source_image) {
|
if (is_object($source_image)) {
|
||||||
$width = imagesx($source_image);
|
$width = imagesx($source_image);
|
||||||
$height = imagesy($source_image);
|
$height = imagesy($source_image);
|
||||||
/* find the "desired height" of this thumbnail, relative to the desired width */
|
/* find the "desired height" of this thumbnail, relative to the desired width */
|
||||||
@ -1186,9 +1247,9 @@ class common
|
|||||||
return (imagepng($virtual_image, $dest));
|
return (imagepng($virtual_image, $dest));
|
||||||
case 'image/gif':
|
case 'image/gif':
|
||||||
return (imagegif($virtual_image, $dest));
|
return (imagegif($virtual_image, $dest));
|
||||||
case 'webp':
|
case 'image/webp':
|
||||||
return (imagewebp($virtual_image, $dest));
|
return (imagewebp($virtual_image, $dest));
|
||||||
case 'avif':
|
case 'image/avif':
|
||||||
return (imageavif($virtual_image, $dest));
|
return (imageavif($virtual_image, $dest));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -1392,13 +1453,13 @@ class common
|
|||||||
public function saveLog($message = '')
|
public function saveLog($message = '')
|
||||||
{
|
{
|
||||||
// Journalisation
|
// Journalisation
|
||||||
$dataLog = helper::dateUTF8('%Y%m%d', time(), self::$siteContent) . ';' . helper::dateUTF8('%H:%M', time(), self::$siteContent). ';';
|
$dataLog = helper::dateUTF8('%Y%m%d', time(), self::$i18nUI) . ';' . helper::dateUTF8('%H:%M', time(), self::$i18nUI). ';';
|
||||||
$dataLog .= helper::getIp($this->getData(['config', 'connect', 'anonymousIp'])) . ';';
|
$dataLog .= helper::getIp($this->getData(['config', 'connect', 'anonymousIp'])) . ';';
|
||||||
$dataLog .= empty($this->getUser('id')) ? 'visitor;' : $this->getUser('id') . ';';
|
$dataLog .= empty($this->getUser('id')) ? 'visitor;' : $this->getUser('id') . ';';
|
||||||
$dataLog .= $message ? $this->getUrl() . ';' . $message : $this->getUrl();
|
$dataLog .= $message ? $this->getUrl() . ';' . $message : $this->getUrl();
|
||||||
$dataLog .= PHP_EOL;
|
$dataLog .= PHP_EOL;
|
||||||
if ($this->getData(['config', 'connect', 'log'])) {
|
if ($this->getData(['config', 'connect', 'log'])) {
|
||||||
file_put_contents(self::DATA_DIR . 'journal.log', $dataLog, FILE_APPEND);
|
$this->secure_file_put_contents(self::DATA_DIR . 'journal.log', $dataLog, FILE_APPEND);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ if ($this->getData(['core', 'dataVersion']) < 10200) {
|
|||||||
}
|
}
|
||||||
// Créer les en-têtes du journal
|
// Créer les en-têtes du journal
|
||||||
$d = 'Date;Heure;IP;Id;Action' . PHP_EOL;
|
$d = 'Date;Heure;IP;Id;Action' . PHP_EOL;
|
||||||
file_put_contents(self::DATA_DIR . 'journal.log', $d);
|
$this->secure_file_put_contents(self::DATA_DIR . 'journal.log', $d);
|
||||||
// Init préservation htaccess
|
// Init préservation htaccess
|
||||||
$this->setData(['config', 'autoUpdateHtaccess', false]);
|
$this->setData(['config', 'autoUpdateHtaccess', false]);
|
||||||
// Options de barre de membre simple
|
// Options de barre de membre simple
|
||||||
@ -459,7 +459,7 @@ if ($this->getData(['core', 'dataVersion']) < 11000) {
|
|||||||
}
|
}
|
||||||
foreach ($hierarchy as $parentKey => $parent) {
|
foreach ($hierarchy as $parentKey => $parent) {
|
||||||
$content = $this->getData(['page', $parent, 'content']);
|
$content = $this->getData(['page', $parent, 'content']);
|
||||||
//file_put_contents(self::DATA_DIR . self::$siteContent . '/content/' . $parent . '.html', $content);
|
//$this->secure_file_put_contents(self::DATA_DIR . self::$siteContent . '/content/' . $parent . '.html', $content);
|
||||||
$this->setPage($parent, $content, 'fr');
|
$this->setPage($parent, $content, 'fr');
|
||||||
$this->setData(['page', $parent, 'content', $parent . '.html']);
|
$this->setData(['page', $parent, 'content', $parent . '.html']);
|
||||||
}
|
}
|
||||||
@ -982,7 +982,7 @@ if ($this->getData(['core', 'dataVersion']) < 12309) {
|
|||||||
$d = json_decode(file_get_contents(self::DATA_DIR . $key . '/locale.json'), true);
|
$d = json_decode(file_get_contents(self::DATA_DIR . $key . '/locale.json'), true);
|
||||||
$d = array_merge($d['locale'], ['poweredPageLabel' => 'Motorisé par']);
|
$d = array_merge($d['locale'], ['poweredPageLabel' => 'Motorisé par']);
|
||||||
$t['locale'] = $d;
|
$t['locale'] = $d;
|
||||||
file_put_contents(self::DATA_DIR . $key . '/locale.json', json_encode($t));
|
$this->secure_file_put_contents(self::DATA_DIR . $key . '/locale.json', $t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1068,7 +1068,7 @@ if ($this->getData(['core', 'dataVersion']) < 13000) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$_SESSION['ZWII_CONTENT'] = $currentlanguage;
|
$_SESSION['ZWII_SITE_CONTENT'] = $currentlanguage;
|
||||||
|
|
||||||
// Supprime la clé OpenOgraph
|
// Supprime la clé OpenOgraph
|
||||||
$this->deleteData(['config', 'seo', 'keyApi']);
|
$this->deleteData(['config', 'seo', 'keyApi']);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -54,7 +54,7 @@
|
|||||||
if (
|
if (
|
||||||
$this->getData(['theme', 'menu', 'position']) === 'top'
|
$this->getData(['theme', 'menu', 'position']) === 'top'
|
||||||
and $this->getData(['theme', 'menu', 'fixed']) === true
|
and $this->getData(['theme', 'menu', 'fixed']) === true
|
||||||
and $this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
and $this->isConnected() === true
|
||||||
and $this->getUser('group') > self::GROUP_MEMBER
|
and $this->getUser('group') > self::GROUP_MEMBER
|
||||||
) {
|
) {
|
||||||
echo '<nav id="navfixedconnected" >';
|
echo '<nav id="navfixedconnected" >';
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
@ -22,7 +22,7 @@ class config extends common
|
|||||||
'copyBackups' => self::GROUP_ADMIN,
|
'copyBackups' => self::GROUP_ADMIN,
|
||||||
'delBackups' => self::GROUP_ADMIN,
|
'delBackups' => self::GROUP_ADMIN,
|
||||||
'configMetaImage' => self::GROUP_ADMIN,
|
'configMetaImage' => self::GROUP_ADMIN,
|
||||||
'siteMap' => self::GROUP_ADMIN,
|
'sitemap' => self::GROUP_ADMIN,
|
||||||
'index' => self::GROUP_ADMIN,
|
'index' => self::GROUP_ADMIN,
|
||||||
'restore' => self::GROUP_ADMIN,
|
'restore' => self::GROUP_ADMIN,
|
||||||
'updateBaseUrl' => self::GROUP_ADMIN,
|
'updateBaseUrl' => self::GROUP_ADMIN,
|
||||||
@ -30,7 +30,8 @@ class config extends common
|
|||||||
'logReset' => self::GROUP_ADMIN,
|
'logReset' => self::GROUP_ADMIN,
|
||||||
'logDownload' => self::GROUP_ADMIN,
|
'logDownload' => self::GROUP_ADMIN,
|
||||||
'blacklistReset' => self::GROUP_ADMIN,
|
'blacklistReset' => self::GROUP_ADMIN,
|
||||||
'blacklistDownload' => self::GROUP_ADMIN
|
'blacklistDownload' => self::GROUP_ADMIN,
|
||||||
|
'register' => self::GROUP_ADMIN,
|
||||||
];
|
];
|
||||||
|
|
||||||
public static $timezones = [
|
public static $timezones = [
|
||||||
@ -211,7 +212,7 @@ class config extends common
|
|||||||
* Sitemap compressé et non compressé
|
* Sitemap compressé et non compressé
|
||||||
* Robots.txt
|
* Robots.txt
|
||||||
*/
|
*/
|
||||||
public function siteMap()
|
public function sitemap()
|
||||||
{
|
{
|
||||||
// La page n'existe pas
|
// La page n'existe pas
|
||||||
if (
|
if (
|
||||||
@ -523,7 +524,7 @@ class config extends common
|
|||||||
) {
|
) {
|
||||||
// Ajout des lignes dans le .htaccess
|
// Ajout des lignes dans le .htaccess
|
||||||
$fileContent = file_get_contents('.htaccess');
|
$fileContent = file_get_contents('.htaccess');
|
||||||
$rewriteData = PHP_EOL .
|
$rewriteData =
|
||||||
'# URL rewriting' . PHP_EOL .
|
'# URL rewriting' . PHP_EOL .
|
||||||
'<IfModule mod_rewrite.c>' . PHP_EOL .
|
'<IfModule mod_rewrite.c>' . PHP_EOL .
|
||||||
"\tRewriteEngine on" . PHP_EOL .
|
"\tRewriteEngine on" . PHP_EOL .
|
||||||
@ -532,9 +533,9 @@ class config extends common
|
|||||||
"\tRewriteCond %{REQUEST_FILENAME} !-d" . PHP_EOL .
|
"\tRewriteCond %{REQUEST_FILENAME} !-d" . PHP_EOL .
|
||||||
"\tRewriteRule ^(.*)$ index.php?$1 [L]" . PHP_EOL .
|
"\tRewriteRule ^(.*)$ index.php?$1 [L]" . PHP_EOL .
|
||||||
'</IfModule>' . PHP_EOL .
|
'</IfModule>' . PHP_EOL .
|
||||||
'# URL rewriting' . PHP_EOL;
|
'# URL rewriting';
|
||||||
$fileContent = str_replace('# URL rewriting', $rewriteData, $fileContent);
|
$fileContent = str_replace('# URL rewriting', $rewriteData, $fileContent);
|
||||||
file_put_contents(
|
$this->secure_file_put_contents(
|
||||||
'.htaccess',
|
'.htaccess',
|
||||||
$fileContent
|
$fileContent
|
||||||
);
|
);
|
||||||
@ -550,7 +551,7 @@ class config extends common
|
|||||||
$fileContent = file_get_contents('.htaccess');
|
$fileContent = file_get_contents('.htaccess');
|
||||||
$fileContent = explode('# URL rewriting', $fileContent);
|
$fileContent = explode('# URL rewriting', $fileContent);
|
||||||
$fileContent = $fileContent[0] . '# URL rewriting' . $fileContent[2];
|
$fileContent = $fileContent[0] . '# URL rewriting' . $fileContent[2];
|
||||||
file_put_contents(
|
$this->secure_file_put_contents(
|
||||||
'.htaccess',
|
'.htaccess',
|
||||||
$fileContent
|
$fileContent
|
||||||
);
|
);
|
||||||
@ -585,7 +586,7 @@ class config extends common
|
|||||||
|
|
||||||
// Variable de version
|
// Variable de version
|
||||||
if (helper::checkNewVersion(common::ZWII_UPDATE_CHANNEL)) {
|
if (helper::checkNewVersion(common::ZWII_UPDATE_CHANNEL)) {
|
||||||
self::$updateButtonText = helper::translate('Mettre à jour');
|
self::$updateButtonText = helper::translate('Mise à jour');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -654,10 +655,10 @@ class config extends common
|
|||||||
) {
|
) {
|
||||||
// Ecrire les fichiers de script
|
// Ecrire les fichiers de script
|
||||||
if ($this->geturl(2) === 'head') {
|
if ($this->geturl(2) === 'head') {
|
||||||
file_put_contents(self::DATA_DIR . 'head.inc.html', $this->getInput('configScriptHead', null));
|
$this->secure_file_put_contents(self::DATA_DIR . 'head.inc.html', $this->getInput('configScriptHead', null));
|
||||||
}
|
}
|
||||||
if ($this->geturl(2) === 'body') {
|
if ($this->geturl(2) === 'body') {
|
||||||
file_put_contents(self::DATA_DIR . 'body.inc.html', $this->getInput('configScriptBody', null));
|
$this->secure_file_put_contents(self::DATA_DIR . 'body.inc.html', $this->getInput('configScriptBody', null));
|
||||||
}
|
}
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
@ -699,7 +700,7 @@ class config extends common
|
|||||||
unlink(self::DATA_DIR . 'journal.log');
|
unlink(self::DATA_DIR . 'journal.log');
|
||||||
// Créer les en-têtes des journaux
|
// Créer les en-têtes des journaux
|
||||||
$d = 'Date;Heure;IP;Id;Action' . PHP_EOL;
|
$d = 'Date;Heure;IP;Id;Action' . PHP_EOL;
|
||||||
file_put_contents(self::DATA_DIR . 'journal.log', $d);
|
$this->secure_file_put_contents(self::DATA_DIR . 'journal.log', $d);
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'title' => helper::translate('Configuration'),
|
'title' => helper::translate('Configuration'),
|
||||||
@ -775,15 +776,15 @@ class config extends common
|
|||||||
ob_start();
|
ob_start();
|
||||||
$fileName = self::TEMP_DIR . 'blacklist.log';
|
$fileName = self::TEMP_DIR . 'blacklist.log';
|
||||||
$d = 'Date dernière tentative;Heure dernière tentative;Id;Adresse IP;Nombre d\'échecs' . PHP_EOL;
|
$d = 'Date dernière tentative;Heure dernière tentative;Id;Adresse IP;Nombre d\'échecs' . PHP_EOL;
|
||||||
file_put_contents($fileName, $d);
|
$this->secure_file_put_contents($fileName, $d);
|
||||||
if (file_exists($fileName)) {
|
if (file_exists($fileName)) {
|
||||||
$d = $this->getData(['blacklist']);
|
$d = $this->getData(['blacklist']);
|
||||||
$data = '';
|
$data = '';
|
||||||
foreach ($d as $key => $item) {
|
foreach ($d as $key => $item) {
|
||||||
$data .= helper::dateUTF8('%Y %m %d', $item['lastFail'], self::$siteContent) . ' - ' . helper::dateUTF8('%H:%M', time(), self::$siteContent);
|
$data .= helper::dateUTF8('%Y %m %d', $item['lastFail'], self::$i18nUI) . ' - ' . helper::dateUTF8('%H:%M', time(), self::$i18nUI);
|
||||||
$data .= $key . ';' . $item['ip'] . ';' . $item['connectFail'] . PHP_EOL;
|
$data .= $key . ';' . $item['ip'] . ';' . $item['connectFail'] . PHP_EOL;
|
||||||
}
|
}
|
||||||
file_put_contents($fileName, $data, FILE_APPEND);
|
$this->secure_file_put_contents($fileName, $data, FILE_APPEND);
|
||||||
header('Content-Description: File Transfer');
|
header('Content-Description: File Transfer');
|
||||||
header('Content-Type: application/octet-stream');
|
header('Content-Type: application/octet-stream');
|
||||||
header('Content-Transfer-Encoding: binary');
|
header('Content-Transfer-Encoding: binary');
|
||||||
@ -902,4 +903,41 @@ class config extends common
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fonction pour vérifier la présence du module de réécriture
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isModRewriteEnabled()
|
||||||
|
{
|
||||||
|
// Check if Apache and mod_rewrite is loaded
|
||||||
|
if (function_exists('apache_get_modules')) {
|
||||||
|
$modules = apache_get_modules();
|
||||||
|
return in_array('mod_rewrite', $modules);
|
||||||
|
} else {
|
||||||
|
// Fallback if not using Apache or unable to detect modules
|
||||||
|
return getenv('HTTP_MOD_REWRITE') == 'On' || getenv('REDIRECT_STATUS') == '200';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stocke la variable dans les paramètres de l'utilisateur pour activer la tab à sa prochaine visite
|
||||||
|
* @return never
|
||||||
|
*/
|
||||||
|
public function register(): void
|
||||||
|
{
|
||||||
|
$this->setData([
|
||||||
|
'user',
|
||||||
|
$this->getUser('id'),
|
||||||
|
'view',
|
||||||
|
[
|
||||||
|
'config' => $this->getUrl(2),
|
||||||
|
'page' => $this->getData(['user', $this->getUser('id'), 'view', 'page']),
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . 'config/' . $this->getUrl(2),
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
4
core/module/config/tool/.htaccess
Normal file
4
core/module/config/tool/.htaccess
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<Files "data.key">
|
||||||
|
Order Allow,Deny
|
||||||
|
Deny from all
|
||||||
|
</Files>
|
47
core/module/config/tool/autobackup.php
Normal file
47
core/module/config/tool/autobackup.php
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
Ce script PHP est conçu pour être appelé via une requête HTTP GET avec une clé spécifique pour déclencher la création d'une archive ZIP de sauvegarde.
|
||||||
|
|
||||||
|
Exemple d'appel dans une URL :
|
||||||
|
http://example.com/chemin/vers/autobackup.php?key=your_secret_key
|
||||||
|
|
||||||
|
La clé doit être fournie en tant que paramètre "key" dans l'URL et correspondre à celle stockée dans le fichier "data.key" pour que la création de l'archive soit autorisée. Si la clé est valide, le script parcourt le répertoire spécifié et ajoute les fichiers à l'archive ZIP. Si la clé est invalide ou absente, le script affiche un message d'erreur et termine son exécution.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Vérification de la clé
|
||||||
|
if (isset ($_GET['key'])) {
|
||||||
|
$key = $_GET['key'];
|
||||||
|
$storedKey = file_get_contents('data.key');
|
||||||
|
if ($key !== $storedKey) {
|
||||||
|
http_response_code(401);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
// Création du ZIP
|
||||||
|
$filter = ['backup', 'tmp'];
|
||||||
|
$fileName = date('Y-m-d-H-i-s', time()) . '-rolling-backup.zip';
|
||||||
|
$zip = new ZipArchive();
|
||||||
|
$zip->open('../../../../site/backup/' . $fileName, ZipArchive::CREATE | ZipArchive::OVERWRITE);
|
||||||
|
$directory = '../../../../site';
|
||||||
|
$files = new RecursiveIteratorIterator(
|
||||||
|
new RecursiveCallbackFilterIterator(
|
||||||
|
new RecursiveDirectoryIterator(
|
||||||
|
$directory,
|
||||||
|
RecursiveDirectoryIterator::SKIP_DOTS
|
||||||
|
),
|
||||||
|
function ($fileInfo, $key, $iterator) use ($filter) {
|
||||||
|
return $fileInfo->isFile() || !in_array($fileInfo->getBaseName(), $filter);
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
foreach ($files as $name => $file) {
|
||||||
|
if (!$file->isDir()) {
|
||||||
|
$filePath = $file->getRealPath();
|
||||||
|
$relativePath = substr($filePath, strlen(realpath($directory)) + 1);
|
||||||
|
$zip->addFile($filePath, $relativePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$zip->close();
|
||||||
|
http_response_code(201);
|
||||||
|
}
|
49
core/module/config/tool/cleanautobackup.php
Normal file
49
core/module/config/tool/cleanautobackup.php
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
Ce script PHP est conçu pour supprimer les fichiers ayant l'extension 'tar.gz' dans un répertoire de sauvegarde si leur dernière modification remonte à un certain nombre de jours spécifié via une requête HTTP GET.
|
||||||
|
|
||||||
|
Exemple d'appel dans une URL avec le nombre de jours spécifié :
|
||||||
|
http://example.com/chemin/vers/script.php?days=7&key=your_secret_key
|
||||||
|
|
||||||
|
Le script vérifie également la présence et la validité d'une clé spécifique pour déclencher son exécution. La clé doit être fournie en tant que paramètre "key" dans l'URL et correspondre à celle stockée dans le fichier "data.key" pour que la suppression des fichiers soit autorisée. Si la clé est invalide ou absente, le script affiche un message d'erreur et termine son exécution.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Vérification de la clé
|
||||||
|
if (isset ($_GET['key'])) {
|
||||||
|
// Récupération de la clé fournie en GET
|
||||||
|
$key = $_GET['key'];
|
||||||
|
|
||||||
|
// Récupération de la clé stockée dans le fichier data.key
|
||||||
|
$storedKey = file_get_contents('data.key');
|
||||||
|
|
||||||
|
// Vérification de correspondance entre les clés
|
||||||
|
if ($key !== $storedKey) {
|
||||||
|
http_response_code(401);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Récupère le nombre de jours à partir de la variable GET 'days'
|
||||||
|
$days = isset ($_GET['days']) ? (int) $_GET['days'] : 1; // Par défaut à 1 si non spécifié
|
||||||
|
|
||||||
|
// Chemin vers le répertoire contenant les fichiers
|
||||||
|
$directory = '../../../../site/backup/'; // Remplacez par le chemin réel
|
||||||
|
|
||||||
|
// Convertit le nombre de jours en secondes
|
||||||
|
$timeLimit = strtotime("-$days days");
|
||||||
|
|
||||||
|
// Crée un nouvel objet DirectoryIterator
|
||||||
|
foreach (new DirectoryIterator($directory) as $file) {
|
||||||
|
// Vérifie si l'élément courant est un fichier et a l'extension 'tar.gz'
|
||||||
|
if ($file->isFile() && $file->getExtension() === 'tar.gz') {
|
||||||
|
// Vérifie si le fichier a été modifié avant la limite de temps
|
||||||
|
if ($file->getMTime() < $timeLimit) {
|
||||||
|
// Supprime le fichier
|
||||||
|
unlink($file->getRealPath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Si la clé est manquante, affiche un message d'erreur et arrête l'exécution du script
|
||||||
|
http_response_code(201);
|
||||||
|
}
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*
|
*
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*
|
*
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
@ -66,11 +66,11 @@ $(document).ready(function () {
|
|||||||
$("#connectCaptchaStrong").prop("checked", false);
|
$("#connectCaptchaStrong").prop("checked", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
var configLayout = getCookie("configLayout");
|
var configLayout = "<?php echo $this->getData(['user', $this->getUser('id'), 'view', 'config']);?>";
|
||||||
if (configLayout == null) {
|
// Non défini, valeur par défaut
|
||||||
|
if (configLayout == "") {
|
||||||
configLayout = "setup";
|
configLayout = "setup";
|
||||||
setCookie("configLayout", "setup");
|
}
|
||||||
}
|
|
||||||
|
|
||||||
$("#socialContainer").hide();
|
$("#socialContainer").hide();
|
||||||
$("#connectContainer").hide();
|
$("#connectContainer").hide();
|
||||||
@ -166,7 +166,6 @@ $(document).ready(function () {
|
|||||||
$("#configSocialButton").removeClass("activeButton");
|
$("#configSocialButton").removeClass("activeButton");
|
||||||
$("#configConnectButton").removeClass("activeButton");
|
$("#configConnectButton").removeClass("activeButton");
|
||||||
$("#configNetworkButton").removeClass("activeButton");
|
$("#configNetworkButton").removeClass("activeButton");
|
||||||
setCookie("configLayout", "setup");
|
|
||||||
});
|
});
|
||||||
$("#configSocialButton").on("click", function () {
|
$("#configSocialButton").on("click", function () {
|
||||||
$("#connectContainer").hide();
|
$("#connectContainer").hide();
|
||||||
@ -177,7 +176,6 @@ $(document).ready(function () {
|
|||||||
$("#configSocialButton").addClass("activeButton");
|
$("#configSocialButton").addClass("activeButton");
|
||||||
$("#configConnectButton").removeClass("activeButton");
|
$("#configConnectButton").removeClass("activeButton");
|
||||||
$("#configNetworkButton").removeClass("activeButton");
|
$("#configNetworkButton").removeClass("activeButton");
|
||||||
setCookie("configLayout", "social");
|
|
||||||
});
|
});
|
||||||
$("#configConnectButton").on("click", function () {
|
$("#configConnectButton").on("click", function () {
|
||||||
$("#setupContainer").hide();
|
$("#setupContainer").hide();
|
||||||
@ -188,7 +186,6 @@ $(document).ready(function () {
|
|||||||
$("#configSocialButton").removeClass("activeButton");
|
$("#configSocialButton").removeClass("activeButton");
|
||||||
$("#configConnectButton").addClass("activeButton");
|
$("#configConnectButton").addClass("activeButton");
|
||||||
$("#configNetworkButton").removeClass("activeButton");
|
$("#configNetworkButton").removeClass("activeButton");
|
||||||
setCookie("configLayout", "connect");
|
|
||||||
});
|
});
|
||||||
$("#configNetworkButton").on("click", function () {
|
$("#configNetworkButton").on("click", function () {
|
||||||
$("#setupContainer").hide();
|
$("#setupContainer").hide();
|
||||||
@ -199,7 +196,6 @@ $(document).ready(function () {
|
|||||||
$("#configSocialButton").removeClass("activeButton");
|
$("#configSocialButton").removeClass("activeButton");
|
||||||
$("#configConnectButton").removeClass("activeButton");
|
$("#configConnectButton").removeClass("activeButton");
|
||||||
$("#configNetworkButton").addClass("activeButton");
|
$("#configNetworkButton").addClass("activeButton");
|
||||||
setCookie("configLayout", "network");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -265,7 +261,6 @@ $(document).ready(function () {
|
|||||||
$('span#screenWeight').each(function(index){
|
$('span#screenWeight').each(function(index){
|
||||||
var weight = parseFloat($(this).text());
|
var weight = parseFloat($(this).text());
|
||||||
var fileType = $('span#screenType').eq(index).text();
|
var fileType = $('span#screenType').eq(index).text();
|
||||||
console.log(weight);
|
|
||||||
if ((fileType === "jpg" || fileType === "jpeg") && weight < 5000000) {
|
if ((fileType === "jpg" || fileType === "jpeg") && weight < 5000000) {
|
||||||
$(this).css("color", "green");
|
$(this).css("color", "green");
|
||||||
} else {
|
} else {
|
||||||
@ -286,28 +281,6 @@ console.log(weight);
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
function setCookie(name, value, days) {
|
|
||||||
var expires = "";
|
|
||||||
if (days) {
|
|
||||||
var date = new Date();
|
|
||||||
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
|
||||||
expires = "; expires=" + date.toUTCString();
|
|
||||||
}
|
|
||||||
document.cookie = name + "=" + (value || "") + expires + "; path=/; samesite=lax";
|
|
||||||
}
|
|
||||||
|
|
||||||
function getCookie(name) {
|
|
||||||
var nameEQ = name + "=";
|
|
||||||
var ca = document.cookie.split(';');
|
|
||||||
for (var i = 0; i < ca.length; i++) {
|
|
||||||
var c = ca[i];
|
|
||||||
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
|
|
||||||
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Define function to capitalize the first letter of a string
|
// Define function to capitalize the first letter of a string
|
||||||
function capitalizeFirstLetter(string) {
|
function capitalizeFirstLetter(string) {
|
||||||
return string.charAt(0).toUpperCase() + string.slice(1);
|
return string.charAt(0).toUpperCase() + string.slice(1);
|
||||||
|
@ -7,15 +7,6 @@
|
|||||||
'value' => template::ico('home')
|
'value' => template::ico('home')
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col1">
|
|
||||||
<?php /**echo template::button('configHelp', [
|
|
||||||
'class' => 'buttonHelp',
|
|
||||||
'href' => 'https://doc.zwiicms.fr/configuration-du-site',
|
|
||||||
'target' => '_blank',
|
|
||||||
'value' => template::ico('help'),
|
|
||||||
'help' => 'Consulter l\'aide en ligne'
|
|
||||||
]); */?>
|
|
||||||
</div>
|
|
||||||
<div class="col2 offset6">
|
<div class="col2 offset6">
|
||||||
<?php echo template::button('configLocaleButton', [
|
<?php echo template::button('configLocaleButton', [
|
||||||
'value' => 'Identité',
|
'value' => 'Identité',
|
||||||
@ -30,20 +21,24 @@
|
|||||||
<div class="tab">
|
<div class="tab">
|
||||||
<?php echo template::button('configSetupButton', [
|
<?php echo template::button('configSetupButton', [
|
||||||
'value' => 'Configuration',
|
'value' => 'Configuration',
|
||||||
'class' => 'buttonTab'
|
'class' => 'buttonTab',
|
||||||
|
'href' => helper::baseUrl() . 'config/register/setup'
|
||||||
]); ?>
|
]); ?>
|
||||||
<?php echo template::button('configSocialButton', [
|
<?php echo template::button('configSocialButton', [
|
||||||
'value' => 'Référencement',
|
'value' => 'Référencement',
|
||||||
'class' => 'buttonTab'
|
'class' => 'buttonTab',
|
||||||
|
'href' => helper::baseUrl() . 'config/register/social'
|
||||||
]); ?>
|
]); ?>
|
||||||
|
|
||||||
<?php echo template::button('configConnectButton', [
|
<?php echo template::button('configConnectButton', [
|
||||||
'value' => 'Connexion',
|
'value' => 'Connexion',
|
||||||
'class' => 'buttonTab'
|
'class' => 'buttonTab',
|
||||||
|
'href' => helper::baseUrl() . 'config/register/connect'
|
||||||
]); ?>
|
]); ?>
|
||||||
<?php echo template::button('configNetworkButton', [
|
<?php echo template::button('configNetworkButton', [
|
||||||
'value' => 'Réseau',
|
'value' => 'Réseau',
|
||||||
'class' => 'buttonTab'
|
'class' => 'buttonTab',
|
||||||
|
'href' => helper::baseUrl() . 'config/register/network'
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*
|
*
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
'value' => template::ico('left')
|
'value' => template::ico('left')
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col2 offset8">
|
<div class="col2 offset9">
|
||||||
<?php echo template::submit('configManageSubmit', [
|
<?php echo template::submit('configManageSubmit', [
|
||||||
'value' => 'Valider',
|
'value' => 'Valider',
|
||||||
'ico' => 'check'
|
'ico' => 'check'
|
||||||
|
@ -3,12 +3,6 @@
|
|||||||
<div class="col12">
|
<div class="col12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4><?php echo helper::translate('Paramètres'); ?>
|
<h4><?php echo helper::translate('Paramètres'); ?>
|
||||||
<!--<span id="setupHelpButton" class="helpDisplayButton">
|
|
||||||
<a href="https://doc.zwiicms.fr/parametres" target="_blank" title="Cliquer pour consulter l'aide en ligne">
|
|
||||||
<?php //echo template::ico('help', ['margin' => 'left']);
|
|
||||||
?>
|
|
||||||
</a>-->
|
|
||||||
</span>
|
|
||||||
</h4>
|
</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
@ -17,7 +11,8 @@
|
|||||||
'language' => $this->getData(['user', $this->getUser('id'), 'language']),
|
'language' => $this->getData(['user', $this->getUser('id'), 'language']),
|
||||||
'help' => 'Pensez à supprimer le cache de votre navigateur si la favicon ne change pas.',
|
'help' => 'Pensez à supprimer le cache de votre navigateur si la favicon ne change pas.',
|
||||||
'label' => 'Favicon',
|
'label' => 'Favicon',
|
||||||
'value' => $this->getData(['config', 'favicon'])
|
'value' => $this->getData(['config', 'favicon']),
|
||||||
|
'folder' => $this->getData(['config', 'favicon']) ? dirname($this->getData(['config', 'favicon'])) : ''
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
@ -26,7 +21,8 @@
|
|||||||
'language' => $this->getData(['user', $this->getUser('id'), 'language']),
|
'language' => $this->getData(['user', $this->getUser('id'), 'language']),
|
||||||
'help' => 'Sélectionnez une icône adaptée à un thème sombre.<br>Pensez à supprimer le cache de votre navigateur si la favicon ne change pas.',
|
'help' => 'Sélectionnez une icône adaptée à un thème sombre.<br>Pensez à supprimer le cache de votre navigateur si la favicon ne change pas.',
|
||||||
'label' => 'Favicon thème sombre',
|
'label' => 'Favicon thème sombre',
|
||||||
'value' => $this->getData(['config', 'faviconDark'])
|
'value' => $this->getData(['config', 'faviconDark']),
|
||||||
|
'folder' => $this->getData(['config', 'faviconDark']) ? dirname($this->getData(['config', 'faviconDark'])) : ''
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
@ -47,8 +43,8 @@
|
|||||||
<div class="col6">
|
<div class="col6">
|
||||||
<?php echo template::checkbox('configRewrite', true, 'Apache URL intelligentes', [
|
<?php echo template::checkbox('configRewrite', true, 'Apache URL intelligentes', [
|
||||||
'checked' => helper::checkRewrite(),
|
'checked' => helper::checkRewrite(),
|
||||||
'help' => 'Supprime le point d\'interrogation dans les URL, l\'option est indisponible avec les autres serveurs Web',
|
'help' => 'Supprime le point d\'interrogation dans les URL, l\'option est indisponible avec les autres serveurs Web',
|
||||||
'disabled' => stripos($_SERVER["SERVER_SOFTWARE"], 'nginx')
|
'disabled' => stripos($_SERVER["SERVER_SOFTWARE"], 'Apache') === false and $module->isModRewriteEnabled()
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -59,12 +55,6 @@
|
|||||||
<div class="col12">
|
<div class="col12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4><?php echo helper::translate('Mise à jour automatisée'); ?>
|
<h4><?php echo helper::translate('Mise à jour automatisée'); ?>
|
||||||
<!--<span id="updateHelpButton" class="helpDisplayButton">
|
|
||||||
<a href="https://doc.zwiicms.fr/mise-a-jour" target="_blank" title="Cliquer pour consulter l'aide en ligne">
|
|
||||||
<?php //echo template::ico('help', ['margin' => 'left']);
|
|
||||||
?>
|
|
||||||
</a>
|
|
||||||
</span>-->
|
|
||||||
</h4>
|
</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
@ -90,8 +80,8 @@
|
|||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col3 offset1 verticalAlignBottom">
|
<div class="col3 offset1 verticalAlignBottom">
|
||||||
<pre>Version installée : <strong><?php echo common::ZWII_VERSION ; ?></strong></pre>
|
<pre>Version installée : <strong><?php echo common::ZWII_VERSION; ?></strong></pre>
|
||||||
<pre>Version en ligne : <strong><?php echo helper::getOnlineVersion(common::ZWII_UPDATE_CHANNEL) ; ?></strong></pre>
|
<pre>Version en ligne : <strong><?php echo helper::getOnlineVersion(common::ZWII_UPDATE_CHANNEL); ?></strong></pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="col3 offset2 verticalAlignBottom">
|
<div class="col3 offset2 verticalAlignBottom">
|
||||||
<?php echo template::button('configUpdateForced', [
|
<?php echo template::button('configUpdateForced', [
|
||||||
@ -109,12 +99,6 @@
|
|||||||
<div class="col12">
|
<div class="col12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4><?php echo helper::translate('Maintenance'); ?>
|
<h4><?php echo helper::translate('Maintenance'); ?>
|
||||||
<!--<span id="maintenanceHelpButton" class="helpDisplayButton">
|
|
||||||
<a href="https://doc.zwiicms.fr/mode-maintenance" target="_blank" title="Cliquer pour consulter l'aide en ligne">
|
|
||||||
<?php //echo template::ico('help', ['margin' => 'left']);
|
|
||||||
?>
|
|
||||||
</a>
|
|
||||||
</span>-->
|
|
||||||
</h4>
|
</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
@ -169,12 +153,6 @@
|
|||||||
<div class="col12">
|
<div class="col12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4><?php echo helper::translate('Scripts externes'); ?>
|
<h4><?php echo helper::translate('Scripts externes'); ?>
|
||||||
<!--<span id="specialeHelpButton" class="helpDisplayButton">
|
|
||||||
<a href="https://doc.zwiicms.fr/scripts-externes" target="_blank" title="Cliquer pour consulter l'aide en ligne">
|
|
||||||
<?php //echo template::ico('help', ['margin' => 'left']);
|
|
||||||
?>
|
|
||||||
</a>
|
|
||||||
</span>-->
|
|
||||||
</h4>
|
</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col4 offset1 verticalAlignBottom">
|
<div class="col4 offset1 verticalAlignBottom">
|
||||||
@ -198,13 +176,21 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col12">
|
<div class="col12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4>ZwiiCMS <a href="https://zwiicms.fr" target="_blank">Site Web</a> - <a href="https://forum.zwiicms.fr" target="_blank">Forum</a>
|
<h4>ZwiiCMS <a href="https://zwiicms.fr" target="_blank">Site Web</a> - <a
|
||||||
|
href="https://forum.zwiicms.fr" target="_blank">Forum</a>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="row textAlignCenter">
|
<div class="row textAlignCenter">
|
||||||
<div class="col12">
|
<div class="col12">
|
||||||
<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-nd/4.0/88x31.png" /></a>
|
<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/4.0/"><img
|
||||||
<p>Cette œuvre est mise à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/4.0/">Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Pas de Modification 4.0 International.</a></p>
|
alt="Licence Creative Commons" style="border-width:0"
|
||||||
<p>Pour voir une copie de cette licence, visitez http://creativecommons.org/licenses/by-nc-nd/4.0/ ou écrivez à Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</p>
|
src="https://i.creativecommons.org/l/by-nc-nd/4.0/88x31.png" /></a>
|
||||||
|
<p>Cette œuvre est mise à disposition selon les termes de la <a rel="license"
|
||||||
|
href="http://creativecommons.org/licenses/by-nc-nd/4.0/">Licence Creative Commons
|
||||||
|
Attribution - Pas d'Utilisation Commerciale - Pas de Modification 4.0
|
||||||
|
International.</a></p>
|
||||||
|
<p>Pour voir une copie de cette licence, visitez
|
||||||
|
http://creativecommons.org/licenses/by-nc-nd/4.0/ ou écrivez à Creative Commons, PO Box
|
||||||
|
1866, Mountain View, CA 94042, USA.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -4,11 +4,6 @@
|
|||||||
<div class="block">
|
<div class="block">
|
||||||
<h4>
|
<h4>
|
||||||
<?php echo helper::translate('Capture d\'écran Open Graph'); ?>
|
<?php echo helper::translate('Capture d\'écran Open Graph'); ?>
|
||||||
<!--<span id="specialeHelpButton" class="helpDisplayButton">
|
|
||||||
<a href="https://doc.zwiicms.fr/referencement" target="_blank" title="Cliquer pour consulter l'aide en ligne">
|
|
||||||
<?php //echo template::ico('help', ['margin' => 'left']); ?>
|
|
||||||
</a>
|
|
||||||
</span>-->
|
|
||||||
</h4>
|
</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
@ -18,29 +13,30 @@
|
|||||||
'language' => $this->getData(['user', $this->getUser('id'), 'language']),
|
'language' => $this->getData(['user', $this->getUser('id'), 'language']),
|
||||||
'label' => 'Image Open Graph',
|
'label' => 'Image Open Graph',
|
||||||
'value' => $this->getData(['config', 'seo', 'openGraphImage']),
|
'value' => $this->getData(['config', 'seo', 'openGraphImage']),
|
||||||
|
'folder' => $this->getData(['config', 'seo', 'openGraphImage']) ? dirname($this->getData(['config', 'seo', 'openGraphImage'])) : '',
|
||||||
'type' => 1,
|
'type' => 1,
|
||||||
'help' => sprintf('%s : JPG - PNG<br />', helper::translate('Format')) .
|
'help' => sprintf('%s : JPG - PNG<br />', helper::translate('Format')) .
|
||||||
sprintf('%s : 1200 x 630 pixels<br />', helper::translate('Dimensions minimales')) .
|
sprintf('%s : 1200 x 630 pixels<br />', helper::translate('Dimensions minimales')) .
|
||||||
sprintf('%s : 1.91:1<br />', helper::translate('Ratio')) .
|
sprintf('%s : 1.91:1<br />', helper::translate('Ratio')) .
|
||||||
sprintf('%s : %s, %s<br />', helper::translate('Taille maximale du fichier'), helper::translate('5 Mo pour les images JPEG'), helper::translate('1 Mo pour les images PNG'))
|
sprintf('%s : %s, %s<br />', helper::translate('Taille maximale du fichier'), helper::translate('5 Mo pour les images JPEG'), helper::translate('1 Mo pour les images PNG'))
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col10 textAlignCenter">
|
<div class="col10 textAlignCenter">
|
||||||
<?php if( $module::$imageOpenGraph['type']): ?>
|
<?php if( !empty($module::$imageOpenGraph['type']) ): ?>
|
||||||
<p>
|
<p>
|
||||||
<?php echo sprintf('%s : <span id="screenType">%s</span>', helper::translate('Format'), $module::$imageOpenGraph['type']); ?>
|
<?php echo sprintf('%s : <span id="screenType">%s</span>', helper::translate('Format'), $module::$imageOpenGraph['type']); ?>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<?php echo sprintf('%s : <span id="screenWide">%s</span> x <span id="screenHeight">%s</span> pixels', helper::translate('Dimensions minimales'), $module::$imageOpenGraph['wide'], $module::$imageOpenGraph['height'] ); ?>
|
<?php echo sprintf('%s : <span id="screenWide">%s</span> x <span id="screenHeight">%s</span> pixels', helper::translate('Dimensions minimales'), $module::$imageOpenGraph['wide'], $module::$imageOpenGraph['height'] ); ?>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<?php echo sprintf('%s : <span id="screenRatio">%s</span><span id="screenFract">:1</span>' , helper::translate('Ratio'), round($module::$imageOpenGraph['ratio'], 2)); ?>
|
<?php echo sprintf('%s : <span id="screenRatio">%s</span><span id="screenFract">:1</span>' , helper::translate('Ratio'), round($module::$imageOpenGraph['ratio'], 2)); ?>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<?php echo sprintf('%s : <span id="screenWeight">%s</span>', helper::translate('Poids'), $module::$imageOpenGraph['size']); ?>
|
<?php echo sprintf('%s : <span id="screenWeight">%s</span>', helper::translate('Poids'), $module::$imageOpenGraph['size']); ?>
|
||||||
</p>
|
</p>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -84,12 +80,6 @@
|
|||||||
<div class="col12">
|
<div class="col12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4>
|
<h4>
|
||||||
<?php echo helper::translate('Réseaux sociaux'); ?>
|
|
||||||
<!--<span id="specialeHelpButton" class="helpDisplayButton">
|
|
||||||
<a href="https://doc.zwiicms.fr/reseaux-sociaux" target="_blank" title="Cliquer pour consulter l'aide en ligne">
|
|
||||||
<?php //echo template::ico('help', ['margin' => 'left']); ?>
|
|
||||||
</a>
|
|
||||||
</span>-->
|
|
||||||
</h4>
|
</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col3">
|
<div class="col3">
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
@ -119,24 +119,24 @@ class install extends common
|
|||||||
self::$i18nUI = $_SESSION['ZWII_UI'];
|
self::$i18nUI = $_SESSION['ZWII_UI'];
|
||||||
self::$i18nUI = array_key_exists(self::$i18nUI, self::$languages) ? self::$i18nUI : 'fr_FR';
|
self::$i18nUI = array_key_exists(self::$i18nUI, self::$languages) ? self::$i18nUI : 'fr_FR';
|
||||||
// par défaut le contenu est la langue d'installation
|
// par défaut le contenu est la langue d'installation
|
||||||
$_SESSION['ZWII_CONTENT'] = self::$i18nUI;
|
$_SESSION['ZWII_SITE_CONTENT'] = self::$i18nUI;
|
||||||
|
|
||||||
// Création du dossier de langue avec le marqueur de langue par défaut
|
// Création du dossier de langue avec le marqueur de langue par défaut
|
||||||
if (!is_dir(self::DATA_DIR . $_SESSION['ZWII_CONTENT'])) {
|
if (!is_dir(self::DATA_DIR . $_SESSION['ZWII_SITE_CONTENT'])) {
|
||||||
mkdir(self::DATA_DIR . $_SESSION['ZWII_CONTENT']);
|
mkdir(self::DATA_DIR . $_SESSION['ZWII_SITE_CONTENT']);
|
||||||
touch(self::DATA_DIR . $_SESSION['ZWII_CONTENT'] . '/.default');
|
touch(self::DATA_DIR . $_SESSION['ZWII_SITE_CONTENT'] . '/.default');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Installation du site de test
|
// Installation du site de test
|
||||||
if (
|
if (
|
||||||
$this->getInput('installDefaultData', helper::FILTER_BOOLEAN) === false
|
$this->getInput('installDefaultData', helper::FILTER_BOOLEAN) === false
|
||||||
&& $_SESSION['ZWII_CONTENT'] === 'fr_FR'
|
&& $_SESSION['ZWII_SITE_CONTENT'] === 'fr_FR'
|
||||||
) {
|
) {
|
||||||
$sample = true;
|
$sample = true;
|
||||||
}
|
}
|
||||||
$this->initData('page', $_SESSION['ZWII_CONTENT'], $sample);
|
$this->initData('page', $_SESSION['ZWII_SITE_CONTENT'], $sample);
|
||||||
$this->initData('module', $_SESSION['ZWII_CONTENT'], $sample);
|
$this->initData('module', $_SESSION['ZWII_SITE_CONTENT'], $sample);
|
||||||
$this->initData('locale', $_SESSION['ZWII_CONTENT'], $sample);
|
$this->initData('locale', $_SESSION['ZWII_SITE_CONTENT'], $sample);
|
||||||
|
|
||||||
// Création de l'utilisateur si les données sont complétées.
|
// Création de l'utilisateur si les données sont complétées.
|
||||||
// success retour de l'enregistrement des données
|
// success retour de l'enregistrement des données
|
||||||
@ -153,7 +153,7 @@ class install extends common
|
|||||||
'signature' => 1,
|
'signature' => 1,
|
||||||
'mail' => $userMail,
|
'mail' => $userMail,
|
||||||
'password' => $this->getInput('installPassword', helper::FILTER_PASSWORD, true),
|
'password' => $this->getInput('installPassword', helper::FILTER_PASSWORD, true),
|
||||||
'language' => $_SESSION['ZWII_CONTENT']
|
'language' => $_SESSION['ZWII_SITE_CONTENT']
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -172,7 +172,7 @@ class install extends common
|
|||||||
|
|
||||||
// Nettoyage fr par défaut
|
// Nettoyage fr par défaut
|
||||||
if (
|
if (
|
||||||
$_SESSION['ZWII_CONTENT'] !== 'fr_FR'
|
$_SESSION['ZWII_SITE_CONTENT'] !== 'fr_FR'
|
||||||
) {
|
) {
|
||||||
if (is_dir(self::DATA_DIR . 'fr_FR'))
|
if (is_dir(self::DATA_DIR . 'fr_FR'))
|
||||||
$this->deleteDir(self::DATA_DIR . 'fr_FR');
|
$this->deleteDir(self::DATA_DIR . 'fr_FR');
|
||||||
@ -267,14 +267,18 @@ class install extends common
|
|||||||
$message = $success ? '' : 'Erreur de copie du fichier htaccess';
|
$message = $success ? '' : 'Erreur de copie du fichier htaccess';
|
||||||
}
|
}
|
||||||
// Nettoyage des fichiers d'installation précédents
|
// Nettoyage des fichiers d'installation précédents
|
||||||
if (file_exists(self::TEMP_DIR . 'update.tar.gz') && $success) {
|
if ($success && file_exists(self::TEMP_DIR . 'update.tar.gz')) {
|
||||||
$success = unlink(self::TEMP_DIR . 'update.tar.gz');
|
$success = unlink(self::TEMP_DIR . 'update.tar.gz');
|
||||||
$message = $success ? '' : 'Impossible d\'effacer la mise à jour précédente';
|
$message = $success ? '' : 'Impossible d\'effacer la mise à jour précédente';
|
||||||
}
|
}
|
||||||
if (file_exists(self::TEMP_DIR . 'update.tar') && $success) {
|
if ($success && file_exists(self::TEMP_DIR . 'update.tar')) {
|
||||||
$success = unlink(self::TEMP_DIR . 'update.tar');
|
$success = unlink(self::TEMP_DIR . 'update.tar');
|
||||||
$message = $success ? '' : 'Impossible d\'effacer la mise à jour précédente';
|
$message = $success ? '' : 'Impossible d\'effacer la mise à jour précédente';
|
||||||
}
|
}
|
||||||
|
// Sauvegarde le message dans le journal
|
||||||
|
if (!empty($message)) {
|
||||||
|
$this->saveLog($message);
|
||||||
|
}
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'display' => self::DISPLAY_JSON,
|
'display' => self::DISPLAY_JSON,
|
||||||
@ -286,7 +290,9 @@ class install extends common
|
|||||||
break;
|
break;
|
||||||
// Téléchargement
|
// Téléchargement
|
||||||
case 2:
|
case 2:
|
||||||
file_put_contents(self::TEMP_DIR . 'update.tar.gz', helper::getUrlContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/update.tar.gz'));
|
$success = true;
|
||||||
|
$message = '';
|
||||||
|
$this->secure_file_put_contents(self::TEMP_DIR . 'update.tar.gz', helper::getUrlContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/update.tar.gz'));
|
||||||
$md5origin = helper::getUrlContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/update.md5');
|
$md5origin = helper::getUrlContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/update.md5');
|
||||||
$md5origin = explode(' ', $md5origin);
|
$md5origin = explode(' ', $md5origin);
|
||||||
$md5target = md5_file(self::TEMP_DIR . 'update.tar.gz');
|
$md5target = md5_file(self::TEMP_DIR . 'update.tar.gz');
|
||||||
@ -296,27 +302,35 @@ class install extends common
|
|||||||
$message = "";
|
$message = "";
|
||||||
} else {
|
} else {
|
||||||
$success = false;
|
$success = false;
|
||||||
$message = json_encode('Erreur de téléchargement ou de somme de contrôle', JSON_UNESCAPED_UNICODE);
|
$message = 'Erreur de téléchargement ou de somme de contrôle';
|
||||||
if (file_exists(self::TEMP_DIR . 'update.tar.gz')) {
|
if (file_exists(self::TEMP_DIR . 'update.tar.gz')) {
|
||||||
unlink(self::TEMP_DIR . 'update.tar.gz');
|
unlink(self::TEMP_DIR . 'update.tar.gz');
|
||||||
http_response_code(500);
|
http_response_code(500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Sauvegarde le message dans le journal
|
||||||
|
if (!empty($message)) {
|
||||||
|
$this->saveLog($message);
|
||||||
|
}
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'display' => self::DISPLAY_JSON,
|
'display' => self::DISPLAY_JSON,
|
||||||
'content' => [
|
'content' => [
|
||||||
'success' => $success,
|
'success' => $success,
|
||||||
'data' => $message
|
'data' => json_encode($message, JSON_UNESCAPED_UNICODE)
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
// Installation
|
// Installation
|
||||||
case 3:
|
case 3:
|
||||||
$success = true;
|
$success = true;
|
||||||
|
$message = '';
|
||||||
|
|
||||||
// Check la réécriture d'URL avant d'écraser les fichiers
|
// Check la réécriture d'URL avant d'écraser les fichiers
|
||||||
$rewrite = helper::checkRewrite();
|
if (helper::checkRewrite()) {
|
||||||
|
touch(self::DATA_DIR . '.rewrite');
|
||||||
|
}
|
||||||
|
|
||||||
// Décompression et installation
|
// Décompression et installation
|
||||||
try {
|
try {
|
||||||
// Décompression dans le dossier de fichier temporaires
|
// Décompression dans le dossier de fichier temporaires
|
||||||
@ -325,9 +339,11 @@ class install extends common
|
|||||||
// Installation
|
// Installation
|
||||||
$pharData->extractTo(__DIR__ . '/../../../', null, true);
|
$pharData->extractTo(__DIR__ . '/../../../', null, true);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
|
$message = $e->getMessage();
|
||||||
$success = false;
|
$success = false;
|
||||||
http_response_code(500);
|
http_response_code(500);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nettoyage du dossier
|
// Nettoyage du dossier
|
||||||
if (file_exists(self::TEMP_DIR . 'update.tar.gz')) {
|
if (file_exists(self::TEMP_DIR . 'update.tar.gz')) {
|
||||||
unlink(self::TEMP_DIR . 'update.tar.gz');
|
unlink(self::TEMP_DIR . 'update.tar.gz');
|
||||||
@ -335,12 +351,16 @@ class install extends common
|
|||||||
if (file_exists(self::TEMP_DIR . 'update.tar')) {
|
if (file_exists(self::TEMP_DIR . 'update.tar')) {
|
||||||
unlink(self::TEMP_DIR . 'update.tar');
|
unlink(self::TEMP_DIR . 'update.tar');
|
||||||
}
|
}
|
||||||
|
// Sauvegarde le message dans le journal
|
||||||
|
if (!empty($message)) {
|
||||||
|
$this->saveLog($message);
|
||||||
|
}
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'display' => self::DISPLAY_JSON,
|
'display' => self::DISPLAY_JSON,
|
||||||
'content' => [
|
'content' => [
|
||||||
'success' => $success,
|
'success' => $success,
|
||||||
'data' => $rewrite
|
'data' => json_encode($message, JSON_UNESCAPED_UNICODE)
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
@ -348,7 +368,6 @@ class install extends common
|
|||||||
case 4:
|
case 4:
|
||||||
$success = true;
|
$success = true;
|
||||||
$message = '';
|
$message = '';
|
||||||
$rewrite = $this->getInput('data');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restaure le fichier htaccess
|
* Restaure le fichier htaccess
|
||||||
@ -369,7 +388,7 @@ class install extends common
|
|||||||
/**
|
/**
|
||||||
* Restaure la réécriture d'URL
|
* Restaure la réécriture d'URL
|
||||||
*/
|
*/
|
||||||
if ($rewrite === 'true') { // Ajout des lignes dans le .htaccess
|
if (file_exists(self::DATA_DIR . '.rewrite')) { // Ajout des lignes dans le .htaccess
|
||||||
$fileContent = file_get_contents('.htaccess');
|
$fileContent = file_get_contents('.htaccess');
|
||||||
$rewriteData = PHP_EOL .
|
$rewriteData = PHP_EOL .
|
||||||
'# URL rewriting' . PHP_EOL .
|
'# URL rewriting' . PHP_EOL .
|
||||||
@ -382,10 +401,11 @@ class install extends common
|
|||||||
'</IfModule>' . PHP_EOL .
|
'</IfModule>' . PHP_EOL .
|
||||||
'# URL rewriting' . PHP_EOL;
|
'# URL rewriting' . PHP_EOL;
|
||||||
$fileContent = str_replace('# URL rewriting', $rewriteData, $fileContent);
|
$fileContent = str_replace('# URL rewriting', $rewriteData, $fileContent);
|
||||||
$success = file_put_contents(
|
$success = $this->secure_file_put_contents(
|
||||||
'.htaccess',
|
'.htaccess',
|
||||||
$fileContent
|
$fileContent
|
||||||
);
|
);
|
||||||
|
unlink(self::DATA_DIR . '.rewrite');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -397,7 +417,6 @@ class install extends common
|
|||||||
$defaultLanguages = init::$defaultData['language'];
|
$defaultLanguages = init::$defaultData['language'];
|
||||||
foreach ($installedLanguages as $key => $value) {
|
foreach ($installedLanguages as $key => $value) {
|
||||||
|
|
||||||
//var_dump( $defaultLanguages[$key]['date'] > $value['date'] );
|
|
||||||
if (
|
if (
|
||||||
isset($defaultLanguages[$key]['date']) &&
|
isset($defaultLanguages[$key]['date']) &&
|
||||||
$defaultLanguages[$key]['date'] > $value['date'] &&
|
$defaultLanguages[$key]['date'] > $value['date'] &&
|
||||||
@ -409,7 +428,10 @@ class install extends common
|
|||||||
$this->setData(['language', $key, $defaultLanguages[$key]]);
|
$this->setData(['language', $key, $defaultLanguages[$key]]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Sauvegarde le message dans le journal
|
||||||
|
if (!empty($message)) {
|
||||||
|
$this->saveLog($message);
|
||||||
|
}
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'display' => self::DISPLAY_JSON,
|
'display' => self::DISPLAY_JSON,
|
||||||
@ -441,7 +463,7 @@ class install extends common
|
|||||||
|
|
||||||
// Variable de version
|
// Variable de version
|
||||||
if (helper::checkNewVersion(common::ZWII_UPDATE_CHANNEL)) {
|
if (helper::checkNewVersion(common::ZWII_UPDATE_CHANNEL)) {
|
||||||
self::$updateButtonText = helper::translate('Mettre à jour');
|
self::$updateButtonText = helper::translate('Mise à jour');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** NE PAS EFFACER
|
||||||
|
* admin.css
|
||||||
|
*/
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -12,11 +12,6 @@ function step(i, data) {
|
|||||||
data: data
|
data: data
|
||||||
},
|
},
|
||||||
success: function (result) {
|
success: function (result) {
|
||||||
// if (result.success != "1") { // Vérification de la propriété "success"
|
|
||||||
// Appel de la fonction de gestion d'erreur
|
|
||||||
// showError(i, result, errors);
|
|
||||||
// return;
|
|
||||||
//}
|
|
||||||
setTimeout((function () {
|
setTimeout((function () {
|
||||||
if (4 === i) {
|
if (4 === i) {
|
||||||
$("#installUpdateSuccess").show();
|
$("#installUpdateSuccess").show();
|
||||||
@ -60,10 +55,13 @@ function showError(step, message, errors) {
|
|||||||
const jsonData = JSON.parse(jsonString);
|
const jsonData = JSON.parse(jsonString);
|
||||||
|
|
||||||
// Afficher les résultats
|
// Afficher les résultats
|
||||||
$("#installUpdateErrorMessage").html("<strong>Détails de l'erreur :</strong><br> " +
|
if (jsonData) {
|
||||||
jsonData.data.replace(/^"(.*)"$/, '$1') +
|
$("#installUpdateErrorMessage").html("<strong>Détails de l'erreur :</strong><br> " +
|
||||||
"<br>" +
|
jsonData.data.replace(/^"(.*)"$/, '$1') +
|
||||||
warningMessage.replace(/<[^p].*?>/g, ""));
|
"<br>" +
|
||||||
|
warningMessage.replace(/<[^p].*?>/g, ""));
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Vous pouvez également faire quelque chose d'autre ici, par exemple, afficher un message à l'utilisateur, etc.
|
// Vous pouvez également faire quelque chose d'autre ici, par exemple, afficher un message à l'utilisateur, etc.
|
||||||
$("#installUpdateErrorMessage").html(message);
|
$("#installUpdateErrorMessage").html(message);
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<?php echo self::ZWII_VERSION; ?>
|
<?php echo self::ZWII_VERSION; ?>
|
||||||
<?php echo helper::translate('vers'); ?>
|
<?php echo helper::translate('vers'); ?>
|
||||||
|
|
||||||
<?php echo $module::$newVersion; ?>.
|
<?php echo $module::$newVersion; ?>
|
||||||
</strong></p>
|
</strong></p>
|
||||||
<p>
|
<p>
|
||||||
<?php echo helper::translate('Afin d\'assurer le bon fonctionnement de Zwii, veuillez ne pas fermer cette page avant la fin de l\'opération.'); ?>
|
<?php echo helper::translate('Afin d\'assurer le bon fonctionnement de Zwii, veuillez ne pas fermer cette page avant la fin de l\'opération.'); ?>
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
@ -99,7 +99,7 @@ class language extends common
|
|||||||
is_array($descripteur['language'][$lang])
|
is_array($descripteur['language'][$lang])
|
||||||
) {
|
) {
|
||||||
if ($this->setData(['language', $lang, $descripteur['language'][$lang]])) {
|
if ($this->setData(['language', $lang, $descripteur['language'][$lang]])) {
|
||||||
$success = file_put_contents(self::I18N_DIR . $lang . '.json', json_encode($languageData, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
|
$success = $this->secure_file_put_contents(self::I18N_DIR . $lang . '.json', $languageData);
|
||||||
$success = is_int($success) ? true : false;
|
$success = is_int($success) ? true : false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -197,7 +197,7 @@ class language extends common
|
|||||||
) {
|
) {
|
||||||
if (file_exists(self::DATA_DIR . $key . '/.default')) {
|
if (file_exists(self::DATA_DIR . $key . '/.default')) {
|
||||||
$messageLocale = helper::translate('Langue par défaut');
|
$messageLocale = helper::translate('Langue par défaut');
|
||||||
} elseif (isset($_SESSION['ZWII_CONTENT']) && $_SESSION['ZWII_CONTENT'] === $key) {
|
} elseif (isset($_SESSION['ZWII_SITE_CONTENT']) && $_SESSION['ZWII_SITE_CONTENT'] === $key) {
|
||||||
$messageLocale = helper::translate('Langue du site sélectionnée');
|
$messageLocale = helper::translate('Langue du site sélectionnée');
|
||||||
} else {
|
} else {
|
||||||
$messageLocale = '';
|
$messageLocale = '';
|
||||||
@ -255,7 +255,7 @@ class language extends common
|
|||||||
self::$languagesUiInstalled[$file] = [
|
self::$languagesUiInstalled[$file] = [
|
||||||
template::flag($file, '20 %') . ' ' . self::$languages[$file],
|
template::flag($file, '20 %') . ' ' . self::$languages[$file],
|
||||||
$value['version'],
|
$value['version'],
|
||||||
helper::dateUTF8('%d/%m/%Y', $value['date'], self::$siteContent),
|
helper::dateUTF8('%d/%m/%Y', $value['date'], self::$i18nUI),
|
||||||
//self::$i18nUI === $file ? helper::translate('Interface') : '',
|
//self::$i18nUI === $file ? helper::translate('Interface') : '',
|
||||||
'',
|
'',
|
||||||
/*
|
/*
|
||||||
@ -271,7 +271,7 @@ class language extends common
|
|||||||
'class' => isset($storeUI[$file]['version']) && version_compare($installedUI[$file]['version'], $storeUI[$file]['version']) < 0 ? 'buttonGreen' : '',
|
'class' => isset($storeUI[$file]['version']) && version_compare($installedUI[$file]['version'], $storeUI[$file]['version']) < 0 ? 'buttonGreen' : '',
|
||||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/update/' . $file,
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/update/' . $file,
|
||||||
'value' => template::ico('update'),
|
'value' => template::ico('update'),
|
||||||
'help' => 'Mettre à jour',
|
'help' => 'Mise à jour',
|
||||||
]),
|
]),
|
||||||
template::button('translateContentLanguageUIDelete' . $file, [
|
template::button('translateContentLanguageUIDelete' . $file, [
|
||||||
'class' => 'translateDelete buttonRed' . (in_array($file, $usersUI) ? ' disabled' : ''),
|
'class' => 'translateDelete buttonRed' . (in_array($file, $usersUI) ? ' disabled' : ''),
|
||||||
@ -291,7 +291,7 @@ class language extends common
|
|||||||
self::$languagesStore[$file] = [
|
self::$languagesStore[$file] = [
|
||||||
template::flag($file, '20 %') . ' ' . self::$languages[$file],
|
template::flag($file, '20 %') . ' ' . self::$languages[$file],
|
||||||
$value['version'],
|
$value['version'],
|
||||||
helper::dateUTF8('%d/%m/%Y', $value['date'], self::$siteContent),
|
helper::dateUTF8('%d/%m/%Y', $value['date'], self::$i18nUI),
|
||||||
'',
|
'',
|
||||||
template::button('translateContentLanguageUIDownload' . $file, [
|
template::button('translateContentLanguageUIDownload' . $file, [
|
||||||
'class' => 'buttonGreen',
|
'class' => 'buttonGreen',
|
||||||
@ -430,7 +430,7 @@ class language extends common
|
|||||||
$this->setData(['locale', $data['locale']]);
|
$this->setData(['locale', $data['locale']]);
|
||||||
} else {
|
} else {
|
||||||
// Sauver sur le disque
|
// Sauver sur le disque
|
||||||
file_put_contents(self::DATA_DIR . $lang . '/locale.json', json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT), LOCK_EX);
|
$this->secure_file_put_contents(self::DATA_DIR . $lang . '/locale.json', $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
@ -512,7 +512,7 @@ class language extends common
|
|||||||
$data[$key] = $target;
|
$data[$key] = $target;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_put_contents(self::I18N_DIR . $lang . '.json', json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT), LOCK_EX);
|
$this->secure_file_put_contents(self::I18N_DIR . $lang . '.json', $data);
|
||||||
|
|
||||||
// Mettre à jour le descripteur
|
// Mettre à jour le descripteur
|
||||||
$this->setData([
|
$this->setData([
|
||||||
@ -546,7 +546,7 @@ class language extends common
|
|||||||
$data[$key] = '';
|
$data[$key] = '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_put_contents(self::I18N_DIR . $lang . '.json', json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT), LOCK_EX);
|
$this->secure_file_put_contents(self::I18N_DIR . $lang . '.json', $data);
|
||||||
|
|
||||||
// Tableau des chaines à traduire dans la langue sélectionnée
|
// Tableau des chaines à traduire dans la langue sélectionnée
|
||||||
foreach ($data as $key => $value) {
|
foreach ($data as $key => $value) {
|
||||||
@ -700,7 +700,7 @@ class language extends common
|
|||||||
) {
|
) {
|
||||||
|
|
||||||
// Stocker la sélection
|
// Stocker la sélection
|
||||||
$_SESSION['ZWII_CONTENT'] = $lang;
|
$_SESSION['ZWII_SITE_CONTENT'] = $lang;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -107,7 +107,7 @@
|
|||||||
<div class="block">
|
<div class="block">
|
||||||
<h4><?php echo helper::translate('Étiquettes des pages spéciales'); ?>
|
<h4><?php echo helper::translate('Étiquettes des pages spéciales'); ?>
|
||||||
<!--<span id="labelHelpButton" class="helpDisplayButton" title="Cliquer pour consulter l'aide en ligne">
|
<!--<span id="labelHelpButton" class="helpDisplayButton" title="Cliquer pour consulter l'aide en ligne">
|
||||||
<a href="https://doc.zwiicms.fr/etiquettes-des-pages-speciales" target="_blank">
|
<a href="https://doc.zwiicms.fr/Étiquettes-des-pages-speciales" target="_blank">
|
||||||
<?php //echo template::ico('help', ['margin' => 'left']); ?>
|
<?php //echo template::ico('help', ['margin' => 'left']); ?>
|
||||||
</a>
|
</a>
|
||||||
</span>-->
|
</span>-->
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
@ -23,7 +23,8 @@ class page extends common
|
|||||||
'edit' => self::GROUP_EDITOR,
|
'edit' => self::GROUP_EDITOR,
|
||||||
'duplicate' => self::GROUP_EDITOR,
|
'duplicate' => self::GROUP_EDITOR,
|
||||||
'jsEditor' => self::GROUP_EDITOR,
|
'jsEditor' => self::GROUP_EDITOR,
|
||||||
'cssEditor' => self::GROUP_EDITOR
|
'cssEditor' => self::GROUP_EDITOR,
|
||||||
|
'register' => self::GROUP_EDITOR,
|
||||||
];
|
];
|
||||||
public static $pagesNoParentId = [
|
public static $pagesNoParentId = [
|
||||||
'' => 'Aucune'
|
'' => 'Aucune'
|
||||||
@ -85,8 +86,19 @@ class page extends common
|
|||||||
*/
|
*/
|
||||||
public function duplicate()
|
public function duplicate()
|
||||||
{
|
{
|
||||||
|
// La session ne correspond pas au site ouvert dans cet onglet
|
||||||
|
if (
|
||||||
|
// Contrôle la présence de l'id de langue uniquement si l'id est fourni afin de ne pas bloquer les modules non mis à jour
|
||||||
|
$this->getUrl(3) && $this->getUrl(3) != self::$siteContent
|
||||||
|
) {
|
||||||
|
$_SESSION['ZWII_SITE_CONTENT'] = $this->getUrl(3);
|
||||||
|
header('Refresh:0; url=' . helper::baseUrl() . $this->getUrl());
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
// Adresse sans le token
|
// Adresse sans le token
|
||||||
$page = $this->getUrl(2);
|
$page = $this->getUrl(2);
|
||||||
|
|
||||||
// La page n'existe pas
|
// La page n'existe pas
|
||||||
if (
|
if (
|
||||||
$this->getUser('permission', __CLASS__, __FUNCTION__) !== true ||
|
$this->getUser('permission', __CLASS__, __FUNCTION__) !== true ||
|
||||||
@ -118,7 +130,7 @@ class page extends common
|
|||||||
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'redirect' => helper::baseUrl() . 'page/edit/' . $pageId,
|
'redirect' => helper::baseUrl() . 'page/edit/' . $pageId . '/' . self::$siteContent,
|
||||||
'notification' => $notification,
|
'notification' => $notification,
|
||||||
'state' => true
|
'state' => true
|
||||||
]);
|
]);
|
||||||
@ -131,6 +143,16 @@ class page extends common
|
|||||||
*/
|
*/
|
||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
|
// La session ne correspond pas au site ouvert dans cet onglet
|
||||||
|
if (
|
||||||
|
// Contrôle la présence de l'id de langue uniquement si l'id est fourni afin de ne pas bloquer les modules non mis à jour
|
||||||
|
$this->getUrl(3) && $this->getUrl(3) != self::$siteContent
|
||||||
|
) {
|
||||||
|
$_SESSION['ZWII_SITE_CONTENT'] = $this->getUrl(3);
|
||||||
|
header('Refresh:0; url=' . helper::baseUrl() . $this->getUrl());
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
if ($this->getUser('permission', __CLASS__, __FUNCTION__) !== true) {
|
if ($this->getUser('permission', __CLASS__, __FUNCTION__) !== true) {
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
@ -177,11 +199,11 @@ class page extends common
|
|||||||
if (!is_dir(self::DATA_DIR . self::$siteContent . '/content')) {
|
if (!is_dir(self::DATA_DIR . self::$siteContent . '/content')) {
|
||||||
mkdir(self::DATA_DIR . self::$siteContent . '/content', 0755);
|
mkdir(self::DATA_DIR . self::$siteContent . '/content', 0755);
|
||||||
}
|
}
|
||||||
//file_put_contents(self::DATA_DIR . self::$siteContent . '/content/' . $pageId . '.html', '<p>Contenu de votre nouvelle page.</p>');
|
//$this->secure_file_put_contents(self::DATA_DIR . self::$siteContent . '/content/' . $pageId . '.html', '<p>Contenu de votre nouvelle page.</p>');
|
||||||
$this->setPage($pageId, '<p>Contenu de votre nouvelle page.</p>', self::$siteContent);
|
$this->setPage($pageId, '<p>Contenu de votre nouvelle page.</p>', self::$siteContent);
|
||||||
|
|
||||||
// Met à jour le sitemap
|
// Ne met à jour le sitemap pour éviter un warning, de toute manière la nouvelle page doit être éditée.
|
||||||
$this->updateSitemap();
|
// $this->updateSitemap();
|
||||||
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
@ -198,6 +220,16 @@ class page extends common
|
|||||||
*/
|
*/
|
||||||
public function delete()
|
public function delete()
|
||||||
{
|
{
|
||||||
|
// La session ne correspond pas au site ouvert dans cet onglet
|
||||||
|
if (
|
||||||
|
// Contrôle la présence de l'id de langue uniquement si l'id est fourni afin de ne pas bloquer les modules non mis à jour
|
||||||
|
$this->getUrl(3) && $this->getUrl(3) != self::$siteContent
|
||||||
|
) {
|
||||||
|
$_SESSION['ZWII_SITE_CONTENT'] = $this->getUrl(3);
|
||||||
|
header('Refresh:0; url=' . helper::baseUrl() . $this->getUrl());
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
// $url prend l'adresse sans le token
|
// $url prend l'adresse sans le token
|
||||||
$page = $this->getUrl(2);
|
$page = $this->getUrl(2);
|
||||||
// La page n'existe pas
|
// La page n'existe pas
|
||||||
@ -262,7 +294,7 @@ class page extends common
|
|||||||
elseif ($this->getHierarchy($page, null)) {
|
elseif ($this->getHierarchy($page, null)) {
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'redirect' => helper::baseUrl() . 'page/edit/' . $page,
|
'redirect' => helper::baseUrl() . 'page/edit/' . $page . '/' . self::$siteContent,
|
||||||
'notification' => helper::translate('Impossible de supprimer une page contenant des pages enfants')
|
'notification' => helper::translate('Impossible de supprimer une page contenant des pages enfants')
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@ -302,6 +334,17 @@ class page extends common
|
|||||||
*/
|
*/
|
||||||
public function edit()
|
public function edit()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// La session ne correspond pas au site ouvert dans cet onglet
|
||||||
|
if (
|
||||||
|
// Contrôle la présence de l'id de langue uniquement si l'id est fourni afin de ne pas bloquer les modules non mis à jour
|
||||||
|
$this->getUrl(3) && $this->getUrl(3) != self::$siteContent
|
||||||
|
) {
|
||||||
|
$_SESSION['ZWII_SITE_CONTENT'] = $this->getUrl(3);
|
||||||
|
header('Refresh:0; url=' . helper::baseUrl() . $this->getUrl());
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
// La page n'existe pas
|
// La page n'existe pas
|
||||||
if (
|
if (
|
||||||
$this->getUser('permission', __CLASS__, __FUNCTION__) !== true ||
|
$this->getUser('permission', __CLASS__, __FUNCTION__) !== true ||
|
||||||
@ -610,7 +653,7 @@ class page extends common
|
|||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'notification' => helper::translate('Modifications enregistrées'),
|
'notification' => helper::translate('Modifications enregistrées'),
|
||||||
'redirect' => helper::baseUrl() . 'page/edit/' . $this->getUrl(2),
|
'redirect' => helper::baseUrl() . 'page/edit/' . $this->getUrl(2) . '/' . self::$siteContent,
|
||||||
'state' => true
|
'state' => true
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@ -645,7 +688,7 @@ class page extends common
|
|||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'notification' => helper::translate('Modifications enregistrées'),
|
'notification' => helper::translate('Modifications enregistrées'),
|
||||||
'redirect' => helper::baseUrl() . 'page/edit/' . $this->getUrl(2),
|
'redirect' => helper::baseUrl() . 'page/edit/' . $this->getUrl(2) . '/' . self::$siteContent,
|
||||||
'state' => true
|
'state' => true
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@ -661,16 +704,36 @@ class page extends common
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Retourne les informations sur les pages en omettant les clés CSS et JS qui occasionnent des bugs d'affichage dans l'éditeur de page
|
* Retourne les informations sur les pages en omettant les clés CSS et JS qui occasionnent des bugs d'affichage dans l'éditeur de page
|
||||||
* @return array tableau associatif des pages dans le menu
|
* @return string tableau associatif des pages dans le menu
|
||||||
*/
|
*/
|
||||||
public function getPageInfo()
|
public function getPageInfo()
|
||||||
{
|
{
|
||||||
$p = $this->getData(['page']);
|
$p = $this->getData(['page']);
|
||||||
$d = array_map(function ($d) {
|
$d = array_map(function ($d) {
|
||||||
unset($d["css"], $d["js"]);
|
unset ($d["css"], $d["js"]);
|
||||||
return $d;
|
return $d;
|
||||||
}, $p);
|
}, $p);
|
||||||
return json_encode($d);
|
return json_encode($d);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stocke la variable dans les paramètres de l'utilisateur pour activer la tab à sa prochaine visite
|
||||||
|
* @return never
|
||||||
|
*/
|
||||||
|
public function register(): void
|
||||||
|
{
|
||||||
|
$this->setData([
|
||||||
|
'user',
|
||||||
|
$this->getUser('id'),
|
||||||
|
'view',
|
||||||
|
[
|
||||||
|
'page' => $this->getUrl(2),
|
||||||
|
'config' => $this->getData(['user', $this->getUser('id'), 'view', 'config']),
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . 'page/edit/' . $this->getUrl(3) . '/' . self::$siteContent,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<div class="col1">
|
<div class="col1">
|
||||||
<?php echo template::button('pageCssEditorBack', [
|
<?php echo template::button('pageCssEditorBack', [
|
||||||
'class' => 'buttonGrey',
|
'class' => 'buttonGrey',
|
||||||
'href' => helper::baseUrl() . 'page/edit/' . $this->getUrl(2),
|
'href' => helper::baseUrl() . 'page/edit/' . $this->getUrl(2) . '/' . self::$siteContent,
|
||||||
'value' => template::ico('left')
|
'value' => template::ico('left')
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @authorFrédéric Tempez <frederic.tempez@outlook.com>
|
* @authorFrédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
@ -15,7 +15,7 @@
|
|||||||
/**
|
/**
|
||||||
* Confirmation de suppression
|
* Confirmation de suppression
|
||||||
*/
|
*/
|
||||||
$("#pageEditDelete").on("click", function() {
|
$("#pageEditDelete").on("click", function() {
|
||||||
var _this = $(this);
|
var _this = $(this);
|
||||||
var message_delete = "<?php echo helper::translate('Confirmer la suppression de la page'); ?>";
|
var message_delete = "<?php echo helper::translate('Confirmer la suppression de la page'); ?>";
|
||||||
return core.confirm(message_delete, function() {
|
return core.confirm(message_delete, function() {
|
||||||
@ -67,16 +67,19 @@ $( document ).ready(function() {
|
|||||||
/**
|
/**
|
||||||
* Sélection des onglets
|
* Sélection des onglets
|
||||||
*/
|
*/
|
||||||
var pageLayout = getCookie("pageLayout");
|
var pageLayout = "<?php echo $this->getData(['user', $this->getUser('id'), 'view', 'page']);?>";
|
||||||
if (pageLayout == null) {
|
console.log(pageLayout);
|
||||||
|
// Non défini, valeur par défaut
|
||||||
|
if (pageLayout == "") {
|
||||||
pageLayout = "content";
|
pageLayout = "content";
|
||||||
setCookie("pageLayout", "content");
|
|
||||||
}
|
}
|
||||||
|
// Tout cacher
|
||||||
$("#pageEditContentContainer").hide();
|
$("#pageEditContentContainer").hide();
|
||||||
$("#pageEditExtensionContainer").hide();
|
$("#pageEditExtensionContainer").hide();
|
||||||
$("#pageEditPositionContainer").hide();
|
$("#pageEditPositionContainer").hide();
|
||||||
$("#pageEditLayoutContainer").hide();
|
$("#pageEditLayoutContainer").hide();
|
||||||
$("#pageEditPermissionContainer").hide();
|
$("#pageEditPermissionContainer").hide();
|
||||||
|
// Afficher la bonne tab
|
||||||
$("#pageEdit" + capitalizeFirstLetter(pageLayout) + "Container").show();
|
$("#pageEdit" + capitalizeFirstLetter(pageLayout) + "Container").show();
|
||||||
$("#pageEdit" + capitalizeFirstLetter(pageLayout) + "Button").addClass("activeButton");
|
$("#pageEdit" + capitalizeFirstLetter(pageLayout) + "Button").addClass("activeButton");
|
||||||
|
|
||||||
@ -295,7 +298,6 @@ $( document ).ready(function() {
|
|||||||
$("#PageEditPositionButton").removeClass("activeButton");
|
$("#PageEditPositionButton").removeClass("activeButton");
|
||||||
$("#pageEditLayoutButton").removeClass("activeButton");
|
$("#pageEditLayoutButton").removeClass("activeButton");
|
||||||
$("#pageEditPermissionButton").removeClass("activeButton");
|
$("#pageEditPermissionButton").removeClass("activeButton");
|
||||||
setCookie("pageLayout", "content");
|
|
||||||
});
|
});
|
||||||
$("#pageEditExtensionButton").on("click", function () {
|
$("#pageEditExtensionButton").on("click", function () {
|
||||||
$("#pageEditContentContainer").hide();
|
$("#pageEditContentContainer").hide();
|
||||||
@ -308,7 +310,6 @@ $( document ).ready(function() {
|
|||||||
$("#PageEditPositionButton").removeClass("activeButton");
|
$("#PageEditPositionButton").removeClass("activeButton");
|
||||||
$("#pageEditLayoutButton").removeClass("activeButton");
|
$("#pageEditLayoutButton").removeClass("activeButton");
|
||||||
$("#pageEditPermissionButton").removeClass("activeButton");
|
$("#pageEditPermissionButton").removeClass("activeButton");
|
||||||
setCookie("pageLayout", "extension");
|
|
||||||
});
|
});
|
||||||
$("#PageEditPositionButton").on("click", function () {
|
$("#PageEditPositionButton").on("click", function () {
|
||||||
$("#pageEditContentContainer").hide();
|
$("#pageEditContentContainer").hide();
|
||||||
@ -321,7 +322,6 @@ $( document ).ready(function() {
|
|||||||
$("#PageEditPositionButton").addClass("activeButton");
|
$("#PageEditPositionButton").addClass("activeButton");
|
||||||
$("#pageEditLayoutButton").removeClass("activeButton");
|
$("#pageEditLayoutButton").removeClass("activeButton");
|
||||||
$("#pageEditPermissionButton").removeClass("activeButton");
|
$("#pageEditPermissionButton").removeClass("activeButton");
|
||||||
setCookie("pageLayout", "position");
|
|
||||||
});
|
});
|
||||||
$("#pageEditLayoutButton").on("click", function () {
|
$("#pageEditLayoutButton").on("click", function () {
|
||||||
$("#pageEditContentContainer").hide();
|
$("#pageEditContentContainer").hide();
|
||||||
@ -334,7 +334,6 @@ $( document ).ready(function() {
|
|||||||
$("#PageEditPositionButton").removeClass("activeButton");
|
$("#PageEditPositionButton").removeClass("activeButton");
|
||||||
$("#pageEditLayoutButton").addClass("activeButton");
|
$("#pageEditLayoutButton").addClass("activeButton");
|
||||||
$("#pageEditPermissionButton").removeClass("activeButton");
|
$("#pageEditPermissionButton").removeClass("activeButton");
|
||||||
setCookie("pageLayout", "layout");
|
|
||||||
});
|
});
|
||||||
$("#pageEditPermissionButton").on("click", function () {
|
$("#pageEditPermissionButton").on("click", function () {
|
||||||
$("#pageEditContentContainer").hide();
|
$("#pageEditContentContainer").hide();
|
||||||
@ -347,7 +346,6 @@ $( document ).ready(function() {
|
|||||||
$("#pageEditPositionButton").removeClass("activeButton");
|
$("#pageEditPositionButton").removeClass("activeButton");
|
||||||
$("#pageEditLayoutButton").removeClass("activeButton");
|
$("#pageEditLayoutButton").removeClass("activeButton");
|
||||||
$("#pageEditPermissionButton").addClass("activeButton");
|
$("#pageEditPermissionButton").addClass("activeButton");
|
||||||
setCookie("pageLayout", "permission");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -722,30 +720,6 @@ function buildPagesList(extraPosition) {
|
|||||||
positionDOM.val(positionSelected);
|
positionDOM.val(positionSelected);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Cookies
|
|
||||||
*/
|
|
||||||
function setCookie(name, value, days) {
|
|
||||||
var expires = "";
|
|
||||||
if (days) {
|
|
||||||
var date = new Date();
|
|
||||||
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
|
||||||
expires = "; expires=" + date.toUTCString();
|
|
||||||
}
|
|
||||||
document.cookie = name + "=" + (value || "") + expires + "; path=/; samesite=lax";
|
|
||||||
}
|
|
||||||
|
|
||||||
function getCookie(name) {
|
|
||||||
var nameEQ = name + "=";
|
|
||||||
var ca = document.cookie.split(';');
|
|
||||||
for (var i = 0; i < ca.length; i++) {
|
|
||||||
var c = ca[i];
|
|
||||||
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
|
|
||||||
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Define function to capitalize the first letter of a string
|
// Define function to capitalize the first letter of a string
|
||||||
function capitalizeFirstLetter(string) {
|
function capitalizeFirstLetter(string) {
|
||||||
return string.charAt(0).toUpperCase() + string.slice(1);
|
return string.charAt(0).toUpperCase() + string.slice(1);
|
||||||
|
@ -7,26 +7,17 @@
|
|||||||
'value' => template::ico('left')
|
'value' => template::ico('left')
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col1">
|
<div class="col1 offset7">
|
||||||
<?php /**echo template::button('pageEditHelp', [
|
|
||||||
'href' => 'https://doc.zwiicms.fr/edition-des-pages',
|
|
||||||
'target' => '_blank',
|
|
||||||
'value' => template::ico('help'),
|
|
||||||
'class' => 'buttonHelp',
|
|
||||||
'help' => 'Consulter l\'aide en ligne'
|
|
||||||
]); */?>
|
|
||||||
</div>
|
|
||||||
<div class="col1 offset6">
|
|
||||||
<?php echo template::button('pageEditDelete', [
|
<?php echo template::button('pageEditDelete', [
|
||||||
'class' => 'buttonRed',
|
'class' => 'buttonRed',
|
||||||
'href' => helper::baseUrl() . 'page/delete/' . $this->getUrl(2),
|
'href' => helper::baseUrl() . 'page/delete/' . $this->getUrl(2) . '/' . self::$siteContent,
|
||||||
'value' => template::ico('trash'),
|
'value' => template::ico('trash'),
|
||||||
'help' => 'Effacer la page'
|
'help' => 'Effacer la page'
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col1">
|
<div class="col1">
|
||||||
<?php echo template::button('pageEditDuplicate', [
|
<?php echo template::button('pageEditDuplicate', [
|
||||||
'href' => helper::baseUrl() . 'page/duplicate/' . $this->getUrl(2),
|
'href' => helper::baseUrl() . 'page/duplicate/' . $this->getUrl(2) . '/' . self::$siteContent,
|
||||||
'value' => template::ico('clone'),
|
'value' => template::ico('clone'),
|
||||||
'help' => 'Dupliquer la page'
|
'help' => 'Dupliquer la page'
|
||||||
]); ?>
|
]); ?>
|
||||||
@ -37,27 +28,31 @@
|
|||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="tab">
|
<div class="tab">
|
||||||
<?php echo template::button('pageEditContentButton', [
|
<?php echo template::button('pageEditContentButton', [
|
||||||
'value' => 'Contenu',
|
'value' => 'Contenu',
|
||||||
'class' => 'buttonTab'
|
'class' => 'buttonTab',
|
||||||
|
'href' => helper::baseUrl() . 'page/register/content/' . $this->geturl(2)
|
||||||
]); ?>
|
]); ?>
|
||||||
<?php echo template::button('PageEditPositionButton', [
|
<?php echo template::button('pageEditPositionButton', [
|
||||||
'value' => 'Menu',
|
'value' => 'Menu',
|
||||||
'class' => 'buttonTab'
|
'class' => 'buttonTab',
|
||||||
|
'href' => helper::baseUrl() . 'page/register/position/' . $this->geturl(2)
|
||||||
]); ?>
|
]); ?>
|
||||||
<?php echo template::button('pageEditExtensionButton', [
|
<?php echo template::button('pageEditExtensionButton', [
|
||||||
'value' => 'Extension',
|
'value' => 'Extension',
|
||||||
'class' => 'buttonTab'
|
'class' => 'buttonTab',
|
||||||
|
'href' => helper::baseUrl() . 'page/register/extension/' . $this->geturl(2)
|
||||||
]); ?>
|
]); ?>
|
||||||
<?php echo template::button('pageEditLayoutButton', [
|
<?php echo template::button('pageEditLayoutButton', [
|
||||||
'value' => 'Mise en page',
|
'value' => 'Mise en page',
|
||||||
'class' => 'buttonTab'
|
'class' => 'buttonTab',
|
||||||
|
'href' => helper::baseUrl() . 'page/register/layout/' . $this->geturl(2)
|
||||||
]); ?>
|
]); ?>
|
||||||
<?php echo template::button('pageEditPermissionButton', [
|
<?php echo template::button('pageEditPermissionButton', [
|
||||||
'value' => 'Permission',
|
'value' => 'Permission',
|
||||||
'class' => 'buttonTab'
|
'class' => 'buttonTab',
|
||||||
|
'href' => helper::baseUrl() . 'page/register/permission/' . $this->geturl(2)
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -67,11 +62,6 @@
|
|||||||
<div class="block">
|
<div class="block">
|
||||||
<h4>
|
<h4>
|
||||||
<?php echo helper::translate('Titres'); ?>
|
<?php echo helper::translate('Titres'); ?>
|
||||||
<!--<span id="infoHelpButton" class="helpDisplayButton">
|
|
||||||
<a href="https://doc.zwiicms.fr/informations-generales" target="_blank" title="Cliquer pour consulter l'aide en ligne">
|
|
||||||
<?php //echo template::ico('help', ['margin' => 'left']); ?>
|
|
||||||
</a>
|
|
||||||
</span>-->
|
|
||||||
</h4>
|
</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col8">
|
<div class="col8">
|
||||||
@ -120,11 +110,6 @@
|
|||||||
<div class="block">
|
<div class="block">
|
||||||
<h4>
|
<h4>
|
||||||
<?php echo helper::translate('Emplacement dans le menu'); ?>
|
<?php echo helper::translate('Emplacement dans le menu'); ?>
|
||||||
<!--<span id="positionHelpButton" class="helpDisplayButton">
|
|
||||||
<a href="https://doc.zwiicms.fr/emplacement-dans-le-menu" target="_blank" title="Cliquer pour consulter l'aide en ligne">
|
|
||||||
<?php //echo template::ico('help', ['margin' => 'left']); ?>
|
|
||||||
</a>
|
|
||||||
</span>-->
|
|
||||||
</h4>
|
</h4>
|
||||||
<div class="blockContainer">
|
<div class="blockContainer">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -176,11 +161,6 @@
|
|||||||
<div class="block">
|
<div class="block">
|
||||||
<h4>
|
<h4>
|
||||||
<?php echo helper::translate('Options avancées'); ?>
|
<?php echo helper::translate('Options avancées'); ?>
|
||||||
<!--<span id="advancedHelpButton" class="helpDisplayButton">
|
|
||||||
<a href="https://doc.zwiicms.fr/options-d-emplacement-avancee" target="_blank" title="Cliquer pour consulter l'aide en ligne">
|
|
||||||
<?php //echo template::ico('help', ['margin' => 'left']); ?>
|
|
||||||
</a>
|
|
||||||
</span>-->
|
|
||||||
</h4>
|
</h4>
|
||||||
<div class="blockContainer">
|
<div class="blockContainer">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -195,7 +175,8 @@
|
|||||||
'help' => 'Sélectionnez une image ou une icône de petite dimension',
|
'help' => 'Sélectionnez une image ou une icône de petite dimension',
|
||||||
'language' => $this->getData(['user', $this->getUser('id'), 'language']),
|
'language' => $this->getData(['user', $this->getUser('id'), 'language']),
|
||||||
'label' => 'Icône',
|
'label' => 'Icône',
|
||||||
'value' => $this->getData(['page', $this->getUrl(2), 'iconUrl'])
|
'value' => $this->getData(['page', $this->getUrl(2), 'iconUrl']),
|
||||||
|
'folder' => $this->getData(['page', $this->getUrl(2), 'iconUrl']) ? dirname($this->getData(['page', $this->getUrl(2), 'iconUrl'])) : '',
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -292,11 +273,6 @@
|
|||||||
<div class="block">
|
<div class="block">
|
||||||
<h4>
|
<h4>
|
||||||
<?php echo helper::translate('Mise en page'); ?>
|
<?php echo helper::translate('Mise en page'); ?>
|
||||||
<!--<span id="layoutHelpButton" class="helpDisplayButton">
|
|
||||||
<a href="https://doc.zwiicms.fr/mise-en-page-2" target="_blank" title="Cliquer pour consulter l'aide en ligne">
|
|
||||||
<?php //echo template::ico('help', ['margin' => 'left']); ?>
|
|
||||||
</a>
|
|
||||||
</span>-->
|
|
||||||
</h4>
|
</h4>
|
||||||
<div class="blockContainer">
|
<div class="blockContainer">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -372,11 +348,6 @@
|
|||||||
<div class="block">
|
<div class="block">
|
||||||
<h4>
|
<h4>
|
||||||
<?php echo helper::translate('Permission et référencement'); ?>
|
<?php echo helper::translate('Permission et référencement'); ?>
|
||||||
<!--<span id="seoHelpButton" class="helpDisplayButton">
|
|
||||||
<a href="https://doc.zwiicms.fr/permission-et-referencement" target="_blank" title="Cliquer pour consulter l'aide en ligne">
|
|
||||||
<?php //echo template::ico('help', ['margin' => 'left']); ?>
|
|
||||||
</a>
|
|
||||||
</span>-->
|
|
||||||
</h4>
|
</h4>
|
||||||
<div class="blockContainer">
|
<div class="blockContainer">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -424,5 +395,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php echo template::formClose(); ?>
|
<?php echo template::formClose(); ?>
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<div class="col1">
|
<div class="col1">
|
||||||
<?php echo template::button('pageJsEditorBack', [
|
<?php echo template::button('pageJsEditorBack', [
|
||||||
'class' => 'buttonGrey',
|
'class' => 'buttonGrey',
|
||||||
'href' => helper::baseUrl() . 'page/edit/' . $this->getUrl(2),
|
'href' => helper::baseUrl() . 'page/edit/' . $this->getUrl(2) . '/' . self::$siteContent,
|
||||||
'value' => template::ico('left')
|
'value' => template::ico('left')
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
@ -22,7 +22,7 @@ class plugin extends common
|
|||||||
'delete' => self::GROUP_ADMIN,
|
'delete' => self::GROUP_ADMIN,
|
||||||
'save' => self::GROUP_ADMIN,
|
'save' => self::GROUP_ADMIN,
|
||||||
'store' => self::GROUP_ADMIN,
|
'store' => self::GROUP_ADMIN,
|
||||||
'item' => self::GROUP_ADMIN,
|
//'item' => self::GROUP_ADMIN,
|
||||||
// détail d'un objet
|
// détail d'un objet
|
||||||
'upload' => self::GROUP_ADMIN,
|
'upload' => self::GROUP_ADMIN,
|
||||||
// Téléverser catalogue
|
// Téléverser catalogue
|
||||||
@ -314,7 +314,7 @@ class plugin extends common
|
|||||||
mkdir(self::FILE_DIR . 'source/modules', 0755);
|
mkdir(self::FILE_DIR . 'source/modules', 0755);
|
||||||
}
|
}
|
||||||
// Sauver les données du fichiers
|
// Sauver les données du fichiers
|
||||||
file_put_contents(self::FILE_DIR . 'source/modules/' . $moduleFile, $moduleData);
|
$this->secure_file_put_contents(self::FILE_DIR . 'source/modules/' . $moduleFile, $moduleData);
|
||||||
|
|
||||||
// Installation directe
|
// Installation directe
|
||||||
if (file_exists(self::FILE_DIR . 'source/modules/' . $moduleFile)) {
|
if (file_exists(self::FILE_DIR . 'source/modules/' . $moduleFile)) {
|
||||||
@ -330,6 +330,7 @@ class plugin extends common
|
|||||||
'state' => $r['success']
|
'state' => $r['success']
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'title' => helper::translate('Catalogue de modules'),
|
'title' => helper::translate('Catalogue de modules'),
|
||||||
@ -377,7 +378,7 @@ class plugin extends common
|
|||||||
$store[$key]['category'],
|
$store[$key]['category'],
|
||||||
'<a href="' . self::BASEURL_STORE . self::MODULE_STORE . $key . '" target="_blank" >' . $store[$key]['title'] . '</a>',
|
'<a href="' . self::BASEURL_STORE . self::MODULE_STORE . $key . '" target="_blank" >' . $store[$key]['title'] . '</a>',
|
||||||
$store[$key]['version'],
|
$store[$key]['version'],
|
||||||
helper::dateUTF8('%d %B %Y', $store[$key]['versionDate'], self::$siteContent),
|
helper::dateUTF8('%d %B %Y', $store[$key]['versionDate'], self::$i18nUI),
|
||||||
implode(' - ', $pageInfos),
|
implode(' - ', $pageInfos),
|
||||||
template::button('moduleExport' . $key, [
|
template::button('moduleExport' . $key, [
|
||||||
'class' => $class,
|
'class' => $class,
|
||||||
@ -403,7 +404,7 @@ class plugin extends common
|
|||||||
{
|
{
|
||||||
$store = json_decode(helper::getUrlContents(self::BASEURL_STORE . self::MODULE_STORE . 'list'), true);
|
$store = json_decode(helper::getUrlContents(self::BASEURL_STORE . self::MODULE_STORE . 'list'), true);
|
||||||
self::$storeItem = $store[$this->getUrl(2)];
|
self::$storeItem = $store[$this->getUrl(2)];
|
||||||
self::$storeItem['fileDate'] = helper::dateUTF8('%d %B %Y', self::$storeItem['fileDate'], self::$siteContent);
|
self::$storeItem['fileDate'] = helper::dateUTF8('%d %B %Y', self::$storeItem['fileDate'], self::$i18nUI);
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'title' => helper::translate('Module ' . self::$storeItem['title']),
|
'title' => helper::translate('Module ' . self::$storeItem['title']),
|
||||||
@ -411,6 +412,15 @@ class plugin extends common
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retourne le contenu du store en ligne
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function getStore() {
|
||||||
|
$store = json_decode(helper::getUrlContents(self::BASEURL_STORE . self::MODULE_STORE . 'list'), true);
|
||||||
|
return $store;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gestion des modules
|
* Gestion des modules
|
||||||
*/
|
*/
|
||||||
@ -556,6 +566,9 @@ class plugin extends common
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Désactive l'icône rouge
|
||||||
|
$this->setData(['core', 'updateModuleAvailable', false]);
|
||||||
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'title' => helper::translate('Gestion des modules'),
|
'title' => helper::translate('Gestion des modules'),
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
* @copyright : Frédéric Tempez <frederic.tempez@outlook.com>
|
* @copyright : Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class theme extends common
|
class theme extends common
|
||||||
@ -304,7 +304,7 @@ class theme extends common
|
|||||||
$this->isPost()
|
$this->isPost()
|
||||||
) {
|
) {
|
||||||
// Enregistre le CSS
|
// Enregistre le CSS
|
||||||
file_put_contents(self::DATA_DIR . 'custom.css', $this->getInput('themeAdvancedCss', null));
|
$this->secure_file_put_contents(self::DATA_DIR . 'custom.css', $this->getInput('themeAdvancedCss', null));
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'notification' => helper::translate('Modifications enregistrées'),
|
'notification' => helper::translate('Modifications enregistrées'),
|
||||||
@ -628,16 +628,16 @@ class theme extends common
|
|||||||
// Toutes les fontes installées sont chargées
|
// Toutes les fontes installées sont chargées
|
||||||
$this->setFonts('all');
|
$this->setFonts('all');
|
||||||
|
|
||||||
|
// Polices liées au thème admin
|
||||||
|
$fonts['Titre (admin)'] = $this->getData(['admin', 'fontTitle']);
|
||||||
|
$fonts['Texte (admin)'] = $this->getData(['admin', 'fontText']);
|
||||||
|
|
||||||
// Polices liées au thème
|
// Polices liées au thème
|
||||||
$used = [
|
$fonts['Bannière'] = $this->getData(['theme', 'header', 'font']);
|
||||||
'Bannière' => $this->getData(['theme', 'header', 'font']),
|
$fonts['Menu'] = $this->getData(['theme', 'menu', 'font']);
|
||||||
'Menu' => $this->getData(['theme', 'menu', 'font']),
|
$fonts['Titre'] = $this->getData(['theme', 'title', 'font']);
|
||||||
'Titre ' => $this->getData(['theme', 'title', 'font']),
|
$fonts['Texte'] = $this->getData(['theme', 'text', 'font']);
|
||||||
'Texte' => $this->getData(['theme', 'text', 'font']),
|
$fonts['Pied de page'] = $this->getData(['theme', 'footer', 'font']);
|
||||||
'Pied de page' => $this->getData(['theme', 'footer', 'font']),
|
|
||||||
'Titre (admin)' => $this->getData(['admin', 'fontTitle']),
|
|
||||||
'Admin (texte)' => $this->getData(['admin', 'fontText'])
|
|
||||||
];
|
|
||||||
|
|
||||||
// Récupérer le détail des fontes installées
|
// Récupérer le détail des fontes installées
|
||||||
//$f = $this->getFonts();
|
//$f = $this->getFonts();
|
||||||
@ -649,18 +649,17 @@ class theme extends common
|
|||||||
foreach ($f as $type => $typeValue) {
|
foreach ($f as $type => $typeValue) {
|
||||||
if (is_array($typeValue)) {
|
if (is_array($typeValue)) {
|
||||||
foreach ($typeValue as $fontId => $fontValue) {
|
foreach ($typeValue as $fontId => $fontValue) {
|
||||||
// Fontes utilisées par les thèmes
|
// Recherche les correspondances
|
||||||
$fontUsed[$fontId] = '';
|
$result = array_filter($fonts, function($value) use ($fontId) {
|
||||||
foreach ($used as $key => $value) {
|
return $value == $fontId;
|
||||||
if ($value === $fontId) {
|
});
|
||||||
$fontUsed[$fontId] .= $key . '<br/>';
|
$keyResults = array_keys($result);
|
||||||
}
|
// Préparation du tableau
|
||||||
}
|
|
||||||
self::$fontsDetail[] = [
|
self::$fontsDetail[] = [
|
||||||
$fontId,
|
$fontId,
|
||||||
'<span style="font-family:' . $f[$type][$fontId]['font-family'] . '">' . $f[$type][$fontId]['name'] . '</span>',
|
'<span style="font-family:' . $f[$type][$fontId]['font-family'] . '">' . $f[$type][$fontId]['name'] . '</span>',
|
||||||
$f[$type][$fontId]['font-family'],
|
$f[$type][$fontId]['font-family'],
|
||||||
$fontUsed[$fontId],
|
empty($keyResults) ? '' : '<span class="fontsList">' . implode('<br />', $keyResults) . '</span>',
|
||||||
$type,
|
$type,
|
||||||
$type !== 'websafe' ? template::button('themeFontEdit' . $fontId, [
|
$type !== 'websafe' ? template::button('themeFontEdit' . $fontId, [
|
||||||
'class' => 'themeFontEdit',
|
'class' => 'themeFontEdit',
|
||||||
@ -1291,7 +1290,7 @@ class theme extends common
|
|||||||
}
|
}
|
||||||
// Sauvegarder la chaîne modifiée
|
// Sauvegarder la chaîne modifiée
|
||||||
if ($count > 0) {
|
if ($count > 0) {
|
||||||
file_put_contents($file, $data);
|
$this->secure_file_put_contents($file, $data);
|
||||||
}
|
}
|
||||||
// Retourner le nombre d'occurrences
|
// Retourner le nombre d'occurrences
|
||||||
return ($count);
|
return ($count);
|
||||||
@ -1397,8 +1396,8 @@ class theme extends common
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Enregistre la personnalisation
|
// Enregistre la personnalisation
|
||||||
file_put_contents(self::DATA_DIR . 'font/font.html', $fileContent);
|
$this->secure_file_put_contents(self::DATA_DIR . 'font/font.html', $fileContent);
|
||||||
// Enregistre la personnalisation
|
// Enregistre la personnalisation
|
||||||
file_put_contents(self::DATA_DIR . 'font/font.css', $fileContentCss);
|
$this->secure_file_put_contents(self::DATA_DIR . 'font/font.css', $fileContentCss);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,15 +7,7 @@
|
|||||||
'value' => template::ico('left')
|
'value' => template::ico('left')
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col1">
|
<div class="col2 offset9">
|
||||||
<?php /* echo template::button('themeBodyHelp', [
|
|
||||||
'href' => 'https://doc.zwiicms.fr/arriere-plan',
|
|
||||||
'target' => '_blank',
|
|
||||||
'value' => template::ico('help'),
|
|
||||||
'class' => 'buttonHelp'
|
|
||||||
]); */ ?>
|
|
||||||
</div>
|
|
||||||
<div class="col2 offset8">
|
|
||||||
<?php echo template::submit('themeBodySubmit'); ?>
|
<?php echo template::submit('themeBodySubmit'); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -35,7 +27,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
<?php echo template::text('themeBodyToTopColor', [
|
<?php echo template::text('themeBodyToTopColor', [
|
||||||
'class' => 'colorPicker',
|
'class' => 'colorPicker',
|
||||||
'help' => 'Le curseur horizontal règle le niveau de transparence.',
|
'help' => 'Le curseur horizontal règle le niveau de transparence.',
|
||||||
'label' => 'Couleur icône haut de page',
|
'label' => 'Couleur icône haut de page',
|
||||||
@ -68,7 +60,8 @@
|
|||||||
'language' => $this->getData(['user', $this->getUser('id'), 'language']),
|
'language' => $this->getData(['user', $this->getUser('id'), 'language']),
|
||||||
'label' => 'Arrière plan',
|
'label' => 'Arrière plan',
|
||||||
'type' => 1,
|
'type' => 1,
|
||||||
'value' => $imageFile
|
'value' => $imageFile,
|
||||||
|
'folder' => $imageFile ? dirname($imageFile) : ''
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*
|
*
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
@ -19,6 +19,8 @@ $('#dataTables').DataTable({
|
|||||||
url: "core/vendor/datatables/french.json",
|
url: "core/vendor/datatables/french.json",
|
||||||
},
|
},
|
||||||
locale: 'fr',
|
locale: 'fr',
|
||||||
|
stateSave: true,
|
||||||
|
"lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "Tout"]],
|
||||||
"columnDefs": [{
|
"columnDefs": [{
|
||||||
target: 5,
|
target: 5,
|
||||||
orderable: false,
|
orderable: false,
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*
|
*
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*
|
*
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
File diff suppressed because one or more lines are too long
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -7,15 +7,7 @@
|
|||||||
'value' => template::ico('left')
|
'value' => template::ico('left')
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col1">
|
<div class="col2 offset9">
|
||||||
<?php /* echo template::button('themeHeaderHelp', [
|
|
||||||
'href' => 'https://doc.zwiicms.fr/banniere',
|
|
||||||
'target' => '_blank',
|
|
||||||
'value' => template::ico('help'),
|
|
||||||
'class' => 'buttonHelp'
|
|
||||||
]); */?>
|
|
||||||
</div>
|
|
||||||
<div class="col2 offset8">
|
|
||||||
<?php echo template::submit('themeHeaderSubmit'); ?>
|
<?php echo template::submit('themeHeaderSubmit'); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -158,13 +150,17 @@
|
|||||||
'label' => 'Image',
|
'label' => 'Image',
|
||||||
'language' => $this->getData(['user', $this->getUser('id'), 'language']),
|
'language' => $this->getData(['user', $this->getUser('id'), 'language']),
|
||||||
'type' => 1,
|
'type' => 1,
|
||||||
'value' => $imageFile
|
'value' => $imageFile,
|
||||||
|
'folder' => $imageFile ? dirname($imageFile) : ''
|
||||||
]);
|
]);
|
||||||
?>
|
?>
|
||||||
<span class="themeHeaderImageOptions displayNone" id="themeHeaderImageInfo">
|
<span class="themeHeaderImageOptions displayNone" id="themeHeaderImageInfo">
|
||||||
<?php echo helper::translate('Largeur de l\'image'); ?> <span id="themeHeaderImageWidth"></span> ; <?php echo helper::translate('Largeur du site :'); ?> <?php echo $this->getData(['theme', 'site', 'width']); ?>
|
<?php echo helper::translate('Largeur de l\'image'); ?> <span id="themeHeaderImageWidth"></span>
|
||||||
|
; <?php echo helper::translate('Largeur du site :'); ?>
|
||||||
|
<?php echo $this->getData(['theme', 'site', 'width']); ?>
|
||||||
|
|
|
|
||||||
<?php echo helper::translate('Hauteur de l\'image'); ?> <span id="themeHeaderImageHeight"></span>
|
<?php echo helper::translate('Hauteur de l\'image'); ?> <span
|
||||||
|
id="themeHeaderImageHeight"></span>
|
||||||
|
|
|
|
||||||
<?php echo helper::translate('Ratio'); ?> <span id="themeHeaderImageRatio"></span>
|
<?php echo helper::translate('Ratio'); ?> <span id="themeHeaderImageRatio"></span>
|
||||||
</span>
|
</span>
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,22 +7,15 @@
|
|||||||
'value' => template::ico('left')
|
'value' => template::ico('left')
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col1">
|
<div class="col2 offset9">
|
||||||
<?php /* echo template::button('themeMenuHelp', [
|
|
||||||
'href' => 'https://doc.zwiicms.fr/menu',
|
|
||||||
'target' => '_blank',
|
|
||||||
'value' => template::ico('help'),
|
|
||||||
'class' => 'buttonHelp'
|
|
||||||
]); */?>
|
|
||||||
</div>
|
|
||||||
<div class="col2 offset8">
|
|
||||||
<?php echo template::submit('themeMenuSubmit'); ?>
|
<?php echo template::submit('themeMenuSubmit'); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col12">
|
<div class="col12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4><?php echo helper::translate('Paramètres'); ?>
|
<h4>
|
||||||
|
<?php echo helper::translate('Paramètres'); ?>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col6">
|
<div class="col6">
|
||||||
@ -84,7 +77,8 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col12">
|
<div class="col12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4><?php echo helper::translate('Contenu'); ?>
|
<h4>
|
||||||
|
<?php echo helper::translate('Contenu'); ?>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col3">
|
<div class="col3">
|
||||||
@ -112,7 +106,8 @@
|
|||||||
'language' => $this->getData(['user', $this->getUser('id'), 'language']),
|
'language' => $this->getData(['user', $this->getUser('id'), 'language']),
|
||||||
'label' => 'Logo du menu burger',
|
'label' => 'Logo du menu burger',
|
||||||
'type' => 1,
|
'type' => 1,
|
||||||
'value' => $imageFile
|
'value' => $imageFile,
|
||||||
|
'folder' => $imageFile ? dirname($imageFile) : ''
|
||||||
]);
|
]);
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
@ -123,7 +118,8 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col12">
|
<div class="col12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4><?php echo helper::translate('Couleurs'); ?>
|
<h4>
|
||||||
|
<?php echo helper::translate('Couleurs'); ?>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
@ -164,7 +160,7 @@
|
|||||||
<?php
|
<?php
|
||||||
echo template::checkbox('themeMenuActiveColorAuto', true, 'Couleur de fond automatique', [
|
echo template::checkbox('themeMenuActiveColorAuto', true, 'Couleur de fond automatique', [
|
||||||
'checked' => $this->getData(['theme', 'menu', 'activeColorAuto']),
|
'checked' => $this->getData(['theme', 'menu', 'activeColorAuto']),
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
<?php echo template::text('themeMenuActiveColor', [
|
<?php echo template::text('themeMenuActiveColor', [
|
||||||
@ -181,7 +177,8 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col12">
|
<div class="col12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4><?php echo helper::translate('Mise en forme du texte'); ?>
|
<h4>
|
||||||
|
<?php echo helper::translate('Mise en forme du texte'); ?>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col3">
|
<div class="col3">
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
@ -133,7 +133,7 @@ class user extends common
|
|||||||
'accessTimer' => null,
|
'accessTimer' => null,
|
||||||
'accessCsrf' => null,
|
'accessCsrf' => null,
|
||||||
'language' => $this->getInput('userAddLanguage', helper::FILTER_STRING_SHORT),
|
'language' => $this->getInput('userAddLanguage', helper::FILTER_STRING_SHORT),
|
||||||
'tags' => ''
|
'tags' => $this->getInput('userAddTags', helper::FILTER_STRING_SHORT),
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -345,6 +345,7 @@ class user extends common
|
|||||||
'files' => $this->getInput('userEditFiles', helper::FILTER_BOOLEAN),
|
'files' => $this->getInput('userEditFiles', helper::FILTER_BOOLEAN),
|
||||||
'language' => $this->getInput('userEditLanguage', helper::FILTER_STRING_SHORT),
|
'language' => $this->getInput('userEditLanguage', helper::FILTER_STRING_SHORT),
|
||||||
'tags' => $this->getInput('userEditTags', helper::FILTER_STRING_SHORT),
|
'tags' => $this->getInput('userEditTags', helper::FILTER_STRING_SHORT),
|
||||||
|
'authKey' => $this->getData(['user', $this->getUrl(2), 'authKey']),
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
// Redirection spécifique si l'utilisateur change son mot de passe
|
// Redirection spécifique si l'utilisateur change son mot de passe
|
||||||
@ -410,6 +411,7 @@ class user extends common
|
|||||||
$this->isPost()
|
$this->isPost()
|
||||||
) {
|
) {
|
||||||
$userId = $this->getInput('userForgotId', helper::FILTER_ID, true);
|
$userId = $this->getInput('userForgotId', helper::FILTER_ID, true);
|
||||||
|
$sent = false;
|
||||||
if ($this->getData(['user', $userId])) {
|
if ($this->getData(['user', $userId])) {
|
||||||
// Enregistre la date de la demande dans le compte utilisateur
|
// Enregistre la date de la demande dans le compte utilisateur
|
||||||
$this->setData(['user', $userId, 'forgot', time()]);
|
$this->setData(['user', $userId, 'forgot', time()]);
|
||||||
@ -573,7 +575,7 @@ class user extends common
|
|||||||
// Stoppe si le profil est affecté
|
// Stoppe si le profil est affecté
|
||||||
foreach ($groups as $userId) {
|
foreach ($groups as $userId) {
|
||||||
if ((string) $this->getData(['user', $userId, 'profil']) === $this->getUrl(3)) {
|
if ((string) $this->getData(['user', $userId, 'profil']) === $this->getUrl(3)) {
|
||||||
$profilUsed= false;
|
$profilUsed = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach ($this->getData(['profil']) as $groupId => $groupData) {
|
foreach ($this->getData(['profil']) as $groupId => $groupData) {
|
||||||
@ -738,9 +740,9 @@ class user extends common
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Chemin vers les dossiers du gestionnaire de fichier
|
// Chemin vers les dossiers du gestionnaire de fichier
|
||||||
self::$sharePath = $this->getSubdirectories('./site/file/source');
|
self::$sharePath = $this->getSubdirectories('site/file/source');
|
||||||
self::$sharePath = array_flip(self::$sharePath);
|
self::$sharePath = array_flip(self::$sharePath);
|
||||||
self::$sharePath = array_merge(['./site/file/source/' => 'Tous les dossiers'], self::$sharePath);
|
self::$sharePath = array_merge(['site/file/source/' => 'Tous les dossiers'], self::$sharePath);
|
||||||
self::$sharePath = array_merge([null => 'Aucun dossier'], self::$sharePath);
|
self::$sharePath = array_merge([null => 'Aucun dossier'], self::$sharePath);
|
||||||
|
|
||||||
// Liste des modules installés
|
// Liste des modules installés
|
||||||
@ -895,9 +897,9 @@ class user extends common
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Chemin vers les dossiers du gestionnaire de fichier
|
// Chemin vers les dossiers du gestionnaire de fichier
|
||||||
self::$sharePath = $this->getSubdirectories('./site/file/source');
|
self::$sharePath = $this->getSubdirectories('site/file/source');
|
||||||
self::$sharePath = array_flip(self::$sharePath);
|
self::$sharePath = array_flip(self::$sharePath);
|
||||||
self::$sharePath = array_merge(['./site/file/source/' => 'Tous les dossiers'], self::$sharePath);
|
self::$sharePath = array_merge(['site/file/source/' => 'Tous les dossiers'], self::$sharePath);
|
||||||
self::$sharePath = array_merge([null => 'Aucun dossier'], self::$sharePath);
|
self::$sharePath = array_merge([null => 'Aucun dossier'], self::$sharePath);
|
||||||
|
|
||||||
// Liste des modules installés
|
// Liste des modules installés
|
||||||
@ -934,11 +936,11 @@ class user extends common
|
|||||||
// recherche les membres du groupe
|
// recherche les membres du groupe
|
||||||
$groups = helper::arrayColumn($this->getData(['user']), 'group');
|
$groups = helper::arrayColumn($this->getData(['user']), 'group');
|
||||||
$groups = array_keys($groups, $this->getUrl(2));
|
$groups = array_keys($groups, $this->getUrl(2));
|
||||||
$flag= true;
|
$flag = true;
|
||||||
// Stoppe si le profil est affecté
|
// Stoppe si le profil est affecté
|
||||||
foreach ($groups as $userId) {
|
foreach ($groups as $userId) {
|
||||||
if ((string) $this->getData(['user', $userId, 'profil']) === $this->getUrl(3)) {
|
if ((string) $this->getData(['user', $userId, 'profil']) === $this->getUrl(3)) {
|
||||||
$flag= false;
|
$flag = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
@ -1044,10 +1046,32 @@ class user extends common
|
|||||||
// RAZ
|
// RAZ
|
||||||
$this->setData(['user', $userId, 'connectFail', 0]);
|
$this->setData(['user', $userId, 'connectFail', 0]);
|
||||||
$this->setData(['user', $userId, 'connectTimeout', 0]);
|
$this->setData(['user', $userId, 'connectTimeout', 0]);
|
||||||
// Expiration
|
|
||||||
|
// Clé d'authenfication
|
||||||
|
$authKey = uniqid('', true) . bin2hex(random_bytes(8));
|
||||||
|
$this->setData(['user', $userId, 'authKey', $authKey]);
|
||||||
|
|
||||||
|
// Validité du cookie
|
||||||
$expire = $this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN) === true ? strtotime("+1 year") : 0;
|
$expire = $this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN) === true ? strtotime("+1 year") : 0;
|
||||||
setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false), '', helper::isHttps(), true);
|
switch ($this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN)) {
|
||||||
setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false), '', helper::isHttps(), true);
|
case false:
|
||||||
|
// Cookie de session
|
||||||
|
setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false), '', helper::isHttps(), true);
|
||||||
|
//setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false), '', helper::isHttps(), true);
|
||||||
|
|
||||||
|
// Connexion par clé
|
||||||
|
setcookie('ZWII_AUTH_KEY', $authKey, $expire, helper::baseUrl(false, false), '', helper::isHttps(), true);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Cookie persistant
|
||||||
|
setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false));
|
||||||
|
//setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false));
|
||||||
|
|
||||||
|
// Connexion par clé
|
||||||
|
setcookie('ZWII_AUTH_KEY', $authKey, $expire, helper::baseUrl(false, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// Accès multiples avec le même compte
|
// Accès multiples avec le même compte
|
||||||
$this->setData(['user', $userId, 'accessCsrf', $_SESSION['csrf']]);
|
$this->setData(['user', $userId, 'accessCsrf', $_SESSION['csrf']]);
|
||||||
// Valeurs en sortie lorsque le site est en maintenance et que l'utilisateur n'est pas administrateur
|
// Valeurs en sortie lorsque le site est en maintenance et que l'utilisateur n'est pas administrateur
|
||||||
@ -1062,7 +1086,14 @@ class user extends common
|
|||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
$logStatus = 'Connexion réussie';
|
$logStatus = 'Connexion réussie';
|
||||||
$redirect = ($this->getUrl(2) && strpos($this->getUrl(2), 'user_reset') !== 0) ? helper::baseUrl() . str_replace('_', '/', str_replace('__', '#', $this->getUrl(2))) : helper::baseUrl();
|
$pageId = $this->getUrl(2);
|
||||||
|
if (
|
||||||
|
$this->getData(['config', 'page404']) === $pageId
|
||||||
|
|| $this->getData(['config', 'page403']) === $pageId
|
||||||
|
) {
|
||||||
|
$pageId = '';
|
||||||
|
}
|
||||||
|
$redirect = ($pageId && strpos($pageId, 'user_reset') !== 0) ? helper::baseUrl() . str_replace('_', '/', str_replace('__', '#', $pageId)) : helper::baseUrl();
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'notification' => sprintf(helper::translate('Bienvenue %s %s'), $this->getData(['user', $userId, 'firstname']), $this->getData(['user', $userId, 'lastname'])),
|
'notification' => sprintf(helper::translate('Bienvenue %s %s'), $this->getData(['user', $userId, 'firstname']), $this->getData(['user', $userId, 'lastname'])),
|
||||||
@ -1116,7 +1147,9 @@ class user extends common
|
|||||||
public function logout()
|
public function logout()
|
||||||
{
|
{
|
||||||
helper::deleteCookie('ZWII_USER_ID');
|
helper::deleteCookie('ZWII_USER_ID');
|
||||||
helper::deleteCookie('ZWII_USER_PASSWORD');
|
//helper::deleteCookie('ZWII_USER_PASSWORD');
|
||||||
|
helper::deleteCookie('ZWII_AUTH_KEY');
|
||||||
|
$this->setData(['user', $this->getUser('id'), 'authKey', '']);
|
||||||
|
|
||||||
// Détruit la session
|
// Détruit la session
|
||||||
session_destroy();
|
session_destroy();
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
@ -77,8 +77,9 @@
|
|||||||
<div class="col12">
|
<div class="col12">
|
||||||
<?php echo template::text('userEditTags', [
|
<?php echo template::text('userEditTags', [
|
||||||
'label' => 'Étiquettes',
|
'label' => 'Étiquettes',
|
||||||
|
'disabled' => $this->getUser('group') > self::GROUP_EDITOR ? false : true,
|
||||||
'value' => $this->getData(['user', $this->getUrl(2), 'tags']),
|
'value' => $this->getData(['user', $this->getUrl(2), 'tags']),
|
||||||
'help' => 'Le séparateur d\'étiquettes est l\'espace'
|
'help' => 'Les étiquettes sont séparées par des espaces'
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
2
core/module/user/view/import/import.css
vendored
2
core/module/user/view/import/import.css
vendored
@ -7,7 +7,7 @@
|
|||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user