diff --git a/CHANGES.md b/CHANGES.md index a0b3fd78..fd905582 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,13 @@ - Réorganisation massive des modules afin d'éviter de faire cohabiter des formulaires avec des champs d'information. - Désormais, les URL internes seront relatives, cela signifie qu'elles ne contiendront plus le domaine et le chemin d'accès au site. Cela permettra le déplacement d'un site d'un hébergement à un autre, d'un dossier d'hébergement à un autre, sans avoir à convertir les adresses internes. Les données d'un site mis à jour et importées d'une version antérieures sont automatiquement converties. En conséquence, le bloc de conversion de la fenêtre d'import est supprimé. +## Version 11.3.02 +### Corrections : + - Importation d'une police sur cdnFonts impossible, nom de fonction incorrect. + - Thème moderne, url de l'image corrigé + - Thème, import d'un thème sauvegardé, conversion des fontes Google. + + ## Version 11.3.01 ### Corrections : - Gestionnaire de fichier, chevauchement d'icônes en multi sélection et aides non traduites. @@ -13,18 +20,15 @@ ## Version 11.3.00 - ### Nouveautés : - Police de caractères : - Changement de fournisseur, CdnFonts remplace Google Font. - Les polices pourront désormais être téléchargées à partir du site et non du CD grâce à une nouvelle fonctionnalité du thème permet de gérer l'installation des fontes, soit à partir du CDN, soit à partir d'un fichier téléchargé. - Pages dans le menu accessoire. Ce menu à affiché à droite de la barre de menu, il est traditionnellement utilisé pour y placer les drapeaux de traduction, le bouton de connexion et de gestion du compte des membres. Il sera désormais possible d'y placer des pages sous la forme d'icônes de préférence. - Prise en charge du format webp pour les modules nécessitant des miniatures. - ### Améliorations : - Thème / Bannière : ergonomie de l'information sur l'image sélectionnée. - Identifications des éléments du menu, les pages parents prennent comme id CSS leur id, les pages enfants également et pour classe Id de la page parente. - ### Corrections : - Thème / site : problème d'aperçu du body ; police du thème admin non chargée. - Bugs avec les aperçus des sélecteurs de fontes. diff --git a/README.md b/README.md index d22c470d..e0b99379 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,4 @@ - - -# ZwiiCMS 11.3.01 +# ZwiiCMS 11.3.02 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. diff --git a/core/core.php b/core/core.php index fd4aa384..a288b403 100644 --- a/core/core.php +++ b/core/core.php @@ -170,17 +170,17 @@ class common { // Descripteur de données Entrées / Sorties // Liste ici tous les fichiers de données private $dataFiles = [ - 'config' => '', - 'page' => '', - 'module' => '', - 'core' => '', - 'page' => '', - 'user' => '', - 'theme' => '', 'admin' => '', 'blacklist' => '', + 'config' => '', + 'core' => '', + 'fonts' => '', + 'module' => '', 'locale' => '', - 'fonts' => '' + 'page' => '', + 'theme' => '', + 'user' => '' + ]; // Fontes @@ -1170,10 +1170,10 @@ class common { if (( $file != '.' ) && ( $file != '..' )) { if ( is_dir($src . '/' . $file) ){ // Appel récursif des sous-dossiers - $success = $this->copyDir($src . '/' . $file, $dst . '/' . $file); + $success = $success OR $this->copyDir($src . '/' . $file, $dst . '/' . $file); } else { - $success = copy($src . '/' . $file, $dst . '/' . $file); + $success = $success OR copy($src . '/' . $file, $dst . '/' . $file); } } } diff --git a/core/module/install/ressource/themes/theme_moderne.zip b/core/module/install/ressource/themes/theme_moderne.zip index 1307c56e..53a9beec 100644 Binary files a/core/module/install/ressource/themes/theme_moderne.zip and b/core/module/install/ressource/themes/theme_moderne.zip differ diff --git a/core/module/theme/theme.php b/core/module/theme/theme.php index e4e02ad7..5f988d5d 100644 --- a/core/module/theme/theme.php +++ b/core/module/theme/theme.php @@ -227,6 +227,7 @@ class theme extends common { 'logo' => 'Logo du site' ]; + // Variable pour construire la liste des pages du site public static $pagesList = []; // Variable pour construire la liste des fontes installées @@ -609,7 +610,7 @@ class theme extends common { $file = $e[count($e) - 1 ]; // Vérifier l'existence de fontId et validité de family namesi usage en ligne de cdnFonts - $data = helper::urlGetContents('https://www.cdnfonts.com/' . $fontId . '.font'); + $data = helper::getUrlContents('https://www.cdnfonts.com/' . $fontId . '.font'); if ( $filePath === '' && $fontName !== '' @@ -849,18 +850,40 @@ class theme extends common { AND file_exists(self::TEMP_DIR . $tempFolder . '/site/data/theme.json') ) { $modele = 'theme'; - } + } if( file_exists(self::TEMP_DIR . $tempFolder . '/site/data/admin.json') AND file_exists(self::TEMP_DIR . $tempFolder . '/site/data/admin.css') ) { $modele = 'admin'; + } if (!empty($modele) ) { // traiter l'archive $success = $zip->extractTo('.'); - // traitement de l'erreur + + // Substitution des fontes Google + if ($modele = 'theme') { + $c = $this->subFonts(self::DATA_DIR . 'theme.json'); + // Un remplacement nécessite la régénération de la feuille de style + if ($c > 0 + AND file_exists(self::DATA_DIR . 'theme.css') + ) { + unlink(self::DATA_DIR . 'theme.css'); + } + } + if ($modele = 'admin') { + $c = $this->subFonts(self::DATA_DIR . 'admin.json'); + // Un remplacement nécessite la régénération de la feuille de style + if ($c > 0 + AND file_exists(self::DATA_DIR . 'admin.css') + ) { + unlink(self::DATA_DIR . 'admin.css'); + } + } + + // traitement d'erreur $notification = $success ? 'Le thème a été importé' : 'Erreur lors de l\'extraction, vérifiez les permissions.'; @@ -968,4 +991,57 @@ class theme extends common { return ($zipFilename); } + /** + * Subsitution des fontes de Google Fonts vers CdnFont grâce à un tableau de conversion + * @param string $file, nom du fichier json à convertir + * @return int nombre de substitution effectuées + */ + private function subFonts($file) { + // Tableau de substitution des fontes + $fonts = [ + 'Abril+Fatface' => 'abril-fatface', + 'Arimo' => 'arimo', + 'Arvo' => 'arvo', + 'Berkshire+Swash' => 'berkshire-swash', + 'Cabin' => 'genera', + 'Dancing+Script' => 'dancing-script', + 'Droid+Sans' => 'droid-sans-2', + 'Droid+Serif' => 'droid-serif-2', + 'Fira+Sans' => 'fira-sans', + 'Inconsolata' => 'inconsolata-2', + 'Indie+Flower' =>'indie-flower', + 'Josefin+Slab' => 'josefin-sans-std', + 'Lobster' => 'lobster-2', + 'Lora' => 'lora', + 'Lato' =>'lato', + 'Marvel' => 'montserrat-ace', + 'Old+Standard+TT' => 'old-standard-tt-3', + 'Open+Sans' =>'open-sans', + // Corriger l'erreur de nom de police installée par défaut, il manquait un O en majuscule + 'open+Sans' =>'open-sans', + 'Oswald' =>'oswald-4', + 'PT+Mono' => 'pt-mono', + 'PT+Serif' =>'pt-serif', + 'Raleway' => 'raleway-5', + 'Rancho' => 'rancho', + 'Roboto' => 'Roboto', + 'Signika' => 'signika', + 'Ubuntu' => 'ubuntu', + 'Vollkorn' => 'vollkorn' + ]; + + $data = file_get_contents($file); + $count = 0; + foreach ($fonts as $oldId => $newId){ + $data = str_replace($oldId, $newId, $data, $c); + $count = $count + (int) $c; + } + // Sauvegarder la chaîne modifiée + if ($count > 0) { + file_put_contents($file, $data); + } + // Retourner le nombre d'occurrences + return ($count); + } + }