Merge branch '11300' into extra

This commit is contained in:
fredtempez 2022-02-11 15:16:51 +01:00
commit d146b240e6
31 changed files with 474 additions and 140 deletions

View File

@ -11,11 +11,11 @@
Corrections :
- Thème / site : problème d'aperçu du body ; police du thème admin non chargées.
- Bugs avec les aperçus des sélecteurs de fontes.
Modifications :
- Notice générée par l'effacement d'une page sans module.
- Modification :
- Police de caractères :
- Changement de fournisseur, CdnFont remplace Google Font.
- Les polices pourront désormais être téléchargées à partir du site et non du CDN.
- Installation de police personnalisées.
- Changement de fournisseur, CdnFont 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é.
- 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.

View File

@ -53,7 +53,7 @@ class helper {
* @return mixed données récupérées
*/
public static function urlGetContents ($url) {
public static function getUrlContents ($url) {
// Ejecter free.fr
if (strpos(self::baseUrl(),'free.fr') > 0 ){
return false;
@ -269,7 +269,7 @@ class helper {
* @return string
*/
public static function getOnlineVersion() {
return (helper::urlGetContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/version'));
return (helper::getUrlContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/version'));
}

View File

@ -298,12 +298,6 @@ class template {
}
// Début du wrapper
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="inputWrapper ' . $attributes['classWrapper'] . '">';
// Label
if($attributes['label']) {
$html .= self::label($attributes['id'], $attributes['label'], [
'help' => $attributes['help']
]);
}
// Notice
$notice = '';
if(array_key_exists($attributes['id'], common::$inputNotices)) {
@ -311,6 +305,12 @@ class template {
$attributes['class'] .= ' notice';
}
$html .= self::notice($attributes['id'], $notice);
// Label
if($attributes['label']) {
$html .= self::label($attributes['id'], $attributes['label'], [
'help' => $attributes['help']
]);
}
// Champ caché contenant l'url de la page
$html .= self::hidden($attributes['id'], [
'class' => 'inputFileHidden',

View File

@ -1499,7 +1499,7 @@ class common {
if($this->getData(['theme', 'footer', 'copyrightPosition']) === 'right') { $this->showCopyright(); }
echo '</div>';
// Fermeture du contenaire
// Fermeture du conteneur
echo '</div></div>';
echo '</footer>';
}
@ -1953,8 +1953,6 @@ class common {
echo '<meta property="og:image" content="' . helper::baseUrl() .self::FILE_DIR.'source/screenshot.jpg" />';
}
/**
* Affiche la notification
*/
@ -2277,7 +2275,10 @@ class core extends common {
if (is_array($fontsImported) &&
!empty ($fontsImported)
) {
// Fusionner les fonts avec les fontes installées
self::$fonts = array_merge(self::$fonts, $fontsImported);
// Tri Alphabétique
asort(self::$fonts);
}
// Crée le fichier de personnalisation avancée
@ -2305,48 +2306,44 @@ class core extends common {
* Import des polices de caractères
* A partir du CDN ou dans le dossier site/file/source/fonts
*/
$cdnFonts = [ $this->getData(['theme', 'text', 'font']),
$fonts = [ $this->getData(['theme', 'text', 'font']),
$this->getData(['theme', 'title', 'font']),
$this->getData(['theme', 'header', 'font']),
$this->getData(['theme', 'menu', 'font']),
$this->getData(['theme', 'footer', 'font'])
];
// Suppression des polices identiques
$cdnFonts = array_unique($cdnFonts);
$fonts = array_unique($fonts);
// Lire le fichier des fontes locales
$localFonts = $this->getData(['fonts', 'files']);
// Un fichier local de configuration existe
if ( file_exists(self::DATA_DIR . 'fonts.json') )
{
// Lire le fichier et check l'existence des fichiers locaux
// $localFonts = json_decode(file_get_contents (self::FILE_DIR . "source/fonts/fonts.json"), true);
$localFonts = $this->getData(['fonts', 'files']);
// Validité du format
if (is_array($localFonts) ) {
foreach ($localFonts as $fontId => $fontName) {
// Validité du tableau :
// L'id de la police est présent dans la liste interne
// Le nom de la police fournie correspond à un fichier existant
if ( array_key_exists($fontId, self::$fonts) &&
file_exists(self::DATA_DIR . 'fonts/' . $fontName) ) {
// La police locale est-elle invoquée ?
$d = array_search($fontId, $cdnFonts);
if ( $d !== NULL ) {
// Chargement de la police demandée dans le thème
$formatFont = explode('.', self::DATA_DIR . 'fonts/' . $fontName);
$css .= '@font-face {font-family:"' . self::$fonts[$fontId] . '";';
$css .= 'src: url("' . helper::baseUrl(false) . self::DATA_DIR . 'fonts/' . $fontName . '");}';
// Supprimer l'élément des fontes chargées en ligne
unset($cdnFonts[$d]);
}
}
}
/**
* Chargement des polices en ligne
*/
foreach ($fonts as $fontId) {
if (!array_key_exists($fontId, $localFonts) ) {
$css .= '@import url("http://fonts.cdnfonts.com/css/' . $fontId . '");';
// Supprimer l'élément des fontes chargées en ligne
unset($fonts[$fontId]);
}
}
// Chargement des polices en ligne
if ($cdnFonts) {
foreach ($cdnFonts as $fontId) {
$css .= '@import url("http://fonts.cdnfonts.com/css/' . $fontId . '");';
/**
* Fontes installées localement
*/
// Validité du format
if ( !empty($localFonts)
) {
foreach ($localFonts as $fontId => $fontName) {
// Validité du tableau :
if ( array_key_exists($fontId, self::$fonts) &&
file_exists(self::DATA_DIR . 'fonts/' . $fontName) ) {
// Chargement de la police
//$formatFont = explode('.', self::DATA_DIR . 'fonts/' . $fontName);
$css .= '@font-face {font-family:"' . self::$fonts[$fontId] . '";';
$css .= 'src: url("' . helper::baseUrl(false) . self::DATA_DIR . 'fonts/' . $fontName . '");}';
}
}
}
@ -2538,52 +2535,49 @@ class core extends common {
* Import des polices de caractères
* A partir du CDN ou dans le dossier site/file/source/fonts
*/
$cdnFonts = [ $this->getData(['admin', 'fontText']),
$fonts = [ $this->getData(['admin', 'fontText']),
$this->getData(['admin', 'fontTitle']),
];
// Suppression des polices identiques
$cdnFonts = array_unique($cdnFonts);
// Un fichier local de configuration existe
if ( file_exists(self::DATA_DIR . 'fonts.json') )
{
// Lire le fichier et check l'existence des fichiers locaux
// $localFonts = json_decode(file_get_contents (self::FILE_DIR . "source/fonts/fonts.json"), true);
$localFonts = $this->getData(['fonts', 'files']);
// Validité du format
if (is_array($localFonts) ) {
foreach ($localFonts as $fontId => $fontName) {
// Validité du tableau :
// L'id de la police est présent dans la liste interne
// Le nom de la police fournie correspond à un fichier existant
if ( array_key_exists($fontId, self::$fonts) &&
file_exists(self::DATA_DIR . 'fonts/' . $fontName) ) {
// La police locale est-elle invoquée ?
$d = array_search($fontId, $cdnFonts);
if ( $d !== NULL ) {
// Chargement de la police demandée dans le thème
$formatFont = explode('.', self::DATA_DIR . 'fonts/' . $fontName);
$css .= '@font-face {font-family:"' . self::$fonts[$fontId] . '";';
$css .= 'src: url("' . helper::baseUrl(false) . self::DATA_DIR . 'fonts/' . $fontName . '");}';
// Supprimer l'élément des fontes chargées en ligne
unset($cdnFonts[$d]);
}
}
$fonts = array_unique($fonts);
// Lire le fichier des fontes locales
$localFonts = $this->getData(['fonts', 'files']);
}
}
}
// Chargement des polices en ligne
if ($cdnFonts) {
foreach ($cdnFonts as $fontId) {
/**
* Chargement des polices en ligne
*/
foreach ($fonts as $fontId) {
if (!array_key_exists($fontId, $localFonts) ) {
$css .= '@import url("http://fonts.cdnfonts.com/css/' . $fontId . '");';
// Supprimer l'élément des fontes chargées en ligne
unset($fonts[$fontId]);
}
}
/**
* Fontes installées localement
*/
// Validité du format
if ( !empty($localFonts)
) {
foreach ($localFonts as $fontId => $fontName) {
// Validité du tableau :
if ( array_key_exists($fontId, self::$fonts) &&
file_exists(self::DATA_DIR . 'fonts/' . $fontName) ) {
// Chargement de la police
//$formatFont = explode('.', self::DATA_DIR . 'fonts/' . $fontName);
$css .= '@font-face {font-family:"' . self::$fonts[$fontId] . '";';
$css .= 'src: url("' . helper::baseUrl(false) . self::DATA_DIR . 'fonts/' . $fontName . '");}';
}
}
}
// Thème Administration
$colors = helper::colorVariants($this->getData(['admin','backgroundColor']));
$css .= '#site{background-color:' . $colors['normal']. ';}';
$css .= '.row > div {font:' . $this->getData(['admin','fontSize']) . ' "' . self::$fonts[$this->getData(['admin','fontText'])] . '", sans-serif;}';
$css .= 'body h1, h2, h3, h4 a, h5, h6 {font-family:' . self::$fonts[$this->getData(['admin','fontTitle'])] . ', sans-serif;color:' . $this->getData(['admin','colorTitle' ]) . ';}';
$css .= 'body h1, h2, h3, h4 a, h5, h6 {font-family:"' . self::$fonts[$this->getData(['admin','fontTitle'])] . '", sans-serif;color:' . $this->getData(['admin','colorTitle' ]) . ';}';
// TinyMCE
$css .= 'body:not(.editorWysiwyg),span .zwiico-help {color:' . $this->getData(['admin','colorText']) . ';}';

View File

@ -241,7 +241,7 @@ if($this->getData(['core', 'dataVersion']) < 10000) {
}
}
// Contrôle des options php.ini pour la mise à jour auto
if (helper::urlGetContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/version') === false) {
if (helper::getUrlContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/version') === false) {
$this->setData(['config','autoUpdate',false]);
}

View File

@ -339,10 +339,11 @@ td>.col12 {
display: inline-block;
color: #E74C3C;
}
/* Mauvaise position dans les champs File*/
/* Mauvaise position dans les champs File
.inputFile.notice {
display: block;
}
}*/
/* Container */
.container {

View File

@ -262,7 +262,7 @@ class config extends common {
$site = helper::baseUrl(false); }
$success= false;
$googlePagespeedData = helper::urlGetContents('https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url='. $site .'&screenshot=true');
$googlePagespeedData = helper::getUrlContents('https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url='. $site .'&screenshot=true');
if ($googlePagespeedData !== false) {
$googlePagespeedData = json_decode($googlePagespeedData, true);
$data = str_replace('_','/',$googlePagespeedData['lighthouseResult']['audits']['final-screenshot']['details']['data']);
@ -619,7 +619,7 @@ class config extends common {
}
// Variable de version
self::$onlineVersion = helper::urlGetContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/version');
self::$onlineVersion = helper::getUrlContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/version');
if (self::$onlineVersion > common::ZWII_VERSION) {
self::$updateButtonText = "Mettre à jour" ;
}

View File

@ -11,12 +11,9 @@
</h4>
<div class="row">
<div class="col3">
<div class="row">
<?php echo template::checkbox('connectCaptcha', true, 'Captcha à la connexion', [
'checked' => $this->getData(['config', 'connect','captcha'])
'checked' => $this->getData(['config', 'connect','captcha'])
]); ?>
</div>
<div class="row">
<?php echo template::checkbox('connectCaptchaStrong', true, 'Captcha complexe', [
'checked' => $this->getData(['config', 'connect', 'captchaStrong']),
'help' => '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.'
@ -100,7 +97,7 @@
<?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'
'help' => 'La règlementation française impose un anonymat de niveau 2'
]); ?>
</div>
<div class="col3 verticalAlignBottom">

View File

@ -199,11 +199,11 @@ class install extends common {
// Téléchargement
case 2:
// Téléchargement depuis le serveur de Zwii
//$success = (file_put_contents(self::TEMP_DIR.'update.tar.gz', helper::urlGetContents('https://zwiicms.fr/update/' . common::ZWII_UPDATE_CHANNEL . '/update.tar.gz')) !== false);
//$success = (file_put_contents(self::TEMP_DIR.'update.tar.gz', helper::getUrlContents('https://zwiicms.fr/update/' . common::ZWII_UPDATE_CHANNEL . '/update.tar.gz')) !== false);
// URL sur le git
//$newVersion = helper::urlGetContents('https://zwiicms.fr/update/' . common::ZWII_UPDATE_CHANNEL . '/version');
file_put_contents(self::TEMP_DIR.'update.tar.gz', helper::urlGetContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/update.tar.gz'));
$md5origin = helper::urlGetContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/update.md5');
//$newVersion = helper::getUrlContents('https://zwiicms.fr/update/' . common::ZWII_UPDATE_CHANNEL . '/version');
file_put_contents(self::TEMP_DIR.'update.tar.gz', helper::getUrlContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/update.tar.gz'));
$md5origin = helper::getUrlContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/update.md5');
$md5origin = (explode(' ',$md5origin));
$md5target = md5_file(self::TEMP_DIR.'update.tar.gz');
// Valeurs en sortie
@ -291,7 +291,7 @@ class install extends common {
*/
public function update() {
// Nouvelle version
self::$newVersion = helper::urlGetContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/version');
self::$newVersion = helper::getUrlContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/version');
// Valeurs en sortie
$this->addOutput([
'display' => self::DISPLAY_LAYOUT_LIGHT,

View File

@ -272,7 +272,9 @@ class page extends common {
// Effacer le dossier du module
$moduleId = $this->getData(['page',$url[0],'moduleId']);
$modulesData = helper::getModules();
if (is_dir($modulesData[$moduleId]['dataDirectory']. $url[0])) {
if ( array_key_exists($moduleId, $modulesData)
&& is_dir($modulesData[$moduleId]['dataDirectory'] . $url[0])
) {
$this->removeDir( $modulesData[$moduleId]['dataDirectory']. $url[0] );
}
// Effacer la page
@ -358,7 +360,9 @@ class page extends common {
// Supprime l'ancienne page si l'id a changée
if($pageId !== $this->getUrl(2)) {
$this->deleteData(['page', $this->getUrl(2)]);
unlink (self::DATA_DIR . self::$i18n . '/content/' . $this->getUrl(2) . '.html');
if (file_exists(self::DATA_DIR . self::$i18n . '/content/' . $this->getUrl(2) . '.html')) {
unlink (self::DATA_DIR . self::$i18n . '/content/' . $this->getUrl(2) . '.html');
}
}
// Traitement des pages spéciales affectées dans la config :
if ($this->getUrl(2) === $this->getData(['locale', 'legalPageId']) ) {

View File

@ -58,7 +58,7 @@
</div>
<div class="col2">
<?php echo template::text('pageEditShortTitle', [
'label' => 'Titre Court',
'label' => 'Titre court',
'value' => $this->getData(['page', $this->getUrl(2), 'shortTitle']),
'help' => 'Le titre court est affiché dans les menus. Il peut être identique au titre de la page.'
]); ?>

View File

@ -30,7 +30,9 @@ class theme extends common {
'export' => self::GROUP_ADMIN,
'import' => self::GROUP_ADMIN,
'save' => self::GROUP_ADMIN,
'fonts' => self::GROUP_ADMIN
'fonts' => self::GROUP_ADMIN,
'fontAdd' => self::GROUP_ADMIN,
'fontDelete' => self::GROUP_ADMIN
];
public static $aligns = [
'left' => 'À gauche',
@ -227,6 +229,8 @@ class theme extends common {
// Variable pour construire la liste des pages du site
public static $pagesList = [];
// Variable pour construire la liste des fontes installées
public static $fontsList = [];
/**
* Thème des écrans d'administration
@ -543,8 +547,46 @@ class theme extends common {
* Options des fontes
*/
public function fonts() {
// Soumission du formulaire
if($this->isPost()) {
// Polices trouvées dans la configuration
$fonts = $this->getData(['fonts']);
// Polices liées au thème
$used = [
'Bannière' => $this->getData (['theme', 'header', 'font']),
'Menu' => $this->getData (['theme', 'menu', 'font']),
'Titre ' => $this->getData (['theme', 'title', 'font']),
'Texte' => $this->getData (['theme', 'text', 'font']),
'Pied de page' => $this->getData (['theme', 'footer', 'font']),
'Titre (admin)' => $this->getData (['admin', 'fontTitle' ]),
'Admin (texte)' => $this->getData (['admin', 'fontText' ])
];
// Parcourir les fontes installées et construire le tableau pour le formulaire
foreach (self::$fonts as $fontId => $fontName) {
// Fontes utilisées par le thème
$fontUsed[$fontId] = '';
foreach ($used as $key => $value) {
if ( $value === $fontId) {
$fontUsed[$fontId] .= $key . '<br/>';
}
}
self::$fontsList [] = [
$fontName,
$fontId,
$fontUsed[$fontId],
//array_key_exists($fontId, $fonts['imported']) ? 'Importée' : '',
array_key_exists($fontId, $fonts['files']) ? $fonts['files'][$fontId] : 'CDN Fonts',
array_key_exists($fontId, $fonts['imported']) || array_key_exists($fontId, $fonts['files'])
? template::button('themeFontDelete' . $fontId, [
'class' => 'themeFontDelete buttonRed',
'href' => helper::baseUrl() . $this->getUrl(0) . '/fontDelete/' . $fontId . '/' . $_SESSION['csrf'],
'value' => template::ico('cancel'),
'disabled' => !empty($fontUsed[$fontId])
])
: ''
];
}
// Valeurs en sortie
$this->addOutput([
@ -553,6 +595,111 @@ class theme extends common {
]);
}
/**
* Ajouter une fonte
*/
public function fontAdd() {
// Soumission du formulaire
if ($this->isPost()) {
$fontId = $this->getInput('fontAddFontId', null, true);
$fontName = $this->getInput('fontAddFontName', null, true);
$filePath = $this->getInput('fontAddFile', null);
$e = explode ('/', $filePath);
$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');
if ( $filePath === ''
&& $fontName !== ''
&& strpos($data, $fontName) === false
) {
// Valeurs en sortie
$this->addOutput([
'notification' => 'Erreur de nom de fonte ou d\'identifiant',
'redirect' => helper::baseUrl() . 'theme/fontAdd',
'state' => false
]);
} else {
// Charger les données des fontes
$files = $this->getData(['fonts', 'files']);
$imported = $this->getData(['fonts', 'imported']);
// Concaténation dans les tableaux existants
$imported = array_merge([$fontId => $fontName], $imported);
$files = array_merge([$fontId => $file], $files);
// Copier la fonte si le nom du fichier est fourni
if (!empty($filePath)) {
copy ( self::FILE_DIR . 'source/' . $filePath, self::DATA_DIR . 'fonts/' . $file );
}
// Mettre à jour le fichier des fontes
$this->setData(['fonts', 'imported', $imported ]);
if (!empty($filePath) ) {
$this->setData(['fonts', 'files', $files ]);
}
// Valeurs en sortie
$this->addOutput([
'notification' => 'La fonte a été importée',
'redirect' => helper::baseUrl() . 'theme/fonts',
'state' => true
]);
}
}
// Valeurs en sortie
$this->addOutput([
'title' => 'Ajouter une fonte',
'view' => 'fontAdd'
]);
}
/**
* Effacer une fonte
*/
public function fontDelete() {
// Jeton incorrect
if ($this->getUrl(3) !== $_SESSION['csrf']) {
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . 'theme/fonts',
'notification' => 'Action non autorisée'
]);
}
// Suppression
else {
// Charger les données des fontes
$files = $this->getData(['fonts', 'files']);
$imported = $this->getData(['fonts', 'imported']);
// Effacer le fichier existant
if ( file_exists(self::DATA_DIR . $files[$this->getUrl(2)]) ) {
unlink(self::DATA_DIR . $files[$this->getUrl(2)]);
}
// Supprimer les entrées
unset($files[$this->getUrl(2)]);
unset($imported[$this->getUrl(2)]);
// Mettre à jour le fichier des fontes
$this->setData(['fonts', 'files', $files ]);
$this->setData(['fonts', 'imported', $imported ]);
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . 'theme/fonts',
'notification' => 'Fonte supprimée',
'state' => true
]);
}
}
/**
* Réinitialisation de la personnalisation avancée
*/

View File

@ -0,0 +1,18 @@
/**
* This file is part of Zwii.
*
* For full copyright and license information, please see the LICENSE
* file that was distributed with this source code.
*
* @author Rémi Jean <remi.jean@outlook.com>
* @copyright Copyright (C) 2008-2018, Rémi Jean
* @author Frédéric Tempez <frederic.tempez@outlook.com>
* @copyright Copyright (C) 2018-2022, Frédéric Tempez
* @license GNU General Public License, version 3
* @link http://zwiicms.fr/
*/
/** NE PAS EFFACER
* admin.css
*/

View File

@ -0,0 +1,41 @@
/**
* 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 Frédéric Tempez <frederic.tempez@outlook.com>
* @copyright Copyright (C) 2018-2022, Frédéric Tempez
* @license GNU General Public License, version 3
* @link http://zwiicms.fr/
*/
/**
* Option par défaut du sélecteur de mode
*/
$(document).ready(function(){
$('input[name=fontAddFontImported]').prop('checked', true);
$('#fontAddFileWrapper').hide();
});
/**
* Mode téléchargement en ligne de la fonte ou installation locale
*/
$("input[name=fontAddFontImported]").on("click", function() {
if( $('input[name=fontAddFontImported]').is(':checked') ){
$('input[name=fontAddFontFile]').prop('checked', false);
} else {
$('input[name=fontAddFontFile]').prop('checked', true);
}
$('#fontAddFileWrapper').hide();
});
$("input[name=fontAddFontFile]").on("click", function() {
if( $('input[name=fontAddFontFile]').is(':checked') ){
$('input[name=fontAddFontImported]').prop('checked', false);
} else {
$('input[name=fontAddFontImported]').prop('checked', true);
}
$('#fontAddFileWrapper').show();
});

View File

@ -0,0 +1,62 @@
<?php echo template::formOpen('fontAddForm'); ?>
<div class="row">
<div class="col2">
<?php echo template::button('fontAddBack', [
'class' => 'buttonGrey',
'href' => helper::baseUrl() . 'theme/fonts',
'ico' => 'left',
'value' => 'Retour'
]); ?>
</div>
<div class="col2 offset8">
<?php echo template::submit('fontAddPublish', [
'value' => 'Valider',
'uniqueSubmission' => true
]); ?>
</div>
</div>
<div class="row">
<div class="col12">
<div class="block">
<h4>Identité de la fonte</h4>
<div class="row">
<div class="col6">
<?php echo template::checkbox('fontAddFontImported', true, 'Fonte téléchargée sur cdnFonts', [
'help' => 'Police utilisée en ligne, se connecter sur cdnFonts pour récupérer les informations nécessaires.'
]); ?>
</div>
<div class="col6">
<?php echo template::checkbox('fontAddFontFile', true,'Fonte installée', [
'help' => '<br/>Sélectionnez un fichier de fonte au format WOFF.'
]); ?>
</div>
</div>
<div class="row">
<div class="col6">
<?php echo template::text('fontAddFontId', [
'autocomplete' => 'off',
'label' => 'Identifiant (sans espace ni majuscule)',
'placeholder' => 'perry-gothic'
]); ?>
</div>
<div class="col6">
<?php echo template::text('fontAddFontName', [
'autocomplete' => 'off',
'label' => 'Nom (Font Family)',
'placeholder' => 'PerryGothic'
]); ?>
</div>
</div>
<div class="row">
<div class="col12">
<?php echo template::file('fontAddFile', [
'label' => 'Fichier de police (Format WOFF)',
'placeholder' => 'https://fonts.cdnfonts.com/s/7896/PERRYGOT.woff'
]); ?>
</div>
</div>
</div>
</div>
</div>
<?php echo template::formClose(); ?>

View File

@ -0,0 +1,11 @@
<?php
$filefont = 'https://www.cdnfonts.com/sketched.font';
$doc = new DOMDocument();
$doc->loadHTMLFile($filefont, LIBXML_NOERROR);
$elements = $doc->getElementsByTagName('i');
var_dump ($elements);
foreach($elements as $element) {
if ($element->$textContent === 'http://fonts.cdnfonts.com/css/sketched') {
var_dump( $element['textContent'] );
}
}

View File

@ -0,0 +1,21 @@
/**
* 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 Frédéric Tempez <frederic.tempez@outlook.com>
* @copyright Copyright (C) 2018-2022, Frédéric Tempez
* @license GNU General Public License, version 3
* @link http://zwiicms.fr/
*/
/**
* Confirmation de suppression
*/
$(".themeFontDelete").on("click", function() {
var _this = $(this);
return core.confirm("Êtes-vous sûr de vouloir supprimer cette fonte ?", function() {
$(location).attr("href", _this.attr("href"));
});
});

View File

@ -1,11 +1,22 @@
<?php
$filefont = 'https://www.cdnfonts.com/sketched.font';
$doc = new DOMDocument();
$doc->loadHTMLFile($filefont, LIBXML_NOERROR);
$elements = $doc->getElementsByTagName('i');
var_dump ($elements);
foreach($elements as $element) {
if ($element->$textContent === 'http://fonts.cdnfonts.com/css/sketched') {
var_dump( $element['textContent'] );
}
}
<div class="row">
<div class="col2">
<?php echo template::button('themeFontBack', [
'class' => 'buttonGrey',
'href' => helper::baseUrl() . 'theme',
'ico' => 'left',
'value' => 'Retour'
]); ?>
</div>
<div class="col2 offset8">
<?php echo template::button('themeFontAdd', [
'href' => helper::baseUrl() . $this->getUrl(0) . '/fontAdd',
'ico' => 'plus',
'value' => 'Fonte'
]); ?>
</div>
</div>
<?php if($module::$fontsList): ?>
<?php echo template::table([3, 3, 3, 3, 1], $module::$fontsList, ['Family Name', 'Font Id', 'Affectation', 'Ressource', 'Effacer']); ?>
<?php else: ?>
<?php echo template::speech('Aucune fonte !'); ?>
<?php endif; ?>

View File

@ -21,14 +21,14 @@
* Aperçu en direct
*/
$("input, select").on("change", function() {
var css = "";
// Contenu perso
if ($("#themeHeaderFeature").val() == "feature") {
css = "header{min-height: " + $("#themeHeaderHeight").val() + ";height:" + $("#themeHeaderHeight").val() + "; overflow:hidden; background-position:top; background-repeat: no-repeat; line-height:1.15; background-color:unset; background-image:unset; text-align:unset;}";
$("#featureContent").appendTo("header").show();
$("#themeHeaderTitle").hide();
@ -36,7 +36,7 @@ $("input, select").on("change", function() {
$("#themeHeaderHeight option:eq(0)").text("Hauteur du contenu personnalisé");
}
// Couleurs, image, alignement et hauteur de la bannière
if ($("#themeHeaderFeature").val() == "wallpaper") {
@ -95,10 +95,10 @@ $("input, select").on("change", function() {
css += "background-image:none;";
}
css += "line-height:" + $("#themeHeaderHeight").val() + ";height:" + $("#themeHeaderHeight").val() + "}";
// Taille, couleur, épaisseur et capitalisation du titre de la bannière
css += "header span{font-family:'" + headerFontText + "',sans-serif;font-weight:" + $("#themeHeaderFontWeight").val() + ";font-size:" + $("#themeHeaderFontSize").val() + ";text-transform:" + $("#themeHeaderTextTransform").val() + ";color:" + $("#themeHeaderTextColor").val() + "}";
css += "header span{font-family:'" + headerFontText + "',sans-serif;font-weight:" + $("#themeHeaderFontWeight").val() + ";font-size:" + $("#themeHeaderFontSize").val() + ";text-transform:" + $("#themeHeaderTextTransform").val() + ";color:" + $("#themeHeaderTextColor").val() + "}";
// Cache le titre de la bannière
if($("#themeHeaderTextHide").is(":checked")) {
@ -169,9 +169,9 @@ $("input, select").on("change", function() {
// Marge dans le site
if( $("#themeHeaderMargin").is(":checked") &&
$("#themeHeaderPosition").val() === "site"
) {
) {
css += 'header{margin:20px 20px 0 20px !important;}';
/*} else {
/*} else {
css += 'header{margin:0 !important;}';*/
}

View File

@ -30,7 +30,14 @@
</div>
</div>
<div class="row">
<div class="col2 offset3">
<div class="col2 offset2">
<?php echo template::button('themeFonts', [
'ico' => 'font',
'href' => helper::baseUrl() . $this->getUrl(0) . '/fonts',
'value' => 'Fontes'
]); ?>
</div>
<div class="col2">
<?php echo template::button('themeManage', [
'ico' => 'sliders',
'href' => helper::baseUrl() . $this->getUrl(0) . '/manage',
@ -84,7 +91,14 @@
</div>
</div>
<div class="row">
<div class="col2 offset3">
<div class="col2 offset2">
<?php echo template::button('themeFonts', [
'ico' => 'font',
'href' => helper::baseUrl() . $this->getUrl(0) . '/fonts',
'value' => 'Fontes'
]); ?>
</div>
<div class="col2">
<?php echo template::button('themeManage', [
'ico' => 'sliders',
'href' => helper::baseUrl() . $this->getUrl(0) . '/manage',
@ -97,7 +111,6 @@
'href' => helper::baseUrl() . $this->getUrl(0) . '/admin',
'value' => 'Administration'
]); ?>
</div>
<div class="col2">
<?php echo template::button('themeAdvanced', [

View File

@ -458,7 +458,7 @@ $config = array(
'ext_file' => array( 'doc', 'docx', 'rtf', 'pdf', 'xls', 'xlsx', 'txt', 'csv', 'html', 'xhtml', 'psd', 'sql', 'log', 'fla', 'xml', 'ade', 'adp', 'mdb', 'accdb', 'ppt', 'pptx', 'odt', 'ots', 'ott', 'odb', 'odg', 'otp', 'otg', 'odf', 'ods', 'odp', 'css', 'ai', 'kmz','dwg', 'dxf', 'hpgl', 'plt', 'spl', 'step', 'stp', 'iges', 'igs', 'sat', 'cgm', 'ics', 'gpx', 'kml', ''), //Files
'ext_video' => array( 'mov', 'mpeg', 'm4v', 'mp4', 'avi', 'mpg', 'wma', "flv", "webm" ), //Video
'ext_music' => array( 'mp3', 'mpga', 'm4a', 'ac3', 'aiff', 'mid', 'ogg', 'wav' ), //Audio
'ext_misc' => array( 'zip', 'rar', 'gz', 'tar', 'iso', 'dmg' ), //Archives
'ext_misc' => array( 'zip', 'rar', 'gz', 'tar', 'iso', 'dmg', 'woff' ), //Archives et polices de caractères
//*********************

View File

@ -24,6 +24,7 @@
.zwiico-eye-off:before { content: '\e815'; } /* '' */
.zwiico-down-open:before { content: '\e816'; } /* '' */
.zwiico-upload:before { content: '\e817'; } /* '' */
.zwiico-font:before { content: '\e818'; } /* '' */
.zwiico-left-open:before { content: '\e819'; } /* '' */
.zwiico-down-big:before { content: '\e81a'; } /* '' */
.zwiico-cog-alt:before { content: '\e81b'; } /* '' */
@ -56,6 +57,7 @@
.zwiico-youtube:before { content: '\f167'; } /* '' */
.zwiico-instagram:before { content: '\f16d'; } /* '' */
.zwiico-box:before { content: '\f187'; } /* '' */
.zwiico-cubes:before { content: '\f1b3'; } /* '' */
.zwiico-file-archive:before { content: '\f1c6'; } /* '' */
.zwiico-sliders:before { content: '\f1de'; } /* '' */
.zwiico-brush:before { content: '\f1fc'; } /* '' */

File diff suppressed because one or more lines are too long

View File

@ -24,6 +24,7 @@
.zwiico-eye-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe815;&nbsp;'); }
.zwiico-down-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe816;&nbsp;'); }
.zwiico-upload { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe817;&nbsp;'); }
.zwiico-font { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe818;&nbsp;'); }
.zwiico-left-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe819;&nbsp;'); }
.zwiico-down-big { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe81a;&nbsp;'); }
.zwiico-cog-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe81b;&nbsp;'); }
@ -56,6 +57,7 @@
.zwiico-youtube { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf167;&nbsp;'); }
.zwiico-instagram { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16d;&nbsp;'); }
.zwiico-box { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf187;&nbsp;'); }
.zwiico-cubes { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1b3;&nbsp;'); }
.zwiico-file-archive { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1c6;&nbsp;'); }
.zwiico-sliders { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1de;&nbsp;'); }
.zwiico-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1fc;&nbsp;'); }

View File

@ -35,6 +35,7 @@
.zwiico-eye-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe815;&nbsp;'); }
.zwiico-down-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe816;&nbsp;'); }
.zwiico-upload { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe817;&nbsp;'); }
.zwiico-font { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe818;&nbsp;'); }
.zwiico-left-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe819;&nbsp;'); }
.zwiico-down-big { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe81a;&nbsp;'); }
.zwiico-cog-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe81b;&nbsp;'); }
@ -67,6 +68,7 @@
.zwiico-youtube { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf167;&nbsp;'); }
.zwiico-instagram { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16d;&nbsp;'); }
.zwiico-box { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf187;&nbsp;'); }
.zwiico-cubes { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1b3;&nbsp;'); }
.zwiico-file-archive { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1c6;&nbsp;'); }
.zwiico-sliders { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1de;&nbsp;'); }
.zwiico-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1fc;&nbsp;'); }

View File

@ -1,11 +1,11 @@
@font-face {
font-family: 'zwiico';
src: url('../font/zwiico.eot?39677933');
src: url('../font/zwiico.eot?39677933#iefix') format('embedded-opentype'),
url('../font/zwiico.woff2?39677933') format('woff2'),
url('../font/zwiico.woff?39677933') format('woff'),
url('../font/zwiico.ttf?39677933') format('truetype'),
url('../font/zwiico.svg?39677933#zwiico') format('svg');
src: url('../font/zwiico.eot?24592042');
src: url('../font/zwiico.eot?24592042#iefix') format('embedded-opentype'),
url('../font/zwiico.woff2?24592042') format('woff2'),
url('../font/zwiico.woff?24592042') format('woff'),
url('../font/zwiico.ttf?24592042') format('truetype'),
url('../font/zwiico.svg?24592042#zwiico') format('svg');
font-weight: normal;
font-style: normal;
}
@ -15,7 +15,7 @@
@media screen and (-webkit-min-device-pixel-ratio:0) {
@font-face {
font-family: 'zwiico';
src: url('../font/zwiico.svg?39677933#zwiico') format('svg');
src: url('../font/zwiico.svg?24592042#zwiico') format('svg');
}
}
*/
@ -79,6 +79,7 @@
.zwiico-eye-off:before { content: '\e815'; } /* '' */
.zwiico-down-open:before { content: '\e816'; } /* '' */
.zwiico-upload:before { content: '\e817'; } /* '' */
.zwiico-font:before { content: '\e818'; } /* '' */
.zwiico-left-open:before { content: '\e819'; } /* '' */
.zwiico-down-big:before { content: '\e81a'; } /* '' */
.zwiico-cog-alt:before { content: '\e81b'; } /* '' */
@ -111,6 +112,7 @@
.zwiico-youtube:before { content: '\f167'; } /* '' */
.zwiico-instagram:before { content: '\f16d'; } /* '' */
.zwiico-box:before { content: '\f187'; } /* '' */
.zwiico-cubes:before { content: '\f1b3'; } /* '' */
.zwiico-file-archive:before { content: '\f1c6'; } /* '' */
.zwiico-sliders:before { content: '\f1de'; } /* '' */
.zwiico-brush:before { content: '\f1fc'; } /* '' */

Binary file not shown.

View File

@ -56,6 +56,8 @@
<glyph glyph-name="upload" unicode="&#xe817;" d="M714 29q0 14-10 25t-25 10-25-10-11-25 11-25 25-11 25 11 10 25z m143 0q0 14-10 25t-26 10-25-10-10-25 10-25 25-11 26 11 10 25z m72 125v-179q0-22-16-38t-38-16h-821q-23 0-38 16t-16 38v179q0 22 16 38t38 15h238q12-31 39-51t62-20h143q34 0 61 20t40 51h238q22 0 38-15t16-38z m-182 361q-9-22-33-22h-143v-250q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v250h-143q-23 0-33 22-9 22 8 39l250 250q10 10 25 10t25-10l250-250q18-17 8-39z" horiz-adv-x="928.6" />
<glyph glyph-name="font" unicode="&#xe818;" d="M925-124h-264q-15 40-18 92-120-119-306-119-95 0-169 29t-121 95-47 162q0 40 9 74t21 60 35 47 43 37 54 27 57 21 64 15 64 11 65 8q50 6 100 15 24 4 37 7t34 11 32 17 20 26 8 38q0 126-170 126-87 0-130-31t-57-114h-244q6 90 44 154t101 99 134 51 159 15q68 0 125-7t111-29 93-54 60-89 23-129v-408q0-64 1-91t8-78 24-88z m-284 354v106q-33-19-87-30t-100-19-91-19-70-43-26-79q0-62 40-94t103-33q103 0 167 55t64 156z" horiz-adv-x="925" />
<glyph glyph-name="left-open" unicode="&#xe819;" d="M654 682l-297-296 297-297q10-10 10-25t-10-25l-93-93q-11-10-25-10t-25 10l-414 415q-11 10-11 25t11 25l414 414q10 11 25 11t25-11l93-93q10-10 10-25t-10-25z" horiz-adv-x="714.3" />
<glyph glyph-name="down-big" unicode="&#xe81a;" d="M899 386q0-30-21-50l-363-364q-22-21-51-21-29 0-50 21l-363 364q-21 20-21 50 0 29 21 51l41 41q22 21 51 21 29 0 50-21l164-164v393q0 29 21 50t51 22h71q29 0 50-22t21-50v-393l165 164q20 21 50 21 29 0 51-21l41-41q21-22 21-51z" horiz-adv-x="928.6" />
@ -120,6 +122,8 @@
<glyph glyph-name="box" unicode="&#xf187;" d="M607 386q0 14-10 25t-26 10h-142q-15 0-25-10t-11-25 11-25 25-11h142q15 0 26 11t10 25z m322 107v-536q0-14-11-25t-25-11h-786q-14 0-25 11t-11 25v536q0 14 11 25t25 11h786q14 0 25-11t11-25z m35 250v-143q0-14-10-25t-25-11h-858q-14 0-25 11t-10 25v143q0 14 10 25t25 11h858q14 0 25-11t10-25z" horiz-adv-x="1000" />
<glyph glyph-name="cubes" unicode="&#xf1b3;" d="M357-61l214 107v176l-214-92v-191z m-36 254l226 96-226 97-225-97z m608-254l214 107v176l-214-92v-191z m-36 254l225 96-225 97-226-97z m-250 163l214 92v149l-214-92v-149z m-36 212l246 105-246 106-246-106z m607-289v-233q0-20-10-37t-29-26l-250-125q-14-8-32-8t-32 8l-250 125q-2 1-4 2-1-1-4-2l-250-125q-14-8-32-8t-31 8l-250 125q-19 9-29 26t-11 37v233q0 21 12 39t32 26l242 104v223q0 22 12 40t31 26l250 107q13 6 28 6t28-6l250-107q20-9 32-26t12-40v-223l242-104q20-8 32-26t11-39z" horiz-adv-x="1285.7" />
<glyph glyph-name="file-archive" unicode="&#xf1c6;" d="M357 636v71h-71v-71h71z m72-72v72h-72v-72h72z m-72-71v71h-71v-71h71z m72-72v72h-72v-72h72z m390 217q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 17-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 16t-16 37v233h-71v-72h-72v72h-286v-858h715z m-350 403l60-195q4-15 4-29 0-46-40-77t-103-30-102 30-41 77q0 14 5 29 12 35 67 221v71h71v-71h44q13 0 22-7t13-19z m-79-260q30 0 51 11t21 25-21 25-51 11-50-11-21-25 21-25 50-11z" horiz-adv-x="857.1" />
<glyph glyph-name="sliders" unicode="&#xf1de;" d="M196 64v-71h-196v71h196z m197 72q14 0 25-11t11-25v-143q0-14-11-25t-25-11h-143q-14 0-25 11t-11 25v143q0 15 11 25t25 11h143z m89 214v-71h-482v71h482z m-357 286v-72h-125v72h125z m732-572v-71h-411v71h411z m-536 643q15 0 26-10t10-26v-142q0-15-10-25t-26-11h-142q-15 0-25 11t-11 25v142q0 15 11 26t25 10h142z m358-286q14 0 25-10t10-25v-143q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v143q0 14 11 25t25 10h143z m178-71v-71h-125v71h125z m0 286v-72h-482v72h482z" horiz-adv-x="857.1" />

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.