'.$_SESSION['Bateaux']['bateau']['Nom'].' a été dévalidé dans la base de données.';
$_SESSION['Bateaux']['page'] = "Accueil";
}
break;
}
}
if ($_SESSION['Bateaux']['ancre'] == "") header('Location:bateaux.php'); // Permet de "vider" la barre d'URL des champs GET et donc de doubler le traitement en cas de raffraichissement de page...
else header('Location:bateaux.php#'.$_SESSION['Bateaux']['ancre'].'');
}
// Variables POST :
if (isset($_POST['date_version'])){
$_SESSION['Bateaux']['date_version'] = $_POST['date_version'];
}
//---------------------------------------------------------------------------
// Création/Modification Bateau :
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_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__);
// 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_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__);
// 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'];
}
//---------------------------------------------------------------------------
// Modifier la validité des droits
if (isset($_POST['validite_acces'])) {
// echo 'Validité = ON pour ID='.$_POST['ID'].'
';
$requete = 'UPDATE TB_Lien_bateau_shipmember SET Validite_acces = 1 WHERE ID = '.$_POST['ID'];
$reponse = Requete_bdd($requete, __FILE__, __LINE__);
}
else if (!isset($_POST['validite_acces']) && isset($_POST['ID']) && !isset($_POST['supprimerAcces']) && !isset($_POST['modifierAcces'])){
// echo 'Validité = OFF pour ID='.$_POST['ID'].'
';
$requete = 'UPDATE TB_Lien_bateau_shipmember SET Validite_acces = 0 WHERE ID = '.$_POST['ID'];
$reponse = Requete_bdd($requete, __FILE__, __LINE__);
}
//---------------------------------------------------------------------------
// Supprimer l'accès
if (isset($_POST['supprimerAcces']) && isset($_POST['ID'])){
$id = $_POST['ID'];
$requete = 'UPDATE TB_Lien_bateau_shipmember SET Validite = 0 WHERE ID = ? ';
$reponse = Requete_preparee_bdd($requete,
array(
array('i', $id)),
__FILE__, __LINE__);
}
//---------------------------------------------------------------------------
// Modifier l'accès
if (isset($_POST['modifierAcces']) && isset($_POST['ID'])){
$id = $_POST['ID'];
$fin_validite = $_POST['fin_validite']." 23:59:59";
$type_profil = $_POST['type_profil'];
$requete = 'UPDATE TB_Lien_bateau_shipmember SET Fin_validite = ? , ID_Type_acces_bateau_shipmember = ? WHERE ID = ? ';
$reponse = Requete_preparee_bdd($requete,
array(
array('s', $fin_validite),
array('i', $type_profil),
array('i', $id)),
__FILE__, __LINE__);
}
//************************************************************************************************************************************
// Traitement des données
//************************************************************************************************************************************
// Protection contre les accès directs... :
$flag_sortie = true;
do // Dummy loop :
{
if (!$_SESSION['acces_valide']) break; // Si on n'est pas identifié, on ne peut pas accéder quoi qu'il arrive...
if ($_SESSION['shipmember']['Niveau_acces'] >= NIVEAU_ACCES_MINI_ADMINISTRATEUR)
{
$flag_sortie = false; // Si on est administrateur, on a toujours accès....
break;
}
// Recherche des droits d'accès à un bateau en particulier :
if ($_SESSION['Bateaux']['page'] == "Details_bateau")
{
$requete = 'SELECT * FROM TB_Lien_bateau_shipmember WHERE Validite=1 AND Validite_acces=1 AND ID_SHIPMEMBER=? AND ID_BATEAU=? ';
$reponse = Requete_preparee_bdd($requete,
array(
array('i', $_SESSION['shipmember']['Cle_primaire']),
array('i', $_SESSION['Bateaux']['bateau']['Cle_primaire'])),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$flag_sortie = false;
break;
}
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');
switch ($_SESSION['Bateaux']['page'])
{
//****************************************************************************************************************************
case "Accueil":
{
//--------------------------------------------------
// Récupération des informations sur les bateaux :
$nb_bateaux = 0;
switch($_SESSION['Bateaux']['tri_liste'])
{
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; }
default : { $tri_liste = " ORDER By nom_flotte, Nom ".$_SESSION['Bateaux']['sens_tri_liste']; break; }
}
$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 .= ' TB_Bateaux.Commentaires AS Commentaires ';
$requete .= ' FROM `TB_Bateaux` ';
$requete .= ' WHERE Validite=1 ';
$requete .= $tri_liste;
echo "Requête = [ ".$requete."; ]
";
$reponse = Requete_preparee_bdd($requete,
array(),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$bateaux[$nb_bateaux] = $donnees;
// Mise en forme de certaines variables :
if ($bateaux[$nb_bateaux]['version'] == "") $bateaux[$nb_bateaux]['version'] = 'inconnue';
if ($donnees['Date_derniere_maj'] < "2020-01-02") $bateaux[$nb_bateaux]['Date_derniere_maj'] = "Jamais";
else $bateaux[$nb_bateaux]['Date_derniere_maj'] = Formatage_date($donnees['Date_derniere_maj']);
$bateaux[$nb_bateaux]['Commentaires'] = htmlspecialchars(stripcslashes($bateaux[$nb_bateaux]['Commentaires']));
$nb_bateaux ++;
}
Liberation_jeu_de_resultat_bdd($reponse);
break;
}
//****************************************************************************************************************************
case "Details_bateau":
{
//--------------------------------------------------
// Récupération des informations sur le bateau :
$nb_bateaux = 0;
$requete = 'SELECT * FROM TB_Bateaux WHERE Cle_primaire=? ';
$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")."";
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']));
}
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 :
//---------------------------------------------
if ($_SESSION['shipmember']['Niveau_acces'] >= NIVEAU_ACCES_MINI_ADMINISTRATEUR) // Dans le cas des administrateurs, on accorde tous les droits, indépendamment des paramètres du bateau
{
$acces_profil['Creation_profils'] = 1;
$acces_profil['Devalidation_profils'] = 2;
$acces_profil['Consultation_donnees'] = 2;
$acces_profil['Modification_acces'] = 1;
}
else
{
// Valeurs par défaut :
$id_type_acces = 0;
$acces_profil['Creation_profils'] = 0;
$acces_profil['Devalidation_profils'] = 0;
$acces_profil['Consultation_donnees'] = 0;
$acces_profil['Modification_acces'] = 0;
// Recherche de l'ID de l'accès le plus élevé pour ce bateau et ce shipmember :
$requete = 'SELECT ID_Type_acces_bateau_shipmember FROM TB_Lien_bateau_shipmember WHERE Validite=1 AND Validite_acces=1 AND ID_Shipmember=? AND ID_Bateau=? AND Fin_validite>=? ORDER BY ID_Type_acces_bateau_shipmember DESC LIMIT 1';
$reponse = Requete_preparee_bdd($requete,
array(
array('i', $_SESSION['shipmember']['Cle_primaire']),
array('i', $_SESSION['Bateaux']['bateau']['Cle_primaire']),
array('s', date_format(date_create(), 'Y-m-d H:i:s'))),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$id_type_acces = $donnees['ID_Type_acces_bateau_shipmember'];
}
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)
{
$requete = 'SELECT * FROM TB_Types_acces_bateau_shipmember WHERE Validite=1 AND Cle_primaire=?';
$reponse = Requete_preparee_bdd($requete,
array(
array('i', $id_type_acces)),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$acces_profil = $donnees;
}
Liberation_jeu_de_resultat_bdd($reponse);
}
}
// Récupération des types d'accès possibles :
//$requete = 'SELECT Nom, Niveau_acces FROM TB_Lien_bateau_shipmember_acces WHERE Validite = 1 AND Niveau_acces < 99';
$requete = 'SELECT * FROM TB_Types_acces_bateau_shipmember WHERE Validite=1 ';
$reponse = Requete_bdd($requete, __FILE__, __LINE__);
$type_acces_nb = 0;
while($donnees = Recherche_ligne_bdd($reponse)){
if ($_SESSION['langue'] == "EN") $donnees['Nom'] = $donnees['Nom_en'];
else $donnees['Nom'] = $donnees['Nom_fr'];
$type_acces[$type_acces_nb++] = $donnees;
}
Liberation_jeu_de_resultat_bdd($reponse);
// Génération d'un nouveau code d'acces :
if (isset($_POST['generer_code_acces'])){
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$unique = false;
do { // Vérifier si le code n'est pas déjà utilisé
$code_acces = '';
for ($i = 0; $i < 6; $i++) {
$code_acces .= $characters[random_int(0, $charactersLength - 1)];
}
$req = 'SELECT Code FROM TB_Lien_bateau_shipmember WHERE Code="'.$code_acces.'"';
$rep = Requete_bdd($req, __FILE__, __LINE__);
$donnees = Recherche_ligne_bdd($rep);
if ($donnees == NULL) $unique = true;
} while($unique == false);
if (isset($_POST['date_validite']) && (!empty($_POST['date_validite']))){
$date = $_POST['date_validite']." 00:00:00";
}
else $date = '9999-12-31 23:59:59';
$requete = 'INSERT INTO TB_Lien_bateau_shipmember(ID_Bateau, Code, Fin_validite, Cree_par, ID_Type_acces_bateau_shipmember) VALUES (?,?,?,?,?)';
$reponse = Requete_preparee_bdd($requete, array(
array('i', $bateau['Cle_primaire']),
array('s', $code_acces),
array('s', $date),
array('i', $_SESSION['shipmember']['Cle_primaire']),
array('i', $_POST['type_acces'])
),__FILE__, __LINE__);
$no = Recuperation_id_cree_bdd();
if ( code_acces_pdf($code_acces, $no, $bateau['Adresse_mac'],"")== 0 ) Entete_page_html();
// Message d'information :
// if (isset($_SESSION['pdf']['src']) && $_SESSION['pdf']['src'] != '')
// $message_information.= "Télécharger le code d'accès d' ici ";
// $_SESSION['pdf']['src'] ='';
}
$nb_onglets = 0;
//-----------------------------------------------------------
// Recherche des informations complémentaires sur le bateau :
switch($_SESSION['Bateaux']['type_details_bateau'])
{
//=========================
case "gerer_les_acces":
{
$requete = 'SELECT * FROM TB_Lien_bateau_shipmember WHERE Validite=1 AND ID_Bateau='.$bateau['Cle_primaire'].' AND ID_Shipmember!=0 ';
$reponse = Requete_bdd($requete, __FILE__, __LINE__);
$utilisateur_acces_nb = 0;
while ($donnees = Recherche_ligne_bdd($reponse)){
// Récupérer le nom et le prénom du shipmember qui a accès :
$sous_req = ' SELECT Nom, Prenom, Email FROM TB_Shipmembers WHERE Validite=1 AND ID='.$donnees['ID_Shipmember'].'';
$sous_rep = Requete_bdd($sous_req, __FILE__, __LINE__);
$sous_donnees = Recherche_ligne_bdd($sous_rep);
$donnees['sm_Nom'] = $sous_donnees['Nom'];
$donnees['sm_Prenom'] = $sous_donnees['Prenom'];
$donnees['sm_Email'] = $sous_donnees['Email'];
// Récupérer le nom et le prénom du shipmember qui a crée le lien :
$sous_req = ' SELECT Nom, Prenom FROM TB_Shipmembers WHERE Validite=1 AND ID='.$donnees['Cree_par'].'';
$sous_rep = Requete_bdd($sous_req, __FILE__, __LINE__);
$sous_donnees = Recherche_ligne_bdd($sous_rep);
$donnees['cree_par_Nom'] = $sous_donnees['Nom'];
$donnees['cree_par_Prenom'] = $sous_donnees['Prenom'];
// Récupérer le niveau accès garantie à l'utilisateur :
//$sous_req = ' SELECT Nom FROM TB_Lien_bateau_shipmember_acces WHERE Validite=1 AND Niveau_acces='.$donnees['Niveau_acces'].'';
$sous_req = 'SELECT * FROM TB_Types_acces_bateau_shipmember WHERE Validite=1 AND Cle_primaire='.$donnees['ID_Type_acces_bateau_shipmember'].' ';
$sous_rep = Requete_bdd($sous_req, __FILE__, __LINE__);
$sous_donnees = Recherche_ligne_bdd($sous_rep);
if ($_SESSION['langue'] == "EN") $donnees['Niveau_acces_nom'] = $sous_donnees['Nom_en'];
else $donnees['Niveau_acces_nom'] = $sous_donnees['Nom_fr'];
$utilisateur_acces[$utilisateur_acces_nb++] = $donnees;
}
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;
}
//****************************************************************************************************************************
case "Creation_bateau":
case "Modification_bateau":
{
//--------------------------------------------------
// Préparation des variables du bateau :
if ($_SESSION['Bateaux']['page'] == "Creation_bateau")
{
$_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 :
{
$requete = 'SELECT * FROM TB_Bateaux WHERE Cle_primaire=? ';
$reponse = Requete_preparee_bdd($requete,
array(
array('i', $_SESSION['Bateaux']['bateau']['Cle_primaire'])),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$_SESSION['Bateaux']['bateau'] = $donnees;
// Mise en forme de textes :
$_SESSION['Bateaux']['bateau']['Commentaires'] = htmlspecialchars(stripcslashes($_SESSION['Bateaux']['bateau']['Commentaires']));
}
Liberation_jeu_de_resultat_bdd($reponse);
}
//--------------------------------------------------
// Recherche des flottes existantes :
$nb_flottes = 0;
$flottes[$nb_flottes]['Cle_primaire'] = 0;
$flottes[$nb_flottes]['Nom'] = '--- Affecté à aucune flotte ---';
$nb_flottes ++;
$requete = 'SELECT * FROM TB_Flottes WHERE Validite=1 ORDER BY Nom ASC';
$reponse = Requete_preparee_bdd($requete,
array(),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$flottes[$nb_flottes ++] = $donnees;
}
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;
}
//****************************************************************************************************************************
case "Confirmation_suppression_bateau":
{
break;
}
//****************************************************************************************************************************
default:
{
$_SESSION['Bateaux']['page'] = "Accueil";
break;
}
}
Fermeture_bdd(); // Déconnexion de MySQL
//************************************************************************************************************************************
// Affichage
//************************************************************************************************************************************
Entete_page_html();
//********************************************************************************************************************************
// Affichage principal :
echo '
| Nom | '; echo 'Flotte | '; echo 'ShipBase | '; echo 'Adresse MAC | '; echo 'Version | '; echo 'Dernière mise à jour [UTC] | '; // echo 'Commentaires | '; echo '
|---|---|---|---|---|---|---|
| '.$bateaux[$i]['Nom'].' | '; echo ''.$bateaux[$i]['nom_flotte'].' | '; echo ''.$bateaux[$i]['nom_carte'].' | '; echo ''.$bateaux[$i]['adresse_carte'].' | '; echo ''.$bateaux[$i]['version'].' | '; echo ''.$bateaux[$i]['Date_derniere_maj'].' | '; // echo ''.$bateaux[$i]['Commentaires'].' | '; 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 | '; // } // elseif ($i==1) { // echo // '[en dur]Maximale : //[en dur]8.2A | //[en dur]2h30 au total | '; // } // if ($i==2) { // echo // '[en dur]Minimale: //[en dur]0.13 | //[en dur]13h21 | '; // } // 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 : | //|
| // | // | // | // | // | |
'.$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, ".", " ").' %
'.$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 '
'.$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
'.$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'].'
'; 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 '| '.Recuperer_texte("bateau","details","acces","validite").' | '; echo ''.Recuperer_texte("bateau","details","acces","shipmember").' | '; echo ''.Recuperer_texte("bateau","details","acces","cree_par").' | '; echo ''.Recuperer_texte("bateau","details","acces","type_profil").' | '; echo ''.Recuperer_texte("bateau","details","acces","fin_validite").' | '; echo ''; echo ' |
|---|---|---|---|---|---|
| 0 shipmember / acces | |||||
'.Recuperer_texte("bateau","details","autres","autre").'
'; break; } } echo '