Import initial du site ship2net.fr : pages PHP, config, traductions t(), composer.json

This commit is contained in:
2026-09-28 08:04:25 +00:00
commit 82f431b3ae
175 changed files with 25531 additions and 0 deletions
+461
View File
@@ -0,0 +1,461 @@
<?php
include "../config/config.php";
Init_session(basename($_SERVER['SCRIPT_NAME'])); // Fonction ouvrant la session et vérifiant que les accès sont autorisés.
Entete_page_html();
//************************************************************************************************************************************
// Initialisation des variables globales
//************************************************************************************************************************************
$message_erreur = "";
$message_information = "";
$flag_redirection = false;
Ouverture_bdd(); // Connexion à MySql
//************************************************************************************************************************************
// Traitement des variables d'entrées
//************************************************************************************************************************************
// Variables de SESSION :
if (!isset($_SESSION['Administration']['page'])) $_SESSION['Administration']['page'] = 'Accueil';
if (!isset($_SESSION['Administration']['ancre'])) $_SESSION['Administration']['ancre'] = "#";
if (!isset($_SESSION['Administration']['questionnaire'])) $_SESSION['Administration']['questionnaire'] = 'Nautic2021';
// Variables GET :
if (isset($_GET['action']))
{
switch ($_GET['action'])
{
//===================================
case "navigation":
{
if (isset($_GET['destination']))
{
$_SESSION['Administration']['page'] = $_GET['destination'];
$_SESSION['display_menu'] = false;
}
if (isset($_GET['ancre']))
{
$_SESSION['Administration']['ancre'] = $_GET['ancre'];
$_SESSION['display_menu'] = false;
}
break;
}
//===================================
case "changement_langue":
{
if (isset($_GET['langue']))
{
$_SESSION['langue'] = $_GET['langue'];
chargement_langue();
}
break;
}
//===================================
case "changement_type":
{
if (isset($_GET['type']))
{
$_SESSION['type_utilisateur'] = $_GET['type'];
chargement_langue();
}
break;
}
case "toggle_edit":
{
if ($_SESSION['modifier_texte'] == 0) $_SESSION['modifier_texte'] = 1;
else if ($_SESSION['modifier_texte'] == 1) $_SESSION['modifier_texte'] = 0;
break;
}
}
if (!$flag_redirection) header('Location:administration.php');
}
// Variables POST :
//************************************************************************************************************************************
// Traitement des données
//************************************************************************************************************************************
// Protection contre les accès directs :
if ((!$_SESSION['acces_valide']) OR ($_SESSION['shipmember']['Niveau_acces'] < NIVEAU_MINI_ACCES_ADMINISTATEUR)) header('Location:shipmembers.php?action=navigation&destination=Login');
switch ($_SESSION['Administration']['page'])
{
//****************************************************************************************************************************
case "Accueil":
{
break;
}
//****************************************************************************************************************************
case "Purge_bdd":
{
$nb_tables = 0;
$tables[$nb_tables ++]['Nom'] = "TB_BATEAUX_Mesures_circuits";
$tables[$nb_tables ++]['Nom'] = "TB_BATEAUX_Mesures_batteries";
$tables[$nb_tables ++]['Nom'] = "TB_BATEAUX_Mesures_reservoirs";
$tables[$nb_tables ++]['Nom'] = "TB_BATEAUX_Mesures_capteurs";
$max_lignes_traitees = 500000;
for ($x = 0; $x < $nb_tables; $x ++)
{
$nom_table = $tables[$x]['Nom'];
$start_time = microtime(true);
//------------------------------------------------------
// Recherche de la taille de la table avant traitement :
$requete = 'SELECT COUNT(*) AS Nb FROM '.$nom_table.' ';
$reponse = Requete_bdd($requete, __FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$taille_table_avant_traitement = $donnees['Nb'];
}
Liberation_jeu_de_resultat_bdd($reponse);
//---------------------------------------------------
// Recherche des bateaux concernés dans cette table :
$nb_bateaux = 0;
$requete = 'SELECT DISTINCT(ID_Bateau) FROM '.$nom_table.' WHERE 1';
$reponse = Requete_preparee_bdd($requete,
array(),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$bateaux[$nb_bateaux ++] = $donnees;
}
Liberation_jeu_de_resultat_bdd($reponse);
//--------------------------------------------------------------------------------------------------------
// Boucle sur tous les bateaux pour rechercher les éléments concernés par chaque bateau dans cette table :
for ($i = 0; $i < $nb_bateaux ; $i ++)
{
// Recherche des éléments (circuits, réservoirs, batteries, ...) concernés sur chaque bateau :
$bateaux[$i]['nb_elements'] = 0;
$requete = 'SELECT DISTINCT(ID) FROM '.$nom_table.' WHERE ID_Bateau=? ';
$reponse = Requete_preparee_bdd($requete,
array(
array('i', $bateaux[$i]['ID_Bateau'])),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$bateaux[$i][$bateaux[$i]['nb_elements'] ++] = $donnees['ID'];
// echo '<p>'.$bateaux[$i]['nb_elements'].' : ID = '.$donnees['ID'].'</p>';
}
Liberation_jeu_de_resultat_bdd($reponse);
}
//-------------------------------------------------------------------
// Boucle sur tous les bateaux pour traiter les entrées redondantes:
$nb_total_lignes_supprimees = 0;
for ($i = 0; $i < $nb_bateaux ; $i ++)
{
// Boucle sur tous les éléments :
for ($j = 0; $j < $bateaux[$i]['nb_elements']; $j ++)
{
$nb_redondants = 0;
$val_1 = -1;
$val_2 = 0;
$id_2 = 0;
$requete = 'SELECT Cle_primaire, Date, Valeur FROM '.$nom_table.' WHERE ID_Bateau=? AND ID=? ORDER BY Date ';
$reponse = Requete_preparee_bdd($requete,
array(
array('i', $bateaux[$i]['ID_Bateau']),
array('i', $bateaux[$i][$j])),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
// Recherche des conditions de redondance :
if (($val_1 == $val_2) AND ($val_2 == $donnees['Valeur'])) // Si la valeur actuelle est égale à la précédente et à celle encore avant :
{
$redondants[$nb_redondants ++] = $id_2; // ... on mémorise l'entrée intermédiaire (N-1)
$nb_total_lignes_supprimees ++;
if ($nb_total_lignes_supprimees >= $max_lignes_traitees) break;
}
$val_1 = $val_2;
$val_2 = $donnees['Valeur'];
$id_2 = $donnees['Cle_primaire'];
}
Liberation_jeu_de_resultat_bdd($reponse);
// Suppression des enregistrements redondants :
for ($k = 0; $k < $nb_redondants; $k ++)
{
// Création d'une chaine avec les différentes clés à supprimer afin de réduire le nombre de requêtes DELETE (impact sur temps de traitement d'environ / 50 avec la valeur de 100) :
$max_l = 100;
$chaine_cles_primaires = '(Cle_primaire='.$redondants[$k ++].' ';
if ($k < ($nb_redondants - 1))
{
for ($l = 1; $l < $max_l; $l ++)
{
$chaine_cles_primaires .= 'OR Cle_primaire='.$redondants[$k].' ';
if (($k >= ($nb_redondants - 1)) OR ($l >= ($max_l - 1))) break;
$k ++;
}
}
$chaine_cles_primaires .= ')';
$requete = 'DELETE FROM '.$nom_table.' WHERE ID_Bateau='.$bateaux[$i]['ID_Bateau'].' AND '.$chaine_cles_primaires.' ';
// echo 'Requête = ['.$requete.']<br />';
Requete_bdd($requete, __FILE__, __LINE__); // Pas de requête préparée pour accélérer le traitement...
}
if ($nb_total_lignes_supprimees >= $max_lignes_traitees) break;
}
if ($nb_total_lignes_supprimees >= $max_lignes_traitees) break;
}
// Recherche de la taille de la table après traitement :
$requete = 'SELECT COUNT(*) AS Nb FROM '.$nom_table.' ';
$reponse = Requete_bdd($requete, __FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$taille_table_apres_traitement = $donnees['Nb'];
}
Liberation_jeu_de_resultat_bdd($reponse);
// Calculate script execution time
$execution_time = number_format((microtime(true) - $start_time), 1, ".", " ");
$tables[$x]['Taille_avant_traitement'] = $taille_table_avant_traitement;
$tables[$x]['Nb_total_lignes_supprimees'] = $nb_total_lignes_supprimees;
$tables[$x]['Execution_time'] = $execution_time;
$tables[$x]['Taille_apres_traitement'] = $taille_table_apres_traitement;
}
break;
}
//****************************************************************************************************************************
case "Questionnaires":
{
switch($_SESSION['Administration']['questionnaire'])
{
default:
{
$message_erreur .= "Le questionnaire ".$_SESSION['Administration']['questionnaire']." est inconnu. Le questionnaire en cours est repassé à sa valeur par défaut.";
$_SESSION['Administration']['questionnaire'] = "Nautic2021";
}
case "Nautic2021" :
{
$table_questionnaire = "TB_Nautic2021";
break;
}
}
// Nombre de réponses :
$requete = 'SELECT COUNT(*) AS Nb FROM '.$table_questionnaire.' WHERE Validite=1';
$reponse = Requete_preparee_bdd($requete,
array(),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$reponses_questionnaire['Nb'] = $donnees['Nb'];
}
Liberation_jeu_de_resultat_bdd($reponse);
// Dernier enregistrement :
$requete = 'SELECT DATE_FORMAT(Date_creation,"%d/%m/%Y à %H:%i:%s") as Date_creation FROM '.$table_questionnaire.' WHERE Validite=1 ORDER BY Date_creation DESC LIMIT 1';
// echo 'Requête = '.$requete.'<br />';
$reponse = Requete_preparee_bdd($requete,
array(),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$reponses_questionnaire['Date_creation'] = $donnees['Date_creation'];
}
Liberation_jeu_de_resultat_bdd($reponse);
// Nombre d'enregistrements par jour :
$nb_jours = 0;
$requete = 'SELECT COUNT(*) as Nb_jours, DATE_FORMAT(Date_creation, "%d-%m-%Y") as Date_creations FROM '.$table_questionnaire.' WHERE Validite=1 GROUP BY DATE_FORMAT(Date_creation, "%Y-%m-%d")';
// echo 'Requête = '.$requete.'<br />';
$reponse = Requete_preparee_bdd($requete,
array(),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$reponses_questionnaire['Creations_par_jour'][$nb_jours ++] = $donnees;
}
Liberation_jeu_de_resultat_bdd($reponse);
break;
}
}
Fermeture_bdd(); // Déconnexion de MySQL
//************************************************************************************************************************************
// Affichage
//************************************************************************************************************************************
//********************************************************************************************************************************
// Affichage principal :
echo '<div id="Administration">';
//=========================================================================================
// Entête :
Entete_page($message_erreur, $message_information);
switch ($_SESSION['Administration']['page'])
{
//************************************************************************************************************************
case "Accueil":
{
echo '<div id="accueil" class="page_principale">';
echo '<h1>Administration</h1>';
echo '<h2>Accueil</h2>';
echo '<p>Attention : toute la partie Administration n\'est disponible qu\'en français.</p>';
echo '<h2>ShipMembers et Bateaux</h2>';
echo '<div class="boutons_bas_de_page">';
echo '<a title="" href="shipmembers.php?action=navigation&destination=Administration">ShipMembers</a>';
echo '<a title="" href="bateaux.php?action=navigation&destination=Accueil">Gestion des bateaux</a>';
echo '</div>';
echo '<h2>Site web</h2>';
echo '<div class="boutons_bas_de_page">';
// echo '<a title="" href="administration.php?action=navigation&destination=Commandes">Commandes</a>';
echo '<a title="" href="faq.php?action=navigation&destination=Administration">Faq</a>';
echo '<a title="" href="actualites.php?action=navigation&destination=Administration">Actualités</a>';
echo '<a title="" href="produit_desc.php?action=navigation&destination=Administration">Produits</a>';
echo '<a title="" href="galerie.php?action=navigation&destination=Administration">Galerie photos</a>';
echo '<a title="" href="videos.php?action=navigation&destination=Administration">Videos</a>';
echo '<a title="" href="devis.php?action=navigation&destination=Administration">Devis</a>';
// echo '<a title="" href="administration.php?action=navigation&destination=Questionnaires">Questionnaires</a>';
echo '<a title="" href="textes.php?action=navigation&destination=Accueil">Gestion des textes</a>';
echo '</div>';
echo '<h2>Technique</h2>';
echo '<div class="boutons_bas_de_page">';
echo '<a title="" href="versions.php?action=navigation&destination=Accueil">Gestion des versions</a>';
echo '<a title="" href="cartes.php?action=navigation&destination=Accueil">Gestion des cartes</a>';
echo '<a title="" href="uploads.php?action=navigation&destination=Accueil" onclick="return confirm(\'Vous êtes sur vous voulez traiter les uploads ?\');">Traitement des uploads</a>';
//echo '<a title="" href="c_tech_api.php" onclick="return confirm(\'Etes-vous sûr de vouloir lancer le traitement de l\'API C-Technology ?\');">Traitement de l\'API C-Technology</a>';
//echo '<a title="" href="data_treatment.php" onclick="return confirm(\'Etes-vous sûr de vouloir lancer DATE_TREATMENT.PHP pour traiter les tables [old] ?\');">Traitement des tables OLD</a>';
//echo '<a title="" href="administration.php?action=navigation&destination=Purge_bdd" onclick="return confirm(\'Vous allez faire un purge de la BDD, avancer ?\');">Purge de la BDD</a>';
//echo '<a title="" href="check_payments.php?verbose">Test check factures</a>';
echo '</div>';
echo '<div class="boutons_bas_de_page">';
echo '<a title="" href="shipmembers.php?action=navigation&destination=Accueil">Retour au menu ShipMember</a>';
echo '</div>';
echo '</div>';
break;
}
//************************************************************************************************************************
case "Purge_bdd":
{
echo '<div id="purge_bdd" class="page_principale">';
echo '<h1>Administration</h1>';
echo '<h2>Purge de la base de données</h2>';
for ($x = 0; $x < $nb_tables; $x ++)
{
echo '<h3>'.$tables[$x]['Nom'].'</h3>';
echo '<p>Taille de la table AVANT traitement = <span class="gras">'.number_format($tables[$x]['Taille_avant_traitement'], 0, ".", " ").'</span> lignes</p>';
echo '<p>Le nombre total de lignes supprimées est de <span class="gras">'.number_format($tables[$x]['Nb_total_lignes_supprimees'], 0, ".", " ").'</span> (maxi = '.number_format($max_lignes_traitees, 0, ".", " ").') en '.$tables[$x]['Execution_time'].' secondes</p>';
echo '<p>Taille de la table APRES traitement = <span class="gras">'.number_format($tables[$x]['Taille_apres_traitement'], 0, ".", " ").'</span> lignes</p>';
}
echo '<div class="boutons_bas_de_page">';
echo '<a class=retour" title="" href="administration.php?action=navigation&destination=Accueil">Retour à l\'accueil</a>';
echo '<a title="" href="administration.php?action=navigation&destination=Purge_bdd">Relancer la purge de la BDD</a>';
echo '</div>';
echo '</div>';
break;
}
//****************************************************************************************************************************
case "Questionnaires":
{
echo '<div id="questionnaires" class="page_principale">';
echo '<h1>Administration</h1>';
echo '<h2>Questionnaire : '.$_SESSION['Administration']['questionnaire'].'</h2>';
// Nb de fiche réponse :
echo '<div class="indicateur">
<div class="libelle_indicateur">Le nombre total de questionnaires enregistrés est : </div>
<div class="valeur_indicateur">'.$reponses_questionnaire['Nb'].'</div>
</div>';
// Date dernière réponse :
echo '<div class="indicateur">
<div class="libelle_indicateur">La date du dernier formulaire rempli est : </div>
<div class="valeur_indicateur">'.$reponses_questionnaire['Date_creation'].'</div>
</div>';
// Nb créations par jour :
echo '<div class="indicateur">';
foreach($reponses_questionnaire['Creations_par_jour'] as $key => $creations)
{
echo '<div class="libelle_indicateur">Le nombre de formulaires saisis le '.$creations['Date_creations'].' est de : </div>
<div class="valeur_indicateur">'.$creations['Nb_jours'].'</div>';
}
echo '</div>';
echo '<div class="boutons_bas_de_page">';
echo '<a class=retour" title="" href="administration.php?action=navigation&destination=Accueil">Retour à l\'accueil</a>';
echo '</div>';
echo '</div>';
break;
}
}
echo '</div>';
Pied_de_page();