12010 Langues de l'UI en cours reste le store à actualiser

This commit is contained in:
Fred Tempez 2022-12-27 09:49:29 +01:00
parent d208512b45
commit 1336c8c5db
6 changed files with 122 additions and 52 deletions

View File

@ -46,9 +46,13 @@ class common
// Contrôle d'édition temps maxi en secondes avant déconnexion 30 minutes
const ACCESS_TIMER = 1800;
// Numéro de version
// URL autoupdate
const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/update/raw/branch/master/';
// URL langues de l'UI en ligne
const ZWII_UI_URL = 'https://forge.chapril.org/ZwiiCMS-Team/zwiicms-translations/raw/branch/master/';
// Numéro de version et branche pour l'autoupdate
const ZWII_VERSION = '12.0.10';
const ZWII_UPDATE_CHANNEL = "v12";

View File

@ -172,45 +172,55 @@ class translate extends common
// Activation du bouton de copie
self::$siteCopy = count(self::$languagesInstalled) > 1 ? false : true;
// --------------------------------------------------------------------------------------------------
// Onglet des langues de l'interface
if (is_dir(self::I18N_DIR)) {
$dir = getcwd();
chdir(self::I18N_DIR);
$files = glob('*.json');
chdir($dir);
}
// Construit le tableau des langues de l'UI
// Langues attachées à des utilisateurs non effaçables
$usersUI = [];
$users = $this->getData(['user']);
foreach ($users as $key => $value) {
array_push($usersUI, $this->getData(['user', $key, 'language']));
}
// Construction du tableau
foreach ($files as $file) {
// Langues installées
$installedUI = $this->getUiLanguages();
// Récupérer la liste des langues disponibles en ligne
$storeUI = json_decode(helper::getUrlContents(common::ZWII_UI_URL . '/enum.json'), true);
// Construction du tableau à partir des langues disponibles dans le store
foreach ($storeUI as $file => $value) {
// La langue est-elle référencée ?
if (array_key_exists(basename($file, '.json'), self::$languages)) {
//self::$i18nFiles[basename($file, '.json')] = self::$languages[basename($file, '.json')];
$selected = basename($file, '.json');
// La langue est déjà installée
self::$languagesUiInstalled[$file] = [
template::flag($selected, '20 %'),
self::$languages[$selected],
self::$i18nUI === $selected ? helper::translate('Interface') : '',
template::button('translateContentLanguageUIEdit' . basename($file, '.json'), [
'href' => helper::baseUrl() . $this->getUrl(0) . '/ui/' . $selected,
template::flag($file, '20 %'),
self::$languages[$file],
self::$i18nUI === $file ? helper::translate('Interface') : '',
template::button('translateContentLanguageUIEdit' . $file, [
'href' => helper::baseUrl() . $this->getUrl(0) . '/ui/' . $file,
'value' => template::ico('pencil'),
'help' => 'Éditer',
'disabled' => 'fr_FR' === $selected
'disabled' => 'fr_FR' === $file
]),
template::button('translateContentLanguageUIDelete' . basename($file, '.json'), [
'class' => 'translateDeleteUI buttonRed' . (in_array(basename($file, '.json'), $usersUI) ? ' disabled' : ''),
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/ui/' . basename($file, '.json') . '/' . $_SESSION['csrf'],
template::button('translateContentLanguageUIDownload' . $file, [
'class' => 'translateDownloadUI',
'href' => helper::baseUrl() . $this->getUrl(0) . '/download/' . $file . '/' . $_SESSION['csrf'],
'value' => template::ico('download'),
'help' => 'Télécharger',
]),
template::button('translateContentLanguageUIDownload' . $file, [
'class' => 'translateDownloadUI',
'href' => helper::baseUrl() . $this->getUrl(0) . '/update/' . $file . '/' . $_SESSION['csrf'],
'value' => template::ico('update'),
'help' => 'Actualiser',
]),
template::button('translateContentLanguageUIDelete' . $file, [
'class' => 'translateDeleteUI buttonRed' . (in_array($file, $usersUI) ? ' disabled' : ''),
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/ui/' . $file . '/' . $_SESSION['csrf'],
'value' => template::ico('trash'),
'help' => 'Supprimer',
])
]),
];
}
}
@ -266,6 +276,41 @@ class translate extends common
]);
}
/***
* Ajouter des langues de l'UI depuis le dépôt
*/
public function store()
{
// Préparation du formulaire
// Récupérer la liste des langues disponibles en ligne
$storeUI = helper::getUrlContents(common::ZWII_UI_URL . '/enum.json');
// Récupérer les langues installées
$installedUI = $this->getUiLanguages();
echo "<pre>";
var_dump($storeUI);
var_dump($installedUI);
die();
// Parcourir le tableau des langues installées
foreach ($installedUI as $key => $value) {
// La langue est installée, la mise à jour détermine la couleur de l'icône
if (array_key_exists($key, $installedUI)) {
$update = $installedUI;
self::$languagesUiInstalled[$key] = [
template::flag($key, '20 %'),
self::$languages[$key],
];
}
}
}
/**
* Edition des paramètres de la langue de contenu
*/
@ -488,10 +533,10 @@ class translate extends common
]);
break;
case 'ui' :
case 'ui':
// Effacement d'une langue de l'interface
if (file_exists(self::I18N_DIR . $lang . '.json') === true) {
$success =unlink(self::I18N_DIR . $lang . '.json');
$success = unlink(self::I18N_DIR . $lang . '.json');
}
// Valeurs en sortie
$this->addOutput([
@ -499,6 +544,8 @@ class translate extends common
'notification' => $success ? helper::translate('Traduction supprimée') : helper::translate('Erreur inconnue'),
'state' => $success
]);
unlink(self::I18N_DIR . 'enum.json');
$this->getUiLanguages();
break;
default:
# Do nothing
@ -506,6 +553,7 @@ class translate extends common
}
}
/*
* Traitement du changement de langue
* Fonction utilisée par le noyau
@ -527,4 +575,36 @@ class translate extends common
'redirect' => helper::baseUrl() . $this->getData(['locale', $this->getUrl(2), 'homePageId'])
]);
}
/**
* Génère un fichier d'énumération des langues de l'UI
*/
private function getUiLanguages()
{
$enums = json_decode(helper::getUrlContents(self::I18N_DIR . '/enum.json'), true);
// Générer une énumération absente
if (is_array($enums) === false) {
if (is_dir(self::I18N_DIR) === false) {
mkdir(self::I18N_DIR);
}
$dir = getcwd();
chdir(self::I18N_DIR);
$files = glob('*.json');
chdir($dir);
$enums = [];
foreach ($files as $file => $value) {
if (basename($value, '.json') === 'enum.json') {
continue;
}
$enums[basename($value, '.json')] = [
'version' => 1.0,
'date' => 1672052400
];
}
file_put_contents(self::I18N_DIR . 'enum.json', json_encode($enums));
}
return ($enums);
}
}

