diff --git a/config/fonctions_html.php b/config/fonctions_html.php index eeb3d0c..e64c9e6 100644 --- a/config/fonctions_html.php +++ b/config/fonctions_html.php @@ -12,7 +12,13 @@ function Init_session($nom_page) ini_set('arg_separator.output', '&'); ini_set("url_rewriter.tags","a=href,area=href,frame=src,iframe=src,input=src"); // Ces deux lignes sont destinées à faire ajouter autoamtiquement & au lieu de '&' dans la passage des variables de Session (nécessaire pour W3C validator...) - session_set_cookie_params(3600, '/', 'URL_SITE', 1, 1); + session_set_cookie_params([ + 'lifetime' => 3600, + 'path' => '/', + 'secure' => true, + 'httponly' => true, + 'samesite' => 'Lax', + ]); session_start(); // Ouverture de session (avant tout autre envoi au client!!!) diff --git a/config/fonctions_pdf.php b/config/fonctions_pdf.php index bec36fb..9ffa7b0 100644 --- a/config/fonctions_pdf.php +++ b/config/fonctions_pdf.php @@ -304,7 +304,7 @@ function code_acces_pdf($code, $no, $no_serie = "XX:XX:XX:XX:XX:XX", $client = " To activate your boat access please scan the attached QR code and log in to your existing ShipMember profile or create one.", 52, 218, 317, 160, 12); // Third page - $pdf->Image(generateCode($code), 546, 216, 164, 164, 'PNG', 'https://dev.shipheart.tech/shipmembers.php?code_acces='.$code); + $pdf->Image(generateCode($code), 546, 216, 164, 164, 'PNG', Url_activation_code_acces($code)); // --------------------------------------------------------- @@ -333,10 +333,21 @@ function code_acces_pdf($code, $no, $no_serie = "XX:XX:XX:XX:XX:XX", $client = " return(0); } +//******************************************************************************************************************************** +// Fonction : URL d'activation d'un code d'accès bateau, portée par le QR code ET par le lien cliquable du PDF d'invitation. +// Construite à partir de URL_SITE (definitions.php) : plus d'adresse écrite en dur (synthèse §47). +// Reçoit : le code d'accès +// Retour : l'URL complète +//******************************************************************************************************************************** +function Url_activation_code_acces($code) +{ + return 'https://'.URL_SITE.'/shipmembers.php?code_acces='.urlencode($code); +} + function generateCode($code){ $tempDir = "temp/CodeQR/"; - $codeContents = 'https://shipheart.tech/shipmembers.php?code_acces='.$code; + $codeContents = Url_activation_code_acces($code); $fileName = $code.'.png'; diff --git a/cron_archivage.php b/cron_archivage.php index 8a609d5..8ef75cc 100644 --- a/cron_archivage.php +++ b/cron_archivage.php @@ -481,6 +481,7 @@ function Executer_cron_archivage() // Résolution de la vraie Cle_primaire de la génération (celle juste créée, ou l'existante) : $generation_pour_enregistrement = Resoudre_generation_active($db, $id_bateau); Enregistrer_archive_traitee($db, $nom, $adresse_mac, $id_bateau, $generation_pour_enregistrement['cle'], 'traitee', $mmsi_recu, $mmsi_attendu_connu); + Mettre_a_jour_derniere_archive($db, $id_bateau, $nom); if (Confirmer_suppression_archive($boitier['Adresse_netbird'], $nom)) { diff --git a/cron_quarantaine.php b/cron_quarantaine.php index e20c7a9..5f31d9a 100644 --- a/cron_quarantaine.php +++ b/cron_quarantaine.php @@ -233,6 +233,7 @@ function Executer_cron_quarantaine() $generation_pour_enregistrement = Resoudre_generation_active($db, $id_bateau); Trancher_archive_en_attente($db, $nom, $id_bateau, $generation_pour_enregistrement['cle'], 'traitee', null, $mmsi_recu, $mmsi_attendu_connu); + Mettre_a_jour_derniere_archive($db, $id_bateau, $nom); unlink($chemin); echo " - {$nom} : quarantaine levée, chargée dans {$nom_base_cible}.\n"; } diff --git a/fonctions_archivage.php b/fonctions_archivage.php index c3c9eaf..fbd2afd 100644 --- a/fonctions_archivage.php +++ b/fonctions_archivage.php @@ -469,6 +469,28 @@ function Executer_sql_base($nom_base, $sql) return ['ok' => true]; } +// ---------------------------------------------------------------------------- +// Met à jour TB_Bateaux.Date_derniere_maj après le chargement RÉUSSI d'une +// archive (synthèse §47) : date-heure UTC de génération de l'archive par le +// CM5, lue dans son nom (_AAMMJJ_HHMMSS_.sql.gz.enc) - c'est +// elle qui date réellement les données, pas la date de réception (§44.6). +// GREATEST : une archive plus ancienne chargée tardivement (sortie de +// quarantaine, CM5 longtemps injoignable) ne fait jamais reculer la date. +// Renvoie true si la requête a abouti. +// ---------------------------------------------------------------------------- +function Mettre_a_jour_derniere_archive($db_principale, $id_bateau, $nom_fichier) +{ + if (!preg_match('/^[0-9A-Fa-f]{12}_(\d{2})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2})_/', $nom_fichier, $m)) return false; + $date_archive = "20{$m[1]}-{$m[2]}-{$m[3]} {$m[4]}:{$m[5]}:{$m[6]}"; + + $requete = "UPDATE TB_Bateaux SET Date_derniere_maj = GREATEST(COALESCE(Date_derniere_maj, '1970-01-01 00:00:00'), ?) WHERE Cle_primaire=?"; + $stmt = $db_principale->prepare($requete); + $stmt->bind_param('si', $date_archive, $id_bateau); + $ok = $stmt->execute(); + $stmt->close(); + return $ok; +} + // ---------------------------------------------------------------------------- // Détermine la liste des tables fragmentées (incrémentales) d'une base bateau, // par la MÊME méthode que côté CM5 (SHOW TABLES LIKE 'TB_Mesures%' + TB_Historique, diff --git a/html/bateaux.php b/html/bateaux.php index 6a2af13..eafd6ad 100644 --- a/html/bateaux.php +++ b/html/bateaux.php @@ -4,7 +4,6 @@ Init_session(basename($_SERVER['SCRIPT_NAME'])); // Fonction ouvrant la session -//SELECT TBV.Nom, TBMB.Valeur, TBMB.No_paquet FROM TB_BATEAUX_Mesures_batteries TBMB INNER JOIN TB_BATEAUX_Variables TBV ON TBMB.ID_Variable = TBV.Cle_primaire WHERE TBV.ID_Bateau = 1 AND TBMB.ID_Bateau = 1; //************************************************************************************************************************************ // Initialisation des variables globales @@ -25,16 +24,11 @@ Init_session(basename($_SERVER['SCRIPT_NAME'])); // Fonction ouvrant la session if (!isset($_SESSION['Bateaux']['origine'])) $_SESSION['Bateaux']['origine'] = ""; if (!isset($_SESSION['Bateaux']['tri_liste'])) $_SESSION['Bateaux']['tri_liste'] = "Flotte"; if (!isset($_SESSION['Bateaux']['sens_tri_liste'])) $_SESSION['Bateaux']['sens_tri_liste'] = "ASC"; - if (!isset($_SESSION['Bateaux']['type_details_bateau'])) $_SESSION['Bateaux']['type_details_bateau'] = "TB_BATEAUX_Carte"; - if (!isset($_SESSION['Bateaux']['id_entree_details_bateau'])) $_SESSION['Bateaux']['id_entree_details_bateau'] = 0; - if (!isset($_SESSION['Bateaux']['type_courbe_details_bateau'])) $_SESSION['Bateaux']['type_courbe_details_bateau'] = "Aucune"; + if (!isset($_SESSION['Bateaux']['type_details_bateau'])) $_SESSION['Bateaux']['type_details_bateau'] = "resume"; // 'resume' ou 'gerer_les_acces' if (!isset($_SESSION['Bateaux']['bateau']['Cle_primaire'])) $_SESSION['Bateaux']['bateau']['Cle_primaire'] = 0; if (!isset($_SESSION['Bateaux']['bateau']['Nom'])) $_SESSION['Bateaux']['bateau']['Nom'] = ""; if (!isset($_SESSION['Bateaux']['bateau']['ID_Flotte'])) $_SESSION['Bateaux']['bateau']['ID_Flotte'] = 0; - if (!isset($_SESSION['Bateaux']['bateau']['ID_Carte'])) $_SESSION['Bateaux']['bateau']['ID_Carte'] = 0; - if (!isset($_SESSION['Bateaux']['bateau']['ID_Famille'])) $_SESSION['Bateaux']['bateau']['ID_Famille'] = 0; if (!isset($_SESSION['Bateaux']['bateau']['Date_mes'])) $_SESSION['Bateaux']['bateau']['Date_mes'] = date("Y-m-d"); - if (!isset($_SESSION['Bateaux']['bateau']['Date_carte'])) $_SESSION['Bateaux']['bateau']['Date_carte'] = date("Y-m-d"); if (!isset($_SESSION['Bateaux']['bateau']['Commentaires'])) $_SESSION['Bateaux']['bateau']['Commentaires'] = ""; @@ -71,17 +65,6 @@ Init_session(basename($_SERVER['SCRIPT_NAME'])); // Fonction ouvrant la session break; } - //=================================== - case "changement_type": - { - if (isset($_GET['type'])) - { - $_SESSION['type_utilisateur'] = $_GET['type']; - chargement_langue(); - } - break; - } - //=================================== case "tri_liste": { @@ -102,104 +85,30 @@ Init_session(basename($_SERVER['SCRIPT_NAME'])); // Fonction ouvrant la session break; } - //=================================== - case "toggle_edit": - { - if ($_SESSION['modifier_texte'] == 0) $_SESSION['modifier_texte'] = 1; - else if ($_SESSION['modifier_texte'] == 1) $_SESSION['modifier_texte'] = 0; - - break; - } //=================================== case "details_bateau": { if (isset($_GET['id_bateau'])) { $_SESSION['Bateaux']['bateau']['Cle_primaire'] = $_GET['id_bateau']; - $_SESSION['Bateaux']['type_details_bateau'] = "TB_BATEAUX_Carte"; - $_SESSION['Bateaux']['type_courbe_details_bateau'] = "Aucune"; - $_SESSION['Bateaux']['id_entree_details_bateau'] = 0; + $_SESSION['Bateaux']['type_details_bateau'] = "resume"; $_SESSION['Bateaux']['page'] = "Details_bateau"; - $_SESSION['Bateaux']['bateau']['ID_Famille'] = 0; - + if (isset($_GET['origine'])) $_SESSION['Bateaux']['origine'] = $_GET['origine']; else $_SESSION['Bateaux']['origine'] = ""; } - + break; } - + //=================================== case "type_details_bateau": { - if (isset($_GET['type'])) - { - if ($_SESSION['Bateaux']['type_details_bateau'] != $_GET['type']) - { - $_SESSION['Bateaux']['type_details_bateau'] = $_GET['type']; - $_SESSION['Bateaux']['id_entree_details_bateau'] = 0; - $_SESSION['Bateaux']['id_variable_details_bateau'] = 0; - $_SESSION['Bateaux']['bateau']['ID_Famille'] = 0; - - $_SESSION['Bateaux']['ancre'] = ""; - } - } + if (isset($_GET['type'])) $_SESSION['Bateaux']['type_details_bateau'] = $_GET['type']; + $_SESSION['Bateaux']['ancre'] = ""; break; } - - //=================================== - case "changement_onglet": - { - if (isset($_GET['id_onglet'])) - { - $_SESSION['Bateaux']['bateau']['ID_Famille'] = $_GET['id_onglet']; - } - break; - } - - //=================================== - case "div_details_bateau": - { - if (isset($_GET['id_entree'])){ - if($_SESSION['Bateaux']['id_entree_details_bateau'] != $_GET['id_entree']){ - $_SESSION['Bateaux']['id_entree_details_bateau'] = $_GET['id_entree']; - $_SESSION['Bateaux']['type_courbe_details_bateau'] = "Tous"; - if ($_SESSION['Bateaux']['type_details_bateau'] == "TB_BATEAUX_Capteurs") $_SESSION['Bateaux']['id_variable_details_bateau'] = $_GET['capteur']; - } - else { - if ($_SESSION['Bateaux']['type_courbe_details_bateau'] != "Aucune") $_SESSION['Bateaux']['type_courbe_details_bateau'] = "Aucune"; - else $_SESSION['Bateaux']['type_courbe_details_bateau'] = "Tous"; - } - } - else if (isset($_GET['id_carte'])){ - if($_SESSION['Bateaux']['id_entree_details_bateau'] == $_GET['id_carte']) $_SESSION['Bateaux']['id_entree_details_bateau'] = "0"; - else $_SESSION['Bateaux']['id_entree_details_bateau'] = $_GET['id_carte']; - } - break; - } - //=================================== - case "courbe_details_bateau": - { - if ((isset($_GET['id_entree'])) AND (isset($_GET['type_courbe']))) - { - if ($_SESSION['Bateaux']['id_entree_details_bateau'] == $_GET['id_entree'] && $_GET['variable'] == 0 ) - { - if ($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Synthese") $_SESSION['Bateaux']['type_courbe_details_bateau'] = "Tous"; - else if ($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Tous") $_SESSION['Bateaux']['type_courbe_details_bateau'] = "Synthese"; - $_SESSION['Bateaux']['date_debut'] = $_GET['date_debut']; - $_SESSION['Bateaux']['date_fin'] = $_GET['date_fin']; - } - else - { - $_SESSION['Bateaux']['id_entree_details_bateau'] = $_GET['id_entree']; - $_SESSION['Bateaux']['type_courbe_details_bateau'] = $_GET['type_courbe']; - $_SESSION['Bateaux']['id_variable_details_bateau'] = $_GET['variable']; - if ($_SESSION['Bateaux']['type_details_bateau'] == "TB_BATEAUX_Capteurs") $_SESSION['Bateaux']['id_variable_details_bateau'] = $_GET['capteur']; - } - } - break; - } - + //=================================== case "modification_bateau": { @@ -261,138 +170,57 @@ Init_session(basename($_SERVER['SCRIPT_NAME'])); // Fonction ouvrant la session // Variables POST : - if (isset($_POST['date_version'])){ - $_SESSION['Bateaux']['date_version'] = $_POST['date_version']; - } - + //--------------------------------------------------------------------------- // Création/Modification Bateau : + // NB : l'affectation d'un module ShipBase à un bateau ne se fait plus ici mais via TB_Affectations_bateaux + // (administration de la flotte, lot 4 - synthèse §44.10). Les anciens champs ID_Carte/Date_carte et les + // répertoires download/upload/archives du modèle CM4 ont été retirés (synthèse §47). if (isset($_POST['validation_creation_bateau']) OR isset($_POST['validation_modification_bateau'])) { - // Vérification si un changement de carte a été demandé : - $flag_new_carte = false; - $new_id_carte = isset($_POST['ID_Carte']) ? addslashes ($_POST['ID_Carte']) : 0; - if ($_SESSION['Bateaux']['bateau']['ID_Carte'] != $new_id_carte) $flag_new_carte = true; - -//echo "Flag nouvelle carte = ".($flag_new_carte ? "Oui" : "Non")."
"; - // Mémorisation des valeurs saisies pour éviter de les perdre en cas d'erreur rendant la création impossible : $_SESSION['Bateaux']['bateau']['Nom'] = isset($_POST['Nom']) ? addslashes ($_POST['Nom']) : ""; $_SESSION['Bateaux']['bateau']['ID_Flotte'] = isset($_POST['ID_Flotte']) ? addslashes ($_POST['ID_Flotte']) : 0; - $_SESSION['Bateaux']['bateau']['ID_Carte'] = isset($_POST['ID_Carte']) ? addslashes ($_POST['ID_Carte']) : 0; $_SESSION['Bateaux']['bateau']['Date_mes'] = isset($_POST['Date_mes']) ? addslashes ($_POST['Date_mes']) : date("Y-m-d"); - $_SESSION['Bateaux']['bateau']['Date_carte'] = isset($_POST['Date_carte']) ? addslashes ($_POST['Date_carte']) : date("Y-m-d"); $_SESSION['Bateaux']['bateau']['Commentaires'] = isset($_POST['Commentaires']) ? addslashes ($_POST['Commentaires']) : ""; - + if (isset($_POST['validation_creation_bateau'])) { // Création du bateau : - $requete = 'INSERT INTO TB_Bateaux (Nom, ID_Flotte, ID_Carte, Date_mes, Date_carte, Date_derniere_maj, Commentaires) VALUES (?, ?, ?, ?, ?, ?, ?)'; + $requete = 'INSERT INTO TB_Bateaux (Nom, ID_Flotte, Date_mes, Commentaires) VALUES (?, ?, ?, ?)'; Requete_preparee_bdd($requete, - array( - array('s', $_SESSION['Bateaux']['bateau']['Nom']), - array('i', $_SESSION['Bateaux']['bateau']['ID_Flotte']), - array('i', $_SESSION['Bateaux']['bateau']['ID_Carte']), - array('s', $_SESSION['Bateaux']['bateau']['Date_mes']), - array('s', $_SESSION['Bateaux']['bateau']['Date_carte']), - array('s', $_SESSION['Bateaux']['bateau']['Date_derniere_maj']), - array('s', $_SESSION['Bateaux']['bateau']['Commentaires'])), - __FILE__, __LINE__); - + array( + array('s', $_SESSION['Bateaux']['bateau']['Nom']), + array('i', $_SESSION['Bateaux']['bateau']['ID_Flotte']), + array('s', $_SESSION['Bateaux']['bateau']['Date_mes']), + array('s', $_SESSION['Bateaux']['bateau']['Commentaires'])), + __FILE__, __LINE__); + // Récup de la clé primaire de l'enregistrement créé : $_SESSION['Bateaux']['bateau']['Cle_primaire'] = Recuperation_id_cree_bdd(); - + // Retour à la liste si la création s'est bien passée : $_SESSION['Bateaux']['page'] = "Accueil"; } else if (isset($_POST['validation_modification_bateau'])) { // Mise à jour du bateau : - $requete = 'UPDATE TB_Bateaux SET Nom=?, ID_Flotte=?, ID_Carte=?, Date_mes=?, Date_carte=?, Commentaires=? WHERE Cle_primaire=?'; + $requete = 'UPDATE TB_Bateaux SET Nom=?, ID_Flotte=?, Date_mes=?, Commentaires=? WHERE Cle_primaire=?'; Requete_preparee_bdd($requete, - array( - array('s', $_SESSION['Bateaux']['bateau']['Nom']), - array('i', $_SESSION['Bateaux']['bateau']['ID_Flotte']), - array('i', $_SESSION['Bateaux']['bateau']['ID_Carte']), - array('s', $_SESSION['Bateaux']['bateau']['Date_mes']), - array('s', $_SESSION['Bateaux']['bateau']['Date_carte']), - array('s', $_SESSION['Bateaux']['bateau']['Commentaires']), - array('i', $_SESSION['Bateaux']['bateau']['Cle_primaire'])), - __FILE__, __LINE__); - + array( + array('s', $_SESSION['Bateaux']['bateau']['Nom']), + array('i', $_SESSION['Bateaux']['bateau']['ID_Flotte']), + array('s', $_SESSION['Bateaux']['bateau']['Date_mes']), + array('s', $_SESSION['Bateaux']['bateau']['Commentaires']), + array('i', $_SESSION['Bateaux']['bateau']['Cle_primaire'])), + __FILE__, __LINE__); + // Message d'information : $message_information = 'Le bateau '.$_SESSION['Bateaux']['bateau']['Nom'].' vient d\'être modifié'; - + // Retour à la liste si la modification s'est bien passée : $_SESSION['Bateaux']['page'] = "Accueil"; } - - - // Recherche de l'adresse MAC de la carte ShipBase déclarée : - $requete = 'SELECT Adresse_mac FROM TB_Cartes WHERE Cle_primaire=?'; - $reponse = Requete_preparee_bdd($requete, - array( - array('i', $_SESSION['Bateaux']['bateau']['ID_Carte'])), - __FILE__, __LINE__); - while ($donnees = Recherche_ligne_bdd($reponse)) - { - $_SESSION['Bateaux']['bateau']['Adresse_mac'] = str_replace(":", "_", $donnees['Adresse_mac']); - } - - // Si changement de carte (ou nouveau bateau) : - if ($flag_new_carte) - { - // Vérification de l'existence du répertoire correspondant à cette adresse MAC sur le serveur, dans le répertoire "Bateaux" : - $flag_creation_repertoires = false; - if (repertoire_contient_repertoire(REPERTOIRE_BATEAUX, $_SESSION['Bateaux']['bateau']['Adresse_mac'])) // Le répertoire existe : - { - // Cas particulier du répertoire d'archives qui pouvait ne pas exister sur les premiers bateaux (permet de créer le fichier archive dans ce cas) : - if (!repertoire_contient_repertoire(REPERTOIRE_BATEAUX.'/'.$_SESSION['Bateaux']['bateau']['Adresse_mac'], 'archives')) mkdir(REPERTOIRE_BATEAUX.'/'.$_SESSION['Bateaux']['bateau']['Adresse_mac'].'/archives'); - - // Si le contenu des sous-répertoires est vide, on ne sauvegarde pas l'ancien bateau (cas standard) : - if (repertoire_est_vide(REPERTOIRE_BATEAUX.'/'.$_SESSION['Bateaux']['bateau']['Adresse_mac'].'/download') AND - repertoire_est_vide(REPERTOIRE_BATEAUX.'/'.$_SESSION['Bateaux']['bateau']['Adresse_mac'].'/upload') AND - repertoire_est_vide(REPERTOIRE_BATEAUX.'/'.$_SESSION['Bateaux']['bateau']['Adresse_mac'].'/archives')) - { - $message_information .= '
Le répertoire ['.$_SESSION['Bateaux']['bateau']['Adresse_mac'].'] et ses trois sous-répertoires "download", "upload" et "archives" existaient déjà dans le répertoire "bateaux" et ils sont bien vides.'; - } - else // ... et son contenu n'est PAS vide : - { - $suffixe_repertoire_archive = '__SAUVEGARDE_'.date("Y-m-d_H-i-s"); - if (rename(REPERTOIRE_BATEAUX.'/'.$_SESSION['Bateaux']['bateau']['Adresse_mac'], REPERTOIRE_BATEAUX.'/'.$_SESSION['Bateaux']['bateau']['Adresse_mac'].$suffixe_repertoire_archive)) - { - $message_erreur .= 'Le répertoire ['.$_SESSION['Bateaux']['bateau']['Adresse_mac'].'] n\'était pas vide ; il a donc été renommé en ['.REPERTOIRE_BATEAUX.'/'.$_SESSION['Bateaux']['bateau']['Adresse_mac'].$suffixe_repertoire_archive.']
'; - $flag_creation_repertoires = true; - } - else - { - $message_erreur .= 'Le répertoire ['.$_SESSION['Bateaux']['bateau']['Adresse_mac'].'] dans "bateaux" existait et n\'était pas vide mais son renommage a échoué ! Il est conservé tel quel...
'; - } - } - } - else $flag_creation_repertoires = true; - - // Création du répertoire de communication pour cette adresse MAC : - if ($flag_creation_repertoires) - { - if (mkdir(REPERTOIRE_BATEAUX.'/'.$_SESSION['Bateaux']['bateau']['Adresse_mac'])) - { - mkdir(REPERTOIRE_BATEAUX.'/'.$_SESSION['Bateaux']['bateau']['Adresse_mac'].'/download'); - mkdir(REPERTOIRE_BATEAUX.'/'.$_SESSION['Bateaux']['bateau']['Adresse_mac'].'/upload'); - mkdir(REPERTOIRE_BATEAUX.'/'.$_SESSION['Bateaux']['bateau']['Adresse_mac'].'/archives'); - $message_information .= '
Le répertoire ['.$_SESSION['Bateaux']['bateau']['Adresse_mac'].'] et ses trois sous-répertoires "download", "upload" et "archives" viennent d\'être créés dans le répertoire "bateaux"'; - - } - else $message_erreur .= '!!! Le répertoire ['.$_SESSION['Bateaux']['bateau']['Adresse_mac'].'] n\'a pas pu être créé dans le répertoire "bateaux" !!!'; - } - } - } - - //--------------------------------------------------------------------------- - // Filtre du graphe : - if (isset($_POST['filtrer_graphe'])){ - $_SESSION['Bateaux']['graphe_date_debut'] = $_POST['date_debut']; - $_SESSION['Bateaux']['graphe_date_fin'] = $_POST['date_fin']; } //--------------------------------------------------------------------------- @@ -469,9 +297,6 @@ Init_session(basename($_SERVER['SCRIPT_NAME'])); // Fonction ouvrant la session Liberation_jeu_de_resultat_bdd($reponse); } - if($flag_sortie && $_SESSION['Bateaux']['bateau']['Cle_primaire'] == 25){ - $flag_sortie = false; - } } while (0); if ($flag_sortie) header('Location:shipmembers.php?action=navigation&destination=Login'); @@ -490,7 +315,6 @@ Init_session(basename($_SERVER['SCRIPT_NAME'])); // Fonction ouvrant la session { case "Nom": { $tri_liste = " ORDER By Nom ".$_SESSION['Bateaux']['sens_tri_liste']; break; } case "Flotte" : { $tri_liste = " ORDER By nom_flotte ".$_SESSION['Bateaux']['sens_tri_liste'].", Nom"; break; } - case "Carte": { $tri_liste = " ORDER By nom_carte ".$_SESSION['Bateaux']['sens_tri_liste']; break; } case "Adresse_mac": { $tri_liste = " ORDER By adresse_carte ".$_SESSION['Bateaux']['sens_tri_liste']; break; } case "Version": { $tri_liste = " ORDER By version ".$_SESSION['Bateaux']['sens_tri_liste'].", Nom"; break; } case "Date_maj": { $tri_liste = " ORDER By Date_derniere_maj ".$_SESSION['Bateaux']['sens_tri_liste'].", Nom"; break; } @@ -499,16 +323,15 @@ Init_session(basename($_SERVER['SCRIPT_NAME'])); // Fonction ouvrant la session $requete = 'SELECT TB_Bateaux.Cle_primaire AS Cle_primaire, '; $requete .= ' TB_Bateaux.Nom AS Nom, '; - $requete .= ' (SELECT Nom FROM TB_Flottes WHERE Validite=1 AND Cle_primaire=TB_Bateaux.ID_Flotte) AS nom_flotte, '; - $requete .= ' (SELECT No_serie FROM TB_Cartes WHERE Validite=1 AND Cle_primaire=TB_Bateaux.ID_Carte) AS nom_carte, '; - $requete .= ' (SELECT Adresse_mac FROM TB_Cartes WHERE Validite=1 AND Cle_primaire=TB_Bateaux.ID_Carte) AS adresse_carte, '; - $requete .= ' (SELECT Valeur FROM TB_BATEAUX_Systeme WHERE Validite=1 AND ID_Bateau=TB_Bateaux.Cle_primaire AND Nom="Version_soft_no_package") AS version, '; - $requete .= ' TB_Bateaux.Date_derniere_maj AS Date_derniere_maj, '; + $requete .= ' (SELECT Nom FROM TB_Flottes WHERE Validite=1 AND Cle_primaire=TB_Bateaux.ID_Flotte) AS nom_flotte, '; + $requete .= ' (SELECT Adresse_mac FROM TB_Affectations_bateaux WHERE ID_Bateau=TB_Bateaux.Cle_primaire AND Date_fin IS NULL) AS adresse_carte, '; + $requete .= ' (SELECT Version_soft FROM TB_Generations_bateaux WHERE ID_Bateau=TB_Bateaux.Cle_primaire AND Date_fin IS NULL) AS version, '; +$requete .= ' TB_Bateaux.Date_derniere_maj AS Date_derniere_maj, '; $requete .= ' TB_Bateaux.Commentaires AS Commentaires '; $requete .= ' FROM `TB_Bateaux` '; $requete .= ' WHERE Validite=1 '; $requete .= $tri_liste; -echo "Requête = [ ".$requete."; ]
"; +//echo "Requête = [ ".$requete."; ]
"; $reponse = Requete_preparee_bdd($requete, array(), @@ -537,60 +360,31 @@ echo "Requête = [ ".$requete."; ]
"; // Récupération des informations sur le bateau : $nb_bateaux = 0; - $requete = 'SELECT * FROM TB_Bateaux WHERE Cle_primaire=? '; + $requete = 'SELECT *, '; + $requete .= ' (SELECT Adresse_mac FROM TB_Affectations_bateaux WHERE ID_Bateau=TB_Bateaux.Cle_primaire AND Date_fin IS NULL) AS Adresse_mac, '; + $requete .= ' (SELECT Version_soft FROM TB_Generations_bateaux WHERE ID_Bateau=TB_Bateaux.Cle_primaire AND Date_fin IS NULL) AS version '; + $requete .= ' FROM TB_Bateaux WHERE Cle_primaire=? '; +//echo "Requête = [ ".$requete."; ]
"; $reponse = Requete_preparee_bdd($requete, array( array('i', $_SESSION['Bateaux']['bateau']['Cle_primaire'])), __FILE__, __LINE__); while ($donnees = Recherche_ligne_bdd($reponse)) - { + { $bateau = $donnees; - $sous_req = "SELECT Adresse_mac FROM TB_Cartes WHERE Validite = 1 AND Cle_primaire = ".$bateau['ID_Carte']; - $sous_rep = Requete_bdd($sous_req, __FILE__, __LINE__); - $sous_don = Recherche_ligne_bdd($sous_rep); - - $bateau['Adresse_mac'] = $sous_don['Adresse_mac']; - Liberation_jeu_de_resultat_bdd($sous_rep); // Mise en forme de textes : - if ($donnees['Date_derniere_maj'] < "2020-01-02") $bateau['Date_derniere_maj'] = "".Recuperer_texte("bateau","details","derniere_connexion","jamais").""; + if ($donnees['Date_derniere_maj'] < "2020-01-02") $bateau['Date_derniere_maj'] = "".t("Jamais").""; else { $bateau['Date_derniere_maj'] = Formatage_date($donnees['Date_derniere_maj']); $_SESSION['Bateaux']['derniere_maj'] = $donnees['Date_derniere_maj']; } - $bateau['Commentaires'] = htmlspecialchars(stripcslashes($bateau['Commentaires'])); +// $bateau['Commentaires'] = htmlspecialchars(stripcslashes($bateau['Commentaires'])); } Liberation_jeu_de_resultat_bdd($reponse); - // Recherche de la version en cours sur le bateau : - $bateau['version'] = "Version inconnue"; - $requete = 'SELECT Valeur FROM TB_BATEAUX_Systeme WHERE ID_Bateau=? AND Nom="Version_soft_no_package" AND Validite=1 '; - $reponse = Requete_preparee_bdd($requete, - array( - array('i', $_SESSION['Bateaux']['bateau']['Cle_primaire'])), - __FILE__, __LINE__); - while ($donnees = Recherche_ligne_bdd($reponse)) - { - $bateau['version'] = $donnees['Valeur']; - } - Liberation_jeu_de_resultat_bdd($reponse); - /* - for ($i = 0; $i < $_SESSION['acces']; $i++){ - if ($_SESSION['bateau_shipmember'][$i]['ID_Bateau'] == $bateau['Cle_primaire']){ - $acces = $_SESSION['bateau_shipmember'][$i]['Niveau_acces']; - break; - } - else $acces = 0; - } - if ($_SESSION['acces'] == 0) $acces = 0; - - $requete = 'SELECT * FROM TB_Lien_bateau_shipmember_acces WHERE Validite=1 AND Niveau_acces='.$acces; - $reponse = Requete_bdd($requete, __FILE__, __LINE__); - $donnees = Recherche_ligne_bdd($reponse); - $acces_profil = $donnees; - */ //--------------------------------------------- // Recherche des droits d'accès au bateau : @@ -625,9 +419,6 @@ echo "Requête = [ ".$requete."; ]
"; } Liberation_jeu_de_resultat_bdd($reponse); - if ($_SESSION['Bateaux']['bateau']['Cle_primaire'] == 25 && $id_type_acces == 0){ - $id_type_acces = 4; - } // Recherche des caractérirtiques de l'accès le plus élevé trouvé : if ($id_type_acces > 0) @@ -701,8 +492,6 @@ echo "Requête = [ ".$requete."; ]
"; } - $nb_onglets = 0; - //----------------------------------------------------------- // Recherche des informations complémentaires sur le bateau : switch($_SESSION['Bateaux']['type_details_bateau']) @@ -740,1292 +529,12 @@ echo "Requête = [ ".$requete."; ]
"; break; } - //========================= - case "TB_BATEAUX_Carte": - { - $timestamp_debut = hrtime(TRUE); // En ns - // Récupérer les positions du bateaux pour le maps (30 derniers jours) - $date = date_create(); - date_sub($date, date_interval_create_from_date_string(DATE_SEUIL_1.' days')); - - $date_debut_carte = date_format($date, 'Y-m-d H:00:00'); - - $data_map = []; - // $requete = 'SELECT DISTINCT Date FROM ( - // SELECT Date FROM TB_BATEAUX_Mesures_capteurs WHERE ID_Bateau = '.$_SESSION['Bateaux']['bateau']['Cle_primaire'].' AND ID = 7 AND ID_Variable = 64 AND Date > "'.$date_debut_carte.'" UNION ALL - // SELECT Date FROM TB_BATEAUX_Mesures_capteurs WHERE ID_Bateau = '.$_SESSION['Bateaux']['bateau']['Cle_primaire'].' AND ID = 8 AND ID_Variable = 64 AND Date > "'.$date_debut_carte.'" - // ) uni ORDER BY Date;'; - // echo "Requête = ".$requete."
"; // Temps de traitement = 1 470 ms pour 'Et Si... 2' - - // Recherche des coordonnées du début de carte : - // Latitude : - $requete = 'SELECT Date, Valeur FROM TB_BATEAUX_Mesures_capteurs WHERE ID_Bateau='.$_SESSION['Bateaux']['bateau']['Cle_primaire'].' AND ID=7 AND ID_Variable=64 AND Date<="'.$date_debut_carte.'" ORDER BY Date LIMIT 1'; - $reponse = Requete_bdd($requete, __FILE__, __LINE__); - $donnees = Recherche_ligne_bdd($reponse); - if ($donnees == NULL) // S'il n'y a aucune latitude AVANT le début de la carte, on cherche la première APRES la date de début : - { - $requete = 'SELECT Date, Valeur FROM TB_BATEAUX_Mesures_capteurs WHERE ID_Bateau='.$_SESSION['Bateaux']['bateau']['Cle_primaire'].' AND ID=7 AND ID_Variable=64 AND Date>"'.$date_debut_carte.'" ORDER BY Date LIMIT 1'; - $reponse = Requete_bdd($requete, __FILE__, __LINE__); - $donnees = Recherche_ligne_bdd($reponse); - } - else{ - - } - $data_map[0]['latitude'] = ($donnees != NULL) ? $donnees['Valeur'] : 45.735237; // NB : s'il n'y aucune valeur ni AVANT ni APRES, c'est qu'il n'y a pas de courbe à tracer... - - // Longitude : - $requete = 'SELECT Date, Valeur FROM TB_BATEAUX_Mesures_capteurs WHERE ID_Bateau='.$_SESSION['Bateaux']['bateau']['Cle_primaire'].' AND ID=8 AND ID_Variable=64 AND Date<="'.$date_debut_carte.'" ORDER BY Date LIMIT 1'; - $reponse = Requete_bdd($requete, __FILE__, __LINE__); - $donnees = Recherche_ligne_bdd($reponse); - if ($donnees == NULL) // S'il n'y a aucune longitude AVANT le début de la carte, on cherche la première APRES la date de début : - { - $requete = 'SELECT Date, Valeur FROM TB_BATEAUX_Mesures_capteurs WHERE ID_Bateau='.$_SESSION['Bateaux']['bateau']['Cle_primaire'].' AND ID=8 AND ID_Variable=64 AND Date>"'.$date_debut_carte.'" ORDER BY Date LIMIT 1'; - $reponse = Requete_bdd($requete, __FILE__, __LINE__); - $donnees = Recherche_ligne_bdd($reponse); - } - $data_map[0]['longitude'] = ($donnees != NULL) ? $donnees['Valeur'] : 4.804827; - $data_map[0]['date'] = $date_debut_carte; - $nb_data = 1; - - // Requête de tous les points sur la période : - $requete = 'SELECT Date, ID, Valeur FROM TB_BATEAUX_Mesures_capteurs WHERE ID_Bateau='.$_SESSION['Bateaux']['bateau']['Cle_primaire'].' AND (ID=7 OR ID=8) AND ID_Variable=64 AND Date>"'.$date_debut_carte.'" ORDER BY Date'; - // echo "Requête = ".$requete."
"; // Temps de traitement = 7.9ms pour Et Si... 2 - $reponse = Requete_bdd($requete, __FILE__, __LINE__); - while($donnees = Recherche_ligne_bdd($reponse)) - { - $date_point = Formatage_date($donnees['Date']).' [UTC]'; - $date_point_sans_formatage = $donnees['Date']; - $jour = substr($donnees['Date'], 8, 2); - - if ($date_point == $data_map[$nb_data - 1]['date']) // Si on est sur la même date que la data précédente, on ne créée pas de nouveau point mais on ajoute juste la LAT ou LON sur le point précédent : - { - if ($donnees['ID'] == 7) - { - $data_map[$nb_data - 1]['latitude'] = $donnees['Valeur']; - $data_map[$nb_data - 1]['latitude_dms'] = Conversion_DECtoDMS("LAT", $donnees['Valeur']); - } - else - { - $data_map[$nb_data - 1]['longitude'] = $donnees['Valeur']; - $data_map[$nb_data - 1]['longitude_dms'] = Conversion_DECtoDMS("LON", $donnees['Valeur']); - } - } - else // Si on est sur une date différente de la dat précédente, on créée un nouveau point : - { - $data_map[$nb_data]['date'] = $date_point; - $data_map[$nb_data]['raw_date'] = $date_point_sans_formatage; - - // Couleur unie : - $data_map[$nb_data]['couleur'] = '#004563'; - $data_map[$nb_data]['opacite'] = 0.8; - - // Couleur de tracé alternée (bleu clair / bleu foncé) les jours pairs et impairs : - // if (($jour % 2) == 0) $data_map[$nb_data]['couleur'] = '#75B9DA'; //'#00FF00'; - // else $data_map[$nb_data]['couleur'] = '#004563'; //'#FF0000'; - - // Couleur de tracé avec 10 couleurs tournantes : - /* - switch($jour % 10) - { - default : - case 0 : { $data_map[$nb_data]['couleur'] = '#00FF99'; $data_map[$nb_data]['opacite'] = 1.0; break; } // Vert d'eau - case 1 : { $data_map[$nb_data]['couleur'] = '#FFC000'; $data_map[$nb_data]['opacite'] = 0.8; break; } // Orange - case 2 : { $data_map[$nb_data]['couleur'] = '#004563'; $data_map[$nb_data]['opacite'] = 0.8; break; } // Bleu Koriolan foncé - case 3 : { $data_map[$nb_data]['couleur'] = '#990099'; $data_map[$nb_data]['opacite'] = 0.8; break; } // Violet - case 4 : { $data_map[$nb_data]['couleur'] = '#00B050'; $data_map[$nb_data]['opacite'] = 0.6; break; } // Vert - case 5 : { $data_map[$nb_data]['couleur'] = '#FF0000'; $data_map[$nb_data]['opacite'] = 0.4; break; } // Rouge - case 6 : { $data_map[$nb_data]['couleur'] = '#FFFF00'; $data_map[$nb_data]['opacite'] = 0.8; break; } // Jaune - case 7 : { $data_map[$nb_data]['couleur'] = '#FF7DFF'; $data_map[$nb_data]['opacite'] = 0.9; break; } // Fushia - case 8 : { $data_map[$nb_data]['couleur'] = '#00B0F0'; $data_map[$nb_data]['opacite'] = 0.6; break; } // Bleu roi - case 9 : { $data_map[$nb_data]['couleur'] = '#996633'; $data_map[$nb_data]['opacite'] = 0.5; break; } // Marron - } - */ - - if ($donnees['ID'] == 7) - { - $data_map[$nb_data]['latitude'] = $donnees['Valeur']; - $data_map[$nb_data]['longitude'] = $data_map[$nb_data-1]['longitude']; // Dans le doute, on met à jour la LON avec la dernière valeur connue - } - else - { - $data_map[$nb_data]['longitude'] = $donnees['Valeur']; - $data_map[$nb_data]['latitude'] = $data_map[$nb_data-1]['latitude']; // Dans le doute, on met à jour la LAT avec la dernière valeur connue - } - - $data_map[$nb_data]['latitude_dms'] = Conversion_DECtoDMS("LAT", $data_map[$nb_data]['latitude']); - $data_map[$nb_data]['longitude_dms'] = Conversion_DECtoDMS("LON", $data_map[$nb_data]['longitude']); - - $nb_data ++; - } - } - - // Batteries du bateau - $requete = 'SELECT Nom, Tension_nominale, Soc FROM TB_BATEAUX_Batteries WHERE ID_Bateau=? AND Validite=1'; - $reponse = Requete_preparee_bdd($requete, - array( - array('i', $bateau['Cle_primaire'])), - __FILE__, __LINE__); - $nb_batteries = 0; - while($donnees = Recherche_ligne_bdd($reponse)){ - $batteries[$nb_batteries++] = $donnees; - } - Liberation_jeu_de_resultat_bdd($reponse); - - // Rservoirs du bateau - $nb_familles = 0; - // Recherche des onglets configurés sur le bateau : - $requete = 'SELECT Cle_primaire, Nom FROM TB_BATEAUX_Familles_reservoirs WHERE ID_Bateau=? AND Validite=1 ORDER BY Priorite_affichage ASC '; - $reponse = Requete_preparee_bdd($requete, - array( - array('i', $bateau['Cle_primaire'])), - __FILE__, __LINE__); - while ($donnees = Recherche_ligne_bdd($reponse)) - { - // Recherche du nombre de réservoirs affectés à cette famille : - $sous_requete = 'SELECT COUNT(*) as Total FROM TB_BATEAUX_Reservoirs WHERE ID_Bateau=? AND Validite=1 AND ID_Famille_reservoirs=? '; - $sous_reponse = Requete_preparee_bdd($sous_requete, - array( - array('i', $bateau['Cle_primaire']), - array('i', $donnees['Cle_primaire'])), - __FILE__, __LINE__); - $sous_donnees = Recherche_ligne_bdd($sous_reponse); - - if ($sous_donnees['Total'] > 0) { - $bateau['familles'][$nb_familles] = $donnees; // Ajout de la famille au tableau des familles - - // Recherche des réservoirs appartenant à la famille en cours : - $reservoirs_requete = 'SELECT * FROM TB_BATEAUX_Reservoirs '; - $reservoirs_requete .= 'WHERE ID_Bateau=? AND Validite=1 AND ID_Famille_reservoirs=? ORDER BY ABS(Priorite_affichage_accueil) ASC'; - $reservoirs_reponse = Requete_preparee_bdd($reservoirs_requete, - array( - array('i', $bateau['Cle_primaire']), - array('i', $donnees['Cle_primaire'])), - __FILE__, __LINE__); - - while ($reservoir = Recherche_ligne_bdd($reservoirs_reponse)) { - $bateau['familles'][$nb_familles]['reservoirs'][] = $reservoir; // Ajout du réservoir au tableau de réservoirs de la famille - } - - Liberation_jeu_de_resultat_bdd($reservoirs_reponse); - - $nb_familles++; - } - } - Liberation_jeu_de_resultat_bdd($reponse); - - - - $nb_onglets = 0; - $timestamp_fin = hrtime(TRUE); // En ns - //echo "Temps exécution = ".number_format(($timestamp_fin - $timestamp_debut)/(1000 * 1000), 1, ".", " ")." ms et nb points = ".$nb_data."
"; - break; - } - //========================= - case "TB_BATEAUX_Systeme": - { - if (isset($_SESSION['Bateaux']['date_version']) && $_SESSION['Bateaux']['date_version'] != "") $date_ver = str_replace("T"," ",$_SESSION['Bateaux']['date_version']).":00"; - - if (isset($_SESSION['Bateaux']['date_version']) && $_SESSION['Bateaux']['date_version'] != "" && $_SESSION['Bateaux']['date_version'] != $_SESSION['Bateaux']['derniere_maj']){ - $requete = 'SELECT * FROM '.$_SESSION['Bateaux']['type_details_bateau'].'_archive WHERE ID_Bateau=? AND SUBSTR(date_maj, 1, 13) = (SELECT SUBSTR(date_maj, 1, 13) from '.$_SESSION['Bateaux']['type_details_bateau'].'_archive WHERE SUBSTR(date_maj, 1, 13) < SUBSTR("'.$date_ver.'", 1, 13) ORDER BY date_maj DESC limit 1) ORDER BY Nom ASC'; - } - - else { - $requete = 'SELECT * FROM '.$_SESSION['Bateaux']['type_details_bateau'].' WHERE ID_Bateau=? AND Validite=1 ORDER BY Nom ASC'; - } - $reponse = Requete_preparee_bdd($requete, - array( - array('i', $bateau['Cle_primaire'])), - __FILE__, __LINE__); - while ($donnees = Recherche_ligne_bdd($reponse)) - { - $bateau['details_bateau'][''.$donnees['Nom'].'']['Valeur'] = $donnees['Valeur']; - if (isset($donnees['Description'])) $bateau['details_bateau'][''.$donnees['Nom'].'']['Description'] = $donnees['Description']; - } - Liberation_jeu_de_resultat_bdd($reponse); - - - // Mise en forme de certains champs et valeurs par défaut lorsqu'aucune donnée n'est encore disponible : - if(isset($bateau['details_bateau']['Version_soft_no_package']['Valeur'])) $bateau['version'] = $bateau['details_bateau']['Version_soft_no_package']['Valeur']; - elseif(isset($bateau['details_bateau']['Version_soft_package']['Valeur'])) $bateau['version'] = $bateau['details_bateau']['Version_soft_package']['Valeur']; - else $bateau['version'] = 'inconnue'; - - if (!isset($bateau['details_bateau']['Version_soft_modem']['Valeur'])) $bateau['details_bateau']['Version_soft_modem']['Valeur'] = 'inconnue'; - if (!isset($bateau['details_bateau']['No_iccid']['Valeur'])) $bateau['details_bateau']['No_iccid']['Valeur'] = 'inconnu'; - if (!isset($bateau['details_bateau']['No_imei']['Valeur'])) $bateau['details_bateau']['No_imei']['Valeur'] = 'inconnu'; - if (!isset($bateau['details_bateau']['No_imsi']['Valeur'])) $bateau['details_bateau']['No_imsi']['Valeur'] = 'inconnu'; - - - //------------------------------------- - // Recherche des cartes existantes à bord : - $nb_cartes = 0; - $requete=""; - //$requete = 'SELECT * FROM TB_BATEAUX_Cartes WHERE ID_Bateau=? AND Validite=1 AND Presence=1 ORDER BY Adresse_k_bus'; - if (isset($_SESSION['Bateaux']['date_version']) && $_SESSION['Bateaux']['date_version'] != ""){ - $requete = 'SELECT * FROM TB_BATEAUX_Cartes_archive WHERE ID_Bateau=? AND SUBSTR(date_maj, 1, 13) = (SELECT SUBSTR(date_maj, 1, 13) from TB_BATEAUX_Cartes_archive WHERE SUBSTR(date_maj, 1, 13) < substr("'.$date_ver.'",1 ,13) ORDER BY date_maj DESC limit 1) ORDER BY Adresse_k_bus'; - } - - else { - $requete = 'SELECT * FROM TB_BATEAUX_Cartes WHERE ID_Bateau=? AND Validite=1 ORDER BY Adresse_k_bus'; - } - //echo "Requête = [".$requete."]
"; - $reponse = Requete_preparee_bdd($requete, - array( - array('i', $bateau['Cle_primaire'])), - __FILE__, __LINE__); - while ($donnees = Recherche_ligne_bdd($reponse)) - { - // Mise en forme de certains champs : - switch($donnees['Type']) - { - //------------------------------- - case TYPE_CARTE_COMPAGNON: - { - $donnees['nom_type'] = "ShipBase"; - break; - } - - //------------------------------- - case TYPE_CARTE_SP812: - case TYPE_CARTE_SP8DC: - { - if ($donnees['Type'] == TYPE_CARTE_SP812) $donnees['nom_type'] = "ShipPower812"; - else $donnees['nom_type'] = "ShipPower8DC"; - - // Valeurs par défaut des circuits affectés à ce module : - for ($i = 0; $i < 8; $i++) $donnees['circuits'][$i]['Nom'] = "--- Non affecté ---"; - - // Recherche des circuits réellement affectés à ce module : - $sous_requete = 'SELECT * FROM TB_BATEAUX_Circuits WHERE ID_Bateau='.$bateau['Cle_primaire'].' AND No_carte='.$donnees['Adresse_k_bus'].' AND Validite=1 ORDER BY No_circuit_carte'; - //echo "Requête = [".$sous_requete."]
"; - $sous_reponse = Requete_bdd($sous_requete, __FILE__, __LINE__); - while ($sous_donnees = Recherche_ligne_bdd($sous_reponse)) - { - if ($sous_donnees['ID_Circuit_esclave'] >= 0) $donnees['circuits'][$sous_donnees['No_circuit_carte']]['Nom'] = ''.$sous_donnees['Nom'].''; - else $donnees['circuits'][$sous_donnees['No_circuit_carte']]['Nom'] = ''.$sous_donnees['Nom'].' [circuit renfort]'; - } - Liberation_jeu_de_resultat_bdd($sous_reponse); - - break; - } - - //------------------------------- - case TYPE_CARTE_SBS1224: - { - $donnees['nom_type'] = "ShipBS"; - break; - } - - //------------------------------- - case TYPE_CARTE_SP4AC: - { - $donnees['nom_type'] = "ShipPower4AC"; - - // Valeurs par défaut des circuits affectés à ce module : - for ($i = 0; $i < 4; $i++) $donnees['circuits'][$i]['Nom'] = "--- Non affecté ---"; - - // Recherche des circuits réellement affectés à ce module : - $sous_requete = 'SELECT * FROM TB_BATEAUX_Circuits WHERE ID_Bateau='.$bateau['Cle_primaire'].' AND No_carte='.$donnees['Adresse_k_bus'].' AND Validite=1 ORDER BY No_circuit_carte'; - //echo "Requête = [".$sous_requete."]
"; - $sous_reponse = Requete_bdd($sous_requete, __FILE__, __LINE__); - while ($sous_donnees = Recherche_ligne_bdd($sous_reponse)) - { - $donnees['circuits'][$sous_donnees['No_circuit_carte']]['Nom'] = ''.$sous_donnees['Nom'].''; - } - Liberation_jeu_de_resultat_bdd($sous_reponse); - break; - } - - //------------------------------- - default : { $donnees['nom_type'] = "Type inconnu..."; break; } - } - if ($donnees['Flag_resistance_terminaison'] == 1) $donnees['libelle_resistance_terminaison'] = "Oui"; - else $donnees['libelle_resistance_terminaison'] = "Non"; - - $cartes[$nb_cartes ++] = $donnees; - } - Liberation_jeu_de_resultat_bdd($reponse); - - break; - } - - //========================= - case "TB_BATEAUX_Capteurs": - { - if (isset($_SESSION['Bateaux']['date_version']) && $_SESSION['Bateaux']['date_version'] != "") $date_ver = str_replace("T"," ",$_SESSION['Bateaux']['date_version']).":00"; - - $nb_entrees = 0; - if (isset($_SESSION['Bateaux']['date_version']) && $_SESSION['Bateaux']['date_version'] != ""){ - $requete = 'SELECT * FROM '.$_SESSION['Bateaux']['type_details_bateau'].'_archive WHERE ID_Bateau=? AND SUBSTR(date_maj, 1, 13) = (SELECT SUBSTR(date_maj, 1, 13) from '.$_SESSION['Bateaux']['type_details_bateau'].'_archive WHERE SUBSTR(date_maj, 1, 13) < SUBSTR("'.$date_ver.'", 1, 13) ORDER BY date_maj DESC limit 1) ORDER BY Priorite_affichage_accueil ASC'; - } - else { - // Recherche des onglets configurés sur le bateau : - $requete = 'SELECT Cle_primaire, Nom FROM TB_BATEAUX_Familles_capteurs WHERE ID_Bateau=? AND Validite=1 ORDER BY Priorite_affichage ASC '; - - $reponse = Requete_preparee_bdd($requete, - array( - array('i', $bateau['Cle_primaire'])), - __FILE__, __LINE__); - while ($donnees = Recherche_ligne_bdd($reponse)) - { - // Recherche du nombre de capteurs affectés à cette famille : - $sous_requete = 'SELECT COUNT(*) as Total FROM TB_BATEAUX_Capteurs WHERE ID_Bateau=? AND Validite=1 AND ID_Famille_capteurs=? '; - $sous_reponse = Requete_preparee_bdd($sous_requete, - array( - array('i', $bateau['Cle_primaire']), - array('i', $donnees['Cle_primaire'])), - __FILE__, __LINE__); - $sous_donnees = Recherche_ligne_bdd($sous_reponse); - - if ($sous_donnees['Total'] > 0) $bateau['onglets'][$nb_onglets ++] = $donnees; // On ne présente que les familles ayant au moins 1 capteur... - Liberation_jeu_de_resultat_bdd($sous_reponse); - } - Liberation_jeu_de_resultat_bdd($reponse); - // Affectation du premier onglet si aucun n'est sélectionné : - if ($nb_onglets > 0) - { - if ($_SESSION['Bateaux']['bateau']['ID_Famille'] == 0) $_SESSION['Bateaux']['bateau']['ID_Famille'] = $bateau['onglets'][0]['Cle_primaire']; - $filtre_famille = " ID_Famille_capteurs=".$_SESSION['Bateaux']['bateau']['ID_Famille']." "; - } - else $filtre_famille = " 1 "; - - // Recherche des éléments appartenant à l'onglet en cours : - $requete = 'SELECT * FROM TB_BATEAUX_Capteurs '; - $requete .= 'WHERE ID_Bateau=? AND Validite=1 AND '.$filtre_famille.' ORDER BY ABS(Priorite_affichage_accueil) ASC'; - } - - $reponse = Requete_preparee_bdd($requete, - array( - array('i', $bateau['Cle_primaire'])), - __FILE__, __LINE__); - - // echo 'Requête = [ '.$requete.' ]
'; - - while ($donnees = Recherche_ligne_bdd($reponse)) - { - $bateau['details_bateau'][$nb_entrees] = $donnees; - - // Recherche de l'unité du capteur : - $sous_requete = 'SELECT Unite FROM TB_BATEAUX_Variables WHERE ID_Bateau=? AND Validite=1 AND Cle_primaire=? '; - $sous_reponse = Requete_preparee_bdd($sous_requete, - array( - array('i', $bateau['Cle_primaire']), - array('i', $donnees['ID_Variable'])), - __FILE__, __LINE__); - $sous_donnees = Recherche_ligne_bdd($sous_reponse); - $bateau['details_bateau'][$nb_entrees]['Unite'] = $sous_donnees['Unite']; - Liberation_jeu_de_resultat_bdd($sous_reponse); - - $nb_entrees ++; - } - Liberation_jeu_de_resultat_bdd($reponse); - - if ($_SESSION['Bateaux']['type_courbe_details_bateau'] != "Aucune") - { - // Préparation des paramètres spécifiques à chaque type (mais communs à tous les éléments de ce type) : - - $haxis_format = "'dd/MM'"; - $langue = "'".$_SESSION['langue']."'"; - $couleur_1 = "'rgb(117, 185, 218)'"; // Valeur par défaut (bleu Koriolan) - $couleur_2 = "'rgb(117, 185, 218)'"; // Valeur par défaut (bleu Koriolan) - $couleur_3 = "'rgb(117, 185, 218)'"; // Valeur par défaut (bleu Koriolan) - - - $titre_graphique = Recuperer_texte("bateau","details","capteurs","titre_graphe1"); - if ($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Tous") $nom_table = "TB_BATEAUX_Mesures_capteurs"; - if ($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Synthese") $nom_table = "TB_BATEAUX_Archive_mesures_capteurs"; - $diviseur_unite = 1; - $variables = "SELECT Cle_primaire, Nom, Unite FROM TB_BATEAUX_Variables WHERE Type = ? AND ID_Bateau = ? ORDER BY Priorite_affichage"; - // $variables = "SELECT Cle_primaire, Nom, Unite FROM TB_BATEAUX_Variables WHERE Type = ? AND ID_Bateau = ? AND Priorite_affichage != 0 ORDER BY Priorite_affichage"; - $type_var = 3; - - - switch($_SESSION['Bateaux']['type_courbe_details_bateau']) - { - //=============== - case "Aucune": break; - - //=============== - default: $_SESSION['Bateaux']['type_courbe_details_bateau'] = "Synthese"; // Pas de break; - case "Synthese" : - { - $nb_jours_periode = 360; - $regroupement_donnees = 1; // * 60; // En secondes ATTENTION : Pas sûr car passé en ms dans la requête ci-desssous !!!! A Vérifier ! - - if ((isset($_SESSION['Bateaux']['graphe_date_debut']) && $_SESSION['Bateaux']['graphe_date_debut'] != '') || isset($_SESSION['Bateaux']['graphe_date_fin']) && $_SESSION['Bateaux']['graphe_date_fin'] != ''){ - if(isset($_SESSION['Bateaux']['graphe_date_debut']) && $_SESSION['Bateaux']['graphe_date_debut'] != '') $titre_graphique .= Recuperer_texte("bateau","details","all","titre_graphe5").str_replace("T"," ",$_SESSION['Bateaux']['graphe_date_debut']).":00"; - if(isset($_SESSION['Bateaux']['graphe_date_fin']) && $_SESSION['Bateaux']['graphe_date_fin'] != '') $titre_graphique .= Recuperer_texte("bateau","details","all","titre_graphe6").str_replace("T"," ",$_SESSION['Bateaux']['graphe_date_fin']).":00"; - $titre_graphique .= Recuperer_texte("bateau","details","all","titre_graphe"); - } - else $titre_graphique .= Recuperer_texte("bateau","details","capteurs","titre_graphe2").($nb_jours_periode).Recuperer_texte("bateau","details","capteurs","titre_graphe3"); - - $requete = ' SELECT (UNIX_TIMESTAMP(Date) * 1000) AS Date, '; // Le x1000 permet d'avoir directement un timestamp en ms (nécessaire pour la fonction Date de JS) - $requete .= ' Valeur_maxi AS Max, '; - $requete .= ' Valeur_mini AS Min, '; - $requete .= ' Valeur_moyenne AS Avg '; - $requete .= ' FROM '.$nom_table.' WHERE ID_Bateau=? AND ID=? AND ID_Variable=? AND Date>? AND Date<=? '; - $requete .= ' GROUP BY (Date DIV 1000000) ORDER BY Date '; // Le 'DIV 1000000' permet de passer de timestamp à des jours (https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-conversion.html ) - - $table = array(); - $table['cols'] = array( - array('label' => 'Date', 'type' => 'datetime'), - array('label' => 'Max', 'type' => 'number'), // Nb : le nom de chaque champs (comme 'Max') est visible à l'écran quand on balade la crosshair. - array('label' => 'Min', 'type' => 'number'), // ... Il vaut donc mieux leur donner un nom explicite, notamment sur ce graphique avec plusieurs courbes. - array('label' => 'Avg', 'type' => 'number') // ... A noter que la question de la traduction peut se poser... - ); - - $nom_val_max = "Max"; // Nom de la variable sur laquelle la valeur max de la courbe sera calculée - $nom_val_min = "Min"; // Nom de la variable sur laquelle la valeur min de la courbe sera calculée - - $couleur_1 = "'rgb(0, 69, 99)'"; - $couleur_2 = "'rgb(117,185,218)'"; - $couleur_3 = "'rgb(171, 215, 237)'"; - - break; - } - //=============== - case "Tous" : - { - $nb_jours_periode = DATE_SEUIL_1; - $regroupement_donnees = 1; // * 60; // En secondes ATTENTION : Pas sûr car passé en ms dans la requête ci-desssous !!!! A Vérifier ! - - $titre_graphique .= Recuperer_texte("bateau","details","capteurs","titre_graphe2").($nb_jours_periode).Recuperer_texte("bateau","details","capteurs","titre_graphe4"); - - $requete = ' SELECT (UNIX_TIMESTAMP(Date) * 1000) AS Date, '; // Le x1000 permet d'avoir directement un timestamp en ms (nécessaire pour la fonction Date de JS) - $requete .= ' Valeur AS Val '; - $requete .= ' FROM '.$nom_table.' WHERE ID_Bateau=? AND ID=? AND ID_Variable=? AND Date>? AND Date<=?'; - $requete .= ' GROUP BY (Date DIV '.$regroupement_donnees.') ORDER BY Date '; - - $table = array(); - $table['cols'] = array( - array('label' => 'Date', 'type' => 'datetime'), - array('label' => 'Val', 'type' => 'number'), - array('label' => 'Valeur_2', 'type' => 'number'), - array('label' => 'Valeur_3', 'type' => 'number') - ); - - $nom_val_max = "Val"; // Nom de la variable sur laquelle la valeur max de la courbe sera calculée - $nom_val_min = "Val"; // Nom de la variable sur laquelle la valeur min de la courbe sera calculée - - $couleur_1 = "'rgb(0, 69, 99)'"; - $couleur_2 = "'rgb(117,185,218)'"; - $couleur_3 = "'rgb(171, 215, 237)'"; - break; - } - } - // Préparation du tableau de valeurs : - $min = 999999; - $max = -999999; - $rows = array(); - - - - // Calcul des dates de début de filtrage des données du graphique : - $date = date_create(); - $date_fin = date_format($date, 'Y-m-d H:i:s'); - date_sub($date, date_interval_create_from_date_string(''.$nb_jours_periode.' days')); - $date_debut = date_format($date, 'Y-m-d H:i:s'); - - if ($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Synthese"){ - if(isset($_SESSION['Bateaux']['graphe_date_debut']) && $_SESSION['Bateaux']['graphe_date_debut'] != '') $date_debut = str_replace("T"," ",$_SESSION['Bateaux']['graphe_date_debut']).":00"; - if(isset($_SESSION['Bateaux']['graphe_date_fin']) && $_SESSION['Bateaux']['graphe_date_fin'] != '') $date_fin = str_replace("T"," ",$_SESSION['Bateaux']['graphe_date_fin']).":00"; - } - - // Récupération des datas : - - - // if ($_SESSION['Bateaux']['id_variable_details_bateau'] == 0){ - // $_SESSION['Bateaux']['id_variable_details_bateau'] = $variables[0]['Cle_primaire']; // Variable par default pour ne pas avoir un graphe vide - // } - - $reponse = Requete_preparee_bdd($requete, - array( - array('i', $bateau['Cle_primaire']), - array('i', $_SESSION['Bateaux']['id_entree_details_bateau']), - array('i', $_SESSION['Bateaux']['id_variable_details_bateau']), - array('s', $date_debut), - array('s', $date_fin)), - __FILE__, __LINE__); - - while ($donnees = Recherche_ligne_bdd($reponse)) - { - // Préparation de la chaine de date selon format "Date(Year, Month, Day, Hours, Minutes, Seconds, Milliseconds)" : - $chaine_date = 'Date('.$donnees['Date'].')'; // On créée la chaine qui appellera la fonction Date avec le timestamp (soit une chaine du genre 'Date(124524415214225)') - $temp = array(); - $temp[] = array('v' => $chaine_date); - switch($_SESSION['Bateaux']['type_courbe_details_bateau']) - { - case "Synthese" : - { - $temp[] = array('v' => $donnees['Max']); - $temp[] = array('v' => $donnees['Min']); - $temp[] = array('v' => $donnees['Avg']); - break; - } - case "Tous" : - { - $temp[] = array('v' => $donnees['Val']); - - break; - } - } - $rows[] = array('c' => $temp); - - if ($donnees[''.$nom_val_max.''] != '' && $donnees[''.$nom_val_max.''] > $max) $max = $donnees[''.$nom_val_max.'']; - if ($donnees[''.$nom_val_min.''] != '' && $donnees[''.$nom_val_min.''] < $min) $min = $donnees[''.$nom_val_min.'']; - - } - - Liberation_jeu_de_resultat_bdd($reponse); - // Préparation des données : - // Création des faux points 0.1ms avant chaque nouveau enregistrement pour bien affiché les graphes - switch($_SESSION['Bateaux']['type_courbe_details_bateau']) - { - case "Synthese" : - { - $size = sizeof($rows); - for ($i = 1; $i < $size; $i++){ - $date = str_replace(')','',str_replace('Date(','',$rows[$i]['c']['0']['v']))-100; - $date = 'Date('.$date.')'; - - $temp_faux = array(); - $temp_faux[] = array('v' => $date); - $temp_faux[] = array('v' => $rows[$i-1]['c']['1']['v']); - $temp_faux[] = array('v' => $rows[$i-1]['c']['2']['v']); - $temp_faux[] = array('v' => $rows[$i-1]['c']['3']['v']); - $rows[] = array('c' => $temp_faux); - } - // if (sizeof($rows) > 0){ - // $temp_faux = array(); - // $temp_faux[] = array('v' => "Date(".time()."000)"); - // $temp_faux[] = array('v' => $rows[$i-1]['c']['1']['v']); - // $temp_faux[] = array('v' => $rows[$i-1]['c']['2']['v']); - // $temp_faux[] = array('v' => $rows[$i-1]['c']['3']['v']); - // $rows[] = array('c' => $temp_faux); - // } - - break; - } - case "Tous" : - { - $size = sizeof($rows); - for ($i = 1; $i < $size; $i++){ - $date = str_replace(')','',str_replace('Date(','',$rows[$i]['c']['0']['v']))-100; - $date = 'Date('.$date.')'; - - $temp_faux = array(); - $temp_faux[] = array('v' => $date); - $temp_faux[] = array('v' => $rows[$i-1]['c']['1']['v']); - - $rows[] = array('c' => $temp_faux); - } - // if (sizeof($rows) > 0){ - // $temp_faux = array(); - // $temp_faux[] = array('v' => "Date(".time()."000)"); - // $temp_faux[] = array('v' => $rows[$i-1]['c']['1']['v']); - - // $rows[] = array('c' => $temp_faux); - // } - break; - } - } - // Trier le tableau du data - function sortByDate_rows($a, $b) { - return str_replace(')','',str_replace('Date(','',$a['c']['0']['v'])) - str_replace(')','',str_replace('Date(','',$b['c']['0']['v'])); - } - usort($rows, 'sortByDate_rows'); - $table['rows'] = $rows; // Stockage de toutes les rows créées dans 'table' - $jsonTable = json_encode($table); // Mise au format JSON pour être lu par la fonction JS - - $nomgraphique = "'graphique_".$_SESSION['Bateaux']['id_entree_details_bateau']."'"; // Permet de passer à la fonction JS le nom du graphique (différent pour chaque capteur...) - - //=============================================================================================================================================== - // GRAPHIQUES : - //=============================================================================================================================================== - // Appels JavaScript pour générer le graphique : - ?> - - - 0) $bateau['onglets'][$nb_onglets ++] = $donnees; // On ne présente que les familles ayant au moins 1 circuit... - } - Liberation_jeu_de_resultat_bdd($reponse); - - // Affectation du premier onglet si aucun n'est sélectionné : - if ($nb_onglets > 0) - { - if ($_SESSION['Bateaux']['bateau']['ID_Famille'] == 0) $_SESSION['Bateaux']['bateau']['ID_Famille'] = $bateau['onglets'][0]['Cle_primaire']; - $filtre_famille = " ID_Famille_circuits=".$_SESSION['Bateaux']['bateau']['ID_Famille']." "; - } - else $filtre_famille = " 1 "; - - // Recherche des éléments appartenant à l'onglet en cours : - $requete = 'SELECT * FROM TB_BATEAUX_Circuits '; - $requete .= 'WHERE ID_Bateau=? AND Validite=1 AND '.$filtre_famille.' ORDER BY ABS(Priorite_affichage_accueil) ASC'; - - - break; - } - - //---------------------------------------- - case "TB_BATEAUX_Reservoirs": - { - // Recherche des onglets configurés sur le bateau : - $requete = 'SELECT Cle_primaire, Nom FROM TB_BATEAUX_Familles_reservoirs WHERE ID_Bateau=? AND Validite=1 ORDER BY Priorite_affichage ASC '; - $reponse = Requete_preparee_bdd($requete, - array( - array('i', $bateau['Cle_primaire'])), - __FILE__, __LINE__); - while ($donnees = Recherche_ligne_bdd($reponse)) - { - // Recherche du nombre de réservoirs affectés à cette famille : - $sous_requete = 'SELECT COUNT(*) as Total FROM TB_BATEAUX_Reservoirs WHERE ID_Bateau=? AND Validite=1 AND ID_Famille_reservoirs=? '; - $sous_reponse = Requete_preparee_bdd($sous_requete, - array( - array('i', $bateau['Cle_primaire']), - array('i', $donnees['Cle_primaire'])), - __FILE__, __LINE__); - $sous_donnees = Recherche_ligne_bdd($sous_reponse); - - if ($sous_donnees['Total'] > 0) $bateau['onglets'][$nb_onglets ++] = $donnees; // On ne présente que les familles ayant au moins 1 réservoir... - } - Liberation_jeu_de_resultat_bdd($reponse); - // Affectation du premier onglet si aucun n'est sélectionné : - if ($nb_onglets > 0) - { - if ($_SESSION['Bateaux']['bateau']['ID_Famille'] == 0) $_SESSION['Bateaux']['bateau']['ID_Famille'] = $bateau['onglets'][0]['Cle_primaire']; - $filtre_famille = " ID_Famille_reservoirs=".$_SESSION['Bateaux']['bateau']['ID_Famille']." "; - } - else $filtre_famille = " 1 "; - - // Recherche des éléments appartenant à l'onglet en cours : - $requete = 'SELECT * FROM TB_BATEAUX_Reservoirs '; - $requete .= 'WHERE ID_Bateau=? AND Validite=1 AND '.$filtre_famille.' ORDER BY ABS(Priorite_affichage_accueil) ASC'; - - break; - } - - //---------------------------------------- - default : - { - $requete = 'SELECT * FROM '.$_SESSION['Bateaux']['type_details_bateau'].' WHERE ID_Bateau=? AND Validite=1 ORDER BY Priorite_affichage_accueil ASC'; - break; - } - } - // echo 'Requête = [ '.$requete.' ]
'; - - } - - // Exécution de la requête et récupération des résultats : - $reponse = Requete_preparee_bdd($requete, - array( - array('i', $bateau['Cle_primaire'])), - __FILE__, __LINE__); - while ($donnees = Recherche_ligne_bdd($reponse)) - { - $bateau['details_bateau'][$nb_entrees] = $donnees; - - switch($_SESSION['Bateaux']['type_details_bateau']) - { - //---------------------------------------- - case "TB_BATEAUX_Batteries": - { - // Capacité 1 : - if ($bateau['details_bateau'][$nb_entrees]['Capacite_1'] != "") - { - $capa = explode("/", $bateau['details_bateau'][$nb_entrees]['Capacite_1']); - $bateau['details_bateau'][$nb_entrees]['capacite_1'] = number_format($capa[0], 0, ".", " ")." Ah [C".number_format($capa[1], 0, ".", " ")."]"; - } - else $bateau['details_bateau'][$nb_entrees]['capacite_1'] = "".Recuperer_texte("bateau","details","batteries","capacite_1_non_renseignee").""; // Ce cas ne devrait jamais se produire ! - - // Capacité 2 : - if ($bateau['details_bateau'][$nb_entrees]['Capacite_2'] != "") - { - $capa = explode("/", $bateau['details_bateau'][$nb_entrees]['Capacite_2']); - $bateau['details_bateau'][$nb_entrees]['capacite_2'] = number_format($capa[0], 0, ".", " ")." Ah [C".number_format($capa[1], 0, ".", " ")."]"; - } - else $bateau['details_bateau'][$nb_entrees]['capacite_2'] = "".Recuperer_texte("bateau","details","batteries","capacite_2_non_renseignee").""; - - // Type : - switch($bateau['details_bateau'][$nb_entrees]['Type']) - { - case 0 : { $bateau['details_bateau'][$nb_entrees]['type'] = "".Recuperer_texte("bateau","details","batteries","non_defini").""; break; } - case 1 : { $bateau['details_bateau'][$nb_entrees]['type'] = Recuperer_texte("bateau","details","batteries","type_pb_acide_liquide"); break; } - case 2 : { $bateau['details_bateau'][$nb_entrees]['type'] = Recuperer_texte("bateau","details","batteries","type_pb_agm"); break; } - case 3 : { $bateau['details_bateau'][$nb_entrees]['type'] = Recuperer_texte("bateau","details","batteries","type_pb_gel"); break; } - case 4 : { $bateau['details_bateau'][$nb_entrees]['type'] = Recuperer_texte("bateau","details","batteries","type_pb_carbone"); break; } - case 10 : { $bateau['details_bateau'][$nb_entrees]['type'] = Recuperer_texte("bateau","details","batteries","type_lithium"); break; } - default : { $bateau['details_bateau'][$nb_entrees]['type'] = "".Recuperer_texte("bateau","details","batteries","type_inconnu").""; break; } - } - - break; - } - - //---------------------------------------- - case "TB_BATEAUX_Circuits": - case "TB_BATEAUX_Reservoirs": - default : - { - break; - } - } - - $nb_entrees ++; - - } - Liberation_jeu_de_resultat_bdd($reponse); - - - // Calculs des éléments de la courbe si une courbe est demandée : - if ($_SESSION['Bateaux']['type_courbe_details_bateau'] != "Aucune") - { - // $start_time = microtime(true); - - // Préparation des paramètres spécifiques à chaque type (mais communs à tous les éléments de ce type) : - - $haxis_format = "'dd/MM/yy'"; - $langue = "'".$_SESSION['langue']."'"; - $couleur_1 = "'rgb(117, 185, 218)'"; // Valeur par défaut (bleu Koriolan) - $couleur_2 = "'rgb(117, 185, 218)'"; // Valeur par défaut (bleu Koriolan) - $couleur_3 = "'rgb(117, 185, 218)'"; // Valeur par défaut (bleu Koriolan) - - $regroupement_donnees = 1; // Valeur par défaut (en secondes) - - switch($_SESSION['Bateaux']['type_details_bateau']) - { - case "TB_BATEAUX_Batteries": - { - $titre_graphique = ""; - if ($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Tous") $nom_table = "TB_BATEAUX_Mesures_batteries"; - if ($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Synthese") $nom_table = "TB_BATEAUX_Archive_mesures_batteries"; - $diviseur_unite = 1; - if ((version_compare($bateau['version'], '2.1.8') < 0) && ($bateau['Cle_primaire'] != 25)) - { - $variables = "SELECT Cle_primaire, Nom, Unite FROM TB_BATEAUX_Variables WHERE Type = ? AND ID_Bateau = ? ORDER BY Priorite_affichage"; - } - else $variables = "SELECT Cle_primaire, Nom, Unite FROM TB_BATEAUX_Variables WHERE Type=? AND ID_Bateau=? AND Priorite_affichage!=0 ORDER BY Priorite_affichage"; - - $type_var = 4; - break; - } - case "TB_BATEAUX_Circuits": - { - $titre_graphique = ""; - if ($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Tous") $nom_table = "TB_BATEAUX_Mesures_circuits"; - if ($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Synthese") $nom_table = "TB_BATEAUX_Archive_mesures_circuits"; - $diviseur_unite = 1; - $variables = "SELECT Cle_primaire, Nom, Unite FROM TB_BATEAUX_Variables WHERE Type = ? AND ID_Bateau = ? ORDER BY Priorite_affichage"; - // $variables = "SELECT Cle_primaire, Nom, Unite FROM TB_BATEAUX_Variables WHERE Type = ? AND ID_Bateau = ? AND Priorite_affichage != 0 ORDER BY Priorite_affichage"; - $type_var = 1; - break; - } - case "TB_BATEAUX_Reservoirs": - { - // limite du nombre de valeurs affichées qui atteignait 82 000 sur 30 jours.... ! - $regroupement_donnees = 120; // En secondes - $titre_graphique = ""; - if ($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Tous") $nom_table = "TB_BATEAUX_Mesures_reservoirs"; - if ($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Synthese") $nom_table = "TB_BATEAUX_Archive_mesures_reservoirs"; - $diviseur_unite = 1; - $variables = "SELECT Cle_primaire, Nom, Unite FROM TB_BATEAUX_Variables WHERE Type = ? AND ID_Bateau = ? ORDER BY Priorite_affichage"; - // $variables = "SELECT Cle_primaire, Nom, Unite FROM TB_BATEAUX_Variables WHERE Type = ? AND ID_Bateau = ? AND Priorite_affichage != 0 ORDER BY Priorite_affichage"; - $type_var = 3; - break; - } - } - - switch($_SESSION['Bateaux']['type_courbe_details_bateau']) - { - //=============== - case "Aucune": break; - - //=============== - default: $_SESSION['Bateaux']['type_courbe_details_bateau'] = "Synthese"; // Pas de break; - case "Synthese" : - { - $nb_jours_periode = 360; - - // $titre_graphique .= Recuperer_texte("bateau","details","rest","titre_graphe2").($nb_jours_periode).Recuperer_texte("bateau","details","rest","titre_graphe3"); - - if ((isset($_SESSION['Bateaux']['graphe_date_debut']) && $_SESSION['Bateaux']['graphe_date_debut'] != '') || isset($_SESSION['Bateaux']['graphe_date_fin']) && $_SESSION['Bateaux']['graphe_date_fin'] != ''){ - if(isset($_SESSION['Bateaux']['graphe_date_debut']) && $_SESSION['Bateaux']['graphe_date_debut'] != '') $titre_graphique .= Recuperer_texte("bateau","details","all","titre_graphe5").str_replace("T"," ",$_SESSION['Bateaux']['graphe_date_debut']).":00"; - if(isset($_SESSION['Bateaux']['graphe_date_fin']) && $_SESSION['Bateaux']['graphe_date_fin'] != '') $titre_graphique .= Recuperer_texte("bateau","details","all","titre_graphe6").str_replace("T"," ",$_SESSION['Bateaux']['graphe_date_fin']).":00"; - $titre_graphique .= Recuperer_texte("bateau","details","all","titre_graphe"); - } - else $titre_graphique .= Recuperer_texte("bateau","details","rest","titre_graphe2").($nb_jours_periode).Recuperer_texte("bateau","details","rest","titre_graphe3"); - - - $requete = ' SELECT (UNIX_TIMESTAMP(Date) * 1000) AS Date, '; // Le x1000 permet d'avoir directement un timestamp en ms (nécessaire pour la fonction Date de JS) - $requete .= ' Valeur_maxi AS Max, '; - $requete .= ' Valeur_mini AS Min, '; - $requete .= ' Valeur_moyenne AS Avg '; - $requete .= ' FROM '.$nom_table.' WHERE ID_Bateau=? AND ID=? AND ID_Variable=? AND Date>? AND Date<=? '; - $requete .= ' GROUP BY (Date DIV 1000000) ORDER BY Date '; // Le 'DIV 1000000' permet de passer de timestamp à des jours (https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-conversion.html ) - - $table = array(); - $table['cols'] = array( - array('label' => 'Date', 'type' => 'datetime'), - array('label' => 'Max', 'type' => 'number'), // Nb : le nom de chaque champs (comme 'Max') est visible à l'écran quand on balade la crosshair. - array('label' => 'Min', 'type' => 'number'), // ... Il vaut donc mieux leur donner un nom explicite, notamment sur ce graphique avec plusieurs courbes. - array('label' => 'Avg', 'type' => 'number') // ... A noter que la question de la traduction peut se poser... - ); - - $nom_val_max = "Max"; // Nom de la variable sur laquelle la valeur max de la courbe sera calculée - $nom_val_min = "Min"; // Nom de la variable sur laquelle la valeur min de la courbe sera calculée - - $couleur_1 = "'rgb(0, 69, 99)'"; - $couleur_2 = "'rgb(117,185,218)'"; - $couleur_3 = "'rgb(171, 215, 237)'"; - - break; - } - - //=============== - case "Tous" : - { - $nb_jours_periode = DATE_SEUIL_1; - - $titre_graphique .= Recuperer_texte("bateau","details","rest","titre_graphe2").($nb_jours_periode).Recuperer_texte("bateau","details","rest","titre_graphe4"); - - $requete = ' SELECT (UNIX_TIMESTAMP(Date) * 1000) AS Date, '; - $requete .= ' Valeur AS Val '; // Le x1000 permet d'avoir directement un timestamp en ms (nécessaire pour la fonction Date de JS) - $requete .= ' FROM '.$nom_table.' WHERE ID_Bateau=? AND ID=? AND ID_Variable=? AND Date>? AND Date<=?'; - $requete .= ' GROUP BY (Date DIV '.$regroupement_donnees.') ORDER BY Date '; - - $table = array(); - $table['cols'] = array( - array('label' => 'Date', 'type' => 'datetime'), - array('label' => 'Val', 'type' => 'number'), - array('label' => 'Valeur_2', 'type' => 'number'), - array('label' => 'Valeur_3', 'type' => 'number') - ); - - $nom_val_max = "Val"; // Nom de la variable sur laquelle la valeur max de la courbe sera calculée - $nom_val_min = "Val"; // Nom de la variable sur laquelle la valeur min de la courbe sera calculée - - $couleur_1 = "'rgb(0, 69, 99)'"; - $couleur_2 = "'rgb(117,185,218)'"; - $couleur_3 = "'rgb(171, 215, 237)'"; - break; - } - } - - - // Préparation du tableau de valeurs : - $min = 999999; - $max = -999999; - $rows = array(); - - - - // Calcul des dates de début de filtrage des données du graphique : - $date = date_create(); - $date_fin = date_format($date, 'Y-m-d H:i:s'); - date_sub($date, date_interval_create_from_date_string(''.$nb_jours_periode.' days')); - $date_debut = date_format($date, 'Y-m-d H:i:s'); - - if ($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Synthese"){ - if(isset($_SESSION['Bateaux']['graphe_date_debut']) && $_SESSION['Bateaux']['graphe_date_debut'] != '') $date_debut = str_replace("T"," ",$_SESSION['Bateaux']['graphe_date_debut']).":00"; - if(isset($_SESSION['Bateaux']['graphe_date_fin']) && $_SESSION['Bateaux']['graphe_date_fin'] != '') $date_fin = str_replace("T"," ",$_SESSION['Bateaux']['graphe_date_fin']).":00"; - } - - // Récupération des noms de variables - $var_reponse = Requete_preparee_bdd($variables, - array( - array('i', $type_var), - array('i', $bateau['Cle_primaire']) - ), - __FILE__, __LINE__); - -//echo 'Requête : '.$variables.', type_var='.$type_var.' et clé_primaire du bateau = '.$bateau['Cle_primaire'].'
'; - $nb_var = 0; - $variables = NULL; - while ($donnees = Recherche_ligne_bdd($var_reponse)) - { -// echo $nb_var.' : '.$donnees['Nom'].'
'; - $variables[$nb_var ++] = $donnees; - } - Liberation_jeu_de_resultat_bdd($var_reponse); - - - // Récupération des datas : - if ($_SESSION['Bateaux']['id_variable_details_bateau'] == 0){ - $_SESSION['Bateaux']['id_variable_details_bateau'] = $variables[0]['Cle_primaire']; // Variable par default pour ne pas avoir un graphe vide - } - - $reponse = Requete_preparee_bdd($requete, - array( - array('i', $bateau['Cle_primaire']), - array('i', $_SESSION['Bateaux']['id_entree_details_bateau']), - array('i', $_SESSION['Bateaux']['id_variable_details_bateau']), - array('s', $date_debut), - array('s', $date_fin)), - __FILE__, __LINE__); - $nb_val = 0; - while ($donnees = Recherche_ligne_bdd($reponse)) - { - // Préparation de la chaine de date selon format "Date(Year, Month, Day, Hours, Minutes, Seconds, Milliseconds)" : - $chaine_date = 'Date('.$donnees['Date'].')'; // On créée la chaine qui appellera la fonction Date avec le timestamp (soit une chaine du genre 'Date(124524415214225)') - $temp = array(); - $temp[] = array('v' => $chaine_date); - switch($_SESSION['Bateaux']['type_courbe_details_bateau']) - { - case "Synthese" : - { - $temp[] = array('v' => $donnees['Max']); - $temp[] = array('v' => $donnees['Min']); - $temp[] = array('v' => $donnees['Avg']); - break; - } - case "Tous" : - { - $temp[] = array('v' => $donnees['Val']); - break; - } - } - $rows[] = array('c' => $temp); - - if ($donnees[''.$nom_val_max.''] != '' && $donnees[''.$nom_val_max.''] > $max) $max = $donnees[''.$nom_val_max.'']; - if ($donnees[''.$nom_val_min.''] != '' && $donnees[''.$nom_val_min.''] < $min) $min = $donnees[''.$nom_val_min.'']; - $nb_val ++; - } - Liberation_jeu_de_resultat_bdd($reponse); - //$titre_graphique .= "
Nb de valeurs = ".$nb_val."
"; - // Préparation des données : - // Création des faux points 0.1ms avant chaque nouveau enregistrement pour bien affiché les graphes - switch($_SESSION['Bateaux']['type_courbe_details_bateau']) - { - case "Synthese" : - { - $size = sizeof($rows); - for ($i = 1; $i < $size; $i++){ - $date = str_replace(')','',str_replace('Date(','',$rows[$i]['c']['0']['v']))-100; - $date = 'Date('.$date.')'; - - $temp_faux = array(); - $temp_faux[] = array('v' => $date); - $temp_faux[] = array('v' => $rows[$i-1]['c']['1']['v']); - $temp_faux[] = array('v' => $rows[$i-1]['c']['2']['v']); - $temp_faux[] = array('v' => $rows[$i-1]['c']['3']['v']); - $rows[] = array('c' => $temp_faux); - } - // if (sizeof($rows) > 0){ - // $temp_faux = array(); - // $temp_faux[] = array('v' => "Date(".time()."000)"); - // $temp_faux[] = array('v' => $rows[$i-1]['c']['1']['v']); - // $temp_faux[] = array('v' => $rows[$i-1]['c']['2']['v']); - // $temp_faux[] = array('v' => $rows[$i-1]['c']['3']['v']); - // $rows[] = array('c' => $temp_faux); - // } - - break; - } - case "Tous" : - { - $size = sizeof($rows); - for ($i = 1; $i < $size; $i++){ - $date = str_replace(')','',str_replace('Date(','',$rows[$i]['c']['0']['v']))-100; - $date = 'Date('.$date.')'; - - $temp_faux = array(); - $temp_faux[] = array('v' => $date); - $temp_faux[] = array('v' => $rows[$i-1]['c']['1']['v']); - - $rows[] = array('c' => $temp_faux); - } - // if (sizeof($rows) > 0){ - // $temp_faux = array(); - // $temp_faux[] = array('v' => "Date(".time()."000)"); - // $temp_faux[] = array('v' => $rows[$i-1]['c']['1']['v']); - - // $rows[] = array('c' => $temp_faux); - // } - break; - } - } - - // Trier le tableau du data - function sortByDate_rows($a, $b) { - return str_replace(')','',str_replace('Date(','',$a['c']['0']['v'])) - str_replace(')','',str_replace('Date(','',$b['c']['0']['v'])); - } - usort($rows, 'sortByDate_rows'); - - $table['rows'] = $rows; // Stockage de toutes les rows créées dans 'table' - $jsonTable = json_encode($table); // Mise au format JSON pour être lu par la fonction JS - - $nomgraphique = "'graphique_".$_SESSION['Bateaux']['id_entree_details_bateau']."'"; // Permet de passer à la fonction JS le nom du graphique (différent pour chaque capteur...) - - /*$nb_intervalles = 5; - $maille = 100; - $max = ceil($max / $maille) * $maille; - $intervalle = floor(($max - $min) / $nb_intervalles); - echo 'Min = '.$min.', Max = '.$max.' et intervalle = '.$intervalle.'
'; - */ - - //=============================================================================================================================================== - // GRAPHIQUES : - //=============================================================================================================================================== - // Appels JavaScript pour générer le graphique : - ?> - - '; - } - - break; - } - - //========================= default: break; } // Fin du switch 'type_details_bateau' - $requete_date_maj = "SELECT substr(date_maj,1,10) as date from TB_BATEAUX_Systeme_archive WHERE ID_Bateau = ? GROUP BY substr(date_maj,1,10) UNION - SELECT substr(date_maj,1,10) as date from TB_BATEAUX_Batteries_archive WHERE ID_Bateau = ? GROUP BY substr(date_maj,1,10) UNION - SELECT substr(date_maj,1,10) as date from TB_BATEAUX_Cartes_archive WHERE ID_Bateau = ? GROUP BY substr(date_maj,1,10) UNION - SELECT substr(date_maj,1,10) as date from TB_BATEAUX_Circuits_archive WHERE ID_Bateau = ? GROUP BY substr(date_maj,1,10) UNION - SELECT substr(date_maj,1,10) as date from TB_BATEAUX_Systeme_archive WHERE ID_Bateau = ? GROUP BY substr(date_maj,1,10) "; - $reponse_date_maj = Requete_preparee_bdd($requete_date_maj, - array( - array('i', $bateau['Cle_primaire']), - array('i', $bateau['Cle_primaire']), - array('i', $bateau['Cle_primaire']), - array('i', $bateau['Cle_primaire']), - array('i', $bateau['Cle_primaire']) - ), - __FILE__, __LINE__); - $nb_dates_maj = 0; - while ($donnees = Recherche_ligne_bdd($reponse_date_maj)) - { - $dates_maj[$nb_dates_maj ++] = $donnees; - } - Liberation_jeu_de_resultat_bdd($reponse_date_maj); - - function sortByDate($a, $b) { - return str_replace('-','',preg_replace('/[T_-_ _:]/', '', $b['date'])) - str_replace('-','',preg_replace('/[T_-_ _:]/', '', $a['date'])); - } - if ($nb_dates_maj != 0) usort($dates_maj, 'sortByDate'); - + + break; @@ -2042,10 +551,7 @@ echo "Requête = [ ".$requete."; ]
"; $_SESSION['Bateaux']['bateau']['Cle_primaire'] = 0; $_SESSION['Bateaux']['bateau']['Nom'] = ""; $_SESSION['Bateaux']['bateau']['ID_Flotte'] = 0; - $_SESSION['Bateaux']['bateau']['ID_Carte'] = 0; $_SESSION['Bateaux']['bateau']['Date_mes'] = date("Y-m-d"); - $_SESSION['Bateaux']['bateau']['Date_carte'] = date("Y-m-d"); - $_SESSION['Bateaux']['bateau']['Date_derniere_maj'] = "2020-01-01 00:00:00"; $_SESSION['Bateaux']['bateau']['Commentaires'] = ""; } else // Modification : @@ -2083,29 +589,6 @@ echo "Requête = [ ".$requete."; ]
"; } Liberation_jeu_de_resultat_bdd($reponse); - //-------------------------------------------------------------------------------------- - // Recherche des cartes existantes et disponibles (+ la carte actuellement installée) : - $nb_cartes = 0; - - $cartes[$nb_cartes]['Cle_primaire'] = 0; - $cartes[$nb_cartes]['No_serie'] = '--- Aucune carte ShipBase installée ---'; - $cartes[$nb_cartes]['Adresse_mac'] = ""; - $cartes[$nb_cartes]['Affectee'] = false; - $nb_cartes ++; - - // $requete = 'SELECT * FROM TB_Cartes WHERE Validite=1 AND Type=1 AND (NOT EXISTS (SELECT ID_Carte FROM TB_Bateaux WHERE TB_Cartes.Cle_primaire=TB_Bateaux.ID_Carte) OR '.$ajout_requete.') ORDER BY No_serie ASC'; - $requete = 'SELECT *, EXISTS(SELECT ID_Carte FROM TB_Bateaux WHERE TB_Bateaux.Validite=1 AND TB_Cartes.Cle_primaire=TB_Bateaux.ID_Carte) AS Affectee FROM TB_Cartes WHERE Validite=1 AND Type=0 AND Etat!='.ETAT_CARTE_REBUT.' ORDER BY No_serie ASC'; - $reponse = Requete_preparee_bdd($requete, - array(), - __FILE__, __LINE__); - while ($donnees = Recherche_ligne_bdd($reponse)) - { - $cartes[$nb_cartes] = $donnees; - if ($_SESSION['Bateaux']['bateau']['ID_Carte'] == $donnees['Cle_primaire']) $cartes[$nb_cartes]['Affectee'] = false; // Permet de resélectionner la carte existante carte... - $nb_cartes ++; - } - Liberation_jeu_de_resultat_bdd($reponse); - break; } @@ -2154,7 +637,7 @@ echo "Requête = [ ".$requete."; ]
"; '; echo 'Nom'; echo 'Flotte'; - echo 'ShipBase'; +// echo 'ShipBase'; echo 'Adresse MAC'; echo 'Version'; echo 'Dernière mise à jour [UTC]'; @@ -2171,7 +654,7 @@ echo "Requête = [ ".$requete."; ]
"; '; echo ''.$bateaux[$i]['nom_flotte'].''; - echo ''.$bateaux[$i]['nom_carte'].''; +// echo ''.$bateaux[$i]['nom_carte'].''; echo ''.$bateaux[$i]['adresse_carte'].''; echo ''.$bateaux[$i]['version'].''; echo ''.$bateaux[$i]['Date_derniere_maj'].''; @@ -2204,7 +687,6 @@ echo "Requête = [ ".$requete."; ]
"; if ($_SESSION['shipmember']['Niveau_acces'] >= NIVEAU_ACCES_MINI_ADMINISTRATEUR || $acces_profil['Consultation_donnees'] == 2) { echo ''; } - echo '
'.Recuperer_texte("bateau","details","derniere_connexion","libelle").' : '.$bateau['Date_derniere_maj'].' [UTC]
'; + echo '
'.t("Derniere_connexion").' : '.$bateau['Date_derniere_maj'].' [UTC]
'; echo ''; - - // if ($nb_dates_maj != 0){ - // echo '
Consulter une configuration précédente :'; - // echo '
- - // - // - //
'; - - // echo '
'; - // } - // echo '
Version date précise:'; - // echo '
- // - - // - //
'; - - // echo '
'; - - - // if ($nb_data > 0){ - // echo '
- - //
'; - // } //-------------------------------- - // Boutons de haut de page : + // Boutons de haut de page (les anciens onglets Carte/Batteries/Circuits/Réservoirs/Capteurs/Système, liés au + // modèle CM4 centralisé, ont été retirés - la consultation des données sera refaite sur la base de la génération + // active du bateau, lot 3 - synthèse §44.10) : echo '
'; - if ( ($_SESSION['shipmember']['Niveau_acces'] >= NIVEAU_ACCES_MINI_ADMINISTRATEUR) || - (($acces_profil['Consultation_donnees'] == 1) || - ($acces_profil['Consultation_donnees'] == 2)) ) - { - - echo '
'; - echo Ajouter_lien_modif_buttons("bateau","details","boutons","carte"); - echo ' - '.$_SESSION['textes']['bateau']['details']['boutons']['carte'] .' - '; - echo '
'; - echo '
'; - echo Ajouter_lien_modif_buttons("bateau","details","boutons","batteries"); - echo ' - '.$_SESSION['textes']['bateau']['details']['boutons']['batteries'] .' - '; - echo '
'; - echo '
'; - echo Ajouter_lien_modif_buttons("bateau","details","boutons","circuits"); - echo ' - '.$_SESSION['textes']['bateau']['details']['boutons']['circuits'] .' - '; - echo '
'; - echo '
'; - echo Ajouter_lien_modif_buttons("bateau","details","boutons","reservoirs"); - echo ' - '.$_SESSION['textes']['bateau']['details']['boutons']['reservoirs'] .' - '; - echo '
'; - echo '
'; - echo Ajouter_lien_modif_buttons("bateau","details","boutons","capteurs"); - echo ' - '.$_SESSION['textes']['bateau']['details']['boutons']['capteurs'] .' - '; - echo '
'; - echo '
'; - echo Ajouter_lien_modif_buttons("bateau","details","boutons","par_sys"); - echo '' - .$_SESSION['textes']['bateau']['details']['boutons']['par_sys']. - ''; - echo '
'; - } - - + echo '
'; + echo ''.t("Données du bateau").''; + echo '
'; echo '
'; - // Affichage des onglets lorsqu'il y en a : - if ($nb_onglets > 0) - { - echo '
'; - for ($i = 0; $i < $nb_onglets; $i ++) - { - echo '' - .$bateau['onglets'][$i]['Nom']. - ''; - } - echo '
'; - } - echo '
'; switch($_SESSION['Bateaux']['type_details_bateau']) { - case "TB_BATEAUX_Carte": - { - if ($nb_data > 0){ - echo '
'; - - echo '
'; - - // echo '
- //
- // - // - // - // - // '; - // for ($i = 0; $i < $nb_batteries; $i ++) - // { - // echo ' - // - // - // - // - // - // - // '; - // } - // elseif ($i==1) { - // echo - // '[en dur]Maximale : - // - // '; - // } - // if ($i==2) { - // echo - // '[en dur]Minimale: - // - // '; - // } - // echo - // ''; - // } - // echo' - //
Etat de charge : Consommation électrique :
'.$batteries[$i]['Nom'].' : '.$batteries[$i]['Tension_nominale'].' V '.$batteries[$i]['Soc'].' % '; - // if ($i==0) { - // echo - // '[en dur]Moyenne: [en dur]3.2A [en dur]Sur 24h [en dur]8.2A [en dur]2h30 au total [en dur]0.13 [en dur]13h21
- //


- // - // - // - // - // - // - // - // - // - // - // - // - // - // '; - - - // for ($i = 0; $i < $nb_familles; $i ++){ - // echo - // ' - // - // - // - // - // - // ' - // ; - // for($j = 0; $j < sizeof($bateau['familles'][$i]['reservoirs']); $j++){ - // echo - // ' - // - // - // - // - // - // - // - // - // ' - // ; - // } - // } - - // echo - - // ' - // - // - // - // - // - // - // - // - // - // - // - // - // - // - // - // - // - // - // - // - //
Date début de la croisière : Date fin de la croisière : Nom de la croisière :
Nom
'.$bateau['familles'][$i]['Nom'].' : Consommation moyenne : Consommation depuis le début de la croisière : Nbre de pleins :
'.$bateau['familles'][$i]['reservoirs'][$j]['Nom'].' : '.$bateau['familles'][$i]['reservoirs'][$j]['Capacite'].' l '.$bateau['familles'][$i]['reservoirs'][$j]['Niveau'].' % [en dur] x/24h [en dur] x l [en dur] x
Distance parcourue : Vitesse moyenne : Vitesse max :
Dernières 24h : Depuis le début de la croisière : Dernières 24h : Depuis le début de la croisière : Depuis le début de la croisière :
- - echo '
'; - } - break; - } - //=========================================================== - case "TB_BATEAUX_Batteries": - { - for ($i = 0; $i < $nb_entrees; $i ++) - { - echo '
'; // L'utilisation d'une div dédiée permet de donner une "hauteur" à l'ancre et ainsi dégager de dessous le bandeau de menu... - - echo '
-

- - '.$bateau['details_bateau'][$i]['Nom'].' - -

- -
-

'.Recuperer_texte("bateau","details","batterie","tension").' : '.number_format($bateau['details_bateau'][$i]['Tension'], 2, ".", " ").' V

-

'.Recuperer_texte("bateau","details","batterie","soc").' : - $bateau['details_bateau'][$i]['Soc_seuil_haut']) echo " green"; - else echo " orange"; - echo '">'.number_format($bateau['details_bateau'][$i]['Soc'], 2, ".", " ").' % -

