From 6c995db5941053cf7d6fd0d2359c7968ca48f506 Mon Sep 17 00:00:00 2001
From: Eric Lupinacci <eric@smellup.net>
Date: Sat, 25 Nov 2023 19:31:18 +0100
Subject: [PATCH] =?UTF-8?q?Oups,=20il=20manquait=20la=20prise=20en=20compt?=
 =?UTF-8?q?e=20de=20la=20langue=20dans=20les=20noisettes.=20Cetet=20fois?=
 =?UTF-8?q?=20tout=20est=20=C3=A0=20jour.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 lang/rainette_fr.php                    |  7 ++-
 noisettes/meteo_conditions-preview.html |  1 +
 noisettes/meteo_conditions.html         |  9 ++--
 noisettes/meteo_conditions.yaml         | 64 ++++++++++++++++---------
 noisettes/meteo_previsions-preview.html |  3 +-
 noisettes/meteo_previsions.html         |  7 +--
 noisettes/meteo_previsions.yaml         | 11 ++++-
 paquet.xml                              |  2 +-
 rainette_fonctions.php                  |  9 ++--
 saisies/modele_24h.html                 | 12 -----
 saisies/modele_meteo.html               | 16 +++++++
 11 files changed, 92 insertions(+), 49 deletions(-)
 delete mode 100644 saisies/modele_24h.html
 create mode 100644 saisies/modele_meteo.html

diff --git a/lang/rainette_fr.php b/lang/rainette_fr.php
index 9637a36..9020017 100644
--- a/lang/rainette_fr.php
+++ b/lang/rainette_fr.php
@@ -156,16 +156,21 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
 	'noisette_description_previsions_24h' => 'Affichage des prévisions météorologiques 24h pour un service donné',
 	'noisette_explication_jour' => 'Le jour courant correspond à la valeur 0 et ainsi de suite. Consultez la documentation pour connaitre le nombre de jours de prévisions fournis pour chaque service.',
 	'noisette_explication_lieu' => 'Suivant le service, le lieu peut être exprimé comme une ville suivie par le code ISO d’un pays, comme des coordonnées géographiques, comme une adresse IP ou comme un identifiant weather.com®. Consultez la documentation pour connaitre la compatibilité avec le service choisi.',
+	'noisette_explication_langue' => 'Si vide, la langue utilisée correspond à celle du contexte d\'affichage de la noisette',
 	'noisette_label_jour_1' => 'Premier jour des prévisions',
+	'noisette_label_langue' => 'Langue du résumé météo',
 	'noisette_label_lieu' => 'Lieu',
 	'noisette_label_modele' => 'Modèle d’affichage à utiliser',
 	'noisette_label_nb_jours' => 'Nombre de jours affichés',
 	'noisette_label_service' => 'Service météorologique utilisé',
 	'noisette_label_titre_conditions' => 'Afficher un titre pour les conditions ?',
 	'noisette_label_titre_previsions' => 'Afficher un titre pour les prévisions ?',
+	'noisette_option_langue_aucune' => '-- Langue du contexte --',
 	'noisette_preview_previsions' => 'Jours de prévisions : @nb_jours@ - Premier jour : @jour_1@.',
+	'noisette_preview_langue' => 'Langue : @langue@',
+	'noisette_preview_langue_aucune' => 'celle du contexte d\'affichage',
 	'noisette_titre_conditions' => 'Conditions météorologiques',
-	'noisette_titre_previsions_24h' => 'Prévisions météorologiques 24h',
+	'noisette_titre_previsions_24h' => 'Prévisions météorologiques',
 	'notice_liste_aucun_cache' => 'Aucun cache n’a encore été créé par le service.',
 	'nuit' => 'nuit',
 
