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