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 // Contrôle d'édition temps maxi en secondes avant déconnexion 30 minutes
const ACCESS_TIMER = 1800; const ACCESS_TIMER = 1800;
// Numéro de version // URL autoupdate
const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/update/raw/branch/master/'; 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_VERSION = '12.0.10';
const ZWII_UPDATE_CHANNEL = "v12"; const ZWII_UPDATE_CHANNEL = "v12";

View File

@ -172,45 +172,55 @@ class translate extends common
// Activation du bouton de copie // Activation du bouton de copie
self::$siteCopy = count(self::$languagesInstalled) > 1 ? false : true; self::$siteCopy = count(self::$languagesInstalled) > 1 ? false : true;
// --------------------------------------------------------------------------------------------------
// Onglet des langues de l'interface // 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 = []; $usersUI = [];
$users = $this->getData(['user']); $users = $this->getData(['user']);
foreach ($users as $key => $value) { foreach ($users as $key => $value) {
array_push($usersUI, $this->getData(['user', $key, 'language'])); array_push($usersUI, $this->getData(['user', $key, 'language']));
} }
// Construction du tableau // Langues installées
foreach ($files as $file) { $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 ? // La langue est-elle référencée ?
if (array_key_exists(basename($file, '.json'), self::$languages)) { if (array_key_exists(basename($file, '.json'), self::$languages)) {
// La langue est déjà installée
//self::$i18nFiles[basename($file, '.json')] = self::$languages[basename($file, '.json')];
$selected = basename($file, '.json');
self::$languagesUiInstalled[$file] = [ self::$languagesUiInstalled[$file] = [
template::flag($selected, '20 %'), template::flag($file, '20 %'),
self::$languages[$selected], self::$languages[$file],
self::$i18nUI === $selected ? helper::translate('Interface') : '', self::$i18nUI === $file ? helper::translate('Interface') : '',
template::button('translateContentLanguageUIEdit' . basename($file, '.json'), [ template::button('translateContentLanguageUIEdit' . $file, [
'href' => helper::baseUrl() . $this->getUrl(0) . '/ui/' . $selected, 'href' => helper::baseUrl() . $this->getUrl(0) . '/ui/' . $file,
'value' => template::ico('pencil'), 'value' => template::ico('pencil'),
'help' => 'Éditer', 'help' => 'Éditer',
'disabled' => 'fr_FR' === $selected 'disabled' => 'fr_FR' === $file
]), ]),
template::button('translateContentLanguageUIDelete' . basename($file, '.json'), [ template::button('translateContentLanguageUIDownload' . $file, [
'class' => 'translateDeleteUI buttonRed' . (in_array(basename($file, '.json'), $usersUI) ? ' disabled' : ''), 'class' => 'translateDownloadUI',
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/ui/' . basename($file, '.json') . '/' . $_SESSION['csrf'], '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'), 'value' => template::ico('trash'),
'help' => 'Supprimer', '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 * Edition des paramètres de la langue de contenu
*/ */
@ -488,10 +533,10 @@ class translate extends common
]); ]);
break; break;
case 'ui' : case 'ui':
// Effacement d'une langue de l'interface // Effacement d'une langue de l'interface
if (file_exists(self::I18N_DIR . $lang . '.json') === true) { 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 // Valeurs en sortie
$this->addOutput([ $this->addOutput([
@ -499,6 +544,8 @@ class translate extends common
'notification' => $success ? helper::translate('Traduction supprimée') : helper::translate('Erreur inconnue'), 'notification' => $success ? helper::translate('Traduction supprimée') : helper::translate('Erreur inconnue'),
'state' => $success 'state' => $success
]); ]);
unlink(self::I18N_DIR . 'enum.json');
$this->getUiLanguages();
break; break;
default: default:
# Do nothing # Do nothing
@ -506,6 +553,7 @@ class translate extends common
} }
} }
/* /*
* Traitement du changement de langue * Traitement du changement de langue
* Fonction utilisée par le noyau * Fonction utilisée par le noyau
@ -527,4 +575,36 @@ class translate extends common
'redirect' => helper::baseUrl() . $this->getData(['locale', $this->getUrl(2), 'homePageId']) '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; display: block;
} }
.buttonNotice { .buttonNotice {
border: 2px solid red !important; border: 2px solid red !important;
border-radius: 2px; border-radius: 2px;

View File

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

View File

@ -16,7 +16,7 @@
'help' => 'Consulter l\'aide en ligne' 'help' => 'Consulter l\'aide en ligne'
]);*/ ?> ]);*/ ?>
</div> </div>
<div class="col1 offset8 translateButtonCopyContent"> <div class="col1 offset8 contentButtonContainer">
<?php echo template::button('translateButtonCopyContent', [ <?php echo template::button('translateButtonCopyContent', [
'href' => helper::baseUrl() . 'translate/copy', 'href' => helper::baseUrl() . 'translate/copy',
'value' => template::ico('docs'), 'value' => template::ico('docs'),
@ -24,7 +24,7 @@
'help' => 'Copie de contenus localisés' 'help' => 'Copie de contenus localisés'
]); ?> ]); ?>
</div> </div>
<div class="col1 translateButtonAddContent"> <div class="col1 contentButtonContainer">
<?php echo template::button('translateButtonAddContent', [ <?php echo template::button('translateButtonAddContent', [
'href' => helper::baseUrl() . 'translate/add', 'href' => helper::baseUrl() . 'translate/add',
'value' => template::ico('plus'), 'value' => template::ico('plus'),
@ -32,13 +32,6 @@
'help' => 'Nouveau contenu localisé' 'help' => 'Nouveau contenu localisé'
]); ?> ]); ?>
</div> </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>
<div class="tab"> <div class="tab">
@ -56,7 +49,7 @@
<div class="row"> <div class="row">
<div class="col12"> <div class="col12">
<?php if ($module::$languagesUiInstalled) : ?> <?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; ?> <?php endif; ?>
</div> </div>
</div> </div>