1408 bloque la suppression d'une fonte mise en oeuvre dans le theme d'un autre espace.

Optimise le code
This commit is contained in:
Fred Tempez 2024-01-17 18:14:30 +01:00
parent 995a4364f6
commit 280962b852
4 changed files with 37 additions and 28 deletions

View File

@ -1,4 +1,4 @@
# ZwiiCampus 1.4.07 # ZwiiCampus 1.4.08
ZwiiCampus (Learning Management System) est logiciel auteur destiné à mettre en ligne des tutoriels. Il dispose de plusieurs modalités d'ouverture et d'accès des contenus. Basé sur la version 13 du CMS Zwii, la structure logicielle est solide, le framework de Zwii est éprouvé. ZwiiCampus (Learning Management System) est logiciel auteur destiné à mettre en ligne des tutoriels. Il dispose de plusieurs modalités d'ouverture et d'accès des contenus. Basé sur la version 13 du CMS Zwii, la structure logicielle est solide, le framework de Zwii est éprouvé.

View File

@ -50,7 +50,7 @@ class common
const ACCESS_TIMER = 1800; const ACCESS_TIMER = 1800;
// Numéro de version // Numéro de version
const ZWII_VERSION = '1.4.07'; const ZWII_VERSION = '1.4.08';
// URL autoupdate // URL autoupdate
const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/campus-update/raw/branch/master/'; const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/campus-update/raw/branch/master/';

View File