-
- - -
'; - - // Graphique : - if (($bateau['details_bateau'][$i]['Cle_primaire'] == $_SESSION['Bateaux']['id_entree_details_bateau']) AND - ($_SESSION['Bateaux']['type_courbe_details_bateau'] != "Aucune")) - { - echo '
'; - echo '
'; - for($j = 0; $j < $nb_var; $j++){ - if ($_SESSION['Bateaux']['id_variable_details_bateau'] == $variables[$j]['Cle_primaire']){ - $titre_graphique = $variables[$j]['Nom'].' (en '.$variables[$j]['Unite'].')'.$titre_graphique; - } - } - echo $titre_graphique; - echo '
'; - if($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Synthese" ){ - echo ' -
- - - -
'; - } - echo '
'; - if($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Tous" || $_SESSION['Bateaux']['type_courbe_details_bateau'] == "Synthese"){ - echo '
'; - - for($j = 0; $j < $nb_var; $j++){ - echo ''; - } - echo' -
'; - } - echo'
-
'; - echo '
- -
'; - $_SESSION['Bateaux']['graphe_date_debut'] = ''; - $_SESSION['Bateaux']['graphe_date_fin'] = ''; - echo '
'; - echo ''.$_SESSION['textes']['bateau']['details']['graph']['display_all'].Ajouter_lien_modif_buttons("bateau","details","graph","display_all").''; - else echo ' >'.$_SESSION['textes']['bateau']['details']['graph']['display_daily'] .Ajouter_lien_modif_buttons("bateau","details","graph","display_daily").''; - echo '
'; - // Capacité 1 : - echo '
-
'.Recuperer_texte("bateau","details","batterie","cap").' 1
-
'.$bateau['details_bateau'][$i]['capacite_1'].'
-
'; - - // Capacité 2 : - echo '
-
'.Recuperer_texte("bateau","details","batterie","cap").' 2
-
'.$bateau['details_bateau'][$i]['capacite_2'].'
-
'; - - // Type : - echo '
'; - //echo '
'.Recuperer_texte("bateau","details","batterie","cap").' 2
- echo '
Type de batterie
-
'.$bateau['details_bateau'][$i]['type'].'
-
'; - - // Seuil soc haut : - echo '
-
'.Recuperer_texte("bateau","details","batterie","seuil_haut").'
-
'.number_format($bateau['details_bateau'][$i]['Soc_seuil_haut'], 0, ".", " ").' %
-
'; - - // Seuil soc bas : - echo '
-
'.Recuperer_texte("bateau","details","batterie","seuil_bas").'
-
'.number_format($bateau['details_bateau'][$i]['Soc_seuil_bas'], 0, ".", " ").' %
-
'; - - } - - - } - - break; - } - - //=========================================================== - case "TB_BATEAUX_Circuits": - { - for ($i = 0; $i < $nb_entrees; $i ++) - { - echo '
'; // L'utilisation d'une div dédiée permet de donner une "hauteur" à l'ancre et ainsi dégager de dessous le bandeau de menu... - - echo '
-

