Lot 1 : purge de bateaux.php (modèle CM4), Date_derniere_maj alimentée par l'archivage, URL du QR code via URL_SITE, cookie de session corrigé

This commit is contained in:
2026-10-03 10:53:17 +00:00
parent ef52f433d2
commit 7146bce248
7 changed files with 133 additions and 2734 deletions
+7 -1
View File
@@ -12,7 +12,13 @@ function Init_session($nom_page)
ini_set('arg_separator.output', '&'); 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...) 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!!!) session_start(); // Ouverture de session (avant tout autre envoi au client!!!)
+13 -2
View File
@@ -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); 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 // 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); 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){ function generateCode($code){
$tempDir = "temp/CodeQR/"; $tempDir = "temp/CodeQR/";
$codeContents = 'https://shipheart.tech/shipmembers.php?code_acces='.$code; $codeContents = Url_activation_code_acces($code);
$fileName = $code.'.png'; $fileName = $code.'.png';
+1
View File
@@ -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) : // 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); $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); 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)) if (Confirmer_suppression_archive($boitier['Adresse_netbird'], $nom))
{ {
+1
View File
@@ -233,6 +233,7 @@ function Executer_cron_quarantaine()
$generation_pour_enregistrement = Resoudre_generation_active($db, $id_bateau); $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); 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); unlink($chemin);
echo " - {$nom} : quarantaine levée, chargée dans {$nom_base_cible}.\n"; echo " - {$nom} : quarantaine levée, chargée dans {$nom_base_cible}.\n";
} }
+22
View File
@@ -469,6 +469,28 @@ function Executer_sql_base($nom_base, $sql)
return ['ok' => true]; 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 (<MAC>_AAMMJJ_HHMMSS_<empreinte>.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, // 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, // par la MÊME méthode que côté CM5 (SHOW TABLES LIKE 'TB_Mesures%' + TB_Historique,
+42 -2697
View File
File diff suppressed because it is too large Load Diff
+13
View File
@@ -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';