diff --git a/core/core.php b/core/core.php index a08bc44f..5b0d136a 100644 --- a/core/core.php +++ b/core/core.php @@ -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"; diff --git a/core/module/translate/translate.php b/core/module/translate/translate.php index 47ed66c7..b98bafb9 100644 --- a/core/module/translate/translate.php +++ b/core/module/translate/translate.php @@ -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 "
"; + 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); + } } diff --git a/core/module/translate/view/index/index.css b/core/module/translate/view/index/index.css index 63500a54..62f1de0f 100755 --- a/core/module/translate/view/index/index.css +++ b/core/module/translate/view/index/index.css @@ -21,7 +21,6 @@ display: block; } - .buttonNotice { border: 2px solid red !important; border-radius: 2px; diff --git a/core/module/translate/view/index/index.js.php b/core/module/translate/view/index/index.js.php index 963d7c75..2c0ab163 100644 --- a/core/module/translate/view/index/index.js.php +++ b/core/module/translate/view/index/index.js.php @@ -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(); }); /** diff --git a/core/module/translate/view/index/index.php b/core/module/translate/view/index/index.php index 44bb3461..79e78aee 100644 --- a/core/module/translate/view/index/index.php +++ b/core/module/translate/view/index/index.php @@ -16,7 +16,7 @@ 'help' => 'Consulter l\'aide en ligne' ]);*/ ?> -+helper::baseUrl() . 'translate/copy', 'value' => template::ico('docs'), @@ -24,7 +24,7 @@ 'help' => 'Copie de contenus localisés' ]); ?>-+helper::baseUrl() . 'translate/add', 'value' => template::ico('plus'), @@ -32,13 +32,6 @@ 'help' => 'Nouveau contenu localisé' ]); ?>-- helper::baseUrl() . 'translate/update', - 'value' => template::ico('update'), - 'help' => 'Mise à jour des langues de l\'interface' - ]); ?> -@@ -56,7 +49,7 @@diff --git a/core/module/translate/view/store/store.php b/core/module/translate/view/store/store.php new file mode 100644 index 00000000..e69de29b- +