- - '.$bateau['details_bateau'][$i]['Nom'].' - -

- -
-

Off'; - elseif ($bateau['details_bateau'][$i]['Etat_commande_carte'] == 2) echo 'A DEFINIR en fonction de la valeur de Mode_test de la carte de commande'; - elseif ($bateau['details_bateau'][$i]['Consigne'] == 0) echo 'capteur_off "> Off'; - else - { - echo 'capteur_on "> On'; - echo '

'.number_format($bateau['details_bateau'][$i]['Intensite'], 2, ".", " ").' A

'; - if (($bateau['details_bateau'][$i]['Consigne'] > 0) AND - ($bateau['details_bateau'][$i]['Consigne'] < 100)) echo '['.$bateau['details_bateau'][$i]['Consigne'].' %]'; - } - echo '

- - -

- - -
'; - - - // Graphique : - if (($bateau['details_bateau'][$i]['Cle_primaire'] == $_SESSION['Bateaux']['id_entree_details_bateau']) AND - ($_SESSION['Bateaux']['type_courbe_details_bateau'] != "Aucune")) - { - echo '
'; - echo '
'; - for($j = 0; $j < $nb_var; $j++){ - if ($_SESSION['Bateaux']['id_variable_details_bateau'] == $variables[$j]['Cle_primaire']){ - $titre_graphique = $variables[$j]['Nom'].' (en '.$variables[$j]['Unite'].')'.$titre_graphique; - } - } - echo $titre_graphique; - echo '
'; - if($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Synthese" ){ - echo ' -
- - - -
'; - } - echo '
'; - if($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Tous" || $_SESSION['Bateaux']['type_courbe_details_bateau'] == "Synthese"){ - echo '
'; - - for($j = 0; $j < $nb_var; $j++){ - echo ''; - } - echo' -
'; - } - echo'
-
'; - echo '
- -
'; - $_SESSION['Bateaux']['graphe_date_debut'] = ''; - $_SESSION['Bateaux']['graphe_date_fin'] = ''; - echo '
'; - echo ''.$_SESSION['textes']['bateau']['details']['graph']['display_all'].Ajouter_lien_modif_buttons("bateau","details","graph","display_all").''; - else echo ' >'.$_SESSION['textes']['bateau']['details']['graph']['display_daily'] .Ajouter_lien_modif_buttons("bateau","details","graph","display_daily").''; - echo '
'; - - // Etat : - echo '
-
'.Recuperer_texte("bateau","details","circuits","etat").'
-
'; - if ($bateau['details_bateau'][$i]['Etat_commande_carte'] == 1) { echo Recuperer_texte("bateau","details","circuits","tension_faible"); } - elseif ($bateau['details_bateau'][$i]['Etat_commande_carte'] == 2) { echo Recuperer_texte("bateau","details","circuits","cmd_man"); } - else - { - switch($bateau['details_bateau'][$i]['Etat']) - { - case 1 : { echo Recuperer_texte("bateau","details","circuits","limitation"); break; } - case 2 : { echo Recuperer_texte("bateau","details","circuits","protection"); break; } - case 3 : { echo Recuperer_texte("bateau","details","circuits","disjonction"); break; } - case 4 : { echo Recuperer_texte("bateau","details","circuits","court_circuit_batterie"); break; } - case 5 : { echo Recuperer_texte("bateau","details","circuits","delestage"); break; } - default: { echo Recuperer_texte("bateau","details","circuits","ok"); break; } - } - } - echo '
-
'; - - // Consigne : - echo '
-
'.Recuperer_texte("bateau","details","circuits","etat").'
-
'; - if ($bateau['details_bateau'][$i]['Etat_commande_carte'] == 1) echo 'Off'; - elseif ($bateau['details_bateau'][$i]['Etat_commande_carte'] == 2) echo 'A DEFINIR en fonction de la valeur de Mode_test de la carte de commande'; - elseif ($bateau['details_bateau'][$i]['Consigne'] == 0) echo 'Off'; - else - { - echo 'On'; - if (($bateau['details_bateau'][$i]['Consigne'] > 0) AND - ($bateau['details_bateau'][$i]['Consigne'] < 100)) echo '['.$bateau['details_bateau'][$i]['Consigne'].' %]'; - } - echo '
-
'; - - // Seuil de disjonction : - echo '
-
'.Recuperer_texte("bateau","details","circuits","seuil_disjonction").'
-
'.number_format($bateau['details_bateau'][$i]['Intensite_seuil_haut'], 0, ".", " ").' A
-
'; - - // Temporisation de disjonction : - echo '
-
'.Recuperer_texte("bateau","details","circuits","temp_disjonction").'
-
'.number_format($bateau['details_bateau'][$i]['Intensite_seuil_haut_tempo']/1000, 1, ".", " ").' '.Recuperer_texte("bateau","details","circuits","sec").'
-
'; - - } - - } - - break; - } - - //=========================================================== - case "TB_BATEAUX_Reservoirs": - { - for ($i = 0; $i < $nb_entrees; $i ++) - { - echo '
'; // L'utilisation d'une div dédiée permet de donner une "hauteur" à l'ancre et ainsi dégager de dessous le bandeau de menu... - - echo '
-

