Compare commits
250 Commits
Author | SHA1 | Date | |
---|---|---|---|
fed4d4df9a | |||
![]() |
dcf2a5e723 | ||
![]() |
8808a1a2e2 | ||
![]() |
136c9ed71d | ||
![]() |
7dfaa425ce | ||
d9cc10e109 | |||
041c23ed2a | |||
e0fb90d207 | |||
3af3dcd681 | |||
dfc0ff7cd0 | |||
71bc687ad6 | |||
3ef6d5b1e7 | |||
a1c7457a1d | |||
d2d390d75c | |||
1205065ddc | |||
a7cc18230b | |||
0caf5ba9fd | |||
d19814f220 | |||
c977608f0d | |||
13e0a09e70 | |||
020e72931b | |||
8ee10b4d9a | |||
6d59524517 | |||
d2cd0ec203 | |||
0015e151d0 | |||
3d2bd2140c | |||
8a54453636 | |||
0deaed7a4b | |||
14b65767fc | |||
6507172bae | |||
3895f8357e | |||
f0951d4a60 | |||
173d7f779c | |||
6515f21350 | |||
1f71dc768f | |||
7c4bd0baba | |||
bd576a06c2 | |||
7ddaefee57 | |||
150f1b7cae | |||
3de997b93e | |||
a37d587281 | |||
85940755cb | |||
ee4a27982d | |||
4980b7048f | |||
abcad7ea77 | |||
2d2bca5e23 | |||
114dcad072 | |||
d6b04a0bb2 | |||
7840b56dbd | |||
fd6ceed527 | |||
5c0b6baf95 | |||
d81ccb81e7 | |||
fb30c6495a | |||
550259e8ea | |||
e736057533 | |||
4ecace2b42 | |||
bad1c108ab | |||
2ba03c2453 | |||
fb439395e7 | |||
34475f945d | |||
823e1cfd0e | |||
c0e6781dda | |||
341e002ef2 | |||
a87d04ef5f | |||
11656c72ca | |||
72ee7c9ab6 | |||
483ebd64fe | |||
1a6fadf976 | |||
9b3c7707f0 | |||
261ef2f312 | |||
0abb336850 | |||
82b55210d8 | |||
41f36ef5e6 | |||
71dfbff8d7 | |||
1c57e8dd1d | |||
625308b74b | |||
466e557c1d | |||
121013a48a | |||
1fcc5f92a8 | |||
1c8e2038f6 | |||
29b0a28173 | |||
bd6d5f0128 | |||
6bbd622a98 | |||
d39bf7bc86 | |||
ffd80cde21 | |||
65e2dc8dff | |||
e52c25ad0b | |||
55c7791efa | |||
ec2fc0ab4f | |||
16d4d16950 | |||
b7be76a7e4 | |||
d6072c8591 | |||
23d2631fd7 | |||
06b3690d48 | |||
3c32b3650e | |||
101bae34e8 | |||
f7d53906e2 | |||
bdc9e40627 | |||
d5dfdca9d2 | |||
ce6c4929a0 | |||
c3ac31de69 | |||
24e1238e50 | |||
281e578f4d | |||
1a88ae05e6 | |||
df0c579af0 | |||
a25dbc6bd2 | |||
8e1c8a5ba5 | |||
cce2983347 | |||
6c2bed771c | |||
ae265ba5e7 | |||
909c79559b | |||
97c8573de8 | |||
6274d2c1ff | |||
409b7edb94 | |||
6b82b3af83 | |||
3013f33b35 | |||
77fbb45c71 | |||
2a0849e49a | |||
ac8e713935 | |||
118dfc79b3 | |||
6727752a2d | |||
75a6a093ed | |||
922cba9f5a | |||
35d0b2aa3c | |||
776afaff03 | |||
1c46900156 | |||
08a2264709 | |||
f7db1bf20f | |||
ffd14a8734 | |||
161c1bcb80 | |||
02514ff446 | |||
fdce67d101 | |||
8d1cbc6b88 | |||
b73f8a1c28 | |||
00a0c3d795 | |||
6b8d769e43 | |||
10b79c586b | |||
3c3579a29d | |||
017f02afc4 | |||
df235541d1 | |||
a456047969 | |||
ac48e61264 | |||
604bf2db77 | |||
4055d3e68a | |||
393722038b | |||
54c90bec11 | |||
039ee80db4 | |||
9f30f356cb | |||
fd10883652 | |||
6805111c47 | |||
86ce4a75b4 | |||
03932db20d | |||
d3f247f6fb | |||
c5af0fb37c | |||
9532be0cdc | |||
e0748c2eb6 | |||
5811836238 | |||
92b3854516 | |||
e85801db50 | |||
53dd6a82e6 | |||
75b230b2ed | |||
47a5ddb442 | |||
d0f779bb9b | |||
568b79e854 | |||
06bbeb0d2e | |||
75bb94b9a7 | |||
dfd0f1ad2a | |||
7a4b1589af | |||
da9d8d9d62 | |||
e3bc6ce1d3 | |||
ecd0f5827a | |||
c8be7f84a4 | |||
826e6264eb | |||
cc0b6edb34 | |||
0e564a24c9 | |||
7da12be242 | |||
095e317f3b | |||
67eeef26a0 | |||
2273812b2d | |||
4842e3f62b | |||
01c69f0712 | |||
baa5b762e2 | |||
76cd034fd3 | |||
a929fb3482 | |||
5ea3e12e26 | |||
141a22b6ff | |||
3f1d19f53e | |||
fcfb3ea677 | |||
dfceb941db | |||
9db6e5ac13 | |||
aceb94da3e | |||
12c7682a26 | |||
5d282a4cc4 | |||
a8bf3ec857 | |||
bb9573a82f | |||
15534ba9fa | |||
6aecf5e796 | |||
25f81af87b | |||
c78b43f7b0 | |||
6daeb9e474 | |||
5986e8a378 | |||
14068d24a8 | |||
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 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -4,10 +4,10 @@ site/data/*
|
|||||||
site/tmp/*
|
site/tmp/*
|
||||||
site/backup/*
|
site/backup/*
|
||||||
site/file/*
|
site/file/*
|
||||||
site/i18n/*.json
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
core/vendor/tinymce/link_list.json
|
core/vendor/tinymce/link_list.json
|
||||||
robots.txt
|
robots.txt
|
||||||
sitemap.xml
|
sitemap.xml
|
||||||
.gitignore
|
.gitignore
|
||||||
core/module/config/tool/data.key
|
core/module/config/tool/data.key
|
||||||
|
site/i18n/*.json
|
77
CHANGES.md
77
CHANGES.md
@ -1,5 +1,80 @@
|
|||||||
# Notes de mises à jour
|
# Notes de mises à jour
|
||||||
|
|
||||||
|
## Version 13.5.03
|
||||||
|
**Corrections**
|
||||||
|
- Mauvaise récupération du groupe de l'utilisateur, module de gestion des utilisateurs.
|
||||||
|
- Petites corrections.
|
||||||
|
|
||||||
|
## Version 13.5.02
|
||||||
|
**Correction**
|
||||||
|
- La réinitialisation du mot de passe ne fonctionnait pas. L'échec du changement de mot de passe est enregistré dans le journal de Zwii.
|
||||||
|
|
||||||
|
## Version 13.5.01
|
||||||
|
**Correction**
|
||||||
|
- Configuration du site, le message de formulaire non soumis non affiché.
|
||||||
|
|
||||||
|
## Version 13.5.00
|
||||||
|
**Améliorations :**
|
||||||
|
- Après un changement d'onglet dans la page de configuration, la page ne se recharge plus. Le dernier onglet affiché avant un submit est mémorisé dans les vues de l'utilisateur.
|
||||||
|
- Réactivation de l'édition des dialogues des langues.
|
||||||
|
- Nouveau bouton de test de bon fonctionnement du serveur SMTP afin de valider la double authentification.
|
||||||
|
- Validation de la connexion au site avec un code adressé par email. L'option est disponible depuis la configuration du site, onglet connexion. Elle s'active par groupe montant, exemple "éditeur" pour éditeurs et administrateurs.
|
||||||
|
- Optimisation du chargement des variables de classe.
|
||||||
|
- Suppression de redondance de déclaration des charset.
|
||||||
|
- Méthode de backup optimisée.
|
||||||
|
|
||||||
|
**Corrections :**
|
||||||
|
- Corrige un défaut d'affichage du bouton d'édition d'une page contenant un module ayant été supprimé sans passer par l'interface de gestion (FTP).
|
||||||
|
- Corrige un bug de changement de mot de passe pour les comptes non administrateurs.
|
||||||
|
- Blog 7.12, corrige un bug d'affichage des articles lorsque le thème Moderne est sélectionné.
|
||||||
|
- Corrige un dysfonctionnement de la fonction de tronquage qui perturbait l'affichage des articles de blog.
|
||||||
|
- Activation de la mémorisation de l'onglet actif dans la configuration après validation du formulaire ou visite d'une autre page du site.
|
||||||
|
- À l'installation, le bouton back mémorise la langue sélectionnée à la première étape.
|
||||||
|
- Corrige un bug de mise à jour en ligne du fichier des langues.
|
||||||
|
|
||||||
|
## Versions 13.4.00
|
||||||
|
** Améliorations :**
|
||||||
|
- Change le mode d'authentification, le hash du mot de passe n'est plus stocké dans un cookie.
|
||||||
|
- Améliore les performances des opérations d'écriture.
|
||||||
|
- Le sélecteur de fichier affiche le chemin d'accès du fichier présent dans le champ dans le gestionnaire de fichier.
|
||||||
|
- 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
|
## Versions 13.3.04
|
||||||
|
|
||||||
** Correction : **
|
** Correction : **
|
||||||
@ -795,7 +870,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.3.03
|
# ZwiiCMS 13.5.03
|
||||||
|
|
||||||
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.3.03
|
# ZwiiCMS 13.5.03
|
||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,14 +197,20 @@ class helper
|
|||||||
|
|
||||||
public static function autoBackup($folder, $filter = ['backup', 'tmp'])
|
public static function autoBackup($folder, $filter = ['backup', 'tmp'])
|
||||||
{
|
{
|
||||||
// Creation du ZIP
|
// Création du nom de fichier ZIP
|
||||||
$baseName = str_replace('/', '', helper::baseUrl(false, false));
|
$baseName = str_replace('/', '', helper::baseUrl(false, false));
|
||||||
$baseName = empty($baseName) ? 'ZwiiCMS' : $baseName;
|
$baseName = empty($baseName) ? 'ZwiiCMS' : $baseName;
|
||||||
$fileName = $baseName . '-backup-' . date('Y-m-d-H-i-s', time()) . '.zip';
|
$fileName = $baseName . '-backup-' . date('Y-m-d-H-i-s') . '.zip';
|
||||||
|
|
||||||
|
// Initialisation de l'archive ZIP
|
||||||
$zip = new ZipArchive();
|
$zip = new ZipArchive();
|
||||||
$zip->open($folder . $fileName, ZipArchive::CREATE | ZipArchive::OVERWRITE);
|
if ($zip->open($folder . $fileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== true) {
|
||||||
|
return false; // Retourne false si l'ouverture échoue
|
||||||
|
}
|
||||||
|
|
||||||
$directory = 'site/';
|
$directory = 'site/';
|
||||||
//$filter = array('backup','tmp','file');
|
|
||||||
|
// Récupération des fichiers et des dossiers
|
||||||
$files = new RecursiveIteratorIterator(
|
$files = new RecursiveIteratorIterator(
|
||||||
new RecursiveCallbackFilterIterator(
|
new RecursiveCallbackFilterIterator(
|
||||||
new RecursiveDirectoryIterator(
|
new RecursiveDirectoryIterator(
|
||||||
@ -206,23 +218,30 @@ class helper
|
|||||||
RecursiveDirectoryIterator::SKIP_DOTS
|
RecursiveDirectoryIterator::SKIP_DOTS
|
||||||
),
|
),
|
||||||
function ($fileInfo, $key, $iterator) use ($filter) {
|
function ($fileInfo, $key, $iterator) use ($filter) {
|
||||||
return $fileInfo->isFile() || !in_array($fileInfo->getBaseName(), $filter);
|
// Inclure les fichiers ou les répertoires non filtrés
|
||||||
|
return $fileInfo->isFile() || ($fileInfo->isDir() && !in_array($fileInfo->getBaseName(), $filter));
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
foreach ($files as $name => $file) {
|
|
||||||
|
// Ajout des fichiers à l'archive
|
||||||
|
foreach ($files as $file) {
|
||||||
if (!$file->isDir()) {
|
if (!$file->isDir()) {
|
||||||
$filePath = $file->getRealPath();
|
$filePath = $file->getRealPath();
|
||||||
$relativePath = substr($filePath, strlen(realpath($directory)) + 1);
|
$relativePath = str_replace(DIRECTORY_SEPARATOR, '/', substr($filePath, strlen(realpath($directory)) + 1));
|
||||||
$zip->addFile($filePath, $relativePath);
|
$zip->addFile($filePath, $relativePath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fermeture de l'archive ZIP
|
||||||
$zip->close();
|
$zip->close();
|
||||||
return ($fileName);
|
|
||||||
|
return $fileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retourne la liste des modules installés dans un tableau composé
|
* Retourne la liste des modules installés dans un tableau composé
|
||||||
* du nom réel
|
* du nom réel
|
||||||
@ -337,7 +356,7 @@ class helper
|
|||||||
public static function checkRewrite()
|
public static function checkRewrite()
|
||||||
{
|
{
|
||||||
// N'interroge que le serveur Apache
|
// N'interroge que le serveur Apache
|
||||||
if (strpos($_SERVER["SERVER_SOFTWARE"], 'Apache') > 0) {
|
if ((helper::checkServerSoftware() === false)) {
|
||||||
self::$rewriteStatus = false;
|
self::$rewriteStatus = false;
|
||||||
} else {
|
} else {
|
||||||
// Ouvre et scinde le fichier .htaccess
|
// Ouvre et scinde le fichier .htaccess
|
||||||
@ -348,6 +367,14 @@ class helper
|
|||||||
return self::$rewriteStatus;
|
return self::$rewriteStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retourne vrai ou faux selon que le serveur est comptatible avec htaccess
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function checkServerSoftware() {
|
||||||
|
return (stripos($_SERVER['SERVER_SOFTWARE'], 'Apache') !== false || stripos($_SERVER['SERVER_SOFTWARE'], 'LiteSpeed') !== false);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renvoie le numéro de version de Zwii est en ligne
|
* Renvoie le numéro de version de Zwii est en ligne
|
||||||
* @return string
|
* @return string
|
||||||
@ -389,10 +416,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) . ')'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -402,8 +429,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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -426,7 +453,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:
|
||||||
@ -473,6 +501,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;
|
||||||
}
|
}
|
||||||
@ -661,13 +694,35 @@ class helper
|
|||||||
public static function subword($text, $start, $length)
|
public static function subword($text, $start, $length)
|
||||||
{
|
{
|
||||||
$text = trim($text);
|
$text = trim($text);
|
||||||
if (strlen($text) > $length) {
|
|
||||||
|
// Vérifier si la longueur du texte sans les balises dépasse la longueur souhaitée
|
||||||
|
if (mb_strlen(strip_tags($text)) > $length) {
|
||||||
|
// Utiliser mb_substr pour couper le texte
|
||||||
$text = mb_substr($text, $start, $length);
|
$text = mb_substr($text, $start, $length);
|
||||||
$text = mb_substr($text, 0, min(mb_strlen($text), mb_strrpos($text, ' ')));
|
|
||||||
|
// S'assurer que le texte ne se termine pas au milieu d'un mot
|
||||||
|
$lastSpace = mb_strrpos($text, ' ');
|
||||||
|
if ($lastSpace !== false) {
|
||||||
|
$text = mb_substr($text, 0, $lastSpace);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fermer les balises HTML ouvertes
|
||||||
|
$dom = new DOMDocument();
|
||||||
|
@$dom->loadHTML('<div>' . $text . '</div>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
|
||||||
|
$text = $dom->saveHTML();
|
||||||
|
|
||||||
|
// Retirer la balise de conteneur ajoutée
|
||||||
|
$text = preg_replace('~^<div>(.*)</div>$~s', '$1', $text);
|
||||||
|
|
||||||
|
// Ajouter des points de suspension si le texte a été coupé
|
||||||
|
$text .= '...';
|
||||||
}
|
}
|
||||||
|
|
||||||
return $text;
|
return $text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cryptage
|
* Cryptage
|
||||||
* @param string $key la clé d'encryptage
|
* @param string $key la clé d'encryptage
|
||||||
|
@ -149,7 +149,8 @@ class JsonDb extends \Prowebcraft\Dot
|
|||||||
public function save()
|
public function save()
|
||||||
{
|
{
|
||||||
// Encode les données au format JSON avec les options spécifiées
|
// Encode les données au format JSON avec les options spécifiées
|
||||||
$encoded_data = json_encode($this->data, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT | JSON_PRETTY_PRINT);
|
//$encoded_data = json_encode($this->data, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT | JSON_PRETTY_PRINT);
|
||||||
|
$encoded_data = json_encode($this->data, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT);
|
||||||
|
|
||||||
// Vérifie la longueur de la chaîne JSON encodée
|
// Vérifie la longueur de la chaîne JSON encodée
|
||||||
$encoded_length = strlen($encoded_data);
|
$encoded_length = strlen($encoded_data);
|
||||||
@ -162,6 +163,9 @@ class JsonDb extends \Prowebcraft\Dot
|
|||||||
// Essaye d'écrire les données encodées dans le fichier de base de données
|
// 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
|
$write_result = file_put_contents($this->db, $encoded_data, LOCK_EX); // Les utilisateurs multiples obtiennent un verrou
|
||||||
|
|
||||||
|
//$now = \DateTime::createFromFormat('U.u', microtime(true));
|
||||||
|
//file_put_contents("tmplog.txt", '[JsonDb][' . $now->format('H:i:s.u') . ']--' . $this->db . "\r\n", FILE_APPEND);
|
||||||
|
|
||||||
// Vérifie si l'écriture a réussi
|
// Vérifie si l'écriture a réussi
|
||||||
if ($write_result === $encoded_length) {
|
if ($write_result === $encoded_length) {
|
||||||
// Sort de la boucle si l'écriture a réussi
|
// Sort de la boucle si l'écriture a réussi
|
||||||
|
@ -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 {
|
||||||
@ -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'
|
||||||
) {
|
) {
|
||||||
@ -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
|
||||||
@ -990,8 +998,8 @@ 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'])) and
|
or (empty($this->getData(['page', $this->getUrl(0), 'moduleId'])) === false
|
||||||
!class_exists($this->getData(['page', $this->getUrl(2), 'moduleId']))
|
and class_exists($this->getData(['page', $this->getUrl(0), 'moduleId'])) === false
|
||||||
)
|
)
|
||||||
// Sur une page d'accueil
|
// Sur une page d'accueil
|
||||||
or $this->getUrl(0) === ''
|
or $this->getUrl(0) === ''
|
||||||
@ -1011,6 +1019,7 @@ class layout extends common
|
|||||||
$this->getUser('permission', 'page', 'module')
|
$this->getUser('permission', 'page', 'module')
|
||||||
and $this->geturl(1) !== 'edit'
|
and $this->geturl(1) !== 'edit'
|
||||||
and $this->getData(['page', $this->getUrl(0), 'moduleId'])
|
and $this->getData(['page', $this->getUrl(0), 'moduleId'])
|
||||||
|
and class_exists($this->getData(['page', $this->getUrl(0), 'moduleId'])) === true
|
||||||
) {
|
) {
|
||||||
$leftItems .= '<li>' . template::ico('gear', [
|
$leftItems .= '<li>' . template::ico('gear', [
|
||||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
@ -1063,18 +1072,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']);
|
||||||
@ -1086,21 +1091,55 @@ class layout extends common
|
|||||||
$today > $checkUpdate + $this->getData(['config', 'autoUpdateDelay', 86400])
|
$today > $checkUpdate + $this->getData(['config', 'autoUpdateDelay', 86400])
|
||||||
) {
|
) {
|
||||||
// Dernier auto controle
|
// Dernier auto controle
|
||||||
$this->setData(['core', 'lastAutoUpdate', $today]);
|
$this->setData(['core', 'lastAutoUpdate', $today], false);
|
||||||
if (
|
if (
|
||||||
helper::checkNewVersion(common::ZWII_UPDATE_CHANNEL)
|
helper::checkNewVersion(common::ZWII_UPDATE_CHANNEL)
|
||||||
) {
|
) {
|
||||||
$this->setData(['core', 'updateAvailable', true]);
|
$this->setData(['core', 'updateAvailable', true], false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Modules installés
|
||||||
|
$infoModules = helper::getModules();
|
||||||
|
// Recherche de mise à jour des modules
|
||||||
|
$store = plugin::getStore();
|
||||||
|
if (is_array($store)) {
|
||||||
|
// Parcourir les données des modules du store
|
||||||
|
foreach ($store as $key => $value) {
|
||||||
|
if (empty($key)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// Mise à jour d'un module
|
||||||
|
// Le module est installé et une mise à jour est en ligne
|
||||||
|
if (
|
||||||
|
isset($infoModules[$key])
|
||||||
|
&&
|
||||||
|
version_compare($infoModules[$key]['version'], $value['version'], '<')
|
||||||
|
) {
|
||||||
|
$this->setData(['core', 'updateModuleAvailable', true], false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Sauvegarde la base manuellement
|
||||||
|
$this->saveDB('core');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 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')
|
||||||
@ -1175,7 +1214,7 @@ class layout extends common
|
|||||||
{
|
{
|
||||||
// Import des fontes liées au thème
|
// Import des fontes liées au thème
|
||||||
if (file_exists(self::DATA_DIR . 'font/font.html')) {
|
if (file_exists(self::DATA_DIR . 'font/font.html')) {
|
||||||
include_once (self::DATA_DIR . 'font/font.html');
|
include_once(self::DATA_DIR . 'font/font.html');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1188,7 +1227,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')) . ';';
|
||||||
|
@ -11,7 +11,7 @@ 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
|
||||||
@ -32,8 +32,6 @@ class core extends common
|
|||||||
}
|
}
|
||||||
// Date de la dernière suppression
|
// Date de la dernière suppression
|
||||||
$this->setData(['core', 'lastClearTmp', $lastClearTmp]);
|
$this->setData(['core', 'lastClearTmp', $lastClearTmp]);
|
||||||
// Enregistre les données
|
|
||||||
//$this->SaveData();
|
|
||||||
}
|
}
|
||||||
// Backup automatique des données
|
// Backup automatique des données
|
||||||
$lastBackup = mktime(0, 0, 0);
|
$lastBackup = mktime(0, 0, 0);
|
||||||
@ -415,7 +413,7 @@ 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') === common::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,8 +427,8 @@ 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') < common::GROUP_ADMIN
|
and $this->getUser('group') < common::GROUP_ADMIN
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -449,7 +447,7 @@ class core extends common
|
|||||||
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']) === common::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']))
|
||||||
@ -466,9 +464,9 @@ 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') < common::GROUP_EDITOR
|
and $this->getUser('group') < common::GROUP_EDITOR
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
@ -515,10 +513,11 @@ 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->isPost()
|
||||||
) {
|
) {
|
||||||
$this->setData(['user', $this->getUser('id'), 'accessUrl', $this->getUrl()]);
|
$this->setData(['user', $this->getUser('id'), 'accessUrl', $this->getUrl()], false);
|
||||||
$this->setData(['user', $this->getUser('id'), 'accessTimer', time()]);
|
$this->setData(['user', $this->getUser('id'), 'accessTimer', time()]);
|
||||||
}
|
}
|
||||||
// Breadcrumb
|
// Breadcrumb
|
||||||
@ -635,7 +634,7 @@ class core extends common
|
|||||||
// Check le groupe de l'utilisateur
|
// Check le groupe de l'utilisateur
|
||||||
if (
|
if (
|
||||||
($module::$actions[$action] === common::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)
|
||||||
)
|
)
|
||||||
@ -723,7 +722,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 {
|
||||||
|
@ -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=/': '&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>' : '';
|
||||||
@ -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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
324
core/core.php
324
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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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,10 +51,17 @@ class common
|
|||||||
const ACCESS_TIMER = 1800;
|
const ACCESS_TIMER = 1800;
|
||||||
|
|
||||||
// Numéro de version
|
// Numéro de version
|
||||||
const ZWII_VERSION = '13.3.04';
|
const ZWII_VERSION = '13.5.03';
|
||||||
|
|
||||||
// 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/';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Branche de base pour la mise à jour
|
||||||
|
* Pour les versions supérieures à 13.4 et inférieure à 14, la branche reste sur v134
|
||||||
|
* La branche v13 est maintenue afin de télécharger un correctif permettant d'installer
|
||||||
|
* les version supérieures.
|
||||||
|
*/
|
||||||
const ZWII_UPDATE_CHANNEL = 'v13';
|
const ZWII_UPDATE_CHANNEL = 'v13';
|
||||||
|
|
||||||
// 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
|
||||||
@ -95,13 +102,13 @@ class common
|
|||||||
"user"
|
"user"
|
||||||
];
|
];
|
||||||
/*
|
/*
|
||||||
Cette variable est supprimée du test dans le routeur.
|
Cette variable est supprimée du test dans le routeur.
|
||||||
public static $accessExclude = [
|
public static $accessExclude = [
|
||||||
'login',
|
'login',
|
||||||
'logout',
|
'logout',
|
||||||
"maintenance",
|
"maintenance",
|
||||||
];
|
];
|
||||||
*/
|
*/
|
||||||
private $data = [];
|
private $data = [];
|
||||||
private $hierarchy = [
|
private $hierarchy = [
|
||||||
'all' => [],
|
'all' => [],
|
||||||
@ -312,25 +319,38 @@ class common
|
|||||||
|
|
||||||
// Boutons de navigation dans la page
|
// Boutons de navigation dans la page
|
||||||
public static $navIconTemplate = [
|
public static $navIconTemplate = [
|
||||||
'open' => [
|
'open' => [
|
||||||
'left' => 'left-open',
|
'left' => 'left-open',
|
||||||
'right' => 'right-open',
|
'right' => 'right-open',
|
||||||
],
|
],
|
||||||
'dir' => [
|
'dir' => [
|
||||||
'left' => 'left',
|
'left' => 'left',
|
||||||
'right' => 'right-dir',
|
'right' => 'right-dir',
|
||||||
],
|
],
|
||||||
'big' => [
|
'big' => [
|
||||||
'left' => 'left-big',
|
'left' => 'left-big',
|
||||||
'right' => 'right-big',
|
'right' => 'right-big',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructeur commun
|
* Constructeur commun
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
// Récupération du cache des propriétés
|
||||||
|
if (isset($GLOBALS['common_cache'])) {
|
||||||
|
$this->input['_POST'] = $GLOBALS['common_cache']['input']['_POST'];
|
||||||
|
$this->input['_COOKIE'] = $GLOBALS['common_cache']['input']['_COOKIE'];
|
||||||
|
self::$siteContent = $GLOBALS['common_cache']['siteContent'];
|
||||||
|
$this->dataFiles = $GLOBALS['common_cache']['dataFiles'];
|
||||||
|
$this->user = $GLOBALS['common_cache']['user'];
|
||||||
|
self::$i18nUI = $GLOBALS['common_cache']['i18nUI'];
|
||||||
|
$this->hierarchy = $GLOBALS['common_cache']['hierarchy'];
|
||||||
|
$this->url = $GLOBALS['common_cache']['url'];
|
||||||
|
self::$dialog = $GLOBALS['common_cache']['dialog'];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Extraction des données http
|
// Extraction des données http
|
||||||
if (isset($_POST)) {
|
if (isset($_POST)) {
|
||||||
@ -354,12 +374,13 @@ class common
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Localisation
|
||||||
\setlocale(LC_ALL, self::$siteContent . '.UTF8');
|
\setlocale(LC_ALL, self::$siteContent . '.UTF8');
|
||||||
|
|
||||||
// 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) {
|
||||||
@ -387,14 +408,13 @@ class common
|
|||||||
? self::$i18nUI
|
? self::$i18nUI
|
||||||
: 'fr_FR';
|
: 'fr_FR';
|
||||||
} else {
|
} else {
|
||||||
if (isset($_SESSION['ZWII_UI'])) {
|
// Par défaut la langue définie par défaut à l'installation
|
||||||
self::$i18nUI = $_SESSION['ZWII_UI'];
|
if ($this->getData(['config','defaultLanguageUI'])) {
|
||||||
} elseif (isset($_COOKIE['ZWII_UI'])) {
|
self::$i18nUI = $this->getData(['config','defaultLanguageUI']);
|
||||||
self::$i18nUI = $_COOKIE['ZWII_UI'];
|
|
||||||
} else {
|
} else {
|
||||||
self::$i18nUI = 'fr_FR';
|
self::$i18nUI = 'fr_FR';
|
||||||
|
$this->setData(['config','defaultLanguageUI', 'fr_FR']);
|
||||||
}
|
}
|
||||||
$_SESSION['ZWII_UI'] = self::$i18nUI;
|
|
||||||
}
|
}
|
||||||
// Stocker le cookie de langue pour l'éditeur de texte
|
// Stocker le cookie de langue pour l'éditeur de texte
|
||||||
setcookie('ZWII_UI', self::$i18nUI, time() + 3600, helper::baseUrl(false, false), '', false, false);
|
setcookie('ZWII_UI', self::$i18nUI, time() + 3600, helper::baseUrl(false, false), '', false, false);
|
||||||
@ -432,6 +452,9 @@ class common
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cache
|
||||||
|
$GLOBALS['common_construct']['dialog'] = self::$dialog;
|
||||||
|
|
||||||
// Données de proxy
|
// Données de proxy
|
||||||
$proxy = $this->getData(['config', 'proxyType']) . $this->getData(['config', 'proxyUrl']) . ':' . $this->getData(['config', 'proxyPort']);
|
$proxy = $this->getData(['config', 'proxyType']) . $this->getData(['config', 'proxyUrl']) . ':' . $this->getData(['config', 'proxyPort']);
|
||||||
if (
|
if (
|
||||||
@ -453,6 +476,21 @@ class common
|
|||||||
stream_context_set_default($context);
|
stream_context_set_default($context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mise en cache des propriétés
|
||||||
|
$GLOBALS['common_cache'] = [
|
||||||
|
'input' => [
|
||||||
|
'_POST' => $this->input['_POST'],
|
||||||
|
'_COOKIE' => $this->input['_COOKIE'],
|
||||||
|
],
|
||||||
|
'siteContent' => self::$siteContent,
|
||||||
|
'dataFiles' => $this->dataFiles,
|
||||||
|
'user' => $this->user,
|
||||||
|
'i18nUI' => self::$i18nUI,
|
||||||
|
'hierarchy' => $this->hierarchy,
|
||||||
|
'url' => $this->url,
|
||||||
|
'dialog' => self::$dialog,
|
||||||
|
];
|
||||||
|
|
||||||
// Mise à jour des données core
|
// Mise à jour des données core
|
||||||
include('core/include/update.inc.php');
|
include('core/include/update.inc.php');
|
||||||
|
|
||||||
@ -520,7 +558,7 @@ class common
|
|||||||
* Sauvegarde des données
|
* Sauvegarde des données
|
||||||
* @param array $keys Clé(s) des données
|
* @param array $keys Clé(s) des données
|
||||||
*/
|
*/
|
||||||
public function setData($keys = [])
|
public function setData($keys = [], $save = true)
|
||||||
{
|
{
|
||||||
// Pas d'enregistrement lorsqu'une notice est présente ou tableau transmis vide
|
// Pas d'enregistrement lorsqu'une notice est présente ou tableau transmis vide
|
||||||
if (
|
if (
|
||||||
@ -548,7 +586,7 @@ class common
|
|||||||
$query .= '.' . $keys[$i];
|
$query .= '.' . $keys[$i];
|
||||||
}
|
}
|
||||||
// Appliquer la modification, le dernier élément étant la donnée à sauvegarder
|
// Appliquer la modification, le dernier élément étant la donnée à sauvegarder
|
||||||
$success = is_object($db->set($query, $keys[count($keys) - 1], true));
|
$success = is_object($db->set($query, $keys[count($keys) - 1], $save));
|
||||||
}
|
}
|
||||||
return $success;
|
return $success;
|
||||||
}
|
}
|
||||||
@ -619,32 +657,35 @@ class common
|
|||||||
// Initialise le compteur de tentatives
|
// Initialise le compteur de tentatives
|
||||||
$attempts = 0;
|
$attempts = 0;
|
||||||
|
|
||||||
// Convertit les données en chaîne de caractères
|
|
||||||
$serialized_data = serialize($data);
|
|
||||||
|
|
||||||
// Vérifie la longueur des données
|
// Vérifie la longueur des données
|
||||||
$data_length = strlen($serialized_data);
|
$data_length = strlen($data);
|
||||||
|
|
||||||
// Effectue jusqu'à 5 tentatives d'écriture
|
// Effectue jusqu'à 5 tentatives d'écriture
|
||||||
while ($attempts < 5) {
|
while ($attempts < 5) {
|
||||||
// Essaye d'écrire les données dans le fichier avec verrouillage exclusif
|
// Essaye d'écrire les données dans le fichier avec verrouillage exclusif
|
||||||
$write_result = file_put_contents($filename, $data, LOCK_EX | $flags);
|
$write_result = file_put_contents($filename, $data, LOCK_EX | $flags);
|
||||||
|
|
||||||
|
//$now = \DateTime::createFromFormat('U.u', microtime(true));
|
||||||
|
//file_put_contents("tmplog.txt", '[SecurePut][' . $now->format('H:i:s.u') . ']--' . $filename . "\r\n", FILE_APPEND);
|
||||||
|
|
||||||
// Vérifie si l'écriture a réussi
|
// Vérifie si l'écriture a réussi
|
||||||
if ($write_result !== false && $write_result === $data_length) {
|
if ($write_result !== false && $write_result === $data_length) {
|
||||||
// Sort de la boucle si l'écriture a réussi
|
// Sort de la boucle si l'écriture a réussi
|
||||||
return true;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Incrémente le compteur de tentatives
|
// Incrémente le compteur de tentatives
|
||||||
$attempts++;
|
$attempts++;
|
||||||
|
sleep(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Échec de l'écriture après plusieurs tentatives
|
// Échec de l'écriture après plusieurs tentatives
|
||||||
return false;
|
// Etat de l'écriture
|
||||||
|
return ($attempts < 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Effacer les données de la page
|
* Effacer les données de la page
|
||||||
* @param string pageId
|
* @param string pageId
|
||||||
@ -687,45 +728,56 @@ class common
|
|||||||
mkdir(self::DATA_DIR . $lang, 0755);
|
mkdir(self::DATA_DIR . $lang, 0755);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Localisation
|
switch ($module) {
|
||||||
if (
|
case 'page':
|
||||||
$module === 'page' ||
|
case 'module':
|
||||||
$module === 'module' ||
|
case 'locale':
|
||||||
$module === 'locale'
|
// Création des sous-dossiers localisés
|
||||||
) {
|
if (!file_exists(self::DATA_DIR . $lang)) {
|
||||||
// Création des sous-dossiers localisés
|
mkdir(self::DATA_DIR . $lang, 0755);
|
||||||
if (!file_exists(self::DATA_DIR . $lang)) {
|
|
||||||
mkdir(self::DATA_DIR . $lang, 0755);
|
|
||||||
}
|
|
||||||
if (!file_exists(self::DATA_DIR . $lang . '/content')) {
|
|
||||||
mkdir(self::DATA_DIR . $lang . '/content', 0755);
|
|
||||||
}
|
|
||||||
// Site en français avec site exemple
|
|
||||||
if ($lang == 'fr_FR' && $sampleSite === true) {
|
|
||||||
$this->setData([$module, init::$siteTemplate[$module]]);
|
|
||||||
// Création des pages
|
|
||||||
foreach (init::$siteContent as $key => $value) {
|
|
||||||
$this->setPage($key, $value, 'fr_FR');
|
|
||||||
}
|
}
|
||||||
// Version en langue étrangère ou fr_FR sans site de test
|
if (!file_exists(self::DATA_DIR . $lang . '/content')) {
|
||||||
} else {
|
mkdir(self::DATA_DIR . $lang . '/content', 0755);
|
||||||
// En_EN par défaut si le contenu localisé n'est pas traduit
|
}
|
||||||
$langDefault = array_key_exists($lang, init::$defaultDataI18n) === true ? $lang : 'default';
|
// Site en français avec site exemple
|
||||||
// Charger les données de cette langue
|
if ($lang == 'fr_FR' && $sampleSite === true && $module !== 'locale') {
|
||||||
$this->setData([$module, init::$defaultDataI18n[$langDefault][$module]]);
|
$this->setData([$module, init::$siteTemplate[$module]]);
|
||||||
// Créer la page d'accueil, une seule page dans cette configuration
|
// Création des pages
|
||||||
$pageId = init::$defaultDataI18n[$langDefault]['locale']['homePageId'];
|
foreach (init::$siteContent as $key => $value) {
|
||||||
$content = init::$defaultDataI18n[$langDefault]['html'];
|
$this->setPage($key, $value['content'], 'fr_FR');
|
||||||
$this->setPage($pageId, $content, $lang);
|
}
|
||||||
//file_put_contents(self::DATA_DIR . $lang . '/content/' . init::$defaultDataI18n[$langDefault]['page'][$pageId]['content'], $content);
|
// Version en langue étrangère ou fr_FR sans site de test
|
||||||
}
|
} else {
|
||||||
} else {
|
// En_EN par défaut si le contenu localisé n'est pas traduit
|
||||||
// Installation des données des autres modules cad theme profil font config, admin et core
|
$langDefault = array_key_exists($lang, init::$defaultDataI18n) === true ? $lang : 'default';
|
||||||
$this->setData([$module, init::$defaultData[$module]]);
|
// Charger les données de cette langue
|
||||||
|
$this->setData([$module, init::$defaultDataI18n[$langDefault][$module]]);
|
||||||
|
// Créer la page d'accueil, une seule page dans cette configuration
|
||||||
|
$pageId = init::$defaultDataI18n[$langDefault]['locale']['homePageId'];
|
||||||
|
$content = init::$defaultDataI18n[$langDefault]['html'];
|
||||||
|
$this->setPage($pageId, $content, $lang);
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Installation des données des autres modules cad theme profil font config, admin et core
|
||||||
|
$this->setData([$module, init::$defaultData[$module]]);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Forçage de l'enregistrement
|
||||||
|
* @param mixed $module
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function saveDB($module): void
|
||||||
|
{
|
||||||
|
$db = $this->dataFiles[$module];
|
||||||
|
$db->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Accède à la liste des pages parents et de leurs enfants
|
* Accède à la liste des pages parents et de leurs enfants
|
||||||
@ -757,65 +809,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 (
|
if (
|
||||||
// Page parent
|
// Page parent
|
||||||
$parentId = $this->getData(['page', $pageId, 'parentPageId'])
|
$parentId = $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 (
|
and (
|
||||||
(
|
(
|
||||||
$this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
|
$this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
|
||||||
and
|
and
|
||||||
$this->getData(['page', $parentId, 'group']) === self::GROUP_VISITOR
|
$this->getData(['page', $parentId, 'group']) === self::GROUP_VISITOR
|
||||||
)
|
)
|
||||||
or (
|
or (
|
||||||
$this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
$this->isConnected() === true
|
||||||
and
|
and
|
||||||
$this->getUser('group') * self::MAX_PROFILS + $this->getUser('profil')) >= ($this->getData(['page', $pageId, 'group']) * self::MAX_PROFILS + $this->getData(['page', $pageId, 'profil'])
|
$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
|
||||||
@ -1028,6 +1080,17 @@ 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
|
||||||
@ -1217,11 +1280,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 */
|
||||||
@ -1238,9 +1300,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 {
|
||||||
@ -1444,7 +1506,7 @@ class common
|
|||||||
public function saveLog($message = '')
|
public function saveLog($message = '')
|
||||||
{
|
{
|
||||||
// Journalisation
|
// Journalisation
|
||||||
$dataLog = helper::dateUTF8('%Y%m%d', time(), self::$i18nUI) . ';' . helper::dateUTF8('%H:%M', time(), self::$i18nUI). ';';
|
$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();
|
||||||
|
@ -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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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/
|
||||||
*/
|
*/
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html prefix="og: http://ogp.me/ns#" lang="<?php echo substr(self::$siteContent, 0, 2); ?>">
|
<html prefix="og: http://ogp.me/ns#" lang="<?php echo substr(self::$siteContent, 0, 2); ?>">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
<meta http-equiv="content-type" content="text/html;">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<?php $layout->showMetaTitle(); ?>
|
<?php $layout->showMetaTitle(); ?>
|
||||||
<?php $layout->showMetaDescription(); ?>
|
<?php $layout->showMetaDescription(); ?>
|
||||||
|
@ -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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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/
|
||||||
*/
|
*/
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html prefix="og: http://ogp.me/ns#" lang="<?php echo substr(self::$siteContent, 0, 2); ?>">
|
<html prefix="og: http://ogp.me/ns#" lang="<?php echo substr(self::$siteContent, 0, 2); ?>">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
<meta http-equiv="content-type" content="text/html;">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<?php $layout->showMetaTitle(); ?>
|
<?php $layout->showMetaTitle(); ?>
|
||||||
<?php $layout->showMetaDescription(); ?>
|
<?php $layout->showMetaDescription(); ?>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="<?php echo substr(self::$siteContent, 0, 2);?>">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="<?php echo substr(self::$siteContent, 0, 2);?>">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
<meta http-equiv="content-type" content="text/html;">
|
||||||
<meta name="viewport" content="width=device-width">
|
<meta name="viewport" content="width=device-width">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="x-apple-disable-message-reformatting">
|
<meta name="x-apple-disable-message-reformatting">
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
<meta http-equiv="content-type" content="text/html;">
|
||||||
<meta meta="description=" content="ZwiiCMS le CMS multilingue sans base de données">
|
<meta meta="description=" content="ZwiiCMS le CMS multilingue sans base de données">
|
||||||
<meta name="generator" content="ZiiCMS https://forge.chapril.org/ZwiiCMS-Team/ZwiiCMS">
|
<meta name="generator" content="ZiiCMS https://forge.chapril.org/ZwiiCMS-Team/ZwiiCMS">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
@ -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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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,
|
||||||
|
'testmail' => 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 (
|
||||||
@ -495,11 +496,23 @@ class config extends common
|
|||||||
'autoDisconnect' => $this->getInput('connectAutoDisconnect', helper::FILTER_BOOLEAN),
|
'autoDisconnect' => $this->getInput('connectAutoDisconnect', helper::FILTER_BOOLEAN),
|
||||||
'captchaType' => $this->getInput('connectCaptchaType'),
|
'captchaType' => $this->getInput('connectCaptchaType'),
|
||||||
'showPassword' => $this->getInput('connectShowPassword', helper::FILTER_BOOLEAN),
|
'showPassword' => $this->getInput('connectShowPassword', helper::FILTER_BOOLEAN),
|
||||||
'redirectLogin' => $this->getInput('connectRedirectLogin', helper::FILTER_BOOLEAN)
|
'redirectLogin' => $this->getInput('connectRedirectLogin', helper::FILTER_BOOLEAN),
|
||||||
|
'mailAuth' => $this->getInput('connectAuthMail', helper::FILTER_INT),
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// Sauvegarde la position des onglets de la vue de l'utilisateur courant
|
||||||
|
$this->setData([
|
||||||
|
'user',
|
||||||
|
$this->getUser('id'),
|
||||||
|
'view',
|
||||||
|
[
|
||||||
|
'config' => $this->getInput('containerSelected'),
|
||||||
|
'page' => $this->getData(['user', $this->getUser('id'), 'view', 'page']),
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
// Efface les fichiers de backup lorsque l'option est désactivée
|
// Efface les fichiers de backup lorsque l'option est désactivée
|
||||||
if ($this->getInput('configFileBackup', helper::FILTER_BOOLEAN) === false) {
|
if ($this->getInput('configFileBackup', helper::FILTER_BOOLEAN) === false) {
|
||||||
$path = realpath('site/data');
|
$path = realpath('site/data');
|
||||||
@ -907,7 +920,8 @@ class config extends common
|
|||||||
* Fonction pour vérifier la présence du module de réécriture
|
* Fonction pour vérifier la présence du module de réécriture
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function isModRewriteEnabled() {
|
public function isModRewriteEnabled()
|
||||||
|
{
|
||||||
// Check if Apache and mod_rewrite is loaded
|
// Check if Apache and mod_rewrite is loaded
|
||||||
if (function_exists('apache_get_modules')) {
|
if (function_exists('apache_get_modules')) {
|
||||||
$modules = apache_get_modules();
|
$modules = apache_get_modules();
|
||||||
@ -917,4 +931,34 @@ class config extends common
|
|||||||
return getenv('HTTP_MOD_REWRITE') == 'On' || getenv('REDIRECT_STATUS') == '200';
|
return getenv('HTTP_MOD_REWRITE') == 'On' || getenv('REDIRECT_STATUS') == '200';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Envoi un message de test
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function testmail()
|
||||||
|
{
|
||||||
|
$sent = $this->sendMail(
|
||||||
|
$this->getUser('mail'),
|
||||||
|
helper::translate('Test de la messagerie du site'),
|
||||||
|
'<strong>' . $this->getUser('firstname') . ' ' . $this->getUser('lastname') . '</strong>,<br><br>' .
|
||||||
|
'<h4>' . helper::translate('Il semblerait que votre messagerie fonctionne correctement !') . '</h4>',
|
||||||
|
null,
|
||||||
|
'no-reply@localhost'
|
||||||
|
);
|
||||||
|
if ($sent !== true) {
|
||||||
|
// Désactivation de l'authentification par email
|
||||||
|
$this->setData(['config', 'connect', 'mailAuth', 0]);
|
||||||
|
// Journalisation
|
||||||
|
$this->saveLog($sent);
|
||||||
|
}
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . 'config/' . $this->getUrl(2),
|
||||||
|
'state' => $sent === true ? true : false,
|
||||||
|
'notification' => $sent === true ? helper::translate('Message de test envoyé avec succès') : helper::translate('Message non envoyé')
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
@ -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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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,13 +3,7 @@
|
|||||||
<div class="col12">
|
<div class="col12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4><?php echo helper::translate('Sécurité de la connexion'); ?>
|
<h4><?php echo helper::translate('Sécurité de la connexion'); ?>
|
||||||
<!--<span id="specialeHelpButton" class="helpDisplayButton">
|
|
||||||
<a href="https://doc.zwiicms.fr/connexion" 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">
|
||||||
<?php echo template::checkbox('connectShowPassword', true, 'Dévoiler le mot de passe', [
|
<?php echo template::checkbox('connectShowPassword', true, 'Dévoiler le mot de passe', [
|
||||||
@ -43,32 +37,32 @@
|
|||||||
'selected' => $this->getData(['config', 'connect', 'timeout'])
|
'selected' => $this->getData(['config', 'connect', 'timeout'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col3 verticalAlignBottom">
|
<div class="col3">
|
||||||
<label id="helpBlacklist"><?php echo helper::translate('Liste noire'); ?>
|
<?php echo template::select('connectAuthMail', array_merge([0 => 'Aucune'], self::$groupNews), [
|
||||||
<?php echo template::help(
|
'label' => 'Validation par clé ⚠️',
|
||||||
'La liste noire énumère les tentatives de connexion à partir de comptes inexistants. Sont stockés : la date, l\'heure, le nom du compte et l\'IP.
|
'selected' => $this->getData(['config', 'connect', 'mailAuth']),
|
||||||
Après le nombre de tentatives autorisées, l\'IP et le compte sont bloqués.'
|
'help' => 'La connexion est confirmée à l\'aide d\'une clé transmise par messagerie. Depuis le groupe sélectionné et les groupes supérieurs.'
|
||||||
);
|
|
||||||
?>
|
|
||||||
</label>
|
|
||||||
<?php echo template::button('ConnectBlackListDownload', [
|
|
||||||
'href' => helper::baseUrl() . 'config/blacklistDownload',
|
|
||||||
'value' => 'Télécharger la liste',
|
|
||||||
'ico' => 'download'
|
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col3 verticalAlignBottom">
|
<div class="col3 verticalAlignBottom">
|
||||||
<?php echo template::button('CnnectBlackListReset', [
|
<?php echo template::button('ConfigSendMail', [
|
||||||
'class' => 'buttonRed',
|
'href' => helper::baseUrl() . 'config/testmail',
|
||||||
'href' => helper::baseUrl() . 'config/blacklistReset',
|
'value' => 'Message de test',
|
||||||
'value' => 'Réinitialiser la liste',
|
'ico' => 'mail'
|
||||||
'ico' => 'trash'
|
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<div class="block">
|
||||||
|
<h4><?php echo helper::translate('Captcha à la connexion'); ?>
|
||||||
|
</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col3">
|
<div class="col3">
|
||||||
<?php echo template::checkbox('connectCaptcha', true, 'Captcha à la connexion', [
|
<?php echo template::checkbox('connectCaptcha', true, 'Activer', [
|
||||||
'checked' => $this->getData(['config', 'connect', 'captcha'])
|
'checked' => $this->getData(['config', 'connect', 'captcha'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
@ -92,40 +86,66 @@
|
|||||||
<div class="col12">
|
<div class="col12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4><?php echo helper::translate('Journalisation'); ?>
|
<h4><?php echo helper::translate('Journalisation'); ?>
|
||||||
<!--<span id="specialeHelpButton" class="helpDisplayButton">
|
|
||||||
<a href="https://doc.zwiicms.fr/journalisation" 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="col6">
|
||||||
<?php echo template::checkbox('connectLog', true, 'Activer la journalisation', [
|
<div class="row">
|
||||||
'checked' => $this->getData(['config', 'connect', 'log'])
|
<div class="col6">
|
||||||
]); ?>
|
<?php echo template::checkbox('connectLog', true, 'Activer la journalisation', [
|
||||||
|
'checked' => $this->getData(['config', 'connect', 'log'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::select('connectAnonymousIp', $module::$anonIP, [
|
||||||
|
'label' => 'Anonymat des adresses IP',
|
||||||
|
'selected' => $this->getData(['config', 'connect', 'anonymousIp']),
|
||||||
|
'help' => 'La règlementation française impose un anonymat de niveau 2'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col6 ">
|
||||||
|
<?php echo template::button('ConfigLogDownload', [
|
||||||
|
'href' => helper::baseUrl() . 'config/logDownload',
|
||||||
|
'value' => 'Télécharger le journal',
|
||||||
|
'ico' => 'download'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::button('ConnectLogReset', [
|
||||||
|
'class' => 'buttonRed',
|
||||||
|
'href' => helper::baseUrl() . 'config/logReset',
|
||||||
|
'value' => 'Réinitialiser le journal',
|
||||||
|
'ico' => 'trash'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col3">
|
<div class="col6 verticalAlignBottom">
|
||||||
<?php echo template::select('connectAnonymousIp', $module::$anonIP, [
|
<div class="row">
|
||||||
'label' => 'Anonymat des adresses IP',
|
<div class="col6 verticalAlignBottom">
|
||||||
'selected' => $this->getData(['config', 'connect', 'anonymousIp']),
|
<label id="helpBlacklist"><?php echo helper::translate('Liste noire'); ?>
|
||||||
'help' => 'La règlementation française impose un anonymat de niveau 2'
|
<?php echo template::help(
|
||||||
]); ?>
|
'La liste noire énumère les tentatives de connexion à partir de comptes inexistants. Sont stockés : la date, l\'heure, le nom du compte et l\'IP.
|
||||||
</div>
|
Après le nombre de tentatives autorisées, l\'IP et le compte sont bloqués.'
|
||||||
<div class="col3 verticalAlignBottom">
|
);
|
||||||
<?php echo template::button('ConfigLogDownload', [
|
?>
|
||||||
'href' => helper::baseUrl() . 'config/logDownload',
|
</label>
|
||||||
'value' => 'Télécharger le journal',
|
<?php echo template::button('ConnectBlackListDownload', [
|
||||||
'ico' => 'download'
|
'href' => helper::baseUrl() . 'config/blacklistDownload',
|
||||||
]); ?>
|
'value' => 'Télécharger la liste',
|
||||||
</div>
|
'ico' => 'download'
|
||||||
<div class="col3 verticalAlignBottom">
|
]); ?>
|
||||||
<?php echo template::button('ConnectLogReset', [
|
</div>
|
||||||
'class' => 'buttonRed',
|
<div class="col6 verticalAlignBottom">
|
||||||
'href' => helper::baseUrl() . 'config/logReset',
|
<?php echo template::button('ConnectBlackListReset', [
|
||||||
'value' => 'Réinitialiser le journal',
|
'class' => 'buttonRed',
|
||||||
'ico' => 'trash'
|
'href' => helper::baseUrl() . 'config/blacklistReset',
|
||||||
]); ?>
|
'value' => 'Réinitialiser la liste',
|
||||||
|
'ico' => 'trash'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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");
|
let 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();
|
||||||
@ -83,6 +83,17 @@ $(document).ready(function () {
|
|||||||
// Gestion des événements
|
// Gestion des événements
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transmet le bouton de l'onglet sélectionné avant la soumission
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Mettre à jour le champ caché avant la soumission
|
||||||
|
$('#configForm').on('submit', function () {
|
||||||
|
$('#containerSelected').val(configLayout);
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Afficher et masquer options smtp
|
* Afficher et masquer options smtp
|
||||||
*/
|
*/
|
||||||
@ -162,44 +173,44 @@ $(document).ready(function () {
|
|||||||
$("#connectContainer").hide();
|
$("#connectContainer").hide();
|
||||||
$("#networkContainer").hide();
|
$("#networkContainer").hide();
|
||||||
$("#setupContainer").show();
|
$("#setupContainer").show();
|
||||||
|
configLayout = "setup";
|
||||||
$("#configSetupButton").addClass("activeButton");
|
$("#configSetupButton").addClass("activeButton");
|
||||||
$("#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();
|
||||||
$("#setupContainer").hide();
|
$("#setupContainer").hide();
|
||||||
$("#networkContainer").hide();
|
$("#networkContainer").hide();
|
||||||
$("#socialContainer").show();
|
$("#socialContainer").show();
|
||||||
|
configLayout = "social";
|
||||||
$("#configSetupButton").removeClass("activeButton");
|
$("#configSetupButton").removeClass("activeButton");
|
||||||
$("#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();
|
||||||
$("#socialContainer").hide();
|
$("#socialContainer").hide();
|
||||||
$("#networkContainer").hide();
|
$("#networkContainer").hide();
|
||||||
$("#connectContainer").show();
|
$("#connectContainer").show();
|
||||||
|
configLayout = "connect";
|
||||||
$("#configSetupButton").removeClass("activeButton");
|
$("#configSetupButton").removeClass("activeButton");
|
||||||
$("#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();
|
||||||
$("#socialContainer").hide();
|
$("#socialContainer").hide();
|
||||||
$("#connectContainer").hide();
|
$("#connectContainer").hide();
|
||||||
$("#networkContainer").show();
|
$("#networkContainer").show();
|
||||||
|
configLayout = "network";
|
||||||
$("#configSetupButton").removeClass("activeButton");
|
$("#configSetupButton").removeClass("activeButton");
|
||||||
$("#configSocialButton").removeClass("activeButton");
|
$("#configSocialButton").removeClass("activeButton");
|
||||||
$("#configConnectButton").removeClass("activeButton");
|
$("#configConnectButton").removeClass("activeButton");
|
||||||
$("#configNetworkButton").addClass("activeButton");
|
$("#configNetworkButton").addClass("activeButton");
|
||||||
setCookie("configLayout", "network");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -265,7 +276,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 +296,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,16 +7,7 @@
|
|||||||
'value' => template::ico('home')
|
'value' => template::ico('home')
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col1">
|
<div class="col2 offset7">
|
||||||
<?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">
|
|
||||||
<?php echo template::button('configLocaleButton', [
|
<?php echo template::button('configLocaleButton', [
|
||||||
'value' => 'Identité',
|
'value' => 'Identité',
|
||||||
'href' => helper::baseUrl() . 'language/site'
|
'href' => helper::baseUrl() . 'language/site'
|
||||||
@ -30,23 +21,26 @@
|
|||||||
<div class="tab">
|
<div class="tab">
|
||||||
<?php echo template::button('configSetupButton', [
|
<?php echo template::button('configSetupButton', [
|
||||||
'value' => 'Configuration',
|
'value' => 'Configuration',
|
||||||
'class' => 'buttonTab'
|
'class' => 'buttonTab',
|
||||||
]); ?>
|
]); ?>
|
||||||
<?php echo template::button('configSocialButton', [
|
<?php echo template::button('configSocialButton', [
|
||||||
'value' => 'Référencement',
|
'value' => 'Référencement',
|
||||||
'class' => 'buttonTab'
|
'class' => 'buttonTab',
|
||||||
]); ?>
|
]); ?>
|
||||||
|
|
||||||
<?php echo template::button('configConnectButton', [
|
<?php echo template::button('configConnectButton', [
|
||||||
'value' => 'Connexion',
|
'value' => 'Connexion',
|
||||||
'class' => 'buttonTab'
|
'class' => 'buttonTab',
|
||||||
]); ?>
|
]); ?>
|
||||||
<?php echo template::button('configNetworkButton', [
|
<?php echo template::button('configNetworkButton', [
|
||||||
'value' => 'Réseau',
|
'value' => 'Réseau',
|
||||||
'class' => 'buttonTab'
|
'class' => 'buttonTab',
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Champ caché pour transmettre l'onglet-->
|
||||||
|
<?php echo template::hidden('containerSelected'); ?>
|
||||||
|
|
||||||
|
<!-- Pages de formulaires -->
|
||||||
<?php include('core/module/config/view/setup/setup.php') ?>
|
<?php include('core/module/config/view/setup/setup.php') ?>
|
||||||
<?php include('core/module/config/view/social/social.php') ?>
|
<?php include('core/module/config/view/social/social.php') ?>
|
||||||
<?php include('core/module/config/view/connect/connect.php') ?>
|
<?php include('core/module/config/view/connect/connect.php') ?>
|
||||||
|
@ -4,11 +4,6 @@
|
|||||||
<div class="block">
|
<div class="block">
|
||||||
<h4>
|
<h4>
|
||||||
<?php echo helper::translate('Paramètres'); ?>
|
<?php echo helper::translate('Paramètres'); ?>
|
||||||
<!--<span id="specialeHelpButton" class="helpDisplayButton">
|
|
||||||
<a href="https://doc.zwiicms.fr/reseau" 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="col2">
|
<div class="col2">
|
||||||
@ -40,11 +35,6 @@
|
|||||||
<div class="block">
|
<div class="block">
|
||||||
<h4>
|
<h4>
|
||||||
<?php echo helper::translate('SMTP'); ?>
|
<?php echo helper::translate('SMTP'); ?>
|
||||||
<!--<span id="specialeHelpButton" class="helpDisplayButton">
|
|
||||||
<a href="https://doc.zwiicms.fr/smtp" 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">
|
||||||
@ -97,7 +87,7 @@
|
|||||||
<?php echo template::password('smtpPassword', [
|
<?php echo template::password('smtpPassword', [
|
||||||
'label' => 'Mot de passe',
|
'label' => 'Mot de passe',
|
||||||
'autocomplete' => 'off',
|
'autocomplete' => 'off',
|
||||||
'value' => $this->getData(['config', 'smtp', 'password'])
|
'value' => $this->getData(['config', 'smtp', 'password'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col2">
|
<div class="col2">
|
||||||
@ -113,3 +103,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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,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"], 'Apache') === false and $module->isModRewriteEnabled()
|
'disabled' => helper::checkServerSoftware() === 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( !empty($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>
|
||||||
@ -48,10 +44,10 @@
|
|||||||
<div class="col6">
|
<div class="col6">
|
||||||
<?php if (
|
<?php if (
|
||||||
$this->getData(['config', 'seo', 'openGraphImage']) &&
|
$this->getData(['config', 'seo', 'openGraphImage']) &&
|
||||||
file_exists(self::FILE_DIR . 'source/' . $this->getData(['config', 'seo', 'openGraphImage']))
|
file_exists(self::FILE_DIR . 'source/' . $this->getData(['config', 'seo', 'openGraphImage']))
|
||||||
): ?>
|
): ?>
|
||||||
<img
|
<img
|
||||||
src="<?php echo self::FILE_DIR . 'source/' . $this->getData(['config', 'seo', 'openGraphImage']); ?>" />
|
src="<?php echo self::FILE_DIR . 'source/' . $this->getData(['config', 'seo', 'openGraphImage']); ?>" />
|
||||||
<?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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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/
|
||||||
*/
|
*/
|
||||||
@ -118,6 +118,9 @@ class install extends common
|
|||||||
// Validation de la langue transmise
|
// Validation de la langue transmise
|
||||||
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';
|
||||||
|
// Stockage de la langue par défaut afin d'afficher le site dans cette langue lors de l'affichage de la bannière de connexion.
|
||||||
|
$this->setData(['config','defaultLanguageUI', self::$i18nUI], false);
|
||||||
|
|
||||||
// par défaut le contenu est la langue d'installation
|
// par défaut le contenu est la langue d'installation
|
||||||
$_SESSION['ZWII_SITE_CONTENT'] = self::$i18nUI;
|
$_SESSION['ZWII_SITE_CONTENT'] = self::$i18nUI;
|
||||||
|
|
||||||
@ -128,12 +131,14 @@ class install extends common
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Installation du site de test
|
// Installation du site de test
|
||||||
|
$sample = false;
|
||||||
if (
|
if (
|
||||||
$this->getInput('installDefaultData', helper::FILTER_BOOLEAN) === false
|
$this->getInput('installDefaultData', helper::FILTER_BOOLEAN) === false
|
||||||
&& $_SESSION['ZWII_SITE_CONTENT'] === 'fr_FR'
|
&& $_SESSION['ZWII_SITE_CONTENT'] === 'fr_FR'
|
||||||
) {
|
) {
|
||||||
$sample = true;
|
$sample = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->initData('page', $_SESSION['ZWII_SITE_CONTENT'], $sample);
|
$this->initData('page', $_SESSION['ZWII_SITE_CONTENT'], $sample);
|
||||||
$this->initData('module', $_SESSION['ZWII_SITE_CONTENT'], $sample);
|
$this->initData('module', $_SESSION['ZWII_SITE_CONTENT'], $sample);
|
||||||
$this->initData('locale', $_SESSION['ZWII_SITE_CONTENT'], $sample);
|
$this->initData('locale', $_SESSION['ZWII_SITE_CONTENT'], $sample);
|
||||||
@ -179,9 +184,9 @@ class install extends common
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Sauvegarder la configuration du Proxy
|
// Sauvegarder la configuration du Proxy
|
||||||
$this->setData(['config', 'proxyType', $this->getInput('installProxyType')]);
|
$this->setData(['config', 'proxyType', $this->getInput('installProxyType')], false);
|
||||||
$this->setData(['config', 'proxyUrl', $this->getInput('installProxyUrl')]);
|
$this->setData(['config', 'proxyUrl', $this->getInput('installProxyUrl')], false);
|
||||||
$this->setData(['config', 'proxyPort', $this->getInput('installProxyPort', helper::FILTER_INT)]);
|
$this->setData(['config', 'proxyPort', $this->getInput('installProxyPort', helper::FILTER_INT)], false);
|
||||||
|
|
||||||
// Images exemples livrées dans tous les cas
|
// Images exemples livrées dans tous les cas
|
||||||
try {
|
try {
|
||||||
@ -219,7 +224,7 @@ class install extends common
|
|||||||
$this->copyDir('core/module/install/ressource/i18n', self::I18N_DIR);
|
$this->copyDir('core/module/install/ressource/i18n', self::I18N_DIR);
|
||||||
|
|
||||||
// Fixe l'adresse from pour les envois d'email
|
// Fixe l'adresse from pour les envois d'email
|
||||||
$this->setData(['config', 'smtp', 'from', 'no-reply@' . str_replace('www.', '', $_SERVER['HTTP_HOST'])]);
|
$this->setData(['config', 'smtp', 'from', 'no-reply@' . str_replace('www.', '', $_SERVER['HTTP_HOST'])], false);
|
||||||
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
@ -228,6 +233,8 @@ class install extends common
|
|||||||
'state' => true
|
'state' => true
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
// Force la sauvegarde
|
||||||
|
$this->saveDB('config');
|
||||||
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
@ -284,7 +291,7 @@ class install extends common
|
|||||||
'display' => self::DISPLAY_JSON,
|
'display' => self::DISPLAY_JSON,
|
||||||
'content' => [
|
'content' => [
|
||||||
'success' => $success,
|
'success' => $success,
|
||||||
'data' => $success ? null : json_encode($message, JSON_UNESCAPED_UNICODE)
|
'data' => $message
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
@ -317,7 +324,7 @@ class install extends common
|
|||||||
'display' => self::DISPLAY_JSON,
|
'display' => self::DISPLAY_JSON,
|
||||||
'content' => [
|
'content' => [
|
||||||
'success' => $success,
|
'success' => $success,
|
||||||
'data' => json_encode($message, JSON_UNESCAPED_UNICODE)
|
'data' => $message
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
@ -360,7 +367,7 @@ class install extends common
|
|||||||
'display' => self::DISPLAY_JSON,
|
'display' => self::DISPLAY_JSON,
|
||||||
'content' => [
|
'content' => [
|
||||||
'success' => $success,
|
'success' => $success,
|
||||||
'data' => json_encode($message, JSON_UNESCAPED_UNICODE)
|
'data' => $message,
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
@ -432,12 +439,13 @@ class install extends common
|
|||||||
if (!empty($message)) {
|
if (!empty($message)) {
|
||||||
$this->saveLog($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' => json_encode($message, JSON_UNESCAPED_UNICODE)
|
'data' => $message
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
@ -287,16 +287,16 @@ class init extends common
|
|||||||
'blacklist' => [],
|
'blacklist' => [],
|
||||||
'language' => [
|
'language' => [
|
||||||
"fr_FR" => [
|
"fr_FR" => [
|
||||||
"version" => 13007,
|
"version" => 13500,
|
||||||
"date" => 1699354723
|
"date" => 1734641934
|
||||||
],
|
],
|
||||||
"es" => [
|
"es" => [
|
||||||
"version" => 13007,
|
"version" => 13500,
|
||||||
"date" => 1699354723
|
"date" => 1734641934
|
||||||
],
|
],
|
||||||
"en_EN" => [
|
"en_EN" => [
|
||||||
"version" => 13007,
|
"version" => 13500,
|
||||||
"date" => 1699354723
|
"date" => 1734641934
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
'profil' => [
|
'profil' => [
|
||||||
|
693
core/module/install/ressource/i18n/de.json
Normal file
693
core/module/install/ressource/i18n/de.json
Normal file
@ -0,0 +1,693 @@
|
|||||||
|
{
|
||||||
|
"'Ne pas afficher' crée une page orpheline non accessible par le biais des menus.": "\"Nicht anzeigen\" erstellt eine Orphan -Seite, die über Menüs nicht zugegriffen werden kann.",
|
||||||
|
"'Sauvegarder et télécharger les données du module": "'Speichern und herunterladen Moduldaten",
|
||||||
|
"1 jour": "1 tag",
|
||||||
|
"1/4 : Préparation...": "1/4: Vorbereitung ...",
|
||||||
|
"10 minutes": "10 Minuten",
|
||||||
|
"10 tentatives": "10 Versuche",
|
||||||
|
"14 jours": "14 Tage",
|
||||||
|
"15 minutes": "15 Minuten",
|
||||||
|
"2 jours": "2 Tage",
|
||||||
|
"2/4 : Téléchargement...": "2/4: Download ...",
|
||||||
|
"3 tentatives": "3 Versuche",
|
||||||
|
"3/4 : Installation...": "3/4: Installation ...",
|
||||||
|
"4 jours": "4 Tage",
|
||||||
|
"4/4 : Configuration...": "4/4: Konfiguration ...",
|
||||||
|
"5 minutes": "5 Minuten",
|
||||||
|
"5 tentatives": "5 Versuche",
|
||||||
|
"7 jours": "7 Tage",
|
||||||
|
"Accueil": "Willkommen",
|
||||||
|
"Accède au site": "Zugriff auf die Website",
|
||||||
|
"Accède aux pages réservées": "Zugriff auf gesperrte Seiten",
|
||||||
|
"Accède aux pages réservées et à un dossier partagé": "Zugriff auf gesperrte Seiten und einen freigegebenen Ordner",
|
||||||
|
"Accès bloqué %d minutes": "Blockierter Zugang %der Minuten",
|
||||||
|
"Accès désactivé": "Zugriff deaktiviert",
|
||||||
|
"Accès interdit, erreur 403": "Zugriff verboten, Fehler 403",
|
||||||
|
"Action interdite": "Verbotene Aktion",
|
||||||
|
"Activation obligatoire selon les lois françaises sauf si vous utilisez votre propre système de consentement.": "Obligatorische Aktivierung gemäß den französischen Gesetzen, es sei denn, Sie verwenden Ihr eigenes Einverständnissystem.",
|
||||||
|
"Activer": "Ermöglichen",
|
||||||
|
"Activer la journalisation": "Journalisierung aktivieren",
|
||||||
|
"Actualiser": "Aktualisieren",
|
||||||
|
"Adaptation": "Anpassung",
|
||||||
|
"Administrateur": "Administrator",
|
||||||
|
"Administration": "Verwaltung",
|
||||||
|
"Adresse SMTP": "Adresse SMTP",
|
||||||
|
"Adresse du proxy": "Proxy-Adresse",
|
||||||
|
"Adresse électronique": "E-Mail-Addresse",
|
||||||
|
"Affectation": "Affektiertheit",
|
||||||
|
"Affiche le nom de la page parente suivi du nom de la page, le titre ne doit pas être masqué.": "Zeigt den Namen der Parente -Seite an, gefolgt vom Seitennamen, der Titel sollte nicht maskiert werden.",
|
||||||
|
"Affiche les icônes de gestion du compte et de déconnexion des membres simples connectés": "Zeigt die Symbole zur Kontoverwaltung und Abmeldung von eingeloggten Standardmitgliedern an",
|
||||||
|
"Afin d'assurer le bon fonctionnement de Zwii, veuillez ne pas fermer cette page avant la fin de l'opération.": "Um das ordnungsgemäße Funktionieren von Zwii zu gewährleisten, schließen Sie diese Seite bitte nicht vor dem Ende der Operation.",
|
||||||
|
"Aide": "Berater",
|
||||||
|
"Ajouter": "Hinzufügen",
|
||||||
|
"Ajouter un profil": "Profil hinzufügen",
|
||||||
|
"Ajouter un utilisateur": "Fügen Sie einen Benutzer hinzu",
|
||||||
|
"Ajouter une fonte": "Fügen Sie eine Schriftart hinzu",
|
||||||
|
"Alignement": "Ausrichtung des Inhalts",
|
||||||
|
"Aligner la bannière avec le contenu": "Richten Sie das Banner mit dem Inhalt aus",
|
||||||
|
"Ancien mot de passe": "Altes Passwort",
|
||||||
|
"Anonymat des adresses IP": "Anonymität von IP -Adressen",
|
||||||
|
"Apache URL intelligent": "Apache URL intelligent",
|
||||||
|
"Apache URL intelligentes": "Apache URL intelligentes",
|
||||||
|
"Apparence": "Aussehen",
|
||||||
|
"Appliquer": "Anwenden",
|
||||||
|
"Approuver un commentaire": "Kommentare genehmigen",
|
||||||
|
"Après": "Nach",
|
||||||
|
"Après la bannière": "Nach dem Banner",
|
||||||
|
"Après le contenu de la page": "Nach dem Inhalt der Seite",
|
||||||
|
"Archive": "Archiv",
|
||||||
|
"Archive ZIP": "Archiv Reißverschluss",
|
||||||
|
"Archive copiée dans le dossier Modules du gestionnaire de fichier": "Archiv kopiert in den Dateimodulen des Dateimanagers",
|
||||||
|
"Archive de thème invalide": "Ungültiges Themenarchiv",
|
||||||
|
"Archive invalide": "Archive Invalide",
|
||||||
|
"Archive invalide, l'écriture dans le dossier core est interdite": "Ungültiges Archiv, das Schreiben in der Kerndatei ist verboten",
|
||||||
|
"Archive invalide, le descripteur est absent": "Ungültiges Archiv, der Deskriptor fehlt",
|
||||||
|
"Archive invalide, le fichier de classe est absent": "Invalide -Archiv, die Klassendatei fehlt",
|
||||||
|
"Archive invalide, les dossiers ne correspondent pas au descripteur": "Ungültiges Archiv entsprechen die Dateien nicht dem Deskriptor",
|
||||||
|
"Archive non spécifiée ou introuvable": "Archiv nicht angegeben oder nicht gefunden",
|
||||||
|
"Archive à restaurer": "Archiv zur Wiederherstellung",
|
||||||
|
"Arrière plan": "Hintergrund",
|
||||||
|
"Arrière plan des blocs": "Hintergrund der Blöcke",
|
||||||
|
"Arrière plan des champs": "Hintergrund",
|
||||||
|
"Arrondi des angles": "Rundung der Winkel",
|
||||||
|
"Au centre": "Im Zentrum",
|
||||||
|
"Au début": "Anfangs",
|
||||||
|
"Au milieu au centre": "In der Mitte in der Mitte",
|
||||||
|
"Au milieu à droite": "In der mittleren rechts",
|
||||||
|
"Au milieu à gauche": "In der Mitte links",
|
||||||
|
"Au-dessus du site": "Über der Seite",
|
||||||
|
"Aucun": "Kein",
|
||||||
|
"Aucun dossier": "Kein Verzeichnis",
|
||||||
|
"Aucun fichier journal à télécharger": "Keine Protokolldatei zum Herunterladen",
|
||||||
|
"Aucun journal à effacer": "Keine Zeitung zum Löschen",
|
||||||
|
"Aucun menu": "Kein Menü",
|
||||||
|
"Aucune": "Keine",
|
||||||
|
"Aucune liste noire à effacer": "Keine schwarze Liste zu löschen",
|
||||||
|
"Aucune liste noire à télécharger": "Keine schwarze Liste zum Herunterladen",
|
||||||
|
"Auteur :": "Auteur:",
|
||||||
|
"Authentification": "Authentifizierung",
|
||||||
|
"Automatique": "Automatik",
|
||||||
|
"Autoriser les robots à référencer le site": "Erlauben Sie Robotern, auf die Site zu verweisen",
|
||||||
|
"Autorisé": "Erlaubt",
|
||||||
|
"Avant la bannière": "Vor dem Banner",
|
||||||
|
"Avant le contenu de la page": "Vor dem Inhalt der Seite",
|
||||||
|
"Background": "Hintergrund",
|
||||||
|
"Banni": "Verbot",
|
||||||
|
"Bannière": "Banner",
|
||||||
|
"Bannière cliquable": "Klickbares Banner",
|
||||||
|
"Barre 1/3 - page 2/3": "Barre 1/3 - Seite 2/3",
|
||||||
|
"Barre 1/4 - page 1/2 - barre 1/4": "Barre 1/4 - Seite 1/2 - Barre 1/4",
|
||||||
|
"Barre 1/4 - page 3/4": "Barre 1/4 - Seite 3/4",
|
||||||
|
"Barre 2/12 - page 7/12 - barre 3/12": "Barre 2/12 - Seite 7/12 - Barre 3/12",
|
||||||
|
"Barre 3/12 - page 7/12 - barre 2/12": "Barre 3/12 - Seite 7/12 - Barre 2/12",
|
||||||
|
"Barre de membre": "Mitgliederleiste",
|
||||||
|
"Barre latérale": "Seitliche Bar",
|
||||||
|
"Barre latérale droite :": "Rechte Sidebar:",
|
||||||
|
"Barre latérale gauche :": "Linke Seitenstange:",
|
||||||
|
"Barres latérales": "Seitenstangen",
|
||||||
|
"Bienvenue %s %s": "Willkommen %s %",
|
||||||
|
"Blocage après échecs": "Blockieren nach Fehlern",
|
||||||
|
"Blog": "Blog",
|
||||||
|
"Bords arrondis": "Abgerundete Kanten",
|
||||||
|
"Bordure des blocs": "Blockgrenze",
|
||||||
|
"Bordure des champs": "Feldgrenze",
|
||||||
|
"Bouton Aide": "Hilfeknopf",
|
||||||
|
"Bouton Standard": "Bouton Standard",
|
||||||
|
"Bouton de validation": "Validierungstaste",
|
||||||
|
"Bouton effacement": "Löschen",
|
||||||
|
"Bouton retour": "Rückgabeknopf",
|
||||||
|
"Bouton standard": "Bouton Standard",
|
||||||
|
"Bouton validation": "Bouton -Validierung",
|
||||||
|
"Boutons": "Boutons",
|
||||||
|
"Caché": "Versteckt",
|
||||||
|
"Cachée": "Versteckt",
|
||||||
|
"Captcha complexe": "Captcha Complexe",
|
||||||
|
"Captcha à la connexion": "Captcha in Verbindung",
|
||||||
|
"Captcha, identifiant ou mot de passe incorrects": "Captcha, falsche Kennung oder Passwort",
|
||||||
|
"Capture d'écran Open Graph": "Graph Screenshot öffnen",
|
||||||
|
"Capture d'écran générée avec succès": "Erfolgreicher generierter Screenshot",
|
||||||
|
"Casse": "Gebrochen",
|
||||||
|
"Catalogue": "Katalog",
|
||||||
|
"Catégorie": "Kategorie",
|
||||||
|
"Ce membre pourra téléverser ou télécharger des fichiers dans le dossier 'partage' et ses sous-dossiers": "Dieses Mitglied kann Dateien im Ordner \"Freigeben\" und in seinen Unterordnern festlegen oder herunterladen",
|
||||||
|
"Cette page ne doit pas apparaître dans l'arborescence du menu. Créez une page orpheline.": "Diese Seite sollte nicht im Menübaum angezeigt werden. Erstellen Sie eine Waisenseite.",
|
||||||
|
"Cette redirection ne concerne que les pages d'administration du site.": "Diese Umleitung betrifft nur die Verwaltungsseiten der Website.",
|
||||||
|
"Chaîne Youtube": "Youtube Kanal",
|
||||||
|
"Chiffres": "Zahlen",
|
||||||
|
"Cible": "Ziel",
|
||||||
|
"Cliquez sur une zone afin d'accéder à ses options de personnalisation.": "Klicken Sie auf einen Bereich, um auf die Anpassungsoptionen zuzugreifen.",
|
||||||
|
"Commentaire": "Kommentar",
|
||||||
|
"Complète": "Vollständig",
|
||||||
|
"Compte administrateur": "Administrator",
|
||||||
|
"Compte de l'utilisateur": "Benutzerkonto",
|
||||||
|
"Compte verrouillé": "Gesperrt",
|
||||||
|
"Configuration": "Aufbau",
|
||||||
|
"Configuration du module": "Konfigurations -DU -Modul",
|
||||||
|
"Configurer": "Konfigurieren",
|
||||||
|
"Configurer mon compte": "Konfigurieren Sie mein Konto",
|
||||||
|
"Confirmation": "Bestätigung",
|
||||||
|
"Confirmer la suppression de cet utilisateur": "Bestätigen Sie die Löschung dieses Benutzers",
|
||||||
|
"Confirmer la dissociation du module de cette page": "Bestätigen Sie die Dissoziation des Moduls dieser Seite",
|
||||||
|
"Confirmer la désinstallation du module": "Bestätigen Sie das Deinstallieren des Moduls",
|
||||||
|
"Confirmer la suppression de cet utilisateur": "Bestätigen Sie die Löschung dieses Benutzers",
|
||||||
|
"Confirmer la suppression de cette langue": "Bestätigen Sie das Löschen dieser Sprache",
|
||||||
|
"Confirmer la suppression de la page": "Bestätigen Sie die Löschung der Seite",
|
||||||
|
"Confirmer la suppression des données du module": "Bestätigen Sie die Löschung der Moduldaten",
|
||||||
|
"Confirmez-vous la suppression de cette page ?": "Bestätigen Sie die Löschung dieser Seite?",
|
||||||
|
"Connexion": "Verbindung",
|
||||||
|
"Consulter l'aide en ligne": "Online -Hilfe konsultieren",
|
||||||
|
"Contents": "Inhalt",
|
||||||
|
"Contenu": "Inhalt",
|
||||||
|
"Contenu HTML": "HTML enthalten",
|
||||||
|
"Contenu avancé": "Fortgeschrittene Inhalt",
|
||||||
|
"Contenu du menu vertical": "Da fällige Vertikale enthalten",
|
||||||
|
"Contrôle total": "Vollständige Kontrolle",
|
||||||
|
"Cookies": "Kekse",
|
||||||
|
"Cookies Zwii": "Kekse Zwii",
|
||||||
|
"Copie de contenus localisés": "Lokalisierte Inhaltskopie",
|
||||||
|
"Copie de sites inter-langues": "Kopie von Intersprage-Websites",
|
||||||
|
"Copie des traductions rédigées": "Kopie der schriftlichen Übersetzungen",
|
||||||
|
"Copie terminée avec des erreurs": "Kopieren Sie mit Fehlern fertig",
|
||||||
|
"Copie terminée avec succès": "Erfolgreich abgeschlossen sein",
|
||||||
|
"Copier": "Kopierer",
|
||||||
|
"Copier sauvegardes auto": "Kopieren Sie automatische Sicherungen",
|
||||||
|
"Couleur de fond automatique": "Automatische Hintergrundfarbe",
|
||||||
|
"Couleur icône haut de page": "Farbe des Icons oben auf der Seite",
|
||||||
|
"Couleur texte page active": "Textfarbe der aktiven Seite",
|
||||||
|
"Couleur unie ou papier-peint": "Farbe oder Tapete vereinigte Tapete",
|
||||||
|
"Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence.": "Sichtbare Farbe in Abwesenheit eines Bildes. <br /> Der horizontale Cursor reguliert das Transparenzniveau.",
|
||||||
|
"Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence. La couleur du texte est automatique.": "Sichtbare Farbe in Abwesenheit eines Bildes. <br /> Der horizontale Cursor reguliert das Transparenzniveau. Die Farbe des Textes ist automatisch.",
|
||||||
|
"Couleurs": "Farben",
|
||||||
|
"Dans le site": "In der Seite",
|
||||||
|
"Dans quelle langue utiliserez-vous Zwii ?": "In welcher Sprache werden Sie Zwii verwenden?",
|
||||||
|
"Date": "Datum",
|
||||||
|
"Description": "Beschreibung",
|
||||||
|
"Disponible si le consentement des cookies est activé.": "Verfügbar, wenn die Cookie-Einwilligung aktiviert ist.",
|
||||||
|
"Disposition": "Anordnung",
|
||||||
|
"Données %s copiées vers %s": "Daten %s auf %s kopiert",
|
||||||
|
"Données des modules": "Module",
|
||||||
|
"Données importées": "Importierte Daten",
|
||||||
|
"Dossier": "Verzeichnis",
|
||||||
|
"Droits sur les dossiers": "Rechte für Verzeichnisse",
|
||||||
|
"Droits sur les fichiers": "Dateirechte",
|
||||||
|
"Dupliquer": "Duplizieren",
|
||||||
|
"Dupliquer la page": "Duplizieren Sie die Seite",
|
||||||
|
"Déconnecte les sessions ouvertes précédemment sur d'autres navigateurs ou terminaux. Activation recommandée.": "Trennen Sie die offenen Sitzungen zuvor von anderen Browsern oder Terminals. Empfohlene Aktivierung.",
|
||||||
|
"Déconnecter": "Trennen",
|
||||||
|
"Déconnexion !": "Trennen!",
|
||||||
|
"Déconnexion automatique": "Automatische Trennung",
|
||||||
|
"Définir par défaut": "Als Standard festlegen",
|
||||||
|
"Dévoiler le mot de passe": "Das Passwort angeben",
|
||||||
|
"Effacer": "Löschen",
|
||||||
|
"Effacer la page": "Löschen Sie die Seite",
|
||||||
|
"Effacer tous les commentaires": "Alle Kommentare löschen",
|
||||||
|
"Effacer toutes les statistiques": "Delete all statistics",
|
||||||
|
"Effacer un commentaire": "Kommentar löschen",
|
||||||
|
"Effacer une catégorie": "Kategorie löschen",
|
||||||
|
"Emplacement :": "Einstellung:",
|
||||||
|
"Emplacement dans le menu": "Lage im Menü",
|
||||||
|
"En bas au centre": "Runter in der Mitte",
|
||||||
|
"En bas à droite": "Unten rechts",
|
||||||
|
"En bas à gauche": "Unten nach links",
|
||||||
|
"En cas de changement de module, les données du module précédent seront supprimées.": "Im Falle einer Moduländerung werden Daten aus dem vorherigen Modul gelöscht.",
|
||||||
|
"En dessous du site": "Unterhalb der Website",
|
||||||
|
"En haut au centre": "Top in der Mitte",
|
||||||
|
"En haut à droite": "Oben rechts",
|
||||||
|
"En haut à gauche": "An der oberen Ecke links",
|
||||||
|
"En position libre ajoutez le module en plaçant [MODULE] à l'endroit voulu dans votre page.": "Fügen Sie in der freien Position das Modul hinzu, indem Sie [Modul] dem gewünschten Ort in Ihrer Seite platzieren.",
|
||||||
|
"En-dehors du site": "Außerhalb der Website",
|
||||||
|
"Enregistrer": "Registrieren",
|
||||||
|
"Envoyer un message de confirmation": "Senden Sie eine Bestätigungsnachricht",
|
||||||
|
"Erreur : sauvegarde non générée !": "Fehler: Nicht erzeugte Sicherung!",
|
||||||
|
"Erreur d'URL": "URL -Fehler",
|
||||||
|
"Erreur d'extraction, vérifiez les permissions": "Extraktionsfehler, Berechtigungen überprüfen",
|
||||||
|
"Erreur de copie": "Fehler kopieren",
|
||||||
|
"Erreur de copie, vérifiez les permissions": "Fehler kopieren, Berechtigungen überprüfen",
|
||||||
|
"Erreur de lecture, vérifiez les permissions": "Lesenfehler, Überprüfen Sie die Berechtigungen",
|
||||||
|
"Erreur inconnue": "unbekannter Fehler",
|
||||||
|
"Erreur inconnue, le module n'est pas installé": "Unbekannter Fehler, das Modul ist nicht installiert",
|
||||||
|
"Export CSV": "CSV exportieren",
|
||||||
|
"Expéditeur": "Absender",
|
||||||
|
"Extension": "Verlängerung",
|
||||||
|
"Extraire": "Extrahieren",
|
||||||
|
"Facebook": "Facebook",
|
||||||
|
"Famille": "Familie",
|
||||||
|
"Favicon thème sombre": "Dunkeles Thema Favicon",
|
||||||
|
"Feuille de style spécifique à la page.": "Stilblatt spezifisch für die Seite.",
|
||||||
|
"Fichiers": "Dateien",
|
||||||
|
"Fichiers effacés": "Gelöschte Dateien",
|
||||||
|
"Fil d'Ariane dans le titre": "Ariane -Thread im Titel",
|
||||||
|
"Fond du sous-menu": "Untermenü",
|
||||||
|
"FontId": "Schriftart",
|
||||||
|
"Fonte": "Quelle",
|
||||||
|
"Fonte actualisée": "Aktualisieren",
|
||||||
|
"Fonte créée": "Fonte erstellt",
|
||||||
|
"Fonte en ligne": "Online -Schmelzen",
|
||||||
|
"Fonte installée": "Installiertes Gusseisen",
|
||||||
|
"Fonte non créée, ressource absente !": "Fonte nicht erstellt, abwesende Ressource!",
|
||||||
|
"Fonte supprimée": "Löschen Schmelzen",
|
||||||
|
"Fontes": "Quellen",
|
||||||
|
"Format incorrect": "Format falsch",
|
||||||
|
"Formulaire": "Formular",
|
||||||
|
"Fréquence de recherche": "Forschungshäufigkeit",
|
||||||
|
"Fuseau horaire": "Zeitzone",
|
||||||
|
"Gabarits de page - Barre latérale": "Seitenvorlage - Seitenleiste",
|
||||||
|
"Gestion": "Management",
|
||||||
|
"Gestion des modules": "Modulverwaltung",
|
||||||
|
"Gestion des thèmes": "Themenmanagement",
|
||||||
|
"Gestionnaire de fichiers": "Dateimanager",
|
||||||
|
"Github": "Github",
|
||||||
|
"Grande": "Groß",
|
||||||
|
"Grande (220%)": "Grande (220%)",
|
||||||
|
"Grande (300px)": "Grande (300px)",
|
||||||
|
"Gras": "Fett",
|
||||||
|
"Groupe": "Gruppe",
|
||||||
|
"Groupe associé": "Zugehörige Gruppe",
|
||||||
|
"Groupe requis pour accéder à la page :": "Gruppe erforderlich, um auf die Seite zuzugreifen:",
|
||||||
|
"Groupes": "Gruppen",
|
||||||
|
"Générer sitemap.xml et robots.txt": "Generieren Sie Sitemap.xml und Robots.txt",
|
||||||
|
"Générer une capture Open Graph": "Erstellen Sie eine offene Graph -Erfassung",
|
||||||
|
"Gérer les catégories": "Kategorien verwalten",
|
||||||
|
"Gérer les commentaires": "Kommentare verwalten",
|
||||||
|
"Gérer les données": "Daten verwalten",
|
||||||
|
"Hauteur": "Höhe",
|
||||||
|
"Hauteur de l'image": "Höhe des Bildes",
|
||||||
|
"Hauteur de l'image sélectionnée": "Höhe des ausgewählten Bildes",
|
||||||
|
"Hauteur maximale": "Maximale Höhe",
|
||||||
|
"ID de la chaîne : https://www.youtube.com/channel/[ID].": "Kanal -ID: https://www.youtube.com/channel/).",
|
||||||
|
"Icône": "Symbol",
|
||||||
|
"Icône avec bulle de texte": "Symbol mit Textblase",
|
||||||
|
"Icône haut de page, couleur arrière-plan": "Icon oben auf der Seite, Hintergrundfarbe",
|
||||||
|
"Identifiant": "Kennung",
|
||||||
|
"Identifiant (sans espace ni majuscule)": "Kennung (ohne Platz oder Großbuchstaben)",
|
||||||
|
"Identité": "Identifizieren",
|
||||||
|
"Identité de la fonte": "Identität des Gusseisen",
|
||||||
|
"Identité du site": "Standortidentität",
|
||||||
|
"Il apparaît dans la barre de titre et les partages sur les réseaux sociaux.": "Er erscheint in der Titelleiste und teilt in sozialen Netzwerken.",
|
||||||
|
"Image": "Bild",
|
||||||
|
"Image étirée (100% 100%)": "Gestrecktes Bild (100% 100%)",
|
||||||
|
"Important": "Wichtig",
|
||||||
|
"Importante": "Wichtig",
|
||||||
|
"Importation d'utilisateurs": "Import von Benutzern",
|
||||||
|
"Importation de fichier plat CSV": "CSV Flat File Import",
|
||||||
|
"Importation effectuée": "Einfuhr",
|
||||||
|
"Importer": "Importeur",
|
||||||
|
"Importer dans": "Import in",
|
||||||
|
"Importer des utilisateurs en masse": "Massenbenutzer importieren",
|
||||||
|
"Impossible d'ouvrir l'archive": "Das Archiv kann nicht öffnen",
|
||||||
|
"Impossible de modifier votre propre groupe.": "Ihre eigene Gruppe kann nicht geändert werden.",
|
||||||
|
"Impossible de soumettre le formulaire, car il contient des erreurs": "Es ist unmöglich, das Formular einzureichen, da es Fehler enthält",
|
||||||
|
"Impossible de supprimer une page contenant des pages enfants": "Eine Seite mit Kinderseiten kann nicht gelöscht werden",
|
||||||
|
"Impossible de supprimer votre propre compte": "Ihr eigenes Konto kann nicht gelöscht werden",
|
||||||
|
"Inclure le contenu du gestionnaire de fichiers": "Fügen Sie den Inhalt des Dateimanagers hinzu",
|
||||||
|
"Incorrect": "Falsch",
|
||||||
|
"Informations": "Informationen",
|
||||||
|
"Instagram": "Instagram",
|
||||||
|
"Installation terminée": "Installation abgeschlossen",
|
||||||
|
"Installer": "Installateur",
|
||||||
|
"Installer depuis le catalogue en ligne": "Installieren Sie aus dem Online -Katalog",
|
||||||
|
"Installer depuis une archive": "Aus einem Archiv installieren",
|
||||||
|
"Installer les données d'un module": "Installieren Sie eine Moduldaten",
|
||||||
|
"Installer ou mettre à jour un module téléchargé": "Installieren oder aktualisieren Sie ein heruntergeladenes Modul",
|
||||||
|
"Installer un module": "Installieren Sie ein Modul",
|
||||||
|
"Installer un thème archivé (site ou administration)": "Installieren Sie ein archiviertes Thema (Standort oder Verwaltung)",
|
||||||
|
"Instructions JS ou jquery spécifiques à la page.": "JS- oder JQuery -Anweisungen, die für die Seite spezifisch sind.",
|
||||||
|
"Interface": "Schnittstelle",
|
||||||
|
"Jeton invalide": "Ungültiges Token",
|
||||||
|
"Journal réinitialisé avec succès": "Erfolgreiches Reset -Journal",
|
||||||
|
"Journalisation": "Journalisierung",
|
||||||
|
"L'archive a été déposée dans le gestionnaire de fichiers. Les archives inférieures à la version 9 ne sont pas acceptées.": "Das Archiv wurde im Dateimanager hinterlegt. Archive unter Version 9 werden nicht akzeptiert.",
|
||||||
|
"L'identifiant est défini lors de la création du compte, il ne peut pas être modifié.": "Die Kennung wird beim Erstellen des Kontos definiert, es kann nicht geändert werden.",
|
||||||
|
"La carte du site a été mise à jour": "Die Site -Karte wurde aktualisiert",
|
||||||
|
"La copie de sauvegarde du fichier htaccess n'a pas été restaurée !": "Sicherungskopie der htaccess-Datei wurde nicht wiederhergestellt!",
|
||||||
|
"La description d'une page participe à son référencement, chaque page doit disposer d'une description différente.": "Die Beschreibung einer Seite nimmt an ihrer Referenzierung teil. Jede Seite muss eine andere Beschreibung haben.",
|
||||||
|
"La page %s est ouverte par l'utilisateur %s": "Der %s wird vom Benutzer %s geöffnet",
|
||||||
|
"La page demandée n'existe pas ou est introuvable (erreur 404)": "Die angeforderte Seite existiert nicht oder wird nicht gefunden (Fehler 404)",
|
||||||
|
"La page est affichée dans un menu horizontal mais pas dans le menu vertical d'une barre latérale.": "Die Seite wird in einem horizontalen Menü, jedoch nicht im vertikalen Menü einer Seitenleiste angezeigt.",
|
||||||
|
"La première page que vos visiteurs verront.": "Die erste Seite, die Ihre Besucher sehen werden.",
|
||||||
|
"La règlementation française impose un anonymat de niveau 2": "Französische Vorschriften erfordern Anonymität der Stufe 2",
|
||||||
|
"La réécriture d'URL n'a pas été restaurée !": "URL-Umschreibung wurde nicht wiederhergestellt!",
|
||||||
|
"La sauvegarde des fichiers peut prendre du temps. Continuer ?": "Die Sicherung der Dateien kann einige Zeit in Anspruch nehmen. Weitermachen ?",
|
||||||
|
"La suppression a échoué": "Die Löschung schlug fehl",
|
||||||
|
"La version installée est plus récente": "Die installierte Version ist neuer",
|
||||||
|
"La vérification est quotidienne. Option désactivée si la configuration du serveur ne le permet pas.": "Die Überprüfung ist täglich. Option deaktiviert, wenn die Serverkonfiguration dies nicht zulässt.",
|
||||||
|
"Langue de l'administration": "Verwaltungssprache",
|
||||||
|
"Langue du site par défaut": "Standardsprache der Website",
|
||||||
|
"Langue par défaut": "Standard",
|
||||||
|
"Langues": "SPRACHEN",
|
||||||
|
"Langues disponibles": "Verfügbare Sprachen",
|
||||||
|
"Langues installées": "Sprachen installiert",
|
||||||
|
"Largeur": "Breite",
|
||||||
|
"Largeur de l'image": "Breite des Bildes",
|
||||||
|
"Largeur du site": "Breite der Website",
|
||||||
|
"Le curseur horizontal règle le niveau de transparence, le placer tout à la gauche pour un surlignement invisible.": "Der horizontale Cursor reguliert das Transparenzniveau und platziert ihn links für unsichtbare Highlights.",
|
||||||
|
"Le curseur horizontal règle le niveau de transparence.": "Der horizontale Cursor reguliert das Transparenzniveau.",
|
||||||
|
"Le fuseau horaire est utile au bon référencement": "Die Zeitzone ist nützlich für gute SEO",
|
||||||
|
"Le menu accessoire est aligné à droite de la barre de menu, c'est un emplacement réservé aux drapeaux et au bouton de connexion.": "Das Zubehörmenü ist rechts neben der Menüleiste ausgerichtet. Es ist ein Standort für Flaggen und die Verbindungsschaltfläche.",
|
||||||
|
"Le menu horizontal intégral": "Das vollständige horizontale Menü",
|
||||||
|
"Le module %s a été %s": "Das Modul %war %s",
|
||||||
|
"Le module %s de la page %s a été supprimé": "Das %s -Modul des %s wurde gelöscht",
|
||||||
|
"Le module %s est désinstallé, il reste peut-être des données dans %s": "Das Modul %S ist deinstalliert, es kann Daten in %s geben",
|
||||||
|
"Le sous-menu de la page parente": "Das Untermenü der Elternseite",
|
||||||
|
"Le survol d'une icône de l'écran de connexion affiche temporairement le mot de passe.": "Die Überflucht eines Symbols auf dem Verbindungsbildschirm zeigt das Kennwort vorübergehend an.",
|
||||||
|
"Le titre court est affiché dans les menus. Il peut être identique au titre de la page.": "Der kurze Titel wird in den Menüs angezeigt. Es kann mit dem Titel der Seite identisch sein.",
|
||||||
|
"Les langues sélectionnées sont identiques": "Die ausgewählten Sprachen sind identisch",
|
||||||
|
"Les mentions légales sont obligatoires en France. Une option du pied de page ajoute un lien discret vers cette page.": "Rechtliche Mitteilungen sind in Frankreich obligatorisch. Eine Option der Fußzeile fügt dieser Seite einen diskreten Link hinzu.",
|
||||||
|
"Les modifications que vous avez apportées ne seront peut-être pas enregistrées.": "Die Änderungen, die Sie vorgenommen haben, werden möglicherweise nicht aufgezeichnet.",
|
||||||
|
"Les tailles des polices de la bannière, de menu et de pied de page sont proportionnelles à cette taille.": "Die Schriftgrößen des Banners, Menüs und Fußzeile sind proportional zu dieser Größe.",
|
||||||
|
"Lettres": "Lettres",
|
||||||
|
"Libre": "Libre",
|
||||||
|
"Licence :": "Lizenz:",
|
||||||
|
"Lien de connexion": "Anmeldelink",
|
||||||
|
"Lien page des mentions légales.": "Link der rechtlichen Hinweise.",
|
||||||
|
"Liens": "Grundpfandrechte",
|
||||||
|
"Limitation des tentatives": "Einschränkung der Versuche",
|
||||||
|
"Limitée au site": "Auf die Website beschränkt",
|
||||||
|
"Linkedin": "LinkedIn",
|
||||||
|
"Liste noire": "Schwarze Liste",
|
||||||
|
"Liste noire réinitialisée avec succès": "Erfolgreiche schwarze Liste erfolgreich zurücksetzen",
|
||||||
|
"Lors d'une mise à jour automatique, conserve le fichier htaccess de la racine du site.": "Während eines automatischen Updates hält die HTaccess -Datei des Site -Stammes.",
|
||||||
|
"Léger": "Leicht",
|
||||||
|
"Légère": "Leicht",
|
||||||
|
"Maigre": "Mager",
|
||||||
|
"Maintenance": "Wartung",
|
||||||
|
"Majuscule à chaque mot": "Capper mit jedem Wort",
|
||||||
|
"Majuscules": "Großbuchstaben",
|
||||||
|
"Marges verticales": "Vertikale Ränder",
|
||||||
|
"Masquer la bannière en écran réduit": "Verstecken Sie das Banner im reduzierten Bildschirm",
|
||||||
|
"Masquer la page et les pages enfants dans le menu d'une barre latérale": "Verstecken Sie die Seiten- und Kinderseiten im Menü einer Seitenleiste",
|
||||||
|
"Masquer les pages enfants dans le menu horizontal": "Verstecken Sie Kinderseiten im horizontalen Menü",
|
||||||
|
"Membre": "Mitglied",
|
||||||
|
"Membre avec droit de partage": "Mitglied mit Freigaberecht",
|
||||||
|
"Membre simple": "Einfaches Mitglied",
|
||||||
|
"Mentions légales": "Impressum",
|
||||||
|
"Menu": "Speisekarte",
|
||||||
|
"Menu accessoire": "Zubehörmenü",
|
||||||
|
"Menu burger dans écran réduit": "Burger-Menü bei reduziertem Bildschirm",
|
||||||
|
"Menu standard": "Menüstandard",
|
||||||
|
"Message d'acceptation des Cookies": "Cookie -Akzeptanznachricht",
|
||||||
|
"Message de consentement aux cookies": "Cookie -Zustimmungsnachricht",
|
||||||
|
"Mettre à jour": "Aktualisieren",
|
||||||
|
"Mettre à jour le module orphelin": "Aktualisieren Sie das Orphan -Modul",
|
||||||
|
"Minuscules": "Winzig",
|
||||||
|
"Mise en forme des titres": "Formatierende Titel",
|
||||||
|
"Mise en forme du texte": "Textformatierung",
|
||||||
|
"Mise en forme du titre": "Titelformatierung",
|
||||||
|
"Mise en page": "Layout",
|
||||||
|
"Mise à jour": "Aktualisieren",
|
||||||
|
"Mise à jour automatisée": "Automatisiertes Update",
|
||||||
|
"Mise à jour terminée avec succès.": "Erfolgreiches Update abgeschlossen.",
|
||||||
|
"Modifications enregistrées": "Modifikationen aufgezeichnet",
|
||||||
|
"Module": "Modul",
|
||||||
|
"Module de la page": "Seitenmodul",
|
||||||
|
"Modules": "Module",
|
||||||
|
"Modules configurés": "Konfigurierte Module",
|
||||||
|
"Modules installés": "Module installiert",
|
||||||
|
"Modules orphelins": "Verwaiste Module",
|
||||||
|
"Mot de passe": "Passwort",
|
||||||
|
"Mot de passe oublié": "Haben Sie Ihr Passwort vergessen",
|
||||||
|
"Mot de passe perdu": "Haben Sie Ihr Passwort vergessen",
|
||||||
|
"Motorisé par": "Angetrieben von",
|
||||||
|
"Moyen": "Mittel",
|
||||||
|
"Moyenne": "Durchschnittlich",
|
||||||
|
"Moyenne (200%)": "Durchschnitt (200%)",
|
||||||
|
"Moyenne (200px)": "Durchschnitt (200px)",
|
||||||
|
"Méta-description": "Meta-Schreiben",
|
||||||
|
"Méta-titre": "Stoffitis",
|
||||||
|
"Ne pas afficher": "Werden nicht angezeigt",
|
||||||
|
"Ne pas charger l'exemple de site (utilisateurs avancés)": "Laden Sie das Beispiel einer Website nicht auf (erweiterte Benutzer)",
|
||||||
|
"Ne pas répéter": "Wiederhole nicht",
|
||||||
|
"Ne pas saisir les balises": "Geben Sie die Tags nicht ein",
|
||||||
|
"News": "Nachrichten",
|
||||||
|
"Niveau 1 (192.168.12.x)": "Stufe 1 (192.168.12.x)",
|
||||||
|
"Niveau 2 (192.168.x.x)": "Stufe 2 (192.168.x.x)",
|
||||||
|
"Niveau 3 (192.x.x.x)": "Stufe 3 (192.x.x.x)",
|
||||||
|
"Nom": "Nom",
|
||||||
|
"Nom Prénom": "Nachname Vorname",
|
||||||
|
"Nom du profil": "Profilname",
|
||||||
|
"Nom utilisateur": "Nutzername",
|
||||||
|
"Non": "Nicht",
|
||||||
|
"Non tronquée": "Unbemannt",
|
||||||
|
"Notre site est actuellement en maintenance. Nous sommes désolés pour la gêne occasionnée et faisons notre possible pour être rapidement de retour.": "Unsere Website befindet sich derzeit in der Wartung. Wir entschuldigen uns für die verursachten Unannehmlichkeiten und geben unser Bestes, um schnell zurück zu sein.",
|
||||||
|
"Nouveau contenu localisé": "Neue lokalisierte Inhalte",
|
||||||
|
"Nouveau mot de passe": "Neues Kennwort",
|
||||||
|
"Nouveau mot de passe enregistré": "Neues aufgezeichnetes Passwort",
|
||||||
|
"Nouvel utilisateur": "Neuer Benutzer",
|
||||||
|
"Nouvelle page créée": "Neue Seite erstellt",
|
||||||
|
"Nouvelle page ou barre latérale": "Neue Seite oder Seitenleiste",
|
||||||
|
"Obligatoire": "Obligatorisch",
|
||||||
|
"Ombre": "Ombre",
|
||||||
|
"Option active en mode déconnecté uniquement, les pages enfants sont visibles et accessibles.": "Aktive Option im getrennten Modus, Kinderseiten sind sichtbar und zugänglich.",
|
||||||
|
"Option recommandée pour sécuriser la connexion. S'applique à tous les captchas du site. Le captcha simple se limite à une addition de nombres de 0 à 10. Le captcha complexe utilise quatre opérations de nombres de 0 à 20. Activation recommandée.": "Empfohlene Option zur Sicherung der Verbindung. Bewerben Sie sich für alle Captchas der Website. Einfache Captcha ist auf die Zugabe von Zahlen von 0 bis 10 beschränkt. Der komplexe Capha verwendet vier Zahlen von 0 bis 20. Empfohlene Aktivierung.",
|
||||||
|
"Options": "Optionen",
|
||||||
|
"Options avancées": "Erweiterte Optionen",
|
||||||
|
"Origine": "Herkunft",
|
||||||
|
"Oui": "Oui",
|
||||||
|
"Page": "Buchseite",
|
||||||
|
"Page 2/3 - barre 1/3": "Seite 2/3 - Barre 1/3",
|
||||||
|
"Page 3/4 - barre 1/4": "Seite 3/4 - Barre 1/4",
|
||||||
|
"Page associée": "Zugeordnete Seite",
|
||||||
|
"Page de recherche": "Suchseite",
|
||||||
|
"Page dupliquée": "Doppelte Seite",
|
||||||
|
"Page et module dupliqués": "Duplizierte Seite und Modul",
|
||||||
|
"Page inexistante, erreur 404": "Seite nicht vorhanden, Fehler 404",
|
||||||
|
"Page non cliquable": "Nicht klickbare Seite",
|
||||||
|
"Page parent": "Seite Elternteil",
|
||||||
|
"Page standard": "Page Standard",
|
||||||
|
"Page supprimée": "Gelöschte Seite",
|
||||||
|
"Pages dans le menu": "Seiten im Menü",
|
||||||
|
"Pages du site": "Standortseiten",
|
||||||
|
"Pages et les modules de": "Seiten und Module von",
|
||||||
|
"Pages orphelines": "Waisenseiten",
|
||||||
|
"Papier peint": "Hintergrund",
|
||||||
|
"Par défaut le menu est affiché APRES le contenu de la page. Pour le positionner à un emplacement précis, insérez [MENU] dans le contenu de la page.": "Standardmäßig wird das Menü nach dem Inhalt der Seite angezeigt. Um es an einem bestimmten Ort zu positionieren, fügen Sie [Menü] in den Inhalt der Seite ein.",
|
||||||
|
"Paramètres": "Einstellungen",
|
||||||
|
"Paramètres de la localisation": "Standortparameter",
|
||||||
|
"Paramètres de la sauvegarde": "Backup-Einstellungen",
|
||||||
|
"Paramètres du profil": "Profil-Einstellungen",
|
||||||
|
"Paramètres à utiliser lorsque votre hébergeur ne propose pas la fonctionnalité d'envoi de mail.": "Einstellungen, die verwendet werden müssen, wenn Ihr Host die E -Mail -Sendungsfunktionen nicht anbietet.",
|
||||||
|
"Pas de marge au-dessus et en dessous du site": "Kein Rand über und unter der Website",
|
||||||
|
"Pensez à supprimer le cache de votre navigateur si la favicon ne change pas.": "Denken Sie daran, den Cache Ihres Browsers zu löschen, wenn sich das Favicon nicht ändert.",
|
||||||
|
"Permission": "Erlaubnis",
|
||||||
|
"Permission et référencement": "Erlaubnis und SEO",
|
||||||
|
"Permissions": "Berechtigungen",
|
||||||
|
"Permissions sur les dossiers": "Berechtigungen für Verzeichnisse",
|
||||||
|
"Permissions sur les fichiers": "Berechtigungen für Dateien",
|
||||||
|
"Permissions sur les pages": "Berechtigungen für Seiten",
|
||||||
|
"Petite": "Klein",
|
||||||
|
"Petite (150px)": "Klein (150px)",
|
||||||
|
"Petite (180%)": "Petite (180%)",
|
||||||
|
"Pied de page": "Fuß",
|
||||||
|
"Pinterest": "Pinterest",
|
||||||
|
"Plan du site": "Seitenverzeichnis",
|
||||||
|
"Police des titres": "Titel der Polizei",
|
||||||
|
"Police du texte": "Textpolizei",
|
||||||
|
"Port SMTP": "Port SMTP",
|
||||||
|
"Port du proxy": "Hafen des Stellvertreters",
|
||||||
|
"Position": "Position",
|
||||||
|
"Position du module": "Position du module",
|
||||||
|
"Pour définir la page comme barre latérale, choisissez l'option dans la liste.": "Um die Seite als Seitenleiste zu definieren, wählen Sie die Option aus der Liste.",
|
||||||
|
"Presse Papier": "Zwischenablage",
|
||||||
|
"Presse papier": "Zwischenablage",
|
||||||
|
"Profils des groupes": "Gruppenprofile",
|
||||||
|
"Proportionnelle à la taille définie dans le site.": "Proportional zu dem in der Stelle definierten.",
|
||||||
|
"Prénom": "Vorname",
|
||||||
|
"Prénom Nom": "Vorname Name",
|
||||||
|
"Préparation de la mise à jour": "Vorbereitung des Updates",
|
||||||
|
"Préserver le fichier htaccess racine": "Bewahren Sie die HTaccess Racine -Datei auf",
|
||||||
|
"Préserver les comptes des utilisateurs déjà installés": "Bewahren Sie die bereits installierten Benutzerkonten auf",
|
||||||
|
"Prévenir l'utilisateur par mail": "Verhindern Sie den Benutzer per E -Mail",
|
||||||
|
"Prévisualiser": "Vorschau",
|
||||||
|
"Pseudo": "Pseudo",
|
||||||
|
"Rang 9 > rang 1. Le profil de rang 1 n'est pas modifiable.": "Rang 9 > Rang 1. Das Profil von Rang 1 ist nicht änderbar.",
|
||||||
|
"Ratio": "Verhältnis",
|
||||||
|
"Ratio :": "Verhältnis :",
|
||||||
|
"Recherche": "Suche",
|
||||||
|
"Recherche dans le site": "Suche auf der Website",
|
||||||
|
"Rechercher": "Forschen",
|
||||||
|
"Rechercher une mise à jour en ligne": "Suchen Sie nach einem Online -Update",
|
||||||
|
"Redirection": "Weiterleitung",
|
||||||
|
"Redirection vers la connexion": "Umleitung zur Verbindung",
|
||||||
|
"Renommer": "Umbenennen",
|
||||||
|
"Renseignez les champs ci-dessous pour finaliser l'installation.": "Finden Sie die folgenden Felder heraus, um die Installation abzuschließen.",
|
||||||
|
"Responsive (contain)": "Reaktionsschnell (enthalten)",
|
||||||
|
"Responsive (cover)": "Reaktionsschnell (Cover)",
|
||||||
|
"Restauration des bases de données absentes": "Wiederherstellung abwesender Datenbanken",
|
||||||
|
"Restauration effectuée avec succès": "Catering erfolgreich durchgeführt",
|
||||||
|
"Restaurer": "Wiederherstellen",
|
||||||
|
"Restaurer les données du site": "Site -Daten wiederherstellen",
|
||||||
|
"Rester connecté sur ce navigateur": "Bleiben Sie in diesem Browser in Verbindung",
|
||||||
|
"Retour": "Rückmeldung",
|
||||||
|
"Rien à importer, erreur de format ou fichier incorrect": "Nichts zu importieren, formatieren Sie Fehler oder eine falsche Datei",
|
||||||
|
"Rédacteur": "Redakteur",
|
||||||
|
"Référencement": "SEO",
|
||||||
|
"Réinitialisation du mot de passe": "Passwort zurücksetzen",
|
||||||
|
"Réinitialiser avec le thème par défaut": "Mit dem Standardthema zurücksetzen",
|
||||||
|
"Réinitialiser la feuille de style": "Setzen Sie das Stilblatt zurück",
|
||||||
|
"Réinitialiser la liste": "Setzen Sie die Liste zurück",
|
||||||
|
"Réinitialiser le journal": "Setzen Sie die Zeitung zurück",
|
||||||
|
"Réinstaller": "Neu installieren",
|
||||||
|
"Répétition": "Wiederholung",
|
||||||
|
"Réseau": "Netzwerk",
|
||||||
|
"Réseaux sociaux": "Soziale Netzwerke",
|
||||||
|
"S'ouvre dans un nouvel onglet": "Öffnet sich in einer neuen Registerkarte",
|
||||||
|
"SMTP": "SMTP",
|
||||||
|
"SMTP personnalisé": "Personalisierte SMTP",
|
||||||
|
"Saisir la clé, puis valider le formulaire avant de cliquer sur le bouton de génération": "Geben Sie die Taste ein und validieren Sie das Formular, bevor Sie auf die Schaltfläche Generation klicken",
|
||||||
|
"Saisissez le Titre de gestion des cookies.": "Geben Sie den Cookie -Management -Titel ein.",
|
||||||
|
"Saisissez le message pour les cookies déposés par ZwiiCMS, nécessaires au fonctionnement et qui ne nécessitent pas de consentement.": "Geben Sie die von Zwiicms abgelagerte Meldung für den Betrieb erforderlich und müssen keine Zustimmung erfordern.",
|
||||||
|
"Saisissez le texte du lien vers les mentions légales,la page doit être définie dans la configuration du site.": "Geben Sie den Link -Text in die rechtlichen Hinweise ein. Die Seite muss in der Site -Konfiguration definiert werden.",
|
||||||
|
"Saisissez votre ID : https://pinterest.com/[ID].": "Geben Sie Ihre ID ein: https://pinterest.com/).",
|
||||||
|
"Saisissez votre ID : https://twitter.com/[ID].": "Geben Sie Ihre ID ein: https://twitter.com/).",
|
||||||
|
"Saisissez votre ID : https://www.facebook.com/[ID].": "Geben Sie Ihre ID ein: https://www.facebook.com/).",
|
||||||
|
"Saisissez votre ID : https://www.instagram.com/[ID].": "Geben Sie Ihre ID ein: https://www.instagram.com/).",
|
||||||
|
"Saisissez votre ID Github : https://github.com/[ID].": "Geben Sie Ihre GitHub -ID ein: https://github.com/).",
|
||||||
|
"Saisissez votre ID Linkedin : https://fr.linkedin.com/in/[ID].": "Geben Sie Ihre LinkedIn -ID ein: https://fr.linkedin.com/in/ style].",
|
||||||
|
"Saisissez votre ID Utilisateur : https://www.youtube.com/user/[ID].": "Geben Sie Ihre Benutzer -ID ein: https://www.youtube.com/user/).",
|
||||||
|
"Sauvegarde": "Backup",
|
||||||
|
"Sauvegarde automatique quotidienne du site": "Tägliche automatische Sicherung der Website",
|
||||||
|
"Sauvegarde du thème dans le": "Sicherung des Themas in der",
|
||||||
|
"Sauvegarde générée avec succès": "Erfolgreich erzeugte Backup.",
|
||||||
|
"Sauvegarder": "Schützen",
|
||||||
|
"Sauvegarder et télécharger le module": "Speichern und laden Sie das Modul herunter und laden Sie sie herunter",
|
||||||
|
"Sauvegarder le module dans le gestionnaire de fichiers": "Speichern Sie das Modul im Dateimanager",
|
||||||
|
"Sauvegarder les données du module dans le gestionnaire de fichiers": "Speichern Sie Moduldaten im Dateimanager",
|
||||||
|
"Sauvegarder les données du site": "Site -Daten speichern",
|
||||||
|
"Script dans body": "Skript dans Körper",
|
||||||
|
"Script dans head": "Skript Dans Kopf",
|
||||||
|
"Scripts externes": "Skripte externe",
|
||||||
|
"Se déconnecter": "austragen",
|
||||||
|
"Service en ligne inaccessible": "Unzugänglicher Online -Service",
|
||||||
|
"Seul un administrateur peut se connecter lors d'une maintenance": "Nur ein Administrator kann während der Wartung eine Verbindung herstellen",
|
||||||
|
"Si le contenu du gestionnaire de fichiers est très volumineux, mieux vaut une copie par FTP.": "Wenn der Inhalt des Dateimanagers sehr groß ist, ist es besser, eine Kopie von FTP zu kopieren.",
|
||||||
|
"Signature": "Unterschrift",
|
||||||
|
"Site": "Grundstück",
|
||||||
|
"Site en maintenance": "Seite wird gewartet",
|
||||||
|
"Size": "Größe",
|
||||||
|
"Source": "Quelle",
|
||||||
|
"Standard": "Standard",
|
||||||
|
"Style": "Stil",
|
||||||
|
"Suppression interdite": "Löschung verboten",
|
||||||
|
"Suppression interdite, page active dans la configuration de la langue du site": "Löschen nicht erlaubt, Seite ist in der Sprachkonfiguration der Website aktiv",
|
||||||
|
"Supprime le point d'interrogation dans les URL, l'option est indisponible avec les autres serveurs Web": "Löscht das Fragezeichen in den URLs, die Option ist mit anderen Webservern nicht verfügbar",
|
||||||
|
"Supprimer": "LÖSCHEN",
|
||||||
|
"Supprimer la page": "Löschen Sie die Seite",
|
||||||
|
"Supprimer le module": "Löschen Sie das Modul",
|
||||||
|
"Supprimer toutes les sauvegardes automatiques ?": "Alle automatischen Sicherungen entfernen?",
|
||||||
|
"Sur l'axe horizontal": "Auf der horizontalen Achse",
|
||||||
|
"Sur l'axe vertical": "Auf der vertikalen Achse",
|
||||||
|
"Sur les deux axes": "Auf beiden Achsen",
|
||||||
|
"Sécurité": "Sicherheit",
|
||||||
|
"Sécurité de la connexion": "Verbindungssicherheit",
|
||||||
|
"Sécurité désactivée": "Sicherheit deaktiviert",
|
||||||
|
"Sélectionner un fichier": "Wählen Sie eine Datei aus",
|
||||||
|
"Sélectionnez au moins un contenu à afficher": "Wählen Sie mindestens einen Inhalt zum Anzeigen aus",
|
||||||
|
"Sélectionnez la langue à copier vers une langue cible": "Wählen Sie die Sprache aus, um in eine Zielsprache zu kopieren",
|
||||||
|
"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.": "Wählen Sie ein an ein dunkles Thema adaptiertes Symbol aus. <br> Denken Sie daran, den Cache aus Ihrem Browser zu löschen, wenn sich das Favicon nicht ändert.",
|
||||||
|
"Sélectionnez une image ou une icône de petite dimension": "Wählen Sie ein Bild oder ein kleines Symbol aus",
|
||||||
|
"Sélectionnez une langue": "Wähle eine Sprache",
|
||||||
|
"Sélectionnez une page contenant le module 'Recherche'. Une option du pied de page ajoute un lien discret vers cette page.": "Wählen Sie eine Seite mit dem Modul \"Forschung\" aus. Eine Option der Fußzeile fügt dieser Seite einen diskreten Link hinzu.",
|
||||||
|
"Sélectionnez une page pour activer": "Wählen Sie eine Seite aus, um sie zu aktivieren",
|
||||||
|
"Séparateur": "Separator",
|
||||||
|
"Taille": "Größe",
|
||||||
|
"Text": "Text",
|
||||||
|
"Texte": "Text",
|
||||||
|
"Thème": "Thema",
|
||||||
|
"Thème de l'administration": "Verwaltungsthema",
|
||||||
|
"Thème du site": "Site -Thema",
|
||||||
|
"Thème importé": "Importiertes Thema",
|
||||||
|
"Thèmes": "Themen",
|
||||||
|
"Titre": "Titer",
|
||||||
|
"Titre court": "Kurzer Titel",
|
||||||
|
"Titre masqué": "Maskierter Titel",
|
||||||
|
"Titre masqué dans la page": "Maskierter Titel auf der Seite",
|
||||||
|
"Titres": "Titres",
|
||||||
|
"Tous les dossiers": "Alle Verzeichnisse",
|
||||||
|
"Tous les droits d'édition des contenus": "Alle Bearbeitungsrechte für Inhalte",
|
||||||
|
"Tout Effacer": "Alles löschen",
|
||||||
|
"Traduction supprimée": "Gelöschte Übersetzung",
|
||||||
|
"Très grande": "Sehr groß",
|
||||||
|
"Très grande (240%)": "Sehr groß (240%)",
|
||||||
|
"Très grande (400px)": "Sehr groß (400px)",
|
||||||
|
"Très important": "Sehr wichtig",
|
||||||
|
"Très importante": "Sehr wichtig",
|
||||||
|
"Très léger": "Sehr leicht",
|
||||||
|
"Très légère": "Sehr leicht",
|
||||||
|
"Très petite": "Sehr klein",
|
||||||
|
"Très petite (100px) ": "Sehr klein (100px)",
|
||||||
|
"Très petite (160%)": "Sehr klein (160%)",
|
||||||
|
"Twitter": "Twitter",
|
||||||
|
"Type de captcha": "Typ de captcha",
|
||||||
|
"Type de proxy": "Geben Sie de Proxy ein",
|
||||||
|
"Téléchargement et validation de l'archive": "Laden Sie das Archiv herunter und bestätigen Sie das Archiv",
|
||||||
|
"Télécharger": "Herunterladen",
|
||||||
|
"Télécharger la liste": "Laden Sie die Liste herunter",
|
||||||
|
"Télécharger le journal": "Laden Sie die Zeitung herunter",
|
||||||
|
"Télécharger le module dans le gestionnaire de fichiers": "Laden Sie das Modul im Dateimanager herunter",
|
||||||
|
"Téléverser": "Hochladen",
|
||||||
|
"URL incorrecte": "Falsche URL",
|
||||||
|
"Un mail a été envoyé pour confirmer la réinitialisation": "Eine E -Mail wurde gesendet, um den Reset zu bestätigen",
|
||||||
|
"Une archive du dossier /site/data est conservée pendant 30 jours. Activation recommandée": "Ein Archiv der Datei /Site /Daten wird 30 Tage lang aufbewahrt. Empfohlene Aktivierung",
|
||||||
|
"Une erreur est survenue lors de l'étape :": "Während der Stadium trat ein Fehler auf:",
|
||||||
|
"Url du fichier de fonte": "URL der Gusseisen -Datei",
|
||||||
|
"Utilisateur inexistant": "Nicht existierender Benutzer",
|
||||||
|
"Utilisateur supprimé": "Gelöschter Benutzer",
|
||||||
|
"Utilisateurs": "Benutzer",
|
||||||
|
"Valider": "Bestätigen",
|
||||||
|
"Version": "Ausführung",
|
||||||
|
"Version n°": "Version N °",
|
||||||
|
"Vider dossier sauvegardes auto": "Leere automatische Sicherungsdatei",
|
||||||
|
"Visiteur": "Besucher",
|
||||||
|
"Vous n'êtes pas autorisé à consulter cette page (erreur 403)": "Sie dürfen diese Seite nicht konsultieren (Fehler 403)",
|
||||||
|
"Youtube": "Youtube",
|
||||||
|
"ZwiiCMS - Installation": "ZwiiCMS - Installation",
|
||||||
|
"actualisé": "Aktualisiert",
|
||||||
|
"favicon.ico": "Favicon.ico",
|
||||||
|
"faviconDark.ico": "Favicondark.ico",
|
||||||
|
"gestionnaire de fichiers": "Dateimanager",
|
||||||
|
"installé": "Eingerichtet",
|
||||||
|
"jour": "jour",
|
||||||
|
"jours": "Tage",
|
||||||
|
"sauvegardé avec succès": "Erfolgreich gespeichert",
|
||||||
|
"vers": "gegen",
|
||||||
|
"À droite": "Nach rechts",
|
||||||
|
"À gauche": "Nach links",
|
||||||
|
"À l'emplacement du mot clé [MODULE] dans la page": "Am Ort des Schlüsselworts [Modul] auf der Seite",
|
||||||
|
"Échec de l'écriture, vérifiez les permissions": "Schreiben, Schreiben, Überprüfen Sie die Berechtigungen",
|
||||||
|
"Échecs": "Schach",
|
||||||
|
"Éditer": "Bearbeiten",
|
||||||
|
"Éditer la page": "Veröffentlichen Sie die Seite",
|
||||||
|
"Éditer les dialogues": "Bearbeiten Sie die Dialoge",
|
||||||
|
"Éditer une catégorie": "Kategorie bearbeiten",
|
||||||
|
"Éditeur": "Editor",
|
||||||
|
"Éditeur CSS": "CSS -Verlag",
|
||||||
|
"Éditeur JS": "Verlag JS",
|
||||||
|
"Éditeur de script %s": "Skript Editor %s",
|
||||||
|
"Éditeur de script dans Body": "Skripteditor im Körper",
|
||||||
|
"Éditeur de script dans Head": "Skripteditor im Kopf",
|
||||||
|
"Éditeur simple": "Einfacher Editor",
|
||||||
|
"Édition des pages": "Seitenbearbeitung",
|
||||||
|
"Édition du profil %s": "Profil bearbeiten %s",
|
||||||
|
"Éléments": "Elemente",
|
||||||
|
"Étendu sur la page": "Über die Seite ausgebreitet",
|
||||||
|
"Étiquettes des pages spéciales": "Spezielle Seiten Beschriftungen",
|
||||||
|
"Dimensions minimales": "Mindestabmessungen",
|
||||||
|
"Taille maximale du fichier": "Maximale Dateigröße",
|
||||||
|
"5 Mo pour les images JPEG": "5 MB für JPEG-Bilder",
|
||||||
|
"1 Mo pour les images PNG": "1 MB für PNG-Bilder",
|
||||||
|
"Poids": "Gewicht",
|
||||||
|
"Supprimer ce profil ?": "Dieses Profil löschen?",
|
||||||
|
"Masqué": "Versteckt",
|
||||||
|
"Haut de page": "Seitenanfang",
|
||||||
|
"Bas de page": "Seitenende",
|
||||||
|
"Petit triangle": "Kleines Dreieck",
|
||||||
|
"Grand triangle": "Großes Dreieck",
|
||||||
|
"Flèche": "Pfeil",
|
||||||
|
"Modèle": "Vorlage",
|
||||||
|
"Bouton de navigation droit": "Rechte Navigations-Schaltfläche",
|
||||||
|
"Bouton de navigation gauche": "Linke Navigations-Schaltfläche",
|
||||||
|
"Groupes / Profils": "Gruppen / Profile",
|
||||||
|
"Prénom commence par": "Vorname beginnt mit",
|
||||||
|
"Nom commence par": "Nachname beginnt mit",
|
||||||
|
"Impossible de réinitialiser le mot de passe de ce compte !": "Das Passwort für dieses Konto kann nicht zurückgesetzt werden!"
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"'Ne pas afficher' crée une page orpheline non accessible par le biais des menus.": "'Do not display' creates an orphan page not accessible through menus.",
|
"'Ne pas afficher' crée une page orpheline non accessible par le biais des menus.": "'Do not display' creates an orphan page not accessible through menus.",
|
||||||
"'Sauvegarder et télécharger les données du module": "'Save and download module data",
|
"'Sauvegarder et télécharger les données du module": "'Save and download module data",
|
||||||
"1 jour": "1 jour",
|
"1 jour": "1 day",
|
||||||
"1/4 : Préparation...": "1/4: preparation ...",
|
"1/4 : Préparation...": "1/4: preparation ...",
|
||||||
"10 minutes": "10 minutes",
|
"10 minutes": "10 minutes",
|
||||||
"10 tentatives": "10 attempts",
|
"10 tentatives": "10 attempts",
|
||||||
@ -31,7 +31,7 @@
|
|||||||
"Adaptation": "Adaptation",
|
"Adaptation": "Adaptation",
|
||||||
"Administrateur": "Administrator",
|
"Administrateur": "Administrator",
|
||||||
"Administration": "Administration",
|
"Administration": "Administration",
|
||||||
"Adresse SMTP": "SMTP Address",
|
"Adresse SMTP": "SMTP address",
|
||||||
"Adresse du proxy": "Proxy address",
|
"Adresse du proxy": "Proxy address",
|
||||||
"Adresse électronique": "email address",
|
"Adresse électronique": "email address",
|
||||||
"Affectation": "Assignment",
|
"Affectation": "Assignment",
|
||||||
@ -60,10 +60,10 @@
|
|||||||
"Archive copiée dans le dossier Modules du gestionnaire de fichier": "Archive copied in the Modules folder",
|
"Archive copiée dans le dossier Modules du gestionnaire de fichier": "Archive copied in the Modules folder",
|
||||||
"Archive de thème invalide": "Invalid theme archive",
|
"Archive de thème invalide": "Invalid theme archive",
|
||||||
"Archive invalide": "Invalid archive",
|
"Archive invalide": "Invalid archive",
|
||||||
"Archive invalide, l'écriture dans le dossier core est interdite": "Invalid archive, writing in the core file is prohibited",
|
"Archive invalide, l'écriture dans le dossier core est interdite": "Invalid archive, writing in the core folder is prohibited",
|
||||||
"Archive invalide, le descripteur est absent": "Invalid archive, the descriptor is absent",
|
"Archive invalide, le descripteur est absent": "Invalid archive, the descriptor is absent",
|
||||||
"Archive invalide, le fichier de classe est absent": "Invalide archive, the class file is absent",
|
"Archive invalide, le fichier de classe est absent": "Invalid archive, the class file is absent",
|
||||||
"Archive invalide, les dossiers ne correspondent pas au descripteur": "Invalid archive, the files do not correspond to the descriptor",
|
"Archive invalide, les dossiers ne correspondent pas au descripteur": "Invalid archive, the files do not match the descriptor",
|
||||||
"Archive non spécifiée ou introuvable": "Archive not specified or not found",
|
"Archive non spécifiée ou introuvable": "Archive not specified or not found",
|
||||||
"Archive à restaurer": "Archive to restore",
|
"Archive à restaurer": "Archive to restore",
|
||||||
"Arrière plan": "Background",
|
"Arrière plan": "Background",
|
||||||
@ -86,7 +86,7 @@
|
|||||||
"Aucune liste noire à télécharger": "No blacklist to download",
|
"Aucune liste noire à télécharger": "No blacklist to download",
|
||||||
"Auteur :": "Author:",
|
"Auteur :": "Author:",
|
||||||
"Authentification": "Authentication",
|
"Authentification": "Authentication",
|
||||||
"Automatique": "Automatique",
|
"Automatique": "Automatic",
|
||||||
"Autoriser les robots à référencer le site": "Allow robots to reference the site",
|
"Autoriser les robots à référencer le site": "Allow robots to reference the site",
|
||||||
"Autorisé": "Allowed",
|
"Autorisé": "Allowed",
|
||||||
"Avant la bannière": "Before the banner",
|
"Avant la bannière": "Before the banner",
|
||||||
@ -104,9 +104,9 @@
|
|||||||
"Barre latérale": "Sidebar",
|
"Barre latérale": "Sidebar",
|
||||||
"Barre latérale droite :": "Right sidebar:",
|
"Barre latérale droite :": "Right sidebar:",
|
||||||
"Barre latérale gauche :": "Left sidebar:",
|
"Barre latérale gauche :": "Left sidebar:",
|
||||||
"Barres latérales": "Side bars",
|
"Barres latérales": "Sidebars",
|
||||||
"Bienvenue %s %s": "Welcome %s %s",
|
"Bienvenue %s %s": "Welcome %s %s",
|
||||||
"Blocage après échecs": "Blocking after chess",
|
"Blocage après échecs": "Blocking after failure",
|
||||||
"Blog": "Blog",
|
"Blog": "Blog",
|
||||||
"Bords arrondis": "Rounded edges",
|
"Bords arrondis": "Rounded edges",
|
||||||
"Bordure des blocs": "Blocks border",
|
"Bordure des blocs": "Blocks border",
|
||||||
@ -122,16 +122,16 @@
|
|||||||
"Caché": "Hidden",
|
"Caché": "Hidden",
|
||||||
"Cachée": "Hidden",
|
"Cachée": "Hidden",
|
||||||
"Captcha complexe": "Complex captcha",
|
"Captcha complexe": "Complex captcha",
|
||||||
"Captcha à la connexion": "Captcha at connecting",
|
"Captcha à la connexion": "Captcha",
|
||||||
"Captcha, identifiant ou mot de passe incorrects": "Incorrect captcha, login or password",
|
"Captcha, identifiant ou mot de passe incorrects": "Incorrect captcha, login or password",
|
||||||
"Capture d'écran Open Graph": "Open Graph screenshot",
|
"Capture d'écran Open Graph": "Open Graph screenshot",
|
||||||
"Capture d'écran générée avec succès": "Successful generated screenshot",
|
"Capture d'écran générée avec succès": "Successful generated screenshot",
|
||||||
"Casse": "Case",
|
"Casse": "Case",
|
||||||
"Catalogue": "Store",
|
"Catalogue": "Store",
|
||||||
"Catégorie": "Category",
|
"Catégorie": "Category",
|
||||||
"Ce membre pourra téléverser ou télécharger des fichiers dans le dossier 'partage' et ses sous-dossiers": "This member upload or download files in the 'Sharing' folder and its subfolders",
|
"Ce membre pourra téléverser ou télécharger des fichiers dans le dossier 'partage' et ses sous-dossiers": "This member can upload or download files in the 'Sharing' folder and its subfolders",
|
||||||
"Cette page ne doit pas apparaître dans l'arborescence du menu. Créez une page orpheline.": "This page should not appear in the menu tree. Create an orphan page.",
|
"Cette page ne doit pas apparaître dans l'arborescence du menu. Créez une page orpheline.": "This page should not appear in the menu tree. Create an orphan page.",
|
||||||
"Cette redirection ne concerne que les pages d'administration du site.": "This redirection only concerns the administration pages of the site.",
|
"Cette redirection ne concerne que les pages d'administration du site.": "This redirection only concerns the site administration pages.",
|
||||||
"Chaîne Youtube": "Youtube channel",
|
"Chaîne Youtube": "Youtube channel",
|
||||||
"Chiffres": "Numbers",
|
"Chiffres": "Numbers",
|
||||||
"Cible": "Target",
|
"Cible": "Target",
|
||||||
@ -158,8 +158,8 @@
|
|||||||
"Consulter l'aide en ligne": "Online help",
|
"Consulter l'aide en ligne": "Online help",
|
||||||
"Contents": "Contents",
|
"Contents": "Contents",
|
||||||
"Contenu": "Contents",
|
"Contenu": "Contents",
|
||||||
"Contenu HTML": "HTML contents",
|
"Contenu HTML": "HTML content",
|
||||||
"Contenu avancé": "Advanced contents",
|
"Contenu avancé": "Advanced content",
|
||||||
"Contenu du menu vertical": "Vertical menu content",
|
"Contenu du menu vertical": "Vertical menu content",
|
||||||
"Contrôle total": "Full control",
|
"Contrôle total": "Full control",
|
||||||
"Cookies": "Cookies",
|
"Cookies": "Cookies",
|
||||||
@ -174,7 +174,7 @@
|
|||||||
"Couleur de fond automatique": "Automatic background color",
|
"Couleur de fond automatique": "Automatic background color",
|
||||||
"Couleur icône haut de page": "Color of top page icon",
|
"Couleur icône haut de page": "Color of top page icon",
|
||||||
"Couleur texte page active": "Active page text color",
|
"Couleur texte page active": "Active page text color",
|
||||||
"Couleur unie ou papier-peint": "United color or wallpaper",
|
"Couleur unie ou papier-peint": "Plain color or wallpaper",
|
||||||
"Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence.": "Visible color in the absence of an image. <br /> The horizontal cursor regulates the level of transparency.",
|
"Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence.": "Visible color in the absence of an image. <br /> The horizontal cursor regulates the level of transparency.",
|
||||||
"Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence. La couleur du texte est automatique.": "Visible color in the absence of an image. <br /> The horizontal cursor regulates the level of transparency. The color of the text is automatic.",
|
"Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence. La couleur du texte est automatique.": "Visible color in the absence of an image. <br /> The horizontal cursor regulates the level of transparency. The color of the text is automatic.",
|
||||||
"Couleurs": "Colors",
|
"Couleurs": "Colors",
|
||||||
@ -190,8 +190,8 @@
|
|||||||
"Dossier": "Folder",
|
"Dossier": "Folder",
|
||||||
"Droits sur les dossiers": "Folder authorizations",
|
"Droits sur les dossiers": "Folder authorizations",
|
||||||
"Droits sur les fichiers": "File authorizations",
|
"Droits sur les fichiers": "File authorizations",
|
||||||
"Dupliquer": "Duplicate",
|
"Dupliquer": "Clone",
|
||||||
"Dupliquer la page": "Duplicate the page",
|
"Dupliquer la page": "Clone page",
|
||||||
"Déconnecte les sessions ouvertes précédemment sur d'autres navigateurs ou terminaux. Activation recommandée.": "Disconnects the previously opened sessions on other browsers or terminals. Recommended activation.",
|
"Déconnecte les sessions ouvertes précédemment sur d'autres navigateurs ou terminaux. Activation recommandée.": "Disconnects the previously opened sessions on other browsers or terminals. Recommended activation.",
|
||||||
"Déconnecter": "Disconnect",
|
"Déconnecter": "Disconnect",
|
||||||
"Déconnexion !": "Logout!",
|
"Déconnexion !": "Logout!",
|
||||||
@ -199,7 +199,7 @@
|
|||||||
"Définir par défaut": "Set as default",
|
"Définir par défaut": "Set as default",
|
||||||
"Dévoiler le mot de passe": "Reveal the password",
|
"Dévoiler le mot de passe": "Reveal the password",
|
||||||
"Effacer": "Delete",
|
"Effacer": "Delete",
|
||||||
"Effacer la page": "Delete the page",
|
"Effacer la page": "Delete page",
|
||||||
"Effacer tous les commentaires": "Delete all Comments",
|
"Effacer tous les commentaires": "Delete all Comments",
|
||||||
"Effacer toutes les statistiques": "Delete all statistics",
|
"Effacer toutes les statistiques": "Delete all statistics",
|
||||||
"Effacer un commentaire": "Delete Comment",
|
"Effacer un commentaire": "Delete Comment",
|
||||||
@ -212,9 +212,9 @@
|
|||||||
"En cas de changement de module, les données du module précédent seront supprimées.": "In the event of a module change, data from the previous module will be deleted.",
|
"En cas de changement de module, les données du module précédent seront supprimées.": "In the event of a module change, data from the previous module will be deleted.",
|
||||||
"En dessous du site": "Below the site",
|
"En dessous du site": "Below the site",
|
||||||
"En haut au centre": "Top in the center",
|
"En haut au centre": "Top in the center",
|
||||||
"En haut à droite": "Top right",
|
"En haut à droite": "Top right corner",
|
||||||
"En haut à gauche": "On the top corner left",
|
"En haut à gauche": "Top left corner",
|
||||||
"En position libre ajoutez le module en plaçant [MODULE] à l'endroit voulu dans votre page.": "In free position add the module by placing [module] to the desired location in your page.",
|
"En position libre ajoutez le module en plaçant [MODULE] à l'endroit voulu dans votre page.": "In free position add the module by placing [MODULE] to the desired location in your page.",
|
||||||
"En-dehors du site": "Outside the site",
|
"En-dehors du site": "Outside the site",
|
||||||
"Enregistrer": "Save",
|
"Enregistrer": "Save",
|
||||||
"Envoyer un message de confirmation": "Send a confirmation message",
|
"Envoyer un message de confirmation": "Send a confirmation message",
|
||||||
@ -226,7 +226,7 @@
|
|||||||
"Erreur de lecture, vérifiez les permissions": "Reading error, check permissions",
|
"Erreur de lecture, vérifiez les permissions": "Reading error, check permissions",
|
||||||
"Erreur inconnue": "unknown error",
|
"Erreur inconnue": "unknown error",
|
||||||
"Erreur inconnue, le module n'est pas installé": "Unknown error, the module is not installed",
|
"Erreur inconnue, le module n'est pas installé": "Unknown error, the module is not installed",
|
||||||
"Export CSV": "Export CSV",
|
"Export CSV": "CSV Export",
|
||||||
"Expéditeur": "From",
|
"Expéditeur": "From",
|
||||||
"Extension": "Extension",
|
"Extension": "Extension",
|
||||||
"Extraire": "Extract",
|
"Extraire": "Extract",
|
||||||
@ -260,7 +260,7 @@
|
|||||||
"Grande": "Large",
|
"Grande": "Large",
|
||||||
"Grande (220%)": "Grande (220%)",
|
"Grande (220%)": "Grande (220%)",
|
||||||
"Grande (300px)": "Grande (300px)",
|
"Grande (300px)": "Grande (300px)",
|
||||||
"Gras": "Fetter",
|
"Gras": "Bold",
|
||||||
"Groupe": "Group",
|
"Groupe": "Group",
|
||||||
"Groupe associé": "Associated Group",
|
"Groupe associé": "Associated Group",
|
||||||
"Groupe requis pour accéder à la page :": "Group required to access the page:",
|
"Groupe requis pour accéder à la page :": "Group required to access the page:",
|
||||||
@ -318,7 +318,7 @@
|
|||||||
"Journalisation": "Journalization",
|
"Journalisation": "Journalization",
|
||||||
"L'archive a été déposée dans le gestionnaire de fichiers. Les archives inférieures à la version 9 ne sont pas acceptées.": "The archive was deposited in the file manager. Archives below version 9 are not accepted.",
|
"L'archive a été déposée dans le gestionnaire de fichiers. Les archives inférieures à la version 9 ne sont pas acceptées.": "The archive was deposited in the file manager. Archives below version 9 are not accepted.",
|
||||||
"L'identifiant est défini lors de la création du compte, il ne peut pas être modifié.": "The identifier is defined when creating the account, it cannot be changed.",
|
"L'identifiant est défini lors de la création du compte, il ne peut pas être modifié.": "The identifier is defined when creating the account, it cannot be changed.",
|
||||||
"La carte du site a été mise à jour": "The site card has been updated",
|
"La carte du site a été mise à jour": "The sitemap has been updated",
|
||||||
"La copie de sauvegarde du fichier htaccess n'a pas été restaurée !": "Backup copy of htaccess file has not been restored!",
|
"La copie de sauvegarde du fichier htaccess n'a pas été restaurée !": "Backup copy of htaccess file has not been restored!",
|
||||||
"La description d'une page participe à son référencement, chaque page doit disposer d'une description différente.": "The description of a page participates in its referencing, each page must have a different description.",
|
"La description d'une page participe à son référencement, chaque page doit disposer d'une description différente.": "The description of a page participates in its referencing, each page must have a different description.",
|
||||||
"La page %s est ouverte par l'utilisateur %s": "Page %s opened by user %s",
|
"La page %s est ouverte par l'utilisateur %s": "Page %s opened by user %s",
|
||||||
@ -340,8 +340,8 @@
|
|||||||
"Largeur": "Width",
|
"Largeur": "Width",
|
||||||
"Largeur de l'image": "Image Width",
|
"Largeur de l'image": "Image Width",
|
||||||
"Largeur du site": "Site Width",
|
"Largeur du site": "Site Width",
|
||||||
"Le curseur horizontal règle le niveau de transparence, le placer tout à la gauche pour un surlignement invisible.": "The horizontal cursor regulates the level of transparency, place it on the left for invisible highlights.",
|
"Le curseur horizontal règle le niveau de transparence, le placer tout à la gauche pour un surlignement invisible.": "The horizontal cursor sets the level of transparency, place it on the left for invisible highlights.",
|
||||||
"Le curseur horizontal règle le niveau de transparence.": "The horizontal cursor regulates the level of transparency.",
|
"Le curseur horizontal règle le niveau de transparence.": "The horizontal cursor sets the level of transparency.",
|
||||||
"Le fuseau horaire est utile au bon référencement": "The time zone is useful for the right SEO",
|
"Le fuseau horaire est utile au bon référencement": "The time zone is useful for the right SEO",
|
||||||
"Le menu accessoire est aligné à droite de la barre de menu, c'est un emplacement réservé aux drapeaux et au bouton de connexion.": "The accessory menu is aligned to the right of the menu bar, it is a place reserved for flags and the login button.",
|
"Le menu accessoire est aligné à droite de la barre de menu, c'est un emplacement réservé aux drapeaux et au bouton de connexion.": "The accessory menu is aligned to the right of the menu bar, it is a place reserved for flags and the login button.",
|
||||||
"Le menu horizontal intégral": "The full horizontal menu",
|
"Le menu horizontal intégral": "The full horizontal menu",
|
||||||
@ -349,7 +349,7 @@
|
|||||||
"Le module %s de la page %s a été supprimé": "The %s module of the %s has been deleted",
|
"Le module %s de la page %s a été supprimé": "The %s module of the %s has been deleted",
|
||||||
"Le module %s est désinstallé, il reste peut-être des données dans %s": "The module %s is uninstalled, there may be data in %s",
|
"Le module %s est désinstallé, il reste peut-être des données dans %s": "The module %s is uninstalled, there may be data in %s",
|
||||||
"Le sous-menu de la page parente": "The parent page submenu",
|
"Le sous-menu de la page parente": "The parent page submenu",
|
||||||
"Le survol d'une icône de l'écran de connexion affiche temporairement le mot de passe.": "Flyover of an icon on the connection screen temporarily displays the password.",
|
"Le survol d'une icône de l'écran de connexion affiche temporairement le mot de passe.": "Hovering over a login screen icon temporarily displays the password",
|
||||||
"Le titre court est affiché dans les menus. Il peut être identique au titre de la page.": "The short title is displayed in the menus. It can be identical to the page title.",
|
"Le titre court est affiché dans les menus. Il peut être identique au titre de la page.": "The short title is displayed in the menus. It can be identical to the page title.",
|
||||||
"Les langues sélectionnées sont identiques": "The selected languages are identical",
|
"Les langues sélectionnées sont identiques": "The selected languages are identical",
|
||||||
"Les mentions légales sont obligatoires en France. Une option du pied de page ajoute un lien discret vers cette page.": "Legal notices are compulsory in France. An option of the footer adds a discrete link to this page.",
|
"Les mentions légales sont obligatoires en France. Une option du pied de page ajoute un lien discret vers cette page.": "Legal notices are compulsory in France. An option of the footer adds a discrete link to this page.",
|
||||||
@ -359,7 +359,7 @@
|
|||||||
"Libre": "Libre",
|
"Libre": "Libre",
|
||||||
"Licence :": "Licence:",
|
"Licence :": "Licence:",
|
||||||
"Lien de connexion": "Login link",
|
"Lien de connexion": "Login link",
|
||||||
"Lien page des mentions légales.": "Link of legal notices.",
|
"Lien page des mentions légales.": "Link to legal notices.",
|
||||||
"Liens": "Links",
|
"Liens": "Links",
|
||||||
"Limitation des tentatives": "Limitation of attempts",
|
"Limitation des tentatives": "Limitation of attempts",
|
||||||
"Limitée au site": "Limited to the site",
|
"Limitée au site": "Limited to the site",
|
||||||
@ -371,7 +371,7 @@
|
|||||||
"Légère": "Light",
|
"Légère": "Light",
|
||||||
"Maigre": "Lean",
|
"Maigre": "Lean",
|
||||||
"Maintenance": "Maintenance",
|
"Maintenance": "Maintenance",
|
||||||
"Majuscule à chaque mot": "Capper with each word",
|
"Majuscule à chaque mot": "Capitalize each word",
|
||||||
"Majuscules": "Capital letters",
|
"Majuscules": "Capital letters",
|
||||||
"Marges verticales": "Vertical margins",
|
"Marges verticales": "Vertical margins",
|
||||||
"Masquer la bannière en écran réduit": "Hide the banner in reduced screen",
|
"Masquer la bannière en écran réduit": "Hide the banner in reduced screen",
|
||||||
@ -405,20 +405,20 @@
|
|||||||
"Modules installés": "Installed modules",
|
"Modules installés": "Installed modules",
|
||||||
"Modules orphelins": "Orphaned modules",
|
"Modules orphelins": "Orphaned modules",
|
||||||
"Mot de passe": "Password",
|
"Mot de passe": "Password",
|
||||||
"Mot de passe oublié": "Forgot your password",
|
"Mot de passe oublié": "Forgot password",
|
||||||
"Mot de passe perdu": "Lost password",
|
"Mot de passe perdu": "Lost password",
|
||||||
"Motorisé par": "Powered by",
|
"Motorisé par": "Powered by",
|
||||||
"Moyen": "Medium",
|
"Moyen": "Medium",
|
||||||
"Moyenne": "Medium",
|
"Moyenne": "Medium",
|
||||||
"Moyenne (200%)": "Average (200%)",
|
"Moyenne (200%)": "Medium (200%)",
|
||||||
"Moyenne (200px)": "Average (200px)",
|
"Moyenne (200px)": "Medium (200px)",
|
||||||
"Méta-description": "Meta-description",
|
"Méta-description": "Meta-description",
|
||||||
"Méta-titre": "Meta title",
|
"Méta-titre": "Meta title",
|
||||||
"Ne pas afficher": "Do not display",
|
"Ne pas afficher": "Do not display",
|
||||||
"Ne pas charger l'exemple de site (utilisateurs avancés)": "Do not load the example of a site (advanced users)",
|
"Ne pas charger l'exemple de site (utilisateurs avancés)": "Do not load the example of a site (advanced users)",
|
||||||
"Ne pas répéter": "Do not repeat",
|
"Ne pas répéter": "Do not repeat",
|
||||||
"Ne pas saisir les balises": "Don't type tags",
|
"Ne pas saisir les balises": "Don't type tags",
|
||||||
"News": "",
|
"News": "News",
|
||||||
"Niveau 1 (192.168.12.x)": "Level 1 (192.168.12.x)",
|
"Niveau 1 (192.168.12.x)": "Level 1 (192.168.12.x)",
|
||||||
"Niveau 2 (192.168.x.x)": "Level 2 (192.168.x.x)",
|
"Niveau 2 (192.168.x.x)": "Level 2 (192.168.x.x)",
|
||||||
"Niveau 3 (192.x.x.x)": "Level 3 (192.x.x.x)",
|
"Niveau 3 (192.x.x.x)": "Level 3 (192.x.x.x)",
|
||||||
@ -427,18 +427,18 @@
|
|||||||
"Nom du profil": "Profile Name",
|
"Nom du profil": "Profile Name",
|
||||||
"Nom utilisateur": "Username",
|
"Nom utilisateur": "Username",
|
||||||
"Non": "No",
|
"Non": "No",
|
||||||
"Non tronquée": "Unmanned",
|
"Non tronquée": "Untruncated",
|
||||||
"Notre site est actuellement en maintenance. Nous sommes désolés pour la gêne occasionnée et faisons notre possible pour être rapidement de retour.": "Our site is currently under maintenance. We are sorry for the inconvenience caused and do our best to be quickly back.",
|
"Notre site est actuellement en maintenance. Nous sommes désolés pour la gêne occasionnée et faisons notre possible pour être rapidement de retour.": "Our site is currently under maintenance. Sorry for the inconvenience and we do our best to be back soon.",
|
||||||
"Nouveau contenu localisé": "New localized content",
|
"Nouveau contenu localisé": "New localized content",
|
||||||
"Nouveau mot de passe": "New Password",
|
"Nouveau mot de passe": "New Password",
|
||||||
"Nouveau mot de passe enregistré": "New password recorded",
|
"Nouveau mot de passe enregistré": "New password recorded",
|
||||||
"Nouvel utilisateur": "New user",
|
"Nouvel utilisateur": "New user",
|
||||||
"Nouvelle page créée": "New page created",
|
"Nouvelle page créée": "New page created",
|
||||||
"Nouvelle page ou barre latérale": "New page or sidebar",
|
"Nouvelle page ou barre latérale": "New page or sidebar",
|
||||||
"Obligatoire": "Missing",
|
"Obligatoire": "Required",
|
||||||
"Ombre": "Shadow",
|
"Ombre": "Shadow",
|
||||||
"Option active en mode déconnecté uniquement, les pages enfants sont visibles et accessibles.": "Active option in disconnected mode only, children's pages are visible and accessible.",
|
"Option active en mode déconnecté uniquement, les pages enfants sont visibles et accessibles.": "Active option in disconnected mode only, children's pages are visible and accessible.",
|
||||||
"Option recommandée pour sécuriser la connexion. S'applique à tous les captchas du site. Le captcha simple se limite à une addition de nombres de 0 à 10. Le captcha complexe utilise quatre opérations de nombres de 0 à 20. Activation recommandée.": "Recommended option to secure the connection. Applies to all the Captchas of the site. Simple Captcha is limited to an addition of numbers from 0 to 10. Complex Captcha uses four numbers of 0 to 20. Recommended activation.",
|
"Option recommandée pour sécuriser la connexion. S'applique à tous les captchas du site. Le captcha simple se limite à une addition de nombres de 0 à 10. Le captcha complexe utilise quatre opérations de nombres de 0 à 20. Activation recommandée.": "Recommended option to secure the connection. Applies to all the Captchas of the site. Simple Captcha is limited to an addition of numbers from 0 to 10. Complex Captcha uses four numbers from 0 to 20. Recommended activation.",
|
||||||
"Options": "Options",
|
"Options": "Options",
|
||||||
"Options avancées": "Advanced options",
|
"Options avancées": "Advanced options",
|
||||||
"Origine": "Origin",
|
"Origine": "Origin",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
"Page de recherche": "Search page",
|
"Page de recherche": "Search page",
|
||||||
"Page dupliquée": "Duplicate page",
|
"Page dupliquée": "Duplicate page",
|
||||||
"Page et module dupliqués": "Duplicated page and module",
|
"Page et module dupliqués": "Duplicated page and module",
|
||||||
"Page inexistante, erreur 404": "Page non-existent, error 404",
|
"Page inexistante, erreur 404": "Non-existent page, error 404",
|
||||||
"Page non cliquable": "Non-clickable page",
|
"Page non cliquable": "Non-clickable page",
|
||||||
"Page parent": "Parent page",
|
"Page parent": "Parent page",
|
||||||
"Page standard": "Standard page",
|
"Page standard": "Standard page",
|
||||||
@ -476,7 +476,7 @@
|
|||||||
"Permissions sur les pages": "Page Permissions",
|
"Permissions sur les pages": "Page Permissions",
|
||||||
"Petite": "Small",
|
"Petite": "Small",
|
||||||
"Petite (150px)": "Small (150px)",
|
"Petite (150px)": "Small (150px)",
|
||||||
"Petite (180%)": "Petite (180%)",
|
"Petite (180%)": "Small (180%)",
|
||||||
"Pied de page": "Footer",
|
"Pied de page": "Footer",
|
||||||
"Pinterest": "Pinterest",
|
"Pinterest": "Pinterest",
|
||||||
"Plan du site": "Sitemap",
|
"Plan du site": "Sitemap",
|
||||||
@ -490,9 +490,9 @@
|
|||||||
"Presse Papier": "Clipboard",
|
"Presse Papier": "Clipboard",
|
||||||
"Presse papier": "Clipboard",
|
"Presse papier": "Clipboard",
|
||||||
"Profils des groupes": "Group Profiles",
|
"Profils des groupes": "Group Profiles",
|
||||||
"Proportionnelle à la taille définie dans le site.": "Proportional to that defined in the site.",
|
"Proportionnelle à la taille définie dans le site.": "Proportional to the size defined in the site.",
|
||||||
"Prénom": "First name",
|
"Prénom": "First name",
|
||||||
"Prénom Nom": "Firstname name",
|
"Prénom Nom": "First name Name",
|
||||||
"Préparation de la mise à jour": "Preparation of the update",
|
"Préparation de la mise à jour": "Preparation of the update",
|
||||||
"Préserver le fichier htaccess racine": "Preserve the root htaccess file",
|
"Préserver le fichier htaccess racine": "Preserve the root htaccess file",
|
||||||
"Préserver les comptes des utilisateurs déjà installés": "Preserve user accounts already installed",
|
"Préserver les comptes des utilisateurs déjà installés": "Preserve user accounts already installed",
|
||||||
@ -579,7 +579,7 @@
|
|||||||
"Sur les deux axes": "On both axes",
|
"Sur les deux axes": "On both axes",
|
||||||
"Sécurité": "Security",
|
"Sécurité": "Security",
|
||||||
"Sécurité de la connexion": "Connection security",
|
"Sécurité de la connexion": "Connection security",
|
||||||
"Sécurité désactivée": "Safety deactivated",
|
"Sécurité désactivée": "Security disabled",
|
||||||
"Sélectionner un fichier": "Select a file",
|
"Sélectionner un fichier": "Select a file",
|
||||||
"Sélectionnez au moins un contenu à afficher": "Select at least one content to display",
|
"Sélectionnez au moins un contenu à afficher": "Select at least one content to display",
|
||||||
"Sélectionnez la langue à copier vers une langue cible": "Select the language to copy to a target language",
|
"Sélectionnez la langue à copier vers une langue cible": "Select the language to copy to a target language",
|
||||||
@ -689,5 +689,18 @@
|
|||||||
"Groupes / Profils": "Groups / Profiles",
|
"Groupes / Profils": "Groups / Profiles",
|
||||||
"Prénom commence par": "First Name starts with",
|
"Prénom commence par": "First Name starts with",
|
||||||
"Nom commence par": "Last Name starts with",
|
"Nom commence par": "Last Name starts with",
|
||||||
"Impossible de réinitialiser le mot de passe de ce compte !": "Impossible to reset this account password!"
|
"Impossible de réinitialiser le mot de passe de ce compte !": "Impossible to reset this account password!",
|
||||||
|
"Test de la messagerie du site": "Site messaging test",
|
||||||
|
"Il semblerait que votre messagerie fonctionne correctement !": "It seems that your messaging is working correctly!",
|
||||||
|
"Message de test envoyé avec succès": "Test message sent successfully",
|
||||||
|
"Message non envoyé": "Message not sent",
|
||||||
|
"Validation par clé ⚠️": "Key-based validation ⚠️",
|
||||||
|
"La connexion est confirmée à l'aide d'une clé transmise par messagerie. Depuis le groupe sélectionné et les groupes supérieurs.": "The connection is confirmed using a key sent via messaging. From the selected group and the higher groups.",
|
||||||
|
"Envoi du message d'authentification": "Sending authentication message",
|
||||||
|
"Connexion réussie": "Login successful",
|
||||||
|
"Erreur de mot de passe": "Password error",
|
||||||
|
"Erreur de captcha": "Captcha error",
|
||||||
|
"Clé envoyée par message": "Key sent via message",
|
||||||
|
"Message de test": "Test message",
|
||||||
|
"Clé d'authentification envoyée à votre adresse mail %s": "Authentication key sent to your email address %s"
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"'Ne pas afficher' crée une page orpheline non accessible par le biais des menus.": "'No mostrar' crea una página huérfana a la que no se puede acceder a través de los menús.",
|
"'Ne pas afficher' crée une page orpheline non accessible par le biais des menus.": "'No mostrar' crea una página huérfana a la que no se puede acceder a través de los menús.",
|
||||||
"'Sauvegarder et télécharger les données du module": "Guardar y descargar de los datos del módulo",
|
"'Sauvegarder et télécharger les données du module": "Guardar y descargar de los datos del módulo",
|
||||||
"1 jour": "1 Jour",
|
"1 jour": "1 diaz",
|
||||||
"1/4 : Préparation...": "1/4: Preparando...",
|
"1/4 : Préparation...": "1/4: Preparando...",
|
||||||
"10 minutes": "10 minutos",
|
"10 minutes": "10 minutos",
|
||||||
"10 tentatives": "6 intentos",
|
"10 tentatives": "6 intentos",
|
||||||
@ -322,7 +322,7 @@
|
|||||||
"La copie de sauvegarde du fichier htaccess n'a pas été restaurée !": "¡La copia de seguridad del archivo htaccess no ha sido restaurada!",
|
"La copie de sauvegarde du fichier htaccess n'a pas été restaurée !": "¡La copia de seguridad del archivo htaccess no ha sido restaurada!",
|
||||||
"La description d'une page participe à son référencement, chaque page doit disposer d'une description différente.": "La descripción de una página participa en su referenciación, cada página debe tener una descripción diferente.",
|
"La description d'une page participe à son référencement, chaque page doit disposer d'une description différente.": "La descripción de una página participa en su referenciación, cada página debe tener una descripción diferente.",
|
||||||
"La page %s est ouverte par l'utilisateur %s": "La página %s ha sido abierta por el usuario %s",
|
"La page %s est ouverte par l'utilisateur %s": "La página %s ha sido abierta por el usuario %s",
|
||||||
"La page demandée n'existe pas ou est introuvable (erreur 404)": "La page demandée n'existe pas ou est introuvable (erreur 404)",
|
"La page demandée n'existe pas ou est introuvable (erreur 404)": "La página solicitada no existe o no se encuentra (error 404).",
|
||||||
"La page est affichée dans un menu horizontal mais pas dans le menu vertical d'une barre latérale.": "La página se muestra en un menú horizontal pero no en el menú vertical de una barra lateral.",
|
"La page est affichée dans un menu horizontal mais pas dans le menu vertical d'une barre latérale.": "La página se muestra en un menú horizontal pero no en el menú vertical de una barra lateral.",
|
||||||
"La première page que vos visiteurs verront.": "La primera página que verán tus visitantes.",
|
"La première page que vos visiteurs verront.": "La primera página que verán tus visitantes.",
|
||||||
"La règlementation française impose un anonymat de niveau 2": "La normativa francesa impone el anonimato de nivel 2",
|
"La règlementation française impose un anonymat de niveau 2": "La normativa francesa impone el anonimato de nivel 2",
|
||||||
@ -476,7 +476,7 @@
|
|||||||
"Permissions sur les pages": "Permisos de las páginas",
|
"Permissions sur les pages": "Permisos de las páginas",
|
||||||
"Petite": "Pequeño",
|
"Petite": "Pequeño",
|
||||||
"Petite (150px)": "Pequeño (150px)",
|
"Petite (150px)": "Pequeño (150px)",
|
||||||
"Petite (180%)": "Petite (180%)",
|
"Petite (180%)": "Pequeño (180px)",
|
||||||
"Pied de page": "Pie de página",
|
"Pied de page": "Pie de página",
|
||||||
"Pinterest": "Pinterest",
|
"Pinterest": "Pinterest",
|
||||||
"Plan du site": "Mapa del sitio",
|
"Plan du site": "Mapa del sitio",
|
||||||
@ -689,5 +689,18 @@
|
|||||||
"Groupes / Profils": "Grupos / Perfiles",
|
"Groupes / Profils": "Grupos / Perfiles",
|
||||||
"Prénom commence par": "El nombre comienza con",
|
"Prénom commence par": "El nombre comienza con",
|
||||||
"Nom commence par": "El apellido comienza con",
|
"Nom commence par": "El apellido comienza con",
|
||||||
"Impossible de réinitialiser le mot de passe de ce compte !": "No puedo restablecer la contraseña de esta cuenta."
|
"Impossible de réinitialiser le mot de passe de ce compte !": "No puedo restablecer la contraseña de esta cuenta.",
|
||||||
|
"Test de la messagerie du site": "Prueba de mensajería del sitio",
|
||||||
|
"Il semblerait que votre messagerie fonctionne correctement !": "¡Parece que su mensajería funciona correctamente!",
|
||||||
|
"Message de test envoyé avec succès": "Mensaje de prueba enviado con éxito",
|
||||||
|
"Message non envoyé": "Mensaje no enviado",
|
||||||
|
"Validation par clé ⚠️": "Validación por clave ⚠️",
|
||||||
|
"La connexion est confirmée à l'aide d'une clé transmise par messagerie. Depuis le groupe sélectionné et les groupes supérieurs.": "La conexión se confirma con una clave enviada por mensajería. Desde el grupo seleccionado y los grupos superiores.",
|
||||||
|
"Envoi du message d'authentification": "Envío del mensaje de autenticación",
|
||||||
|
"Connexion réussie": "Conexión exitosa",
|
||||||
|
"Erreur de mot de passe": "Error de contraseña",
|
||||||
|
"Erreur de captcha": "Error de captcha",
|
||||||
|
"Clé envoyée par message": "Clave enviada por mensaje",
|
||||||
|
"Message de test": "Mensaje de prueba",
|
||||||
|
"Clé d'authentification envoyée à votre adresse mail %s": "Clave de autenticación enviada a su dirección de correo electrónico %s"
|
||||||
}
|
}
|
@ -689,5 +689,18 @@
|
|||||||
"Groupes / Profils": "",
|
"Groupes / Profils": "",
|
||||||
"Prénom commence par": "",
|
"Prénom commence par": "",
|
||||||
"Nom commence par": "",
|
"Nom commence par": "",
|
||||||
"Impossible de réinitialiser le mot de passe de ce compte !": ""
|
"Impossible de réinitialiser le mot de passe de ce compte !": "",
|
||||||
|
"Test de la messagerie du site": "",
|
||||||
|
"Il semblerait que votre messagerie fonctionne correctement !": "",
|
||||||
|
"Message de test envoyé avec succès": "",
|
||||||
|
"Message non envoyé": "",
|
||||||
|
"Validation par clé ⚠️": "",
|
||||||
|
"La connexion est confirmée à l'aide d'une clé transmise par messagerie. Depuis le groupe sélectionné et les groupes supérieurs.": "",
|
||||||
|
"Envoi du message d'authentification": "",
|
||||||
|
"Connexion réussie": "",
|
||||||
|
"Erreur de mot de passe": "",
|
||||||
|
"Erreur de captcha": "",
|
||||||
|
"Clé envoyée par message": "",
|
||||||
|
"Message de test": "",
|
||||||
|
"Clé d'authentification envoyée à votre adresse mail %s": ""
|
||||||
}
|
}
|
@ -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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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 @@
|
|||||||
<div class="col6 offset3">
|
<div class="col6 offset3">
|
||||||
<?php echo template::select('installLanguage', $module::$i18nFiles, [
|
<?php echo template::select('installLanguage', $module::$i18nFiles, [
|
||||||
'label' => 'Langues installées',
|
'label' => 'Langues installées',
|
||||||
'selected' => array_key_exists ('fr_FR', $module::$i18nFiles) ? 'fr_FR': reset($module::$i18nFiles),
|
'selected' => isset(self::$i18nUI) ? self::$i18nUI : 'fr_FR',
|
||||||
]); ?>
|
]); ?>
|
||||||
</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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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/
|
||||||
*/
|
*/
|
||||||
|
@ -1,6 +1,12 @@
|
|||||||
function step(i, data) {
|
function step(i, data) {
|
||||||
var errors = ["<?php echo helper::translate('Préparation de la mise à jour'); ?>", "<?php echo helper::translate('Téléchargement et validation de l\'archive'); ?>", "<?php echo helper::translate('Installation'); ?>", "<?php echo helper::translate('Configuration'); ?>"];
|
var errors = [
|
||||||
$(".installUpdateProgressText").hide(), $(".installUpdateProgressText[data-id=" + i + "]").show();
|
"<?php echo helper::translate('Préparation de la mise à jour'); ?>",
|
||||||
|
"<?php echo helper::translate('Téléchargement et validation de l\'archive'); ?>",
|
||||||
|
"<?php echo helper::translate('Installation'); ?>",
|
||||||
|
"<?php echo helper::translate('Configuration'); ?>"
|
||||||
|
];
|
||||||
|
$(".installUpdateProgressText").hide();
|
||||||
|
$(".installUpdateProgressText[data-id=" + i + "]").show();
|
||||||
|
|
||||||
$("body").css("cursor", "wait");
|
$("body").css("cursor", "wait");
|
||||||
|
|
||||||
@ -12,7 +18,7 @@ function step(i, data) {
|
|||||||
data: data
|
data: data
|
||||||
},
|
},
|
||||||
success: function (result) {
|
success: function (result) {
|
||||||
setTimeout((function () {
|
setTimeout(function () {
|
||||||
if (4 === i) {
|
if (4 === i) {
|
||||||
$("#installUpdateSuccess").show();
|
$("#installUpdateSuccess").show();
|
||||||
$("body").css("cursor", "default");
|
$("body").css("cursor", "default");
|
||||||
@ -21,15 +27,21 @@ function step(i, data) {
|
|||||||
} else {
|
} else {
|
||||||
step(i + 1, result.data);
|
step(i + 1, result.data);
|
||||||
}
|
}
|
||||||
}), 2e3)
|
}, 2000);
|
||||||
},
|
},
|
||||||
error: function (xhr) {
|
error: function (xhr) {
|
||||||
// Balance tout dans la console
|
|
||||||
console.log(i);
|
console.log(i);
|
||||||
console.log(xhr.responseText);
|
console.log(xhr.responseText);
|
||||||
console.log(errors);
|
console.log(errors);
|
||||||
// Appel de la fonction de gestion d'erreur
|
|
||||||
showError(i, xhr.responseText, errors);
|
// Vérification du code d'erreur HTTP pour gérer la déconnexion
|
||||||
|
if (xhr.status === 401 || xhr.status === 403) {
|
||||||
|
alert("Votre session a expiré. Veuillez vous reconnecter.");
|
||||||
|
window.location.href = "?user/login"; // Redirige vers la page de connexion
|
||||||
|
} else {
|
||||||
|
// Appel de la fonction de gestion d'erreur
|
||||||
|
showError(i, xhr.responseText, errors);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -47,23 +59,33 @@ function showError(step, message, errors) {
|
|||||||
// Trouver la position du premier "{" pour repérer le début du tableau
|
// Trouver la position du premier "{" pour repérer le début du tableau
|
||||||
const startOfArray = message.indexOf('{');
|
const startOfArray = message.indexOf('{');
|
||||||
|
|
||||||
// Extraire le message du warning jusqu'au début du tableau
|
if (startOfArray !== -1 && startOfArray > 0) {
|
||||||
const warningMessage = message.substring(0, startOfArray).trim();
|
// Extraire le message du warning jusqu'au début du tableau
|
||||||
|
const warningMessage = message.substring(0, startOfArray).trim();
|
||||||
|
|
||||||
// Extraire le tableau JSON entre les accolades
|
// Extraire le tableau JSON entre les accolades
|
||||||
const jsonString = message.substring(startOfArray);
|
const jsonString = message.substring(startOfArray);
|
||||||
const jsonData = JSON.parse(jsonString);
|
|
||||||
|
|
||||||
// Afficher les résultats
|
try {
|
||||||
if (jsonData) {
|
const jsonData = JSON.parse(jsonString);
|
||||||
$("#installUpdateErrorMessage").html("<strong>Détails de l'erreur :</strong><br> " +
|
|
||||||
jsonData.data.replace(/^"(.*)"$/, '$1') +
|
// Afficher les résultats si le parsing JSON est réussi
|
||||||
"<br>" +
|
if (jsonData) {
|
||||||
warningMessage.replace(/<[^p].*?>/g, ""));
|
$("#installUpdateErrorMessage").html("<strong>Détails de l'erreur :</strong><br> " +
|
||||||
|
jsonData.data.replace(/^"(.*)"$/, '$1') +
|
||||||
|
"<br>" +
|
||||||
|
warningMessage.replace(/<[^p].*?>/g, ""));
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// Afficher un message générique en cas d'erreur de parsing
|
||||||
|
console.error("Erreur de parsing JSON : ", e);
|
||||||
|
$("#installUpdateErrorMessage").html("Une erreur inattendue est survenue lors du traitement des détails de l'erreur.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Si pas de JSON détecté, afficher le message brut
|
||||||
|
$("#installUpdateErrorMessage").html("Message d'erreur : " + message);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Vous pouvez également faire quelque chose d'autre ici, par exemple, afficher un message à l'utilisateur, etc.
|
|
||||||
$("#installUpdateErrorMessage").html(message);
|
$("#installUpdateErrorMessage").html(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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/
|
||||||
*/
|
*/
|
||||||
@ -91,16 +91,15 @@ class language extends common
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Télécharger le descripteur en ligne
|
// Télécharger le descripteur en ligne
|
||||||
$languageData = json_decode(helper::getUrlContents(self::ZWII_UI_URL . $lang . '.json'), true);
|
$languageData = helper::getUrlContents(self::ZWII_UI_URL . $lang . '.json');
|
||||||
$descripteur = json_decode(helper::getUrlContents(self::ZWII_UI_URL . 'language.json'), true);
|
$descripteur = json_decode(helper::getUrlContents(self::ZWII_UI_URL . 'language.json'), true);
|
||||||
$success = false;
|
$success = false;
|
||||||
if (
|
if (
|
||||||
is_array($languageData) &&
|
$languageData &&
|
||||||
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 = $this->secure_file_put_contents(self::I18N_DIR . $lang . '.json', $languageData);
|
$success = $this->secure_file_put_contents(self::I18N_DIR . $lang . '.json', $languageData);
|
||||||
$success = is_int($success) ? true : false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,15 +257,12 @@ class language extends common
|
|||||||
helper::dateUTF8('%d/%m/%Y', $value['date'], self::$i18nUI),
|
helper::dateUTF8('%d/%m/%Y', $value['date'], self::$i18nUI),
|
||||||
//self::$i18nUI === $file ? helper::translate('Interface') : '',
|
//self::$i18nUI === $file ? helper::translate('Interface') : '',
|
||||||
'',
|
'',
|
||||||
/*
|
template::button('translateContentLanguageUIEdit' . $file, [
|
||||||
template::button('translateContentLanguageUIEdit' . $file, [
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/edit/' . $file,
|
||||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/edit/' . $file,
|
'value' => template::ico('pencil'),
|
||||||
'value' => template::ico('pencil'),
|
'help' => 'Éditer',
|
||||||
'help' => 'Éditer',
|
'disabled' => 'fr_FR' === $file
|
||||||
'disabled' => 'fr_FR' === $file
|
]),
|
||||||
]),
|
|
||||||
*/
|
|
||||||
|
|
||||||
template::button('translateContentLanguageUIDownload' . $file, [
|
template::button('translateContentLanguageUIDownload' . $file, [
|
||||||
'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,
|
||||||
@ -512,7 +508,7 @@ class language extends common
|
|||||||
$data[$key] = $target;
|
$data[$key] = $target;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->secure_file_put_contents(self::I18N_DIR . $lang . '.json', $data);
|
file_put_contents(self::I18N_DIR . $lang . '.json', json_encode($data));
|
||||||
|
|
||||||
// Mettre à jour le descripteur
|
// Mettre à jour le descripteur
|
||||||
$this->setData([
|
$this->setData([
|
||||||
@ -540,13 +536,18 @@ class language extends common
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Ajout des champs absents selon la langue de référence
|
// Ajout des champs absents selon la langue de référence
|
||||||
$dataFr = json_decode(file_get_contents(self::I18N_DIR . 'fr_FR.json'), true);
|
/*
|
||||||
foreach ($dataFr as $key => $value) {
|
$dataFr = json_decode(file_get_contents(self::I18N_DIR . 'fr_FR.json'), true);
|
||||||
if (!array_key_exists($key, $data)) {
|
foreach ($dataFr as $key => $value) {
|
||||||
$data[$key] = '';
|
if (!array_key_exists($key, $data)) {
|
||||||
}
|
$data[$key] = '';
|
||||||
}
|
}
|
||||||
$this->secure_file_put_contents(self::I18N_DIR . $lang . '.json', $data);
|
}
|
||||||
|
file_put_contents(self::I18N_DIR . $lang . '.json', $data);
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Trier le tableau
|
||||||
|
asort($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) {
|
||||||
@ -569,7 +570,7 @@ class language extends common
|
|||||||
'title' => helper::translate('Éditer les dialogues') . ' ' . template::flag($lang, '20 %'),
|
'title' => helper::translate('Éditer les dialogues') . ' ' . template::flag($lang, '20 %'),
|
||||||
'view' => 'edit',
|
'view' => 'edit',
|
||||||
'vendor' => [
|
'vendor' => [
|
||||||
'flatpickr',
|
'tablednd'
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
@ -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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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/
|
||||||
*/
|
*/
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
<?php echo helper::translate('Langues installées'); ?>
|
<?php echo helper::translate('Langues installées'); ?>
|
||||||
</h4>
|
</h4>
|
||||||
<?php if ($module::$languagesUiInstalled): ?>
|
<?php if ($module::$languagesUiInstalled): ?>
|
||||||
<?php echo template::table([2, 1, 1, 5, 1, 1], $module::$languagesUiInstalled, ['Langues', 'Version', 'Date', '', '', '']); ?>
|
<?php echo template::table([2, 1, 1, 4, 1, 1, 1], $module::$languagesUiInstalled, ['Langues', 'Version', 'Date', '', '', '', '']); ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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'
|
||||||
@ -118,14 +119,16 @@ class page extends common
|
|||||||
$page
|
$page
|
||||||
]);
|
]);
|
||||||
// Ecriture
|
// Ecriture
|
||||||
$this->setData(['page', $pageId, $data]);
|
$this->setData(['page', $pageId, $data], false);
|
||||||
$notification = helper::translate('Page dupliquée');
|
$notification = helper::translate('Page dupliquée');
|
||||||
// Duplication du module présent
|
// Duplication du module présent
|
||||||
if ($this->getData(['page', $page, 'moduleId'])) {
|
if ($this->getData(['page', $page, 'moduleId'])) {
|
||||||
$data = $this->getData(['module', $page]);
|
$data = $this->getData(['module', $page]);
|
||||||
$this->setData(['module', $pageId, $data]);
|
$this->setData(['module', $pageId, $data], false);
|
||||||
$notification = helper::translate('Page et module dupliqués');
|
$notification = helper::translate('Page et module dupliqués');
|
||||||
}
|
}
|
||||||
|
// Force la sauvegarde
|
||||||
|
$this->saveDB('page');
|
||||||
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
@ -201,8 +204,8 @@ class page extends common
|
|||||||
//$this->secure_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([
|
||||||
@ -381,11 +384,13 @@ class page extends common
|
|||||||
$pageId = helper::increment($pageId, self::$moduleIds);
|
$pageId = helper::increment($pageId, self::$moduleIds);
|
||||||
// Met à jour les enfants
|
// Met à jour les enfants
|
||||||
foreach ($this->getHierarchy($this->getUrl(2), null) as $childrenPageId) {
|
foreach ($this->getHierarchy($this->getUrl(2), null) as $childrenPageId) {
|
||||||
$this->setData(['page', $childrenPageId, 'parentPageId', $pageId]);
|
$this->setData(['page', $childrenPageId, 'parentPageId', $pageId], false);
|
||||||
}
|
}
|
||||||
|
// Force la sauvegarde
|
||||||
|
$this->saveDB('page');
|
||||||
// Change l'id de page dans les données des modules
|
// Change l'id de page dans les données des modules
|
||||||
if ($this->getData(['module', $this->getUrl(2)]) !== null) {
|
if ($this->getData(['module', $this->getUrl(2)]) !== null) {
|
||||||
$this->setData(['module', $pageId, $this->getData(['module', $this->getUrl(2)])]);
|
$this->setData(['module', $pageId, $this->getData(['module', $this->getUrl(2)])], false);
|
||||||
$this->deleteData(['module', $this->getUrl(2)]);
|
$this->deleteData(['module', $this->getUrl(2)]);
|
||||||
// Renommer le dossier du module
|
// Renommer le dossier du module
|
||||||
$moduleId = $this->getData(['page', $this->getUrl(2), 'moduleId']);
|
$moduleId = $this->getData(['page', $this->getUrl(2), 'moduleId']);
|
||||||
@ -396,8 +401,10 @@ class page extends common
|
|||||||
copy($modulesData[$moduleId]['dataDirectory'] . $this->getUrl(2), $modulesData[$moduleId]['dataDirectory'] . $pageId);
|
copy($modulesData[$moduleId]['dataDirectory'] . $this->getUrl(2), $modulesData[$moduleId]['dataDirectory'] . $pageId);
|
||||||
$this->deleteDir($modulesData[$moduleId]['dataDirectory'] . $this->getUrl(2));
|
$this->deleteDir($modulesData[$moduleId]['dataDirectory'] . $this->getUrl(2));
|
||||||
// Mettre à jour le nom de la feuille de style
|
// Mettre à jour le nom de la feuille de style
|
||||||
$this->setData(['module', $pageId, 'theme', 'style', $modulesData[$moduleId]['dataDirectory'] . $pageId]);
|
$this->setData(['module', $pageId, 'theme', 'style', $modulesData[$moduleId]['dataDirectory'] . $pageId], false);
|
||||||
}
|
}
|
||||||
|
// Force la sauvegarde
|
||||||
|
$this->saveDB('module');
|
||||||
}
|
}
|
||||||
// Si la page correspond à la page d'accueil, change l'id dans la configuration du site
|
// Si la page correspond à la page d'accueil, change l'id dans la configuration du site
|
||||||
if ($this->getData(['locale', 'homePageId']) === $this->getUrl(2)) {
|
if ($this->getData(['locale', 'homePageId']) === $this->getUrl(2)) {
|
||||||
@ -417,20 +424,22 @@ class page extends common
|
|||||||
}
|
}
|
||||||
// Traitement des pages spéciales affectées dans la config :
|
// Traitement des pages spéciales affectées dans la config :
|
||||||
if ($this->getUrl(2) === $this->getData(['locale', 'legalPageId'])) {
|
if ($this->getUrl(2) === $this->getData(['locale', 'legalPageId'])) {
|
||||||
$this->setData(['locale', 'legalPageId', $pageId]);
|
$this->setData(['locale', 'legalPageId', $pageId], false);
|
||||||
}
|
}
|
||||||
if ($this->getUrl(2) === $this->getData(['locale', 'searchPageId'])) {
|
if ($this->getUrl(2) === $this->getData(['locale', 'searchPageId'])) {
|
||||||
$this->setData(['locale', 'searchPageId', $pageId]);
|
$this->setData(['locale', 'searchPageId', $pageId], false);
|
||||||
}
|
}
|
||||||
if ($this->getUrl(2) === $this->getData(['locale', 'page404'])) {
|
if ($this->getUrl(2) === $this->getData(['locale', 'page404'])) {
|
||||||
$this->setData(['locale', 'page404', $pageId]);
|
$this->setData(['locale', 'page404', $pageId], false);
|
||||||
}
|
}
|
||||||
if ($this->getUrl(2) === $this->getData(['locale', 'page403'])) {
|
if ($this->getUrl(2) === $this->getData(['locale', 'page403'])) {
|
||||||
$this->setData(['locale', 'page403', $pageId]);
|
$this->setData(['locale', 'page403', $pageId], false);
|
||||||
}
|
}
|
||||||
if ($this->getUrl(2) === $this->getData(['locale', 'page302'])) {
|
if ($this->getUrl(2) === $this->getData(['locale', 'page302'])) {
|
||||||
$this->setData(['locale', 'page302', $pageId]);
|
$this->setData(['locale', 'page302', $pageId], false);
|
||||||
}
|
}
|
||||||
|
// Force la sauvegarde
|
||||||
|
$this->saveDB('locale');
|
||||||
// Si la page est une page enfant, actualise les positions des autres enfants du parent, sinon actualise les pages sans parents
|
// Si la page est une page enfant, actualise les positions des autres enfants du parent, sinon actualise les pages sans parents
|
||||||
$lastPosition = 1;
|
$lastPosition = 1;
|
||||||
$hierarchy = $this->getInput('pageEditParentPageId') ? $this->getHierarchy($this->getInput('pageEditParentPageId')) : array_keys($this->getHierarchy());
|
$hierarchy = $this->getInput('pageEditParentPageId') ? $this->getHierarchy($this->getInput('pageEditParentPageId')) : array_keys($this->getHierarchy());
|
||||||
@ -449,7 +458,7 @@ class page extends common
|
|||||||
$lastPosition++;
|
$lastPosition++;
|
||||||
}
|
}
|
||||||
// Change la position
|
// Change la position
|
||||||
$this->setData(['page', $hierarchyPageId, 'position', $lastPosition]);
|
$this->setData(['page', $hierarchyPageId, 'position', $lastPosition], false);
|
||||||
// Incrémente pour la prochaine position
|
// Incrémente pour la prochaine position
|
||||||
$lastPosition++;
|
$lastPosition++;
|
||||||
}
|
}
|
||||||
@ -474,26 +483,28 @@ class page extends common
|
|||||||
) {
|
) {
|
||||||
foreach ($this->getHierarchy($pageId) as $parentId => $childId) {
|
foreach ($this->getHierarchy($pageId) as $parentId => $childId) {
|
||||||
if ($this->getData(['page', $childId, 'parentPageId']) === $pageId) {
|
if ($this->getData(['page', $childId, 'parentPageId']) === $pageId) {
|
||||||
$this->setData(['page', $childId, 'position', 0]);
|
$this->setData(['page', $childId, 'position', 0], false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Force la sauvegarde
|
||||||
|
$this->saveDB('page');
|
||||||
}
|
}
|
||||||
|
|
||||||
// La page est une barre latérale qui a été renommée : changer le nom de la barre dans les pages qui l'utilisent
|
// La page est une barre latérale qui a été renommée : changer le nom de la barre dans les pages qui l'utilisent
|
||||||
if ($this->getinput('pageEditBlock') === 'bar') {
|
if ($this->getinput('pageEditBlock') === 'bar') {
|
||||||
foreach ($this->getHierarchy() as $eachPageId => $parentId) {
|
foreach ($this->getHierarchy() as $eachPageId => $parentId) {
|
||||||
if ($this->getData(['page', $eachPageId, 'barRight']) === $this->getUrl(2)) {
|
if ($this->getData(['page', $eachPageId, 'barRight']) === $this->getUrl(2)) {
|
||||||
$this->setData(['page', $eachPageId, 'barRight', $pageId]);
|
$this->setData(['page', $eachPageId, 'barRight', $pageId], false);
|
||||||
}
|
}
|
||||||
if ($this->getData(['page', $eachPageId, 'barLeft']) === $this->getUrl(2)) {
|
if ($this->getData(['page', $eachPageId, 'barLeft']) === $this->getUrl(2)) {
|
||||||
$this->setData(['page', $eachPageId, 'barLeft', $pageId]);
|
$this->setData(['page', $eachPageId, 'barLeft', $pageId], false);
|
||||||
}
|
}
|
||||||
foreach ($parentId as $childId) {
|
foreach ($parentId as $childId) {
|
||||||
if ($this->getData(['page', $childId, 'barRight']) === $this->getUrl(2)) {
|
if ($this->getData(['page', $childId, 'barRight']) === $this->getUrl(2)) {
|
||||||
$this->setData(['page', $childId, 'barRight', $pageId]);
|
$this->setData(['page', $childId, 'barRight', $pageId], false);
|
||||||
}
|
}
|
||||||
if ($this->getData(['page', $childId, 'barLeft']) === $this->getUrl(2)) {
|
if ($this->getData(['page', $childId, 'barLeft']) === $this->getUrl(2)) {
|
||||||
$this->setData(['page', $childId, 'barLeft', $pageId]);
|
$this->setData(['page', $childId, 'barLeft', $pageId], false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -709,9 +720,30 @@ class page extends common
|
|||||||
{
|
{
|
||||||
$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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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) {
|
|
||||||
|
// 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/edit/' . $this->getUrl(2) . '/' . self::$siteContent,
|
'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/edit/' . $this->getUrl(2) . '/' . self::$siteContent,
|
'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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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
|
||||||
@ -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'),
|
||||||
@ -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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, Frédéric Tempez
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class theme extends common
|
class theme extends common
|
||||||
@ -419,7 +419,7 @@ class theme extends common
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
// Sauvegarder la configuration localisée
|
// Sauvegarder la configuration localisée
|
||||||
$this->setData(['locale', 'legalPageId', $this->getInput('configLegalPageId')]);
|
$this->setData(['locale', 'legalPageId', $this->getInput('configLegalPageId')], false);
|
||||||
$this->setData(['locale', 'searchPageId', $this->getInput('configSearchPageId')]);
|
$this->setData(['locale', 'searchPageId', $this->getInput('configSearchPageId')]);
|
||||||
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
@ -507,21 +507,23 @@ class theme extends common
|
|||||||
'featureContent' => $featureContent,
|
'featureContent' => $featureContent,
|
||||||
'featureFiles' => $files
|
'featureFiles' => $files
|
||||||
]
|
]
|
||||||
]);
|
], false);
|
||||||
// Modification de la position du menu selon la position de la bannière
|
// Modification de la position du menu selon la position de la bannière
|
||||||
if ($this->getData(['theme', 'header', 'position']) == 'site') {
|
if ($this->getData(['theme', 'header', 'position']) == 'site') {
|
||||||
$this->setData(['theme', 'menu', 'position', str_replace('body-', 'site-', $this->getData(['theme', 'menu', 'position']))]);
|
$this->setData(['theme', 'menu', 'position', str_replace('body-', 'site-', $this->getData(['theme', 'menu', 'position']))], false);
|
||||||
}
|
}
|
||||||
if ($this->getData(['theme', 'header', 'position']) == 'body') {
|
if ($this->getData(['theme', 'header', 'position']) == 'body') {
|
||||||
$this->setData(['theme', 'menu', 'position', str_replace('site-', 'body-', $this->getData(['theme', 'menu', 'position']))]);
|
$this->setData(['theme', 'menu', 'position', str_replace('site-', 'body-', $this->getData(['theme', 'menu', 'position']))], false);
|
||||||
}
|
}
|
||||||
// Menu accroché à la bannière qui devient cachée
|
// Menu accroché à la bannière qui devient cachée
|
||||||
if (
|
if (
|
||||||
$this->getData(['theme', 'header', 'position']) == 'hide' &&
|
$this->getData(['theme', 'header', 'position']) == 'hide' &&
|
||||||
in_array($this->getData(['theme', 'menu', 'position']), ['body-first', 'site-first', 'body-first', 'site-second'])
|
in_array($this->getData(['theme', 'menu', 'position']), ['body-first', 'site-first', 'body-first', 'site-second'])
|
||||||
) {
|
) {
|
||||||
$this->setData(['theme', 'menu', 'position', 'site']);
|
$this->setData(['theme', 'menu', 'position', 'site'], false);
|
||||||
}
|
}
|
||||||
|
// Force la sauvegarde
|
||||||
|
$this->saveDB('theme');
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'notification' => helper::translate('Modifications enregistrées'),
|
'notification' => helper::translate('Modifications enregistrées'),
|
||||||
@ -650,7 +652,7 @@ class theme extends common
|
|||||||
if (is_array($typeValue)) {
|
if (is_array($typeValue)) {
|
||||||
foreach ($typeValue as $fontId => $fontValue) {
|
foreach ($typeValue as $fontId => $fontValue) {
|
||||||
// Recherche les correspondances
|
// Recherche les correspondances
|
||||||
$result = array_filter($fonts, function($value) use ($fontId) {
|
$result = array_filter($fonts, function ($value) use ($fontId) {
|
||||||
return $value == $fontId;
|
return $value == $fontId;
|
||||||
});
|
});
|
||||||
$keyResults = array_keys($result);
|
$keyResults = array_keys($result);
|
||||||
@ -846,7 +848,7 @@ class theme extends common
|
|||||||
file_exists($this->getData(['font', 'files', $this->getUrl(3), 'resource']))
|
file_exists($this->getData(['font', 'files', $this->getUrl(3), 'resource']))
|
||||||
) {
|
) {
|
||||||
|
|
||||||
unlink($this->getData(['font', 'files', $this->getUrl(3), 'resource']));
|
unlink($this->getData(['font', 'files', $this->getUrl(3), 'resource']));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
@ -921,7 +923,7 @@ class theme extends common
|
|||||||
'fontWeight' => $this->getInput('themeTitleFontWeight'),
|
'fontWeight' => $this->getInput('themeTitleFontWeight'),
|
||||||
'textTransform' => $this->getInput('themeTitleTextTransform')
|
'textTransform' => $this->getInput('themeTitleTextTransform')
|
||||||
]
|
]
|
||||||
]);
|
], false);
|
||||||
$this->setData([
|
$this->setData([
|
||||||
'theme',
|
'theme',
|
||||||
'text',
|
'text',
|
||||||
@ -931,7 +933,7 @@ class theme extends common
|
|||||||
'textColor' => $this->getInput('themeTextTextColor'),
|
'textColor' => $this->getInput('themeTextTextColor'),
|
||||||
'linkColor' => $this->getInput('themeTextLinkColor')
|
'linkColor' => $this->getInput('themeTextLinkColor')
|
||||||
]
|
]
|
||||||
]);
|
], false);
|
||||||
$this->setData([
|
$this->setData([
|
||||||
'theme',
|
'theme',
|
||||||
'site',
|
'site',
|
||||||
@ -942,14 +944,14 @@ class theme extends common
|
|||||||
'width' => $this->getInput('themeSiteWidth'),
|
'width' => $this->getInput('themeSiteWidth'),
|
||||||
'margin' => $this->getInput('themeSiteMargin', helper::FILTER_BOOLEAN)
|
'margin' => $this->getInput('themeSiteMargin', helper::FILTER_BOOLEAN)
|
||||||
]
|
]
|
||||||
]);
|
], false);
|
||||||
$this->setData([
|
$this->setData([
|
||||||
'theme',
|
'theme',
|
||||||
'button',
|
'button',
|
||||||
[
|
[
|
||||||
'backgroundColor' => $this->getInput('themeButtonBackgroundColor')
|
'backgroundColor' => $this->getInput('themeButtonBackgroundColor')
|
||||||
]
|
]
|
||||||
]);
|
], false);
|
||||||
$this->setData([
|
$this->setData([
|
||||||
'theme',
|
'theme',
|
||||||
'block',
|
'block',
|
||||||
@ -957,7 +959,9 @@ class theme extends common
|
|||||||
'backgroundColor' => $this->getInput('themeBlockBackgroundColor'),
|
'backgroundColor' => $this->getInput('themeBlockBackgroundColor'),
|
||||||
'borderColor' => $this->getInput('themeBlockBorderColor')
|
'borderColor' => $this->getInput('themeBlockBorderColor')
|
||||||
]
|
]
|
||||||
]);
|
], false);
|
||||||
|
// Force la sauvegarde
|
||||||
|
$this->saveDB('theme');
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'notification' => helper::translate('Modifications enregistrées'),
|
'notification' => helper::translate('Modifications enregistrées'),
|
||||||
|
@ -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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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/
|
||||||
*/
|
*/
|
||||||
@ -20,6 +20,7 @@ $('#dataTables').DataTable({
|
|||||||
},
|
},
|
||||||
locale: 'fr',
|
locale: 'fr',
|
||||||
stateSave: true,
|
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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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/
|
||||||
*/
|
*/
|
||||||
@ -26,6 +26,7 @@ class user extends common
|
|||||||
'logout' => self::GROUP_MEMBER,
|
'logout' => self::GROUP_MEMBER,
|
||||||
'forgot' => self::GROUP_VISITOR,
|
'forgot' => self::GROUP_VISITOR,
|
||||||
'login' => self::GROUP_VISITOR,
|
'login' => self::GROUP_VISITOR,
|
||||||
|
'auth' => self::GROUP_VISITOR,
|
||||||
'reset' => self::GROUP_VISITOR,
|
'reset' => self::GROUP_VISITOR,
|
||||||
'profil' => self::GROUP_ADMIN,
|
'profil' => self::GROUP_ADMIN,
|
||||||
'profilEdit' => self::GROUP_ADMIN,
|
'profilEdit' => self::GROUP_ADMIN,
|
||||||
@ -66,7 +67,7 @@ class user extends common
|
|||||||
|
|
||||||
public static $groupProfils = [
|
public static $groupProfils = [
|
||||||
self::GROUP_MEMBER => 'Membre',
|
self::GROUP_MEMBER => 'Membre',
|
||||||
self::GROUP_EDITOR => 'Éditeur'
|
self::GROUP_EDITOR => 'Éditeur',
|
||||||
];
|
];
|
||||||
|
|
||||||
public static $listModules = [];
|
public static $listModules = [];
|
||||||
@ -202,7 +203,7 @@ class user extends common
|
|||||||
// L'utilisateur n'existe pas
|
// L'utilisateur n'existe pas
|
||||||
$this->getData(['user', $this->getUrl(2)]) === null
|
$this->getData(['user', $this->getUrl(2)]) === null
|
||||||
// Groupe insuffisant
|
// Groupe insuffisant
|
||||||
and ($this->getUrl('group') < self::GROUP_EDITOR)
|
and ($this->getUser('group') < self::GROUP_EDITOR)
|
||||||
) {
|
) {
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
@ -249,10 +250,10 @@ class user extends common
|
|||||||
and (
|
and (
|
||||||
// Impossible de s'auto-éditer
|
// Impossible de s'auto-éditer
|
||||||
($this->getUser('id') === $this->getUrl(2)
|
($this->getUser('id') === $this->getUrl(2)
|
||||||
and $this->getUrl('group') <= self::GROUP_VISITOR
|
and $this->getUser('group') <= self::GROUP_VISITOR
|
||||||
)
|
)
|
||||||
// Impossible d'éditer un autre utilisateur
|
// Impossible d'éditer un autre utilisateur
|
||||||
or ($this->getUrl('group') < self::GROUP_EDITOR)
|
or ($this->getUser('group') < self::GROUP_EDITOR)
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
@ -345,6 +346,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
|
||||||
@ -415,7 +417,7 @@ class user extends common
|
|||||||
// 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()]);
|
||||||
// Crée un id unique pour la réinitialisation
|
// Crée un id unique pour la réinitialisation
|
||||||
$uniqId = md5(json_encode($this->getData(['user', $userId])));
|
$uniqId = md5(json_encode($this->getData(['user', $userId, 'forgot'])));
|
||||||
// Envoi le mail
|
// Envoi le mail
|
||||||
$sent = $this->sendMail(
|
$sent = $this->sendMail(
|
||||||
$this->getData(['user', $userId, 'mail']),
|
$this->getData(['user', $userId, 'mail']),
|
||||||
@ -574,7 +576,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) {
|
||||||
@ -935,11 +937,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 (
|
||||||
@ -978,6 +980,7 @@ class user extends common
|
|||||||
) {
|
) {
|
||||||
// Lire Id du compte
|
// Lire Id du compte
|
||||||
$userId = $this->getInput('userLoginId', helper::FILTER_ID, true);
|
$userId = $this->getInput('userLoginId', helper::FILTER_ID, true);
|
||||||
|
$notification = '';
|
||||||
// Check le captcha
|
// Check le captcha
|
||||||
if (
|
if (
|
||||||
$this->getData(['config', 'connect', 'captcha'])
|
$this->getData(['config', 'connect', 'captcha'])
|
||||||
@ -1030,8 +1033,8 @@ class user extends common
|
|||||||
$this->getData(['user', $userId, 'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) < time()
|
$this->getData(['user', $userId, 'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) < time()
|
||||||
and $this->getData(['user', $userId, 'connectFail']) === $this->getData(['config', 'connect', 'attempt'])
|
and $this->getData(['user', $userId, 'connectFail']) === $this->getData(['config', 'connect', 'attempt'])
|
||||||
) {
|
) {
|
||||||
$this->setData(['user', $userId, 'connectFail', 0]);
|
$this->setData(['user', $userId, 'connectFail', 0], false);
|
||||||
$this->setData(['user', $userId, 'connectTimeout', 0]);
|
$this->setData(['user', $userId, 'connectTimeout', 0], false);
|
||||||
}
|
}
|
||||||
// Check la présence des variables et contrôle du blocage du compte si valeurs dépassées
|
// Check la présence des variables et contrôle du blocage du compte si valeurs dépassées
|
||||||
// Vérification du mot de passe et du groupe
|
// Vérification du mot de passe et du groupe
|
||||||
@ -1042,15 +1045,14 @@ class user extends common
|
|||||||
and $this->getData(['user', $userId, 'group']) >= self::GROUP_MEMBER
|
and $this->getData(['user', $userId, 'group']) >= self::GROUP_MEMBER
|
||||||
and $captcha === true
|
and $captcha === true
|
||||||
) {
|
) {
|
||||||
// RAZ
|
|
||||||
$this->setData(['user', $userId, 'connectFail', 0]);
|
// RAZ des compteurs de blocage
|
||||||
$this->setData(['user', $userId, 'connectTimeout', 0]);
|
$this->setData(['user', $userId, 'connectFail', 0], false);
|
||||||
// Expiration
|
$this->setData(['user', $userId, 'connectTimeout', 0], false);
|
||||||
$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);
|
|
||||||
setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false), '', helper::isHttps(), true);
|
|
||||||
// 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']], false);
|
||||||
|
|
||||||
// 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
|
||||||
if (
|
if (
|
||||||
$this->getData(['config', 'maintenance'])
|
$this->getData(['config', 'maintenance'])
|
||||||
@ -1062,17 +1064,90 @@ class user extends common
|
|||||||
'state' => false
|
'state' => false
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
$logStatus = 'Connexion réussie';
|
/**
|
||||||
|
* Le site n'est pas en maintenance
|
||||||
|
* Double authentification en cas de saisie correcte
|
||||||
|
*/
|
||||||
|
// Clé d'authenfication utilisée pour lier le compte au cookie au lieu de stocker le hash du mot de passe
|
||||||
|
$authKey = uniqid('', true) . bin2hex(random_bytes(8));
|
||||||
|
// Clé pour la double validation
|
||||||
|
$keyByMail = rand(100000, 999999);
|
||||||
|
// La page d'authentification est vide
|
||||||
|
$authRedirect = '';
|
||||||
|
if (
|
||||||
|
$this->getData(['config', 'connect', 'mailAuth']) > 0
|
||||||
|
&& $this->getData(['user', $userId, 'group']) >= $this->getData(['config', 'connect', 'mailAuth'])
|
||||||
|
) {
|
||||||
|
/**
|
||||||
|
* Envoi d'un email contenant une clé
|
||||||
|
* Stockage de la clé dans le compte de l'utilisateur
|
||||||
|
*/
|
||||||
|
|
||||||
|
$sent = $this->sendMail(
|
||||||
|
$this->getData(['user', $userId, 'mail']),
|
||||||
|
'Validation de la connexion à votre compte',
|
||||||
|
'<p>Clé de validation à saisir dans le formulaire de connexion :</p>' .
|
||||||
|
'<h1><center>' . $keyByMail . '</center></h1>',
|
||||||
|
null,
|
||||||
|
$this->getData(['config', 'smtp', 'from'])
|
||||||
|
);
|
||||||
|
|
||||||
|
// L'email a été envoyé avec succès, redirection vers la page de double authentification
|
||||||
|
if ($sent === true) {
|
||||||
|
// Journalisation
|
||||||
|
$logStatus = helper::translate('Envoi du message d\'authentification');
|
||||||
|
// Redirection vers la page d'authentification
|
||||||
|
$authRedirect = 'user/auth/';
|
||||||
|
// Stocker la clé envoyée par email
|
||||||
|
$this->setData(['user', $userId, 'authKey', $keyByMail]);
|
||||||
|
$notification = sprintf('Clé d\'authentification envoyée à votre adresse mail %s', $this->getData(['user', $userId, 'mail']));
|
||||||
|
} else {
|
||||||
|
// Impossible d'envoyer le message
|
||||||
|
// Double authentification désactivée
|
||||||
|
$this->setData(['config', 'connect', 'mailAuth', 0]);
|
||||||
|
$this->setData(['user', $userId, 'authKey', $authKey]);
|
||||||
|
// Journalisation
|
||||||
|
$this->saveLog($sent);
|
||||||
|
$notification = sprintf(helper::translate('Bienvenue %s %s'), $this->getData(['user', $userId, 'firstname']), $this->getData(['user', $userId, 'lastname']));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$logStatus = helper::translate('Connexion réussie');
|
||||||
|
$notification = sprintf(helper::translate('Bienvenue %s %s'), $this->getData(['user', $userId, 'firstname']), $this->getData(['user', $userId, 'lastname']));
|
||||||
|
$this->setData(['user', $userId, 'authKey', $authKey]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validité du cookie
|
||||||
|
$expire = $this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN) === true ? strtotime("+1 year") : 0;
|
||||||
|
switch ($this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN)) {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
$pageId = $this->getUrl(2);
|
$pageId = $this->getUrl(2);
|
||||||
if ($this->getData(['config', 'page404']) === $pageId
|
if (
|
||||||
|| $this->getData(['config', 'page403']) === $pageId
|
$this->getData(['config', 'page404']) === $pageId
|
||||||
|
|| $this->getData(['config', 'page403']) === $pageId
|
||||||
) {
|
) {
|
||||||
$pageId = '';
|
$pageId = '';
|
||||||
}
|
}
|
||||||
$redirect = ($pageId && strpos($pageId, 'user_reset') !== 0) ? helper::baseUrl() . str_replace('_', '/', str_replace('__', '#', $pageId)) : helper::baseUrl();
|
$redirect = ($pageId && strpos($pageId, 'user_reset') !== 0) ? helper::baseUrl() . $authRedirect . str_replace('_', '/', str_replace('__', '#', $pageId)) : helper::baseUrl() . $authRedirect;
|
||||||
// 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' => $notification,
|
||||||
'redirect' => $redirect,
|
'redirect' => $redirect,
|
||||||
'state' => true
|
'state' => true
|
||||||
]);
|
]);
|
||||||
@ -1080,14 +1155,14 @@ class user extends common
|
|||||||
// Sinon notification d'échec
|
// Sinon notification d'échec
|
||||||
} else {
|
} else {
|
||||||
$notification = helper::translate('Captcha, identifiant ou mot de passe incorrects');
|
$notification = helper::translate('Captcha, identifiant ou mot de passe incorrects');
|
||||||
$logStatus = $captcha === true ? 'Erreur de mot de passe' : 'Erreur de captcha';
|
$logStatus = $captcha === true ? helper::translate('Erreur de mot de passe') : helper::translate('Erreur de captcha');
|
||||||
// Cas 1 le nombre de connexions est inférieur aux tentatives autorisées : incrément compteur d'échec
|
// Cas 1 le nombre de connexions est inférieur aux tentatives autorisées : incrément compteur d'échec
|
||||||
if ($this->getData(['user', $userId, 'connectFail']) < $this->getData(['config', 'connect', 'attempt'])) {
|
if ($this->getData(['user', $userId, 'connectFail']) < $this->getData(['config', 'connect', 'attempt'])) {
|
||||||
$this->setData(['user', $userId, 'connectFail', $this->getdata(['user', $userId, 'connectFail']) + 1]);
|
$this->setData(['user', $userId, 'connectFail', $this->getdata(['user', $userId, 'connectFail']) + 1]);
|
||||||
}
|
}
|
||||||
// Cas 2 la limite du nombre de connexion est atteinte : placer le timer
|
// Cas 2 la limite du nombre de connexion est atteinte : placer le timer
|
||||||
if ($this->getdata(['user', $userId, 'connectFail']) == $this->getData(['config', 'connect', 'attempt'])) {
|
if ($this->getdata(['user', $userId, 'connectFail']) == $this->getData(['config', 'connect', 'attempt'])) {
|
||||||
$this->setData(['user', $userId, 'connectTimeout', time()]);
|
$this->setData(['user', $userId, 'connectTimeout', time()], false);
|
||||||
}
|
}
|
||||||
// Cas 3 le délai de bloquage court
|
// Cas 3 le délai de bloquage court
|
||||||
if ($this->getData(['user', $userId, 'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) > time()) {
|
if ($this->getData(['user', $userId, 'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) > time()) {
|
||||||
@ -1096,10 +1171,12 @@ class user extends common
|
|||||||
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'notification' => $notification
|
'notification' => $notification,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Force la sauvegarde
|
||||||
|
$this->saveDB('user');
|
||||||
}
|
}
|
||||||
// Journalisation
|
// Journalisation
|
||||||
$this->saveLog($logStatus);
|
$this->saveLog($logStatus);
|
||||||
@ -1116,15 +1193,81 @@ class user extends common
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Validation de la connexion par email
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function auth()
|
||||||
|
{
|
||||||
|
// Soumission du formulaire
|
||||||
|
if (
|
||||||
|
$this->isPost()
|
||||||
|
) {
|
||||||
|
// Vérifier la clé saisie
|
||||||
|
$targetKey = $this->getData(['user', $this->getUser('id'), 'authKey']);
|
||||||
|
$inputKey = $this->getInput('userAuthKey', helper::FILTER_INT);
|
||||||
|
// Redirection
|
||||||
|
$pageId = $this->getUrl(2);
|
||||||
|
$redirect = $pageId? helper::baseUrl() . $pageId : helper::baseUrl() ;
|
||||||
|
if (
|
||||||
|
// La clé est valide ou le message n'ayant pas été expédié, la double authentification est désactivée
|
||||||
|
$targetKey === $inputKey || $this->getData(['config', 'connect', 'mailAuth', 0]) === 0
|
||||||
|
) {
|
||||||
|
|
||||||
|
// La fiche de l'utilisateur contient la clé d'authentification
|
||||||
|
$this->setData(['user', $this->getUser('id'), 'authKey', $this->getInput('ZWII_AUTH_KEY')]);
|
||||||
|
// Journalisation
|
||||||
|
$this->saveLog('Connexion réussie');
|
||||||
|
// Utilisateur connecté
|
||||||
|
$userId = $this->getUser('id');
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => $redirect,
|
||||||
|
'notification' => sprintf(helper::translate('Bienvenue %s %s'), $this->getData(['user', $userId, 'firstname']), $this->getData(['user', $userId, 'lastname'])),
|
||||||
|
'state' => true
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Supprime la clé stockée et le temps limite
|
||||||
|
$this->deleteData(['user', $this->getUser('id'), 'authKey']);
|
||||||
|
// Réinitialiser le compteur de temps
|
||||||
|
$this->setData(['user', $this->getUser('id'), 'connectTimeout', 0]);
|
||||||
|
|
||||||
|
// Détruit les cookies d'authenfication
|
||||||
|
helper::deleteCookie('ZWII_USER_ID');
|
||||||
|
helper::deleteCookie('ZWII_AUTH_KEY');
|
||||||
|
|
||||||
|
// Détruit la session
|
||||||
|
session_destroy();
|
||||||
|
|
||||||
|
// Journalisation
|
||||||
|
$this->saveLog('Erreur de vérification de la clé envoyée par email ' . $this->getUser('id'));
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => $redirect,
|
||||||
|
'notification' => helper::translate('La clé est incorrecte'),
|
||||||
|
'state' => false
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'title' => helper::translate('Double authentification'),
|
||||||
|
'view' => 'auth',
|
||||||
|
'display' => self::DISPLAY_LAYOUT_LIGHT,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Déconnexion
|
* Déconnexion
|
||||||
*/
|
*/
|
||||||
public function logout()
|
public function logout()
|
||||||
{
|
{
|
||||||
|
// Détruit les cookies d'authenfication
|
||||||
helper::deleteCookie('ZWII_USER_ID');
|
helper::deleteCookie('ZWII_USER_ID');
|
||||||
helper::deleteCookie('ZWII_USER_PASSWORD');
|
helper::deleteCookie('ZWII_AUTH_KEY');
|
||||||
|
|
||||||
// Détruit la session
|
// Détruit la session
|
||||||
session_destroy();
|
session_destroy();
|
||||||
|
|
||||||
@ -1146,11 +1289,16 @@ class user extends common
|
|||||||
// L'utilisateur n'existe pas
|
// L'utilisateur n'existe pas
|
||||||
$this->getData(['user', $this->getUrl(2)]) === null
|
$this->getData(['user', $this->getUrl(2)]) === null
|
||||||
// Lien de réinitialisation trop vieux
|
// Lien de réinitialisation trop vieux
|
||||||
or $this->getData(['user', $this->getUrl(2), 'forgot']) + 86400 < time()
|
|| $this->getData(['user', $this->getUrl(2), 'forgot']) + 86400 < time()
|
||||||
// Id unique incorrecte
|
// Id unique incorrecte
|
||||||
or $this->getUrl(3) !== md5(json_encode($this->getData(['user', $this->getUrl(2)])))
|
|| $this->getUrl(3) !== md5(json_encode($this->getData(['user', $this->getUrl(2), 'logout'])))
|
||||||
) {
|
) {
|
||||||
|
$this->saveLog(
|
||||||
|
' Erreur de réinitialisation de mot de passe ' . $this->getUrl(2) .
|
||||||
|
' Compte : ' . $this->getData(['user', $this->getUrl(2)]) .
|
||||||
|
' Temps : ' . ($this->getData(['user', $this->getUrl(2), 'forgot']) + 86400 < time()) .
|
||||||
|
' Clé : ' . ($this->getUrl(3) !== md5(json_encode($this->getData(['user', $this->getUrl(2), 'forgot']))))
|
||||||
|
);
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'redirect' => helper::baseurl(),
|
'redirect' => helper::baseurl(),
|
||||||
@ -1177,11 +1325,11 @@ class user extends common
|
|||||||
$newPassword = $this->getInput('userResetNewPassword', helper::FILTER_PASSWORD, true);
|
$newPassword = $this->getInput('userResetNewPassword', helper::FILTER_PASSWORD, true);
|
||||||
}
|
}
|
||||||
// Modifie le mot de passe
|
// Modifie le mot de passe
|
||||||
$this->setData(['user', $this->getUrl(2), 'password', $newPassword]);
|
$this->setData(['user', $this->getUrl(2), 'password', $newPassword], false);
|
||||||
// Réinitialise la date de la demande
|
// Réinitialise la date de la demande
|
||||||
$this->setData(['user', $this->getUrl(2), 'forgot', 0]);
|
$this->setData(['user', $this->getUrl(2), 'forgot', 0], false);
|
||||||
// Réinitialise le blocage
|
// Réinitialise le blocage
|
||||||
$this->setData(['user', $this->getUrl(2), 'connectFail', 0]);
|
$this->setData(['user', $this->getUrl(2), 'connectFail', 0], false);
|
||||||
$this->setData(['user', $this->getUrl(2), 'connectTimeout', 0]);
|
$this->setData(['user', $this->getUrl(2), 'connectTimeout', 0]);
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
@ -1296,7 +1444,7 @@ class user extends common
|
|||||||
"accessCsrf" => null,
|
"accessCsrf" => null,
|
||||||
'tags' => $item['tags']
|
'tags' => $item['tags']
|
||||||
]
|
]
|
||||||
]);
|
], false);
|
||||||
// Icône de notification
|
// Icône de notification
|
||||||
$item['notification'] = $create ? template::ico('check') : template::ico('cancel');
|
$item['notification'] = $create ? template::ico('check') : template::ico('cancel');
|
||||||
// Envoi du mail
|
// Envoi du mail
|
||||||
@ -1337,6 +1485,8 @@ class user extends common
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
// Force la sauvegarde
|
||||||
|
$this->saveDB('user');
|
||||||
if (empty(self::$users)) {
|
if (empty(self::$users)) {
|
||||||
$notification = helper::translate('Rien à importer, erreur de format ou fichier incorrect');
|
$notification = helper::translate('Rien à importer, erreur de format ou fichier incorrect');
|
||||||
$success = false;
|
$success = 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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-2024, Frédéric Tempez
|
* @copyright Copyright (C) 2018-2025, 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/
|
||||||
*/
|
*/
|
||||||
|
49
core/module/user/view/auth/auth.css
Normal file
49
core/module/user/view/auth/auth.css
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/**
|
||||||
|
* 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-2025, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** NE PAS EFFACER
|
||||||
|
* admin.css
|
||||||
|
*/
|
||||||
|
|
||||||
|
@media screen and (max-width: 768px) {
|
||||||
|
#buttonsContainer {
|
||||||
|
display: grid;
|
||||||
|
}
|
||||||
|
#loginContainer {
|
||||||
|
order: 1;
|
||||||
|
}
|
||||||
|
#backContainer{
|
||||||
|
order: 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#userAuthKey {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 2rem;
|
||||||
|
border: none; /* Supprime toutes les bordures */
|
||||||
|
border-bottom: 2px solid #000; /* Ajoute uniquement une bordure inférieure */
|
||||||
|
padding: 5px 0; /* Ajoute un peu d'espace au-dessus et en dessous */
|
||||||
|
margin-top: 10px; /* Ajoute un espacement au-dessus du champ */
|
||||||
|
outline: none; /* Supprime l'effet de focus par défaut */
|
||||||
|
letter-spacing: 6px; /* Ajoute un espacement de 2 pixels */
|
||||||
|
}
|
||||||
|
|
||||||
|
#userAuthKey:focus {
|
||||||
|
border-bottom-color: #007bff; /* Change la couleur du cadre bas lorsqu'on clique */
|
||||||
|
border-bottom-width: 3px; /* Accentue la bordure inférieure */
|
||||||
|
}
|
||||||
|
|
||||||
|
.container.light {
|
||||||
|
filter: drop-shadow(5px 5px 10px rgba(0, 0, 0, 0.2));
|
||||||
|
}
|
33
core/module/user/view/auth/auth.js.php
Normal file
33
core/module/user/view/auth/auth.js.php
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/**
|
||||||
|
* 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-2025, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
$('#userAuthKey').on('input', function () {
|
||||||
|
// Récupère la valeur du champ
|
||||||
|
let input = $(this).val();
|
||||||
|
|
||||||
|
// Supprime tous les caractères non numériques
|
||||||
|
input = input.replace(/\D/g, '');
|
||||||
|
|
||||||
|
// Limite à 6 caractères maximum
|
||||||
|
if (input.length > 6) {
|
||||||
|
input = input.substring(0, 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Met à jour la valeur du champ
|
||||||
|
$(this).val(input);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user