diff --git a/noisettes/meteo_conditions-preview.html b/noisettes/meteo_conditions-preview.html
index 45507fb..149b296 100755
--- a/noisettes/meteo_conditions-preview.html
+++ b/noisettes/meteo_conditions-preview.html
@@ -4,3 +4,4 @@
 	#SET{url_config, #URL_ECRIRE{configurer_rainette, service=#ENV{service}}}
 ]
 [[<a href="(#GET{url_config})">](#ENV{service}|rainette_afficher_service)[(#GET{url_config}|oui)</a>]][ - (#ENV{lieu}|typo)<br />]
+[(#VAL{rainette:noisette_preview_langue}|_T{#ARRAY{langue, #ENV{langue, <:rainette:noisette_preview_langue_aucune:>}}})]
diff --git a/noisettes/meteo_conditions.html b/noisettes/meteo_conditions.html
index cc9892d..6ff0baa 100755
--- a/noisettes/meteo_conditions.html
+++ b/noisettes/meteo_conditions.html
@@ -3,12 +3,13 @@
 ]
 [(#ENV{titre, non}|=={oui}|oui)
 <h2 class="h2">
-	[(#RAINETTE_INFOS{#ENV{lieu}, ville, #ENV{service}})[,
-	(#RAINETTE_INFOS{#ENV{lieu}, pays, #ENV{service}})] - ]
+	[(#RAINETTE_INFOS{#ENV{lieu}, ville, #ENV{service}, #ENV{langue, #LANG}})[,
+	(#RAINETTE_INFOS{#ENV{lieu}, pays, #ENV{service}, #ENV{langue, #LANG}})] - ]
 	<:rainette:meteo_conditions|spip_ucfirst:>
 </h2>]
 [(#MODELE{rainette_conditions,
 	lieu=#ENV{lieu},
-	sous_modele=conditions_tempsreel,
-	service=#ENV{service}})]
+	sous_modele=#ENV{modele},
+	service=#ENV{service},
+	langue=#ENV{langue, #LANG}})]
 <br class="clear" />
diff --git a/noisettes/meteo_conditions.yaml b/noisettes/meteo_conditions.yaml
index 4412622..51c83b8 100644
--- a/noisettes/meteo_conditions.yaml
+++ b/noisettes/meteo_conditions.yaml
@@ -4,26 +4,44 @@ icon: 'rainette-xx.svg'
 contexte: 'aucun'
 ajax: 'non'
 parametres:
-  -
-    saisie: 'input'
-    options:
-      nom: 'lieu'
-      label: '<:rainette:noisette_label_lieu:>'
-      explication: '<:rainette:noisette_explication_lieu:>'
-  -
-    saisie: 'service_meteo'
-    options:
-      nom: 'service'
-      label: '<:rainette:noisette_label_service:>'
-      defaut: ''
-      cacher_option_intro: 'oui'
-      filtre_actif: 'oui'
-  -
-    saisie: 'radio'
-    options:
-      nom: 'titre'
-      label: '<:rainette:noisette_label_titre_conditions:>'
-      defaut: 'non'
-      data:
-        oui: '<:item_oui:>'
-        non: '<:item_non:>'
+  contenu:
+    -
+      saisie: 'input'
+      options:
+        nom: 'lieu'
+        label: '<:rainette:noisette_label_lieu:>'
+        explication: '<:rainette:noisette_explication_lieu:>'
+    -
+      saisie: 'service_meteo'
+      options:
+        nom: 'service'
+        label: '<:rainette:noisette_label_service:>'
+        defaut: ''
+        cacher_option_intro: 'oui'
+        filtre_actif: 'oui'
+    -
+      saisie: 'radio'
+      options:
+        nom: 'titre'
+        label: '<:rainette:noisette_label_titre_conditions:>'
+        defaut: 'non'
+        data:
+          oui: '<:item_oui:>'
+          non: '<:item_non:>'
+  affichage:
+    -
+      saisie: 'modele_meteo'
+      options:
+        nom: 'modele'
+        mode: 'conditions'
+        label: '<:rainette:noisette_label_modele:>'
+        defaut: 'conditions_tempsreel'
+        cacher_option_intro: 'oui'
+    -
+      saisie: 'selecteur_langue'
+      options:
+        nom: 'langue'
+        type_lang: 'var_lang'
+        label: '<:rainette:noisette_label_langue:>'
+        explication: '<:rainette:noisette_explication_langue:>'
+        option_intro: '<:rainette:noisette_option_langue_aucune:>'
diff --git a/noisettes/meteo_previsions-preview.html b/noisettes/meteo_previsions-preview.html
index ccea1e4..d614711 100755
--- a/noisettes/meteo_previsions-preview.html
+++ b/noisettes/meteo_previsions-preview.html
@@ -4,4 +4,5 @@
 	#SET{url_config, #URL_ECRIRE{configurer_rainette, service=#ENV{service}}}
 ]
 [[<a href="(#GET{url_config})">](#ENV{service}|rainette_afficher_service)[(#GET{url_config}|oui)</a>]][ - (#ENV{lieu}|typo)<br />]
-[(#VAL{rainette:noisette_preview_previsions}|_T{#ARRAY{nb_jours, #ENV{nb_jours}, jour_1, #ENV{jour_1}}})]
\ No newline at end of file
+[(#VAL{rainette:noisette_preview_previsions}|_T{#ARRAY{nb_jours, #ENV{nb_jours}, jour_1, #ENV{jour_1}}})<br />]
+[(#VAL{rainette:noisette_preview_langue}|_T{#ARRAY{langue, #ENV{langue, <:rainette:noisette_preview_langue_aucune:>}}})]
diff --git a/noisettes/meteo_previsions.html b/noisettes/meteo_previsions.html
index bc81d40..037daf9 100755
--- a/noisettes/meteo_previsions.html
+++ b/noisettes/meteo_previsions.html
@@ -3,8 +3,8 @@
 ]
 [(#ENV{titre, non}|=={oui}|oui)
 	<h2 class="h2">
-		[(#RAINETTE_INFOS{#ENV{lieu}, ville, #ENV{service}})[,
-		(#RAINETTE_INFOS{#ENV{lieu}, pays, #ENV{service}})] - ]
+		[(#RAINETTE_INFOS{#ENV{lieu}, ville, #ENV{service}, #ENV{langue, #LANG}})[,
+		(#RAINETTE_INFOS{#ENV{lieu}, pays, #ENV{service}, #ENV{langue, #LANG}})] - ]
 		<:rainette:meteo_previsions|spip_ucfirst:>
 	</h2>]
 [(#MODELE{rainette_previsions,
@@ -12,5 +12,6 @@
 	sous_modele=#ENV{modele},
 	premier_jour=#ENV{jour_1},
 	nombre_jours=#ENV{nb_jours},
-	service=#ENV{service}})]
+	service=#ENV{service},
+	langue=#ENV{langue, #LANG}})]
 <br class="clear" />
diff --git a/noisettes/meteo_previsions.yaml b/noisettes/meteo_previsions.yaml
index 244b195..8a9fc08 100644
--- a/noisettes/meteo_previsions.yaml
+++ b/noisettes/meteo_previsions.yaml
@@ -43,9 +43,18 @@ parametres:
           non: '<:item_non:>'
   affichage:
     -
-      saisie: 'modele_24h'
+      saisie: 'modele_meteo'
       options:
         nom: 'modele'
+        mode: 'previsions'
         label: '<:rainette:noisette_label_modele:>'
         defaut: 'previsions_24h'
         cacher_option_intro: 'oui'
+    -
+      saisie: 'selecteur_langue'
+      options:
+        nom: 'langue'
+        type_lang: 'var_lang'
+        label: '<:rainette:noisette_label_langue:>'
+        explication: '<:rainette:noisette_explication_langue:>'
+        option_intro: '<:rainette:noisette_option_langue_aucune:>'
diff --git a/paquet.xml b/paquet.xml
index 7c778c4..6f4f3ea 100644
--- a/paquet.xml
+++ b/paquet.xml
@@ -1,6 +1,6 @@
 <paquet
 	prefix="rainette"
-	version="4.2.2"
+	version="4.2.3"
 	etat="stable"
 	compatibilite="]3.2.999;4.2.*]"
 	logo="rainette.svg"
diff --git a/rainette_fonctions.php b/rainette_fonctions.php
index 1385936..48881ef 100644
--- a/rainette_fonctions.php
+++ b/rainette_fonctions.php
@@ -469,7 +469,7 @@ function rainette_lister_services(?string $type_sortie = 'tableau', ?bool $filtr
 }
 
 /**
- * Renvoie la liste des modèles disponibles correspodnant à un mode météo et une périodicité donnée.
+ * Renvoie la liste des modèles disponibles correspondant à un mode météo et une périodicité donnée.
  * La périodicité n'est disponible que pour les prévisions.
  *
  * @param null|string $mode        Le type de données météorologiques demandé.
@@ -483,16 +483,19 @@ function rainette_lister_modeles(?string $mode = 'conditions', ?int $periodicite
 	// On lit les modèles suivant le mode choisi dans l'ensemble du site.
 	// Ceux-ci sont toujours de la forme:
 	// -- conditions_<complement>,
-	// -- previsions_<periodicite>h_<complement>,
+	// -- previsions_<periodicite>h_<complement>, la periodicité pouvant être vide et donc remplacé par un pattern décimal
 	// -- infos_<complement>.
 	if ($mode !== 'previsions') {
 		$pattern = "{$mode}.*\\.html$";
 	} else {
+		$periodicite = $periodicite ?: '\\d+';
 		$pattern = "{$mode}_{$periodicite}h.*\\.html$";
 	}
 	if ($fichiers = find_all_in_path('modeles/', $pattern)) {
 		foreach ($fichiers as $_fichier) {
-			$modeles[] = strtolower(basename($_fichier, '.html'));
+			if (strpos(basename($_fichier, '.html'), $mode) === 0) {
+				$modeles[] = strtolower(basename($_fichier, '.html'));
+			}
 		}
 	}
 
diff --git a/saisies/modele_24h.html b/saisies/modele_24h.html
deleted file mode 100644
index 0262785..0000000
--- a/saisies/modele_24h.html
+++ /dev/null
@@ -1,12 +0,0 @@
-[(#REM) Liste modèles de prévisions 24h disponibles
-  Parametres :
-  - class : classe(s) css ajoutes au select
-  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
-  - cacher_option_intro : pas de premier option vide  (defaut:"")
-]
-<select name="#ENV{nom}" id="champ_#ENV{nom}"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"] >
-[(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
-<BOUCLE_modeles_24h(DATA) {source table, #VAL{previsions}|rainette_lister_modeles{24}}{par valeur}>
-	[<option value="#VALEUR"[(#VALEUR|=={#ENV{valeur,#ENV{defaut, previsions_24h}}}|oui) selected="selected"]>(#VALEUR)</option>]
-</BOUCLE_modeles_24h>
-</select>
diff --git a/saisies/modele_meteo.html b/saisies/modele_meteo.html
new file mode 100644
index 0000000..1772cc4
--- /dev/null
+++ b/saisies/modele_meteo.html
@@ -0,0 +1,16 @@
+[(#REM) Liste modèles de prévisions 24h disponibles
+  Parametres :
+  - mode : le mode météo, infos, conditions (défaut) ou previsions
+  - periodicite : 0 pour infos ou conditions, 24, 12, 6, 3 ,1 pour les prévisions
+  - class : classe(s) css ajoutes au select
+  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
+  - cacher_option_intro : pas de premier option vide  (defaut:"")
+]
+#SET{mode, #ENV{mode, conditions}}
+#SET{periodicite, #ENV{periodicite, #NULL}}
+<select name="#ENV{nom}" id="champ_#ENV{nom}"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"] >
+[(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
+<BOUCLE_modeles_rainette(DATA) {source table, #GET{mode}|rainette_lister_modeles{#GET{periodicite}}}{par valeur}>
+	[<option value="#VALEUR"[(#VALEUR|=={#ENV{valeur,#ENV{defaut}}}|oui) selected="selected"]>(#VALEUR)</option>]
+</BOUCLE_modeles_rainette>
+</select>
-- 
GitLab