70 lines
3.7 KiB
PHP
70 lines
3.7 KiB
PHP
<?php
|
|
//************************************************************************************************************
|
|
// bateau_mesures.php - Données d'une courbe historique, pour la page "Données du bateau" (synthèse §50, étape 3c).
|
|
// Paramètres (GET) : bateau, generation (0 = génération active), type (circuits, capteurs, batteries, reservoirs),
|
|
// element, variable (circuits, batteries), periode (24h, 7j, 30j, 3m, 1a). Réponse JSON (cf Courbe_element()).
|
|
// Droits : ceux de la page du bateau - administrateur, ou accès actif à ce bateau avec un type d'accès autorisant la
|
|
// consultation des données ; la génération doit appartenir au bateau.
|
|
//************************************************************************************************************
|
|
// Réponse JSON : aucun avertissement PHP ne doit s'y écrire (il la rendrait illisible) - ils vont dans le journal.
|
|
ini_set('display_errors', '0');
|
|
require_once("../config/config.php");
|
|
Init_session(basename(__FILE__));
|
|
|
|
header('Content-Type: application/json; charset=UTF-8');
|
|
header('Cache-Control: no-store');
|
|
|
|
function Repondre($code_http, $donnees)
|
|
{
|
|
http_response_code($code_http);
|
|
echo json_encode($donnees, JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_SUBSTITUTE); // Caractère mal encodé : remplacé, pas d'échec
|
|
exit();
|
|
}
|
|
|
|
if (empty($_SESSION['acces_valide'])) Repondre(401, array('erreur' => "session expirée"));
|
|
|
|
$id_bateau = (int)($_GET['bateau'] ?? 0);
|
|
$id_generation = (int)($_GET['generation'] ?? 0);
|
|
$type = (string)($_GET['type'] ?? '');
|
|
$id_element = (int)($_GET['element'] ?? 0);
|
|
$variable = (string)($_GET['variable'] ?? '');
|
|
$periode = (string)($_GET['periode'] ?? '');
|
|
$est_administrateur = ((int)$_SESSION['shipmember']['Niveau_acces'] >= NIVEAU_ACCES_MINI_ADMINISTRATEUR) ? 1 : 0;
|
|
|
|
Ouverture_bdd();
|
|
|
|
// Bateau accessible (et date de la dernière archive) :
|
|
$reponse = Requete_preparee_bdd("SELECT B.Date_derniere_maj FROM TB_Bateaux B
|
|
WHERE B.Cle_primaire=? AND B.Validite=1
|
|
AND (? = 1 OR EXISTS (SELECT 1 FROM TB_Lien_bateau_shipmember L
|
|
JOIN TB_Types_acces_bateau_shipmember T ON T.Cle_primaire = L.ID_Type_acces_bateau_shipmember
|
|
WHERE L.ID_Bateau=B.Cle_primaire AND L.ID_Shipmember=? AND L.Statut='actif'
|
|
AND L.Fin_validite >= NOW() AND T.Consultation_donnees >= 1))",
|
|
array(array('i', $id_bateau), array('i', $est_administrateur), array('i', $_SESSION['shipmember']['Cle_primaire'])),
|
|
__FILE__, __LINE__);
|
|
$bateau = Recherche_ligne_bdd($reponse, MYSQLI_ASSOC);
|
|
Liberation_jeu_de_resultat_bdd($reponse);
|
|
if (!$bateau) { Fermeture_bdd(); Repondre(403, array('erreur' => "accès refusé")); }
|
|
|
|
// Génération : celle demandée si elle appartient à ce bateau, sinon la génération active :
|
|
$generation = null;
|
|
foreach (Generations_bateau($id_bateau) as $g)
|
|
{
|
|
if ((int)$g['Cle_primaire'] == $id_generation) { $generation = $g; break; }
|
|
if ($g['Date_fin'] === null && $generation === null) $generation = $g;
|
|
}
|
|
Fermeture_bdd();
|
|
if ($generation === null) Repondre(404, array('erreur' => "aucune donnée pour ce bateau"));
|
|
|
|
// Fin de la courbe : dernière archive (génération active) ou fin de la génération (génération antérieure) :
|
|
$date_fin = ($generation['Date_fin'] === null) ? $bateau['Date_derniere_maj'] : $generation['Date_fin'];
|
|
if ($date_fin === null) Repondre(404, array('erreur' => "aucune archive reçue"));
|
|
|
|
$db = Connexion_generation($generation['Nom_base']);
|
|
if ($db === null) Repondre(503, array('erreur' => "données momentanément inaccessibles"));
|
|
$courbe = Courbe_element($db, $type, $id_element, $variable, $periode, $date_fin);
|
|
$db->close();
|
|
|
|
if (isset($courbe['erreur'])) Repondre(400, $courbe);
|
|
Repondre(200, $courbe);
|