@ -629,15 +629,18 @@ class theme extends common
$this->setFonts('all'); $this->setFonts('all');
// Polices liées au thème // Polices liées au thème
$used = [ $admin = json_decode(file_get_contents(self::DATA_DIR . 'admin.json'), true);
'Bannière' => $this->getData(['theme', 'header', 'font']), $fonts['Admin Titre (admin)'] = $admin['admin']['fontTitle'];
'Menu' => $this->getData(['theme', 'menu', 'font']), $fonts['Admin Texte (admin)'] = $admin['admin']['fontText'];
'Titre ' => $this->getData(['theme', 'title', 'font']), // Polices liées aux thèmes des espaces
'Texte' => $this->getData(['theme', 'text', 'font']), foreach ($this->getData(['course']) as $courseId => $courseValue) {
'Pied de page' => $this->getData(['theme', 'footer', 'font']), $theme = json_decode(file_get_contents(self::DATA_DIR . $courseId . '/theme.json'), true);
'Titre (admin)' => $this->getData(['admin', 'fontTitle']), $fonts['Bannière ('. $courseId .')'] = $theme['theme']['header']['font'];
'Admin (texte)' => $this->getData(['admin', 'fontText']) $fonts['Menu ('. $courseId .')'] = $theme['theme']['menu']['font'];
]; $fonts['Titre ('. $courseId .')'] = $theme['theme']['title']['font'];
$fonts['Texte ('. $courseId .')'] = $theme['theme']['text']['font'];
$fonts['Pied de page ('. $courseId .')'] = $theme['theme']['footer']['font'];
}
// Récupérer le détail des fontes installées // Récupérer le détail des fontes installées
//$f = $this->getFonts(); //$f = $this->getFonts();
@ -645,22 +648,24 @@ class theme extends common
$f['imported'] = $this->getData(['font', 'imported']); $f['imported'] = $this->getData(['font', 'imported']);
$f['websafe'] = self::$fontsWebSafe; $f['websafe'] = self::$fontsWebSafe;
// Listes des espaces à parcourir pour bloquer la suppression d'une fonte utilisée
$courses = array_merge(['admin'], array_keys($this->getData(['course'])));
// Parcourir les fontes disponibles et construire le tableau pour le formulaire // Parcourir les fontes disponibles et construire le tableau pour le formulaire
foreach ($f as $type => $typeValue) { foreach ($f as $type => $typeValue) {
if (is_array($typeValue)) { if (is_array($typeValue)) {
foreach ($typeValue as $fontId => $fontValue) { foreach ($typeValue as $fontId => $fontValue) {
// Fontes utilisées par les thèmes // Recherche les correrspondances
$fontUsed[$fontId] = ''; $result = array_filter($fonts, function($value) use ($fontId) {
foreach ($used as $key => $value) { return $value == $fontId;
if ($value === $fontId) { });
$fontUsed[$fontId] .= $key . '<br/>'; $keyResults = array_keys($result);
}
}
self::$fontsDetail[] = [ self::$fontsDetail[] = [
$fontId, $fontId,
'<span style="font-family:' . $f[$type][$fontId]['font-family'] . '">' . $f[$type][$fontId]['name'] . '</span>', '<span style="font-family:' . $f[$type][$fontId]['font-family'] . '">' . $f[$type][$fontId]['name'] . '</span>',
$f[$type][$fontId]['font-family'], $f[$type][$fontId]['font-family'],
$fontUsed[$fontId], empty($keyResults) ? '' : '<span class="fontsList">' . implode('<br />', $keyResults) . '</span>',
$type, $type,
$type !== 'websafe' ? template::button('themeFontEdit' . $fontId, [ $type !== 'websafe' ? template::button('themeFontEdit' . $fontId, [
'class' => 'themeFontEdit', 'class' => 'themeFontEdit',
@ -848,7 +853,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
@ -1068,17 +1073,17 @@ class theme extends common
// Substitution des fontes Google // Substitution des fontes Google
if ($modele = 'theme') { if ($modele = 'theme') {
// Déplacement des deux fichiers de theme dans le siteContent // Déplacement des deux fichiers de theme dans le siteContent
copy (self::DATA_DIR . 'theme.css', self::DATA_DIR . self::$siteContent . '/theme.css'); copy(self::DATA_DIR . 'theme.css', self::DATA_DIR . self::$siteContent . '/theme.css');
copy (self::DATA_DIR . 'theme.json', self::DATA_DIR . self::$siteContent . '/theme.json'); copy(self::DATA_DIR . 'theme.json', self::DATA_DIR . self::$siteContent . '/theme.json');
unlink(self::DATA_DIR . 'theme.css'); unlink(self::DATA_DIR . 'theme.css');
unlink(self::DATA_DIR . 'theme.json'); unlink(self::DATA_DIR . 'theme.json');
$c = $this->subFont(self::DATA_DIR . self::$siteContent . '/theme.json'); $c = $this->subFont(self::DATA_DIR . self::$siteContent . '/theme.json');
// Un remplacement nécessite la régénération de la feuille de style // Un remplacement nécessite la régénération de la feuille de style
if ( if (
$c > 0 $c > 0
and file_exists(self::DATA_DIR . self::$siteContent . '/theme.css') and file_exists(self::DATA_DIR . self::$siteContent . '/theme.css')
) { ) {
unlink(self::DATA_DIR . self::$siteContent . '/theme.css'); unlink(self::DATA_DIR . self::$siteContent . '/theme.css');
} }
} }
if ($modele = 'admin') { if ($modele = 'admin') {
@ -1203,8 +1208,8 @@ class theme extends common
} }
break; break;
case 'theme': case 'theme':
$zip->addFile(self::DATA_DIR . self::$siteContent . '/theme.json', self::DATA_DIR . 'theme.json'); $zip->addFile(self::DATA_DIR . self::$siteContent . '/theme.json', self::DATA_DIR . 'theme.json');
$zip->addFile(self::DATA_DIR . self::$siteContent . '/theme.css', self::DATA_DIR . 'theme.css'); $zip->addFile(self::DATA_DIR . self::$siteContent . '/theme.css', self::DATA_DIR . 'theme.css');
$zip->addFile(self::DATA_DIR . 'custom.css', self::DATA_DIR . 'custom.css'); $zip->addFile(self::DATA_DIR . 'custom.css', self::DATA_DIR . 'custom.css');
// Traite l'image dans le body // Traite l'image dans le body
if ($this->getData(['theme', 'body', 'image']) !== '') { if ($this->getData(['theme', 'body', 'image']) !== '') {

View File

@ -15,4 +15,8 @@
/** NE PAS EFFACER /** NE PAS EFFACER
* admin.css * admin.css
*/ */
.fontsList{
font-size: 0.7rem;
}