View File

@ -21,7 +21,6 @@
display: block;
}
.buttonNotice {
border: 2px solid red !important;
border-radius: 2px;

View File

@ -15,18 +15,18 @@
$(document).ready(function() {
var translateLayout = getCookie("translateLayout");
if (translateLayout == null) {
translateLayout = "ui";
setCookie("translateLayout", "ui");
translateLayout = "content";
setCookie("translateLayout", "content");
// Afficher les boutons liés au contenu
$(".contentButtonContainer").show();
}
$("#contentContainer").hide();
$("#uiContainer").hide();
$(".contentButtonContainer").hide();
$("#" + translateLayout + "Container").show();
$("." + translateLayout + "ButtonContainer").show();
$("#translate" + capitalizeFirstLetter(translateLayout) + "Button").addClass("activeButton");
// Afficher les boutons liés au contenu
$(".translateButtonAddContent").show();
$(".translateButtonCopyContent").show();
// Cacher le bouton de mise à jour
$(".translateButtonUpdateContent").hide();
});
@ -39,11 +39,8 @@ $("#translateUiButton").on("click", function() {
$("#translateContentButton").removeClass("activeButton");
setCookie("translateLayout", "ui");
// Cacher les boutons liés au contenu
$(".translateButtonAddContent").hide();
$(".translateButtonCopyContent").hide();
// Afficher le bouton de mise à jour
$(".translateButtonUpdateContent").show();
$(".contentButtonContainer").hide();
});
$("#translateContentButton").on("click", function() {
$("#uiContainer").hide();
@ -52,10 +49,7 @@ $("#translateContentButton").on("click", function() {
$("#translateUiButton").removeClass("activeButton");
setCookie("translateLayout", "content");
// Afficher les boutons liés au contenu
$(".translateButtonAddContent").show();
$(".translateButtonCopyContent").show();
// Cacher le bouton de mise à jour
$(".translateButtonUpdateContent").hide();
$(".contentButtonContainer").show();
});
/**

View File

@ -16,7 +16,7 @@
'help' => 'Consulter l\'aide en ligne'
]);*/ ?>
</div>
<div class="col1 offset8 translateButtonCopyContent">
<div class="col1 offset8 contentButtonContainer">
<?php echo template::button('translateButtonCopyContent', [
'href' => helper::baseUrl() . 'translate/copy',
'value' => template::ico('docs'),
@ -24,7 +24,7 @@
'help' => 'Copie de contenus localisés'
]); ?>
</div>
<div class="col1 translateButtonAddContent">
<div class="col1 contentButtonContainer">
<?php echo template::button('translateButtonAddContent', [
'href' => helper::baseUrl() . 'translate/add',
'value' => template::ico('plus'),
@ -32,13 +32,6 @@
'help' => 'Nouveau contenu localisé'
]); ?>
</div>
<div class="col1 offset9 translateButtonUpdateContent">
<?php echo template::button('translateButtonUpdateContent', [
'href' => helper::baseUrl() . 'translate/update',
'value' => template::ico('update'),
'help' => 'Mise à jour des langues de l\'interface'
]); ?>
</div>
</div>
<div class="tab">
@ -56,7 +49,7 @@
<div class="row">
<div class="col12">
<?php if ($module::$languagesUiInstalled) : ?>
<?php echo template::table([1, 4, 5, 1, 1], $module::$languagesUiInstalled, ['Langues', '', '', '', '']); ?>
<?php echo template::table([1, 4, 4, 1, 1, 1, 1], $module::$languagesUiInstalled, ['Langues', '', '','', '', '', '']); ?>
<?php endif; ?>
</div>
</div>