[10.0.57.dev] nouveau i18n + erreur édition bannière + alignement des drapeaux

This commit is contained in:
fredtempez 2019-10-31 22:10:24 +01:00
parent 9f97d9e5e6
commit 85b4b178ca
9 changed files with 143 additions and 186 deletions

View File

@ -253,10 +253,12 @@ core.start = function() {
/**
* Choix de la langue dans la barre de membre
*/
$("#barFormSelectLanguage").on("change", function(){
$("#barFormSelectLanguage").submit();
});
*/
$("#barSelectLanguage").on("change", function(){
$(" #barFormSelectLanguage").submit();
});
/**
* Champs d'upload de fichiers
*/

View File

@ -31,7 +31,7 @@ class common {
const TEMP_DIR = 'site/tmp/';
// Numéro de version
const ZWII_VERSION = '10.0.55.dev';
const ZWII_VERSION = '10.0.57.dev';
public static $actions = [];
public static $coreModuleIds = [
@ -1258,7 +1258,8 @@ class core extends common {
$css .= 'nav{margin:0 20px 0}';
}
}
//$css .= '#i18nBar {padding:' . $this->getData(['theme', 'menu', 'height']) . ';}';
$css .= '#i18nBar {padding:' . $this->getData(['theme', 'menu', 'height']) . ';}';
$css .= '.flag {height: ' . $this->getData(['theme', 'menu', 'fontSize']) . ';}';
$colors = helper::colorVariants($this->getData(['theme', 'menu', 'backgroundColor']));
$css .= 'nav #burgerText {color:' . $colors['text'] . ';font-family:"' . str_replace('+', ' ', $this->getData(['theme', 'menu', 'font'])) . '",sans-serif;' . 'font-weight:' . $this->getData(['theme', 'menu', 'fontWeight']) . ';text-transform:' . $this->getData(['theme', 'menu', 'textTransform']) . '}';
$css .= '#toggle span,#menu a{padding:' . $this->getData(['theme', 'menu', 'height']) .';font-family:"' . str_replace('+', ' ', $this->getData(['theme', 'menu', 'font'])) . '",sans-serif;font-weight:' . $this->getData(['theme', 'menu', 'fontWeight']) . ';font-size:' . $this->getData(['theme', 'menu', 'fontSize']) . ';text-transform:' . $this->getData(['theme', 'menu', 'textTransform']) . '}';
@ -1277,8 +1278,6 @@ class core extends common {
$css .= "footer #footersite > div {padding:0}";
$css .= "footer #footerbody > div {padding:0}";
$css .= '#footerFontText > p {margin-top: 0; margin-bottom: 0;}';
//$css .= '#footersiteLeft, #footersiteCenter, #footersiteRight {padding:' . $this->getData(['theme', 'footer', 'height']) . ' 0}';
//$css .= '#footerbodyLeft, #footerbodyCenter, #footerbodyRight {padding:' . $this->getData(['theme', 'footer', 'height']) . ' 0}';
$css .= '#footerSocials{text-align:' . $this->getData(['theme', 'footer', 'socialsAlign']) . '}';
$css .= '#footerText{text-align:' . $this->getData(['theme', 'footer', 'textAlign']) . '}';
$css .= '#footerCopyright{text-align:' . $this->getData(['theme', 'footer', 'copyrightAlign']) . '}';
@ -2606,8 +2605,8 @@ class layout extends common {
// ne pas afficher la barre de langue pour une seule
// Sélection des langues installées
if (sizeof($this->i18nInstalled()) > 1) {
$leftItems .= '<li><form method="POST" action="' . helper::baseUrl() . 'i18n/lang" id="barFormSelectLanguage">';
$leftItems .= '<select id="barSelectLanguage" name="i18nSelect" >';
$leftItems .= '<li><form method="POST" action="' . helper::baseUrl() . 'i18n/lang" id="barFormSelectLanguage">';
$leftItems .= '<select id="barSelectLanguage" name="i18nSelect">'; //onchange="this.form.submit()"
foreach ($this->i18nInstalled() as $itemKey => $item) {
$leftItems .= '<option ';
$leftItems .= 'value="' . $itemKey .'"';

View File

@ -594,14 +594,8 @@ ul .menuSideChild, li .menuSideChild {
}
/* Icones de langues du menu */
nav .flag {
height: 12px;
padding: 0 3px 0 3px;
max-width:100%;
}
nav .flagSelected {
height: 15px;
.flag {
margin: 0px 5px 0 5px;
}
/* Paramètres du menu et de la barre de langue */
@ -610,12 +604,11 @@ nav .flagSelected {
display: inline-flex;
}
#i18nBar {
display: flex ;
margin-top: -4px;
display: inline-flex ;
float: right;
}
#i18nBar::after {
clear:right;
}
/* Corps */
@media (min-width:769px) {

View File

@ -87,7 +87,7 @@
</div>
<div id="i18nBar">
<?php $layout->showi18nUserSelect(); ?>
</div>
</div>
</div>
</nav>
<?php endif; ?>
@ -159,7 +159,7 @@
</div>
<div id="i18nBar">
<?php $layout->showi18nUserSelect(); ?>
</div>
</div>
</div>
</nav>
<?php endif; ?>

View File

@ -16,113 +16,119 @@ class i18n extends common {
public static $actions = [
'index' => self::GROUP_MODERATOR,
'add' => self::GROUP_MODERATOR,
'delete' => self::GROUP_MODERATOR,
'lang' => self::GROUP_VISITOR
];
public static $languages = [];
/**
* Ajouter une localisation
*/
public function add() {
// Soumission du formulaire
if($this->isPost()) {
// Mode Création
// Récupérer les données du formulaire
$create = $this->getInput('i18nAddSelect');
$copyFrom = $this->getInput('i18nAddCopyFrom');
$notification = '';
$success = array ('create' => false,'remove'=> false);
if (!empty ($create)) {
// Mode création de langue
// La langue est déja créée ?
if (in_array($create,$this->i18nInstalled()) === false) {
$copyFrom = $copyFrom === '' ? 'core/module/i18n/ressource/' : self::DATA_DIR . $copyFrom . '/';
// Créer le dossier
if (is_dir(self::DATA_DIR . $create) === false ) {
$success ['create'] = mkdir (self::DATA_DIR . $create);
} else {
$success ['create'] = true;
}
// Copier les données par défaut
$success ['create'] = (copy ($copyFrom . 'module.json', self::DATA_DIR . $create . '/module.json') === true && $success ['create'] === true) ? true : false;
$success ['create'] = (copy ($copyFrom . 'page.json', self::DATA_DIR . $create . '/page.json') === true && $success ['create'] === true) ? true : false;
}
// Valeurs en sortie
$notification = $success['create'] === true ? self::$i18nList[$create] . ' installée' : self::$i18nList[$create] . ' déjà installée' ;
}
$this->addOutput([
'notification' => $notification,
'title' => 'Ajouter une langue',
'view' => 'add',
'state' => $success ['create']
]);
} else {
// Valeurs en sortie sans post
$this->addOutput([
'title' => 'Ajouter une langue',
'view' => 'add'
]);
}
}
/**
* Config : gestion des langues
*/
public function index() {
// Soumission du formulaire
if($this->isPost()) {
// Et faire un backup
// Récupérer les données du formulaire
$remove = $this->getInput('i18nLanguageRemove');
$notification = '';
$success = array ('create' => false,'remove'=> false);
// Mode effacement
if (!empty ($remove)) {
// Une notification existe déjà, insérer un séparateur
if ($notification) {
$notification .= ' | ';
}
// Suppression impossible langue actuelle ou fr
if ( $remove !== $this->geti18n()) {
// Le dossier existe ?
if (is_dir(self::DATA_DIR . $remove) === true) {
$success ['remove'] = unlink (self::DATA_DIR . $remove . '/module.json');
$success ['remove'] = (unlink (self::DATA_DIR . $remove . '/page.json') && $success ['remove'] === true) ? true : false ;
$success ['remove'] = (rmdir (self::DATA_DIR . $remove) === true && $success ['remove'] === true) ? true : false ;
}
// Valeurs en sortie
$notification .= $success['remove'] === true ? self::$i18nList[$remove] .' effacée' : self::$i18nList[$remove] . ' n\'existe pas' ;
if ($this->isPost()) {
// Mode ajout de langue
// Récupérer les données du formulaire
if (!empty ($this->getInput('i18nLanguageAdd'))) { // Formulaire valide
$create = $this->getInput('i18nLanguageAdd');
$copyFrom = $this->getInput('i18nLanguageCopyFrom');
// Mode création de langue
// La langue est déja créée ?
if (in_array($create,$this->i18nInstalled()) === false) { // La langue n'est pas installée ?
//Déterminer l'origine des données copiées
$copyFrom = $copyFrom === '' ? 'core/module/i18n/ressource/' : self::DATA_DIR . $copyFrom . '/';
// Créer le dossier
if (is_dir(self::DATA_DIR . $create) === false ) { // Si le dossier est déjà créé
$success = mkdir (self::DATA_DIR . $create);
} else {
$success = true;
}
// Copier les données par défaut avec gestion des erreurs
$success = (copy ($copyFrom . 'module.json', self::DATA_DIR . $this->getInput('i18nLanguageAdd') . '/module.json') === true && $success === true) ? true : false;
$success = (copy ($copyFrom . 'page.json', self::DATA_DIR . $this->getInput('i18nLanguageAdd') . '/page.json') === true && $success === true) ? true : false;
} else {
// Valeurs en sortie
$success ['remove'] = false;
$notification .= self::$i18nList[$remove] . ' est active, effacement impossible';
$notification = $create . ' est déjà installée';
$success = false;
}
// Valeurs en sortie
$notification = $success === true ? self::$i18nList[$this->getInput('i18nLanguageAdd')] . ' installée' : self::$i18nList[create] . ' déjà installée' ;
} else {
$notification = 'Veuillez choisir une langue';
$success = false;
}
$this->addOutput([
'notification' => $notification,
'title' => 'Internationalisation',
'title' => 'Gestion des langues',
'view' => 'index',
'state' => $success ['remove']
]);
'state' => $success
]);
// Fin traitement du formulaire
}
// Affichage par défaut
$langIds = $this->i18nInstalled();
asort($langIds);
foreach($langIds as $itemKeyLang => $itemLang) {
self::$languages[] = [
$itemLang,
template::button('i18nDelete' . $itemKeyLang, [
'class' => 'i18nDelete buttonRed',
'href' => helper::baseUrl() . 'i18n/delete/' . $itemKeyLang. '/' . $_SESSION['csrf'],
'value' => template::ico('cancel')
])
];
}
// Valeurs en sortie
$this->addOutput([
'title' => 'Gestion des langues',
'view' => 'index'
]);
}
} else {
// Valeurs en sortie sans post
/* Effacer une langue
*
*/
public function delete() {
// Jeton incorrect
if ($this->getUrl(3) !== $_SESSION['csrf']) {
// Valeurs en sortie
$this->addOutput([
'title' => 'Internationalisation',
'view' => 'index'
]);
'redirect' => helper::baseUrl() . 'i18n',
'notification' => 'Action non autorisée'
]);
} elseif ( $this->getUrl(2) === $this->geti18n()) {
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . 'i18n',
'notification' => 'Vous ne pouvez pas supprimer la langue courante'
]);
} elseif ( $this->getUrl(2) === 'fr') {
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . 'i18n',
'notification' => 'Vous ne pouvez pas supprimer la langue par défaut'
]);
} else {
// Le dossier existe ?
if (is_dir(self::DATA_DIR . $this->getUrl(2)) === true) {
$success = unlink (self::DATA_DIR . $this->getUrl(2) . '/module.json');
$success = (unlink (self::DATA_DIR . $this->getUrl(2) . '/page.json') && $success === true) ? true : false ;
$success = (rmdir (self::DATA_DIR . $this->getUrl(2)) === true && $success === true) ? true : false ;
} else {
$success = false;
}
// Valeurs en sortie
$notification = $success === true ? 'Langue ' . $this->getUrl(2) .' effacée' : 'Langue ' . $this->getUrl(2) . ' n\'existe pas' ;
$this->addOutput([
'notification' => $notification,
'redirect' => helper::baseUrl() . 'i18n',
'state' => $success
]);
}
}
/*
/*
* Traitement du changement de langues
*/
public function lang() {
@ -152,5 +158,4 @@ class i18n extends common {
}
}

View File

@ -1,41 +0,0 @@
<?php echo template::formOpen('i18nAdd'); ?>
<div class="row">
<div class="col2">
<?php echo template::button('i18nAddBack', [
'class' => 'buttonGrey',
'href' => helper::baseUrl() .'i18n',
'value' => 'Retour'
]); ?>
</div>
<div class="col2 offset8">
<?php echo template::submit('i18NAddSubmit'); ?>
</div>
</div>
<div class="row">
<div class="col12">
<div class="block">
<h4>Ajouter une localisation</h4>
<div class="row">
<div class="col5">
<?php echo template::select('i18nAddCopyFrom', $this->i18nInstalled(true), [
'label' => 'Copier la structure de',
'help' => 'Ne rien sélectionner pour une copie vierge ',
'selected' => -1
]); ?>
</div>
<div class="col1">
<?php echo template::ico('right-big'); ?>
</div>
<div class="col5">
<?php
$available = array ('' => 'Sélectionner');
$available = array_merge ($available, self::$i18nList);
echo template::select('i18nAddSelect', $available, [
'label' => 'vers'
]); ?>
</div>
</div>
</div>
</div>
</div>
<?php echo template::formClose(); ?>

View File

@ -1,4 +1,4 @@
<?php echo template::formOpen('i18nIndex'); ?>
<?php echo template::formOpen('i18nIndexForm'); ?>
<div class="row">
<div class="col2">
<?php echo template::button('i18nBack', [
@ -8,38 +8,36 @@
'value' => 'Accueil'
]); ?>
</div>
<div class="col2 offset6">
<?php echo template::button('i18nAddButton', [
'href' => helper::baseUrl() . 'i18n/add',
'value' => 'Ajouter'
]); ?>
</div>
<div class="col2">
<?php echo template::submit('i18nSubmit'); ?>
<div class="col2 offset8">
<?php echo template::submit('galleryEditSubmit'); ?>
</div>
</div>
<div class="row">
<div class="row">
<div class="col12">
<div class="block">
<h4>Supprimer une localisation</h4>
<div class="row">
<?php echo template::select('i18nLanguageRemove', $this->i18nInstalled(true, true), [
'label' => 'Localisations installées',
'help' => 'La suppression d\'une langue entraîne l\'effacement des pages et des modules',
'selected' => -1
]); ?>
<h4>Ajouter une localisation</h4>
<div class="row">
<div class="col5">
<?php echo template::select('i18nLanguageCopyFrom', $this->i18nInstalled(true), [
'label' => 'Copier la structure de',
'help' => 'Ne rien sélectionner pour une copie vierge ',
'selected' => -1
]); ?>
</div>
<div class="col1">
<?php echo template::ico('right-big'); ?>
</div>
<div class="col5">
<?php
$available = array ('' => 'Sélectionner');
$available = array_merge ($available, self::$i18nList);
echo template::select('i18nLanguageAdd', $available, [
'label' => 'vers'
]); ?>
</div>
</div>
</div>
</div>
</div>
</div>
<!--
<div class="row">
<div class="col4">
<?php echo template::select('i18nHomePageId', helper::arrayCollumn($this->getData(['page']), 'title', 'SORT_ASC'), [
'label' => 'Page d\'accueil',
//'selected' => $this->getData(['config', 'homePageId'])
]); ?>
</div>
</div>
-->
<?php echo template::formClose(); ?>
<?php echo template::table([11, 1], $module::$languages, ['Langues installées', '']); ?>
<?php echo template::formClose(); ?>

View File

@ -17,7 +17,7 @@
/**
* Aperçu en direct
*/
$("input, select").on("change", function() {
$("input, select").not("#barSelectLanguage").on("change", function() {
// Récupérer la taille de l'image
var tmpImg = new Image();

View File

@ -23,11 +23,12 @@ $("input, select").on("change", function() {
css += "nav a,#toggle span,nav a:hover{color:" + $("#themeMenuTextColor").val() + "}";
css += "nav a:hover{background-color:" + colors.darken + "}";
css += "nav a.active{background-color:" + colors.veryDarken + "}";
//css += "#i18nBar {padding:" + $("#themeMenuHeight").val() + "}";
css += "#i18nBar {padding:" + $("#themeMenuHeight").val() + "}";
css += ".flag {height: " + $("#themeMenuFontSize").val() + "}";
// Taille, hauteur, épaisseur et capitalisation de caractères du menu
css += "#toggle span,#menu a{padding:" + $("#themeMenuHeight").val() + ";font-family:'" + menuFont.replace(/\+/g, " ") + "',sans-serif;font-weight:" + $("#themeMenuFontWeight").val() + ";font-size:" + $("#themeMenuFontSize").val() + ";text-transform:" + $("#themeMenuTextTransform").val() + "}";
// Alignement du menu
css += "#menu{text-align:" + $("#themeMenuTextAlign").val() + "}";
css += "#menu{text-align:" + $("#themeMenuTextAlign").val() + "}";
// Marge
if($("#themeMenuMargin").is(":checked")) {
if(