- - '.$bateau['details_bateau'][$i]['Nom'].' - -

- -
-

'.Recuperer_texte("bateau","details","reservoirs","niveau").' : - $bateau['details_bateau'][$i]['Niveau_seuil_haut']) echo " green"; - else echo " orange"; - echo '">'.number_format(($bateau['details_bateau'][$i]['Capacite'] * $bateau['details_bateau'][$i]['Niveau'])/100, 0, ".", " ").' '.Recuperer_texte("bateau","details","reservoirs","litres").' - soit '.number_format($bateau['details_bateau'][$i]['Niveau'], 1, ".", " ").' % - -

-

'.Recuperer_texte("bateau","details","reservoirs","capacite_totale").' : '.$bateau['details_bateau'][$i]['Capacite'].' litres -

-
- - -
'; - - // Graphique : - if (($bateau['details_bateau'][$i]['Cle_primaire'] == $_SESSION['Bateaux']['id_entree_details_bateau']) AND - ($_SESSION['Bateaux']['type_courbe_details_bateau'] != "Aucune")) - { - echo '
'; - echo '
'; - for($j = 0; $j < $nb_var; $j++){ - if ($_SESSION['Bateaux']['id_variable_details_bateau'] == $variables[$j]['Cle_primaire']){ - $titre_graphique = $variables[$j]['Nom'].' (en '.$variables[$j]['Unite'].')'.$titre_graphique; - } - } - echo $titre_graphique; - echo '
'; - if($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Synthese" ){ - echo ' -
- - - -
'; - } - echo '
'; - if($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Tous" || $_SESSION['Bateaux']['type_courbe_details_bateau'] == "Synthese"){ - echo ''; - } - echo'
-
'; - echo '
- -
'; - $_SESSION['Bateaux']['graphe_date_debut'] = ''; - $_SESSION['Bateaux']['graphe_date_fin'] = ''; - echo '
'; - echo ''.$_SESSION['textes']['bateau']['details']['graph']['display_all'].Ajouter_lien_modif_buttons("bateau","details","graph","display_all").''; - else echo ' >'.$_SESSION['textes']['bateau']['details']['graph']['display_daily'] .Ajouter_lien_modif_buttons("bateau","details","graph","display_daily").''; - echo '
'; - - // // Seuil niveau haut : - echo '
-
'.Recuperer_texte("bateau","details","reservoirs","seuil_haut").'
-
'.number_format($bateau['details_bateau'][$i]['Niveau_seuil_haut'], 0, ".", " ").' %
-
'; - - // Seuil niveau bas : - echo '
-
'.Recuperer_texte("bateau","details","reservoirs","seuil_bas").'
-
'.number_format($bateau['details_bateau'][$i]['Niveau_seuil_bas'], 0, ".", " ").' %
-
'; - } - } - - break; - } - - //=========================================================== - case "TB_BATEAUX_Capteurs": - { - for ($i = 0; $i < $nb_entrees; $i ++) - { - echo '
'; // L'utilisation d'une div dédiée permet de donner une "hauteur" à l'ancre et ainsi dégager de dessous le bandeau de menu... - - echo '
-

