From b0308ad941bf3279a4b85240dee7846c6447c2bc Mon Sep 17 00:00:00 2001 From: fredtempez Date: Mon, 21 Feb 2022 16:17:46 +0100 Subject: [PATCH] =?UTF-8?q?Bug=20import=20de=20fonte=20+=20d=C3=A9finition?= =?UTF-8?q?=20d'une=20fonte=20en=20ligne?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core.php | 4 +- core/module/theme/theme.php | 82 +++++++++++++++++++++++++++++++++++-- 2 files changed, 81 insertions(+), 5 deletions(-) diff --git a/core/core.php b/core/core.php index d24376ec..060c7337 100644 --- a/core/core.php +++ b/core/core.php @@ -1172,10 +1172,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/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); + } + }