@ -26,31 +26,36 @@ if (!defined('_RAINETTE_REGEXP_LIEU_WEATHER_ID')) {
*/
define('_RAINETTE_REGEXP_LIEU_WEATHER_ID', '#[a-zA-Z]{4}\d{4}#i');
}
if (!defined('_RAINETTE_REGEXP_LIEU_INSEE_ID')) {
/**
* Regexp permettant de reconnaître un lieu au format Weather ID.
*/
define('_RAINETTE_REGEXP_LIEU_INSEE_ID', '#[0-9ABab]{5}#i');
}
/**
* Normalise les données issues du service dans un tableau standard aux index prédéfinis pour chaque mode.
*
* @param array $configuration_service Configuration statique et utilisateur du service ayant retourné le flux de données.
* @param string $mode Le type de données météorologiques demandé :
* - `conditions`, la valeur par défaut
* - `previsions`
* - `infos`
* @param array $flux Le tableau brut des données météorologiques issu de l'appel au service.
* @param int $periode Valeur de 0 à n pour indiquer qu'on traite les données de prévisions d'une période horaire donnée
* ou -1 pour indiquer que l'on traite les données jour. La valeur maximale n dépend de la périodicité
* des prévisions, par exemple, elle vaut 0 pour une périodicité de 24h, 1 pour 12h...
* @param array $configuration_service Configuration statique et utilisateur du service ayant retourné le flux de données.
* @param string $mode Le type de données météorologiques demandé :
* - `conditions`, la valeur par défaut
* - `previsions`
* - `infos`
* @param null| array $flux Le tableau brut des données météorologiques issu de l'appel au service.
* @param null| int $periode Valeur de 0 à n pour indiquer qu'on traite les données de prévisions d'une période horaire donnée
* ou -1 pour indiquer que l'on traite les données jour. La valeur maximale n dépend de la périodicité
* des prévisions, par exemple, elle vaut 0 pour une périodicité de 24h, 1 pour 12h...
*
* @return array Le tableau standardisé des données météorologiques du service pour la période spécifiée.
*/
function meteo_normaliser($configuration_service, $mode, $flux, $periode) {
$tableau = array() ;
function meteo_normaliser(array $configuration_service, string $mode, ?array $flux = [] , ?int $periode = -1 ) : array {
$tableau = [] ;
include_spip('inc/filtres');
if ($flux !== null) {
// Lecture de la configuration technique des données pour le mode concerné.
include_spip('inc/config');
$configuration_mode = lire_config("rainette_config/${mode}/donnees", array() );
$configuration_mode = lire_config("rainette_config/{$mode}/donnees", [] );
// Le service a renvoyé des données, on boucle sur les clés du tableau normalisé
// Néanmoins, en fonction de la période fournie en argument on filtre les données uniquement
@ -58,12 +63,21 @@ function meteo_normaliser($configuration_service, $mode, $flux, $periode) {
// - si période = -1 on traite les données jour
// - si période > -1 on traite les données heure
foreach (array_keys($configuration_mode) as $_donnee) {
if ((($periode == -1)
and (empty($configuration_mode[$_donnee]['rangement'])
or ($configuration_mode[$_donnee]['rangement'] == 'jour')))
or (($periode > -1) and ($configuration_mode[$_donnee]['rangement'] == 'heure'))
if (
(
($periode
=== -1)
and (
empty($configuration_mode[$_donnee]['rangement'])
or ($configuration_mode[$_donnee]['rangement'] === 'jour')
)
)
or (
($periode > -1)
and ($configuration_mode[$_donnee]['rangement'] === 'heure')
)
) {
if ($configuration_mode[$_donnee]['origine'] == 'service') {
if ($configuration_mode[$_donnee]['origine'] === 'service') {
// La donnée est fournie par le service. Elle n'est jamais calculée par le plugin
// Néanmoins, elle peut-être indisponible temporairement
if ($cle_service = $configuration_service['donnees'][$_donnee]['cle']) {
@ -92,7 +106,7 @@ function meteo_normaliser($configuration_service, $mode, $flux, $periode) {
$valeur_typee = $typer ? $typer($valeur_service) : $valeur_service;
// Vérification de la donnée en cours de traitement si une fonction idoine existe
$verifier = "donnee_verifier_$ {_donnee}";
$verifier = "donnee_verifier_{$ _donnee}";
if (!function_exists($verifier) or (function_exists($verifier) and $verifier($valeur_typee))) {
$donnee = $valeur_typee;
}
@ -124,8 +138,7 @@ function meteo_normaliser($configuration_service, $mode, $flux, $periode) {
*
* @return string La fonction PHP (floatval, intval...) ou spécifique à appliquer à la valeur de la donnée.
*/
function donnee_typer($type_php) {
function donnee_typer(string $type_php) : string {
// Si aucun type PHP précisé on renvoie aucune fonction à appliquer.
$fonction = '';
@ -165,7 +178,7 @@ function donnee_typer($type_php) {
*
* @return string Date au format `Y-m-d H:i:s`.
*/
function donnee_formater_date($donnee) {
function donnee_formater_date(string $donnee) : string {
if (is_numeric($donnee)) {
$date = date('Y-m-d H:i:s', $donnee);
} else {
@ -189,7 +202,7 @@ function donnee_formater_date($donnee) {
*
* @return string Heure au format `H:i`.
*/
function donnee_formater_heure($donnee) {
function donnee_formater_heure(string $donnee) : string {
if (is_numeric($donnee)) {
$taille = strlen($donnee);
if ($taille < 3 ) {
@ -197,11 +210,11 @@ function donnee_formater_heure($donnee) {
$h = $donnee;
} else {
$m = substr($donnee, -2);
$h = strlen($donnee) == 3
$h = strlen($donnee) === 3
? substr($donnee, 0, 1)
: substr($donnee, 0, 2);
}
$heure = "$ {h}:$ {m}";
$heure = "{$ h}:{$ m}";
} else {
$heure = $donnee;
}
@ -216,7 +229,7 @@ function donnee_formater_heure($donnee) {
*
* @return bool `true` si la valeur est acceptable, `false` sinon.
*/
function donnee_verifier_indice_uv($valeur) {
function donnee_verifier_indice_uv(int $valeur) : bool {
$est_valide = true;
if (($valeur < 0 ) or ( $ valeur > 16)) {
$est_valide = false;
@ -226,27 +239,29 @@ function donnee_verifier_indice_uv($valeur) {
}
/**
* @param $erreur
* @param $lieu
* @param $mode
* @param $periodicite
* @param $service
* @param $configuration
*
* @return array
* Complète et normalise la partie additionnelle du bloc d'erreur.
*
* @param array $erreur Bloc d'erreur brut fourni par la fonction de chargement
* @param string $lieu Le lieu concerné par la méteo exprimé selon les critères requis par le service.
* @param string $mode Le type de données météorologiques demandé.
* @param int $periodicite La périodicité horaire des prévisions uniquement (0 si le ode est différent).
* @param string $service Le nom abrégé du service.
* @param null|array $configuration Configuration du service
*
* @return array Bloc d'erreur complété
*/
function erreur_normaliser_extras($erreur, $lieu, $mode, $periodicite, $service, $configuration = array()) {
$extras = array(
'credits' => array() ,
'config' => array(
function erreur_normaliser_extras($erreur, $lieu, $mode, $periodicite, $service, $configuration = [] ) {
$extras = [
'credits' => [] ,
'config' => [
'nom_service' => $service
) ,
] ,
'lieu' => $lieu,
'mode' => $mode,
'periodicite_cache' => $periodicite,
'service' => $service,
'erreur' => $erreur
) ;
] ;
// On complète les informations extras uniquement si le service est connu actif ou non.
if ($erreur['type'] != 'service_inconnu') {
@ -260,8 +275,8 @@ function erreur_normaliser_extras($erreur, $lieu, $mode, $periodicite, $service
$extras['credits'] = $configuration['credits'];
$extras['config'] = array_merge(
parametrage_normaliser($service, $configuration['defauts']),
array( 'source' => configuration_donnees_normaliser($mode, $configuration['donnees'])) ,
array('nom_service' => $configuration['nom'])
[ 'source' => configuration_donnees_normaliser($mode, $configuration['donnees'])] ,
['nom_service' => $configuration['nom']]
);
}
@ -269,17 +284,19 @@ function erreur_normaliser_extras($erreur, $lieu, $mode, $periodicite, $service
}
/**
* @param $erreur
* @param $lieu
* @param $mode
* @param $modele
* @param $service
* @param $nom_service
*
* @return array
* Formate le texte d'erreur affiché dans la boite d'alerte.
*
* @param array $erreur Bloc d'erreur brut fourni par la fonction de chargement
* @param string $lieu Le lieu concerné par la méteo exprimé selon les critères requis par le service.
* @param string $mode Le type de données météorologiques demandé.
* @param string $modele Le modèle utilisé pour afficher la météo.
* @param string $service Le nom abrégé du service.
* @param string $nom_service Nom littéral du service
*
* @return array Texte de l'erreur pour affichage sous la forme d'un tableau à 3 index, `service`, `principal` et `conseil`.
*/
function erreur_formater_texte($erreur, $lieu, $mode, $modele, $service, $nom_service) {
$texte = array( 'principal' => '', 'conseil' => '', 'service' => '') ;
function erreur_formater_texte(array $erreur, string $lieu, string $mode, string $modele, string $service, string $nom_service) : array {
$texte = [ 'principal' => '', 'conseil' => '', 'service' => ''] ;
$type_erreur = $erreur['type'];
switch ($type_erreur) {
@ -290,10 +307,10 @@ function erreur_formater_texte($erreur, $lieu, $mode, $modele, $service, $nom_se
// Cas d'erreur où le service renvoie aucune donnée sans pour autant monter une erreur.
case 'aucune_donnee':
// Cas d'erreur où le nombre de requêtes maximal a été atteint.
$texte['principal'] .= _T("rainette:erreur_${type_erreur}", array('service' => $nom_service) );
$texte['principal'] .= _T("rainette:erreur_{$type_erreur}", ['service' => $nom_service] );
$texte['conseil'] .= _T('rainette:erreur_conseil_equipe');
break;
// Cas d'erreur renvoyé par le service lui-même
// Cas d'erreur renvoyé par le service lui-même
case 'reponse_service':
if (!empty($erreur['service']['code'])) {
$texte['service'] .= $erreur['service']['code'];
@ -301,33 +318,33 @@ function erreur_formater_texte($erreur, $lieu, $mode, $modele, $service, $nom_se
if (!empty($erreur['service']['message'])) {
$texte['service'] .= ($texte['service'] ? ' - ' : '') . $erreur['service']['message'];
}
$texte['principal'] .= _T("rainette:erreur_${type_erreur}_${mode}", array('service' => $nom_service, 'lieu' => $lieu) );
$texte['principal'] .= _T("rainette:erreur_{$type_erreur}_{$mode}", ['service' => $nom_service, 'lieu' => $lieu] );
$texte['conseil'] .= _T('rainette:erreur_conseil_service');
break;
// Cas d'erreur où le nombre de requêtes maximal a été atteint.
// Cas d'erreur où le nombre de requêtes maximal a été atteint.
case 'limite_service':
$texte['principal'] .= _T("rainette:erreur_${type_erreur}", array('service' => $nom_service) );
$texte['principal'] .= _T("rainette:erreur_{$type_erreur}", ['service' => $nom_service] );
$texte['conseil'] .= _T('rainette:erreur_conseil_limite');
break;
// Cas d'erreur du à une mauvaise utilisation des modèles
// Cas d'erreur du à une mauvaise utilisation des modèles
case 'modele_periodicite':
$texte['principal'] .= _T("rainette:erreur_${type_erreur}", array('modele' => $modele) );
$texte['principal'] .= _T("rainette:erreur_{$type_erreur}", ['modele' => $modele] );
$texte['conseil'] .= _T('rainette:erreur_conseil_periodicite');
break;
case 'modele_service':
$texte['principal'] .= _T("rainette:erreur_${type_erreur}", array('modele' => $modele, 'service' => $nom_service) );
$texte['principal'] .= _T("rainette:erreur_{$type_erreur}", ['modele' => $modele, 'service' => $nom_service] );
$texte['conseil'] .= _T('rainette:erreur_conseil_modele_changer');
break;
case 'modele_inutilisable':
$texte['principal'] .= _T("rainette:erreur_${type_erreur}", array('modele' => $modele) );
$texte['principal'] .= _T("rainette:erreur_{$type_erreur}", ['modele' => $modele] );
$texte['conseil'] .= _T('rainette:erreur_conseil_modele_expliciter');
break;
case 'service_inactif':
$texte['principal'] .= _T("rainette:erreur_${type_erreur}", array('service' => $nom_service) );
$texte['principal'] .= _T("rainette:erreur_{$type_erreur}", ['service' => $nom_service] );
$texte['conseil'] .= _T('rainette:erreur_conseil_service_changer');
break;
case 'service_inconnu':
$texte['principal'] .= _T("rainette:erreur_${type_erreur}", array('service' => $service) );
$texte['principal'] .= _T("rainette:erreur_{$type_erreur}", ['service' => $service] );
$texte['conseil'] .= _T('rainette:erreur_conseil_service_verifier');
break;
}
@ -336,24 +353,25 @@ function erreur_formater_texte($erreur, $lieu, $mode, $modele, $service, $nom_se
}