- - '.$bateau['details_bateau'][$i]['Nom'].' - -

- -
-

'.Recuperer_texte("bateau","details","capteurs","valeur").' : - '.number_format($bateau['details_bateau'][$i]['Valeur'], $bateau['details_bateau'][$i]['Precision_affichage_accueil'], ".", " ").' '.$bateau['details_bateau'][$i]['Unite'].' -

-
- - -
'; - - - - // Graphique : - if (($bateau['details_bateau'][$i]['Cle_primaire'] == $_SESSION['Bateaux']['id_entree_details_bateau']) AND - ($_SESSION['Bateaux']['type_courbe_details_bateau'] != "Aucune")) - { - echo '
'; - echo '
'; - echo $titre_graphique; - echo '
'; - - if($_SESSION['Bateaux']['type_courbe_details_bateau'] == "Synthese"){ - echo '
- - - - -
'; - } - echo '
'; - echo'
-
'; - echo '
- -
'; - $_SESSION['Bateaux']['graphe_date_debut'] = ''; - $_SESSION['Bateaux']['graphe_date_fin'] = ''; - echo '
'; - echo ''.$_SESSION['textes']['bateau']['details']['graph']['display_all'].Ajouter_lien_modif_buttons("bateau","details","graph","display_all").''; - else echo ' >'.$_SESSION['textes']['bateau']['details']['graph']['display_daily'] .Ajouter_lien_modif_buttons("bateau","details","graph","display_daily").''; - echo '
'; - - // Valeur seuil haut : - echo '
-
'.Recuperer_texte("bateau","details","capteurs","valeur_seuil_haut").'
-
'.number_format($bateau['details_bateau'][$i]['Valeur_seuil_haut'], $bateau['details_bateau'][$i]['Precision_affichage_accueil'], ".", " ").' '.$bateau['details_bateau'][$i]['Unite'].'
-
'; - - // Valeur seuil bas : - echo '
-
'.Recuperer_texte("bienvenue","details","capteurs","valeur_seuil_bas").'
-
'.number_format($bateau['details_bateau'][$i]['Valeur_seuil_bas'], $bateau['details_bateau'][$i]['Precision_affichage_accueil'], ".", " ").' '.$bateau['details_bateau'][$i]['Unite'].'
-
'; - - // Etat : - echo '
-
'.Recuperer_texte("bateau","details","capteurs","etat").'
-
'; - if ($bateau['details_bateau'][$i]['Etat'] == 0) { echo Recuperer_texte("bateau","details","capteurs","ok"); } - elseif ($bateau['details_bateau'][$i]['Etat'] == 1) { echo Recuperer_texte("bateau","details","capteurs","alerte"); } - elseif ($bateau['details_bateau'][$i]['Etat'] == 2) { echo Recuperer_texte("bateau","details","capteurs","alarme"); } - - echo '
-
'; - } - - - - // // Boutons graphique : - // echo '
'; - // echo ''.$_SESSION['textes']['bateau']['details']['graph']['hide'].''; - // else echo ' >'.$_SESSION['textes']['bateau']['details']['graph']['display_daily'] .Ajouter_lien_modif_buttons("bateau","details","graph","display_daily").''; - // echo ''.$_SESSION['textes']['bateau']['details']['graph']['hide'].''; - // else echo ' >'.$_SESSION['textes']['bateau']['details']['graph']['display_all'] .''; - // echo '
'; - } - - break; - } - - //=========================================================== - case "TB_BATEAUX_Systeme": - { - // Informations provenant de TB_Systeme : - // Version : - echo '
-
'.Recuperer_texte("bateau","details","parsys","ver").'
-
'.$bateau['version'].'
-
'; - - // Version modem : - echo '
-
'.Recuperer_texte("bateau","details","parsys","verm").'
-
'.$bateau['details_bateau']['Version_soft_modem']['Valeur'].'
-
'; - - // N° d'ICCID : - echo '
-
'.Recuperer_texte("bateau","details","parsys","iccid").'
-
'.$bateau['details_bateau']['No_iccid']['Valeur'].'
-
'; - - // N° d'IMEI : - echo '
-
'.Recuperer_texte("bateau","details","parsys","imei").'
-
'.$bateau['details_bateau']['No_imei']['Valeur'].'
-
'; - - // N° d'IMSI : - echo '
-
'.Recuperer_texte("bateau","details","parsys","imsi").'
-
'.$bateau['details_bateau']['No_imsi']['Valeur'].'
-
'; - - // Informations sur les cartes présentes à bord (TB_Cartes) : - for ($i = 0; $i < $nb_cartes; $i ++) - { - - echo '
'; // L'utilisation d'une div dédiée permet de donner une "hauteur" à l'ancre et ainsi dégager de dessous le bandeau de menu... - - echo '
-

'; - echo ''; - if (($cartes[$i]['Adresse_k_bus']) != 0 ) echo $cartes[$i]['Adresse_k_bus']." - "; - echo $cartes[$i]['nom_type']; - echo ''; - echo '

- -
-

'.Recuperer_texte("bateau","details","parsys","mac").' : '.$cartes[$i]['Adresse_mac'].'

-

'.Recuperer_texte("bateau","details","parsys","ver_logicielle").' : '.$cartes[$i]['Software_version'].'

'; - echo '
- - -
'; - - if ($cartes[$i]['Cle_primaire'] == $_SESSION['Bateaux']['id_entree_details_bateau']){ - echo '
'; - // Résistance de terminaison : - echo '
-
'.Recuperer_texte("bateau","details","parsys","resistance").'
-
'.$cartes[$i]['libelle_resistance_terminaison'].'
-
'; - - // Version matérielle : - echo '
-
'.Recuperer_texte("bateau","details","parsys","ver_materielle").'
-
'.$cartes[$i]['Hardware_version'].'
-
'; - - // Données spécifiques en fonction du type de carte : - echo '
'; - switch($cartes[$i]['Type']) - { - //--------------------------- - case TYPE_CARTE_SP812: - case TYPE_CARTE_SP8DC: - { - // Circuits affectés à ce module : - for ($j = 0; $j < 8; $j++) - { - echo '
-
Circuit n° '.($j + 1).'
-
'.$cartes[$i]['circuits'][$j]['Nom'].'
-
'; - } - - break; - } - - //--------------------------- - case TYPE_CARTE_SP4AC: - { - // Circuits affectés à ce module : - for ($j = 0; $j < 4; $j++) - { - echo '
-
Circuit n° '.($j + 1).'
-
'.$cartes[$i]['circuits'][$j]['Nom'].'
-
'; - } - break; - } - - //--------------------------- - case TYPE_CARTE_COMPAGNON: - case TYPE_CARTE_SBS1224: - default : break; - } - echo '
'; - } - } - - /* // Version complète de tous les champs de TB_Systeme : - foreach($bateau['details_bateau'] as $key => $value) - { - echo '
-
- '.$key.' -
-
- '.$value['Valeur'].' -
'; - if (isset($value['Description'])) - { - echo '
- '.$value['Description'].' -
'; - } - echo '
'; - } - */ - break; - } - - //=========================================================== case "gerer_les_acces": { @@ -3095,11 +729,11 @@ echo "Requête = [ ".$requete."; ]
"; echo '
'; echo ' '; echo ' '; - echo ' '; - echo ' '; - echo ' '; - echo ' '; - echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ' '; echo ' '; echo ' '; if ($utilisateur_acces_nb == 0) echo ''; @@ -3137,17 +771,17 @@ echo "Requête = [ ".$requete."; ]
"; echo ''; @@ -3173,9 +807,10 @@ echo "Requête = [ ".$requete."; ]
"; } //=========================================================== + // 'resume' (et toute ancienne valeur de session) : default: { - echo '

'.Recuperer_texte("bateau","details","autres","autre").'

'; + echo '

'.t("La consultation des données du bateau sera disponible prochainement.").'

'; break; } } @@ -3201,42 +836,12 @@ echo "Requête = [ ".$requete."; ]
"; echo '

'; switch($_SESSION['Bateaux']['type_details_bateau']) { - case 'TB_BATEAUX_Carte': - { - echo Recuperer_texte("bateau","details","help_note","carte").Ajouter_lien_modif("bateau","details","help_note","carte"); - break; - } - case 'TB_BATEAUX_Batteries': - { - echo Recuperer_texte("bateau","details","help_note","batteries").Ajouter_lien_modif("bateau","details","help_note","batteries"); - break; - } - case 'TB_BATEAUX_Circuits': - { - echo Recuperer_texte("bateau","details","help_note","circuits").Ajouter_lien_modif("bateau","details","help_note","circuits"); - break; - } - case 'TB_BATEAUX_Reservoirs': - { - echo Recuperer_texte("bateau","details","help_note","reservoirs").Ajouter_lien_modif("bateau","details","help_note","reservoirs"); - break; - } - case 'TB_BATEAUX_Capteurs': - { - echo Recuperer_texte("bateau","details","help_note","capteurs").Ajouter_lien_modif("bateau","details","help_note","capteurs"); - break; - } - case 'TB_BATEAUX_Systeme': - { - echo Recuperer_texte("bateau","details","help_note","systeme").Ajouter_lien_modif("bateau","details","help_note","systeme"); - break; - } case 'gerer_les_acces': - { - echo Recuperer_texte("bateau","details","help_note","acces").Ajouter_lien_modif("bateau","details","help_note","acces"); - break; - } - + { + echo t("Aide accès"); + break; + } + default: break; } echo '

'; echo ''; @@ -3306,39 +911,6 @@ echo "Requête = [ ".$requete."; ]
"; '; - //---------------------------------------- - // Carte : - echo '
-
- Carte ShipBase installée à bord -
-
- -
-
'; - - //---------------------------------------- - // Date d'installation de la carte ShipBase à bord : - echo '
-
- Date d\'installation de la carte ShipBase à bord -
-
- -
-
'; - //---------------------------------------- // Commentaires : echo '
@@ -3431,9 +1003,6 @@ Pied_de_page(); } } - $(window).resize(function(){ - drawChart(); - }); function closeEditAccess(){ document.getElementById('popUpAcces').style.display = "none"; @@ -3458,228 +1027,4 @@ Pied_de_page(); document.getElementById('fin_validiteForm').value = acces['Fin_validite'].substring(0,10); } - function calculateDistance(lat1, lon1, lat2, lon2) { - const earthRadius = 6371; - - const deltaLat = (lat2 - lat1) * (Math.PI / 180); - const deltaLon = (lon2 - lon1) * (Math.PI / 180); - - const a = Math.sin(deltaLat / 2) ** 2 + Math.cos(lat1 * (Math.PI / 180)) * Math.cos(lat2 * (Math.PI / 180)) * Math.sin(deltaLon / 2) ** 2; - const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); - - const distance = earthRadius * c; - - // 2eme méthode, même résultat - // a1 = Math.sin(lat1 * (Math.PI / 180)) * Math.sin(lat2 * (Math.PI / 180)); - // a2 = Math.cos(lat1 * (Math.PI / 180)) * Math.cos(lat2 * (Math.PI / 180)); - // a3 = Math.cos(lon2 * (Math.PI / 180) - lon1 * (Math.PI / 180)); - // a4 = a1 + a2 * a3; - // a5 = Math.acos(a4); - // distance = a5 * earthRadius; - - return distance; - } - // MAP - var nb_data = ; - - if (nb_data > 0) { - var data_map = 0) ? json_encode($data_map) : '[]'; ?>; - // Additional JavaScript code using data_map can follow here - - // Custom scale control for displaying nautical miles - var nauticalScaleControl = L.control.scale({ - position: 'bottomleft', - imperial: false - }); - - nauticalScaleControl.options.update = function (options) { - var maxMeters = this._map.options.crs.getSize(this._map.getPixelBounds()).x, - maxNMiles = maxMeters / 1852; - - this._updateScale(maxNMiles, 'NM', this._getRoundNum(maxNMiles, options)); - }; - - var carte = L.map('maCarte').setView([data_map[nb_data-1]['latitude'],data_map[nb_data-1]['longitude']],10); - - //---------------------------------- - // Fond de carte : - // Très épurée : - L.tileLayer('https://tiles.stadiamaps.com/tiles/alidade_smooth/{z}/{x}/{y}{r}.png', { - maxZoom: 20, - attribution: '© Stadia Maps | © OpenMapTiles | © OpenStreetMap ' - }).addTo(carte); - - //---------------------------------- - // Couches additionnelles : - // Open Sea Map : - L.tileLayer('https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png', { - attribution: '| © OpenSeaMap' - }).addTo(carte); - - nauticalScaleControl.addTo(carte); - - var circles = {}; - var lines = []; - - var distance_total = 0; - var distance24h = 0; - var now = new Date(); - - for (var i = 0; i < nb_data; i++) - { - if (data_map[i]['latitude'] != null && data_map[i]['longitude'] != null) - { - var circle = L.circle([data_map[i]['latitude'], data_map[i]['longitude']], - { - //color: '#004563', - color: data_map[i]['couleur'], - opacity: data_map[i]['opacite'], - fillColor: '#75B9DA', - fillOpacity: 0.7, - radius: 50 - }).addTo(carte); - circle.bindPopup(data_map[i]['date'] + '
' + data_map[i]['latitude_dms'] + '
' + data_map[i]['longitude_dms']); - - if (i == (nb_data-1)) - { - var myIcon = L.icon({ - iconUrl: "images/location-pointer.png", - iconSize: [30, 30], - popupAnchor: [0, -30], - }); - if (!(nb_data == 1 && data_map[i]['latitude'] == 45.735237 && data_map[i]['longitude'] == 4.804827)){ - var marker = L.marker([data_map[i]['latitude'], data_map[i]['longitude']]).addTo(carte); - marker.bindPopup(data_map[i]['date'] + '
' + data_map[i]['latitude_dms'] + '
' + data_map[i]['longitude_dms']); - } - } - circles['circle' + i] = circle; - - if (i > 0) - { - var previousCircle = circles['circle' + (i - 1)]; - if (previousCircle!= null) - { - var line = L.polyline([previousCircle.getLatLng(), circle.getLatLng()], { - //(((data_map[i]['jour'] % 2) == 0) ? color: '#004563' : color: '#554563') - //color: '#004563' - color: data_map[i]['couleur'], - opacity: data_map[i]['opacite'], - }).addTo(carte); - lines.push(line); - - // Calculate distance - var lat1 = data_map[i - 1]['latitude']; - var lon1 = data_map[i - 1]['longitude']; - var lat2 = data_map[i]['latitude']; - var lon2 = data_map[i]['longitude']; - - var distance = calculateDistance(lat1, lon1, lat2, lon2); // Implement the distance calculation function - data_map[i]['distance'] = distance; - - distance_total += distance; - } - } - } - } - - //Initialiser l'affichage avec la distance totale sur 90jrs - - // A DECOMMENTER !!!! - // document.getElementById("distance").innerText = (distance_total*1.852).toFixed(2)+" NM"; - // document.getElementById("date_debut_croisire").innerText = data_map[1]['date']; - // document.getElementById("date_fin_croisire").innerText = data_map[nb_data-1]['date']; - - if(nb_data > 1){ - // Convert date strings to timestamps - data_map.forEach(function(item) { - item.timestamp = Date.parse(item.raw_date) / 1000; - }); - // Initialize the slider - var dateSlider = document.getElementById('dateSlider'); - noUiSlider.create(dateSlider, { - range: { - min: data_map[1]['timestamp'], // Use the timestamp directly - max: data_map[nb_data-1]['timestamp'] // Use the timestamp directly - }, - step: 1, - start: [data_map[1]['timestamp'], data_map[nb_data-1]['timestamp']], // Use the timestamp directly - connect: true, - tooltips: [true, true], - format: { - to: function (value) { - return new Date(value * 1000).toISOString().replace("T"," ").slice(0,19)+"Z"; // The Z is needed so the algo knows that the dates are in UTC, if we remove it it won't work correctly, we will lose data for the first and last 2 hours - }, - from: function (value) { - return value; - } - } - }); - - // Put right date on the bottom - const lastElement = $('.noUi-tooltip:last'); - lastElement[0].style.bottom="-40px"; - - // Handle slider change event - dateSlider.noUiSlider.on('slide', function (values) { - var startDate = new Date(values[0]); - var endDate = new Date(values[1]); - - var totalDistance = 0; // Initialize the total distance for the selected date range - var debut_croisiere = 0; - for (var i = 0; i < nb_data; i++) { - var currentDate = new Date(data_map[i]['timestamp'] * 1000); - if (currentDate >= startDate && currentDate <= endDate) { - if(debut_croisiere == 0) debut_croisiere = data_map[i]['date']; // Date début croisière, premier point dans l'intervalle - fin_croisiere = data_map[i]['date']; // Date fin croisière, dernier point dans l'intervalle - if (i > 0) { - (typeof data_map[i]['distance'] !== 'undefined' && data_map[i]['distance'] !== null) ? totalDistance += data_map[i]['distance'] : totalDistance = totalDistance; // Add the distance to the total - } - if (circles['circle' + i]) { - circles['circle' + i].addTo(carte); - } - if (i > 0 && lines[i - 1]) { - lines[i - 1].addTo(carte); - } - } else { - if (circles['circle' + i]) { - circles['circle' + i].removeFrom(carte); - } - if (i > 0 && lines[i - 1]) { - lines[i - 1].removeFrom(carte); - } - } - } - // Update the table - - // A DECOMMENTER !!!! - // document.getElementById("distance").innerText = (totalDistance * 1.852).toFixed(2) + " NM"; - // document.getElementById("date_debut_croisire").innerText = debut_croisiere; - // document.getElementById("date_fin_croisire").innerText = fin_croisiere; - }); - - - } - - //Calculer la distance pour les derniers 24hrs - var totalDistance24h = 0; // Initialize total distance for the past 24 hours - var twentyFourHoursAgo = new Date() - 24 * 60 * 60 * 1000; // Calculate the timestamp for 24 hours ago - - for (var i = 2; i < nb_data; i++) { - var currentDate = new Date(data_map[i]['timestamp'] * 1000); - if (currentDate >= twentyFourHoursAgo) { // Check if the data point is within the past 24 hours - if (i > 0) { - if (typeof data_map[i]['distance'] !== 'undefined' && data_map[i]['distance'] !== null) { - totalDistance24h += data_map[i]['distance']; // Add the distance to the total - } - } - } - } - - // A DECOMMENTER !!!! - // document.getElementById("distance24h").innerText = (totalDistance24h*1.852).toFixed(2)+" NM"; - } - - - - \ No newline at end of file diff --git a/sql/date_derniere_maj.sql b/sql/date_derniere_maj.sql new file mode 100644 index 0000000..5835af4 --- /dev/null +++ b/sql/date_derniere_maj.sql @@ -0,0 +1,13 @@ +-- ============================================================================ +-- TB_Bateaux.Date_derniere_maj : redéfinition (synthèse §47) +-- Date-heure UTC de génération (par le CM5) de l'archive la plus récente +-- chargée avec succès. Mise à jour par cron_archivage.php et +-- cron_quarantaine.php (Mettre_a_jour_derniere_archive). NULL = aucune +-- archive chargée à ce jour (remplace l'ancienne valeur sentinelle +-- 2020-01-01 du modèle CM4). +-- ============================================================================ +ALTER TABLE TB_Bateaux + MODIFY COLUMN Date_derniere_maj DATETIME NULL DEFAULT NULL + COMMENT 'Date-heure UTC de génération (CM5) de l''archive la plus récente chargée avec succès - NULL si aucune'; + +UPDATE TB_Bateaux SET Date_derniere_maj = NULL WHERE Date_derniere_maj < '2020-01-02';
'.Recuperer_texte("bateau","details","acces","validite").' '.Recuperer_texte("bateau","details","acces","shipmember").' '.Recuperer_texte("bateau","details","acces","cree_par").' '.Recuperer_texte("bateau","details","acces","type_profil").' '.Recuperer_texte("bateau","details","acces","fin_validite").' '.t("Validite").' '.t("Shipmember").' '.t("Créé_par").' '.t("Type de profil").' '.t("Fin de validité").'
0 shipmember / acces