';
$reponse = Requete_preparee_bdd($requete,
array(),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$versions[$nb_versions ++] = $donnees;
}
Liberation_jeu_de_resultat_bdd($reponse);
if ($nb_versions == 0) $_SESSION['Versions']['page'] = "Confirmation_suppression_version"; // Si aucune version de ShipHeart ne l'utilise, on passe à l'étape de confitmation finale.
else // Sinon, on indique une erreur et on affiche les versions l'utilisant (limitée à N lignes...)
{
$flag_redirection = true; // Evite que le message d'erreur soit supprimé par la redirection de purge d'URL
$message_erreur = "Vous ne pouvez pas supprimer cette version qui est utilisée dans les versions de ShipHeart suivantes :";
for ($i = 0; $i < $nb_versions; $i ++)
{
if ($i < 10) $message_erreur .= " ".$versions[$i]['Nom']." ";
else
{
$message_erreur .= " [...]";
break;
}
}
}
}
}
break;
}
//===================================
case "confirmation_suppression_version":
{
if ((isset($_GET['type_version'])) && (isset($_GET['id_version'])))
{
$_SESSION['Versions']['type_version'] = $_GET['type_version'];
$_SESSION['Versions']['version']['Cle_primaire'] = $_GET['id_version'];
// Suppression de la version (ou du package) :
// $requete = 'UPDATE '.$types_version[$_SESSION['Versions']['type_version']][1].' SET Validite=0 WHERE Cle_primaire=?';
$requete = 'DELETE FROM '.$types_version[$_SESSION['Versions']['type_version']][1].' WHERE Cle_primaire=?';
Requete_preparee_bdd($requete,
array(
array('s', $_SESSION['Versions']['version']['Cle_primaire'])),
__FILE__, __LINE__);
$flag_redirection = true; // Evite que le message d'erreur soit supprimé par la redirection de purge d'URL
if ($types_version[$_SESSION['Versions']['type_version']][3] != "package")
{
if ($types_version[$_SESSION['Versions']['type_version']][2] == "Fichier")
{
// Détermination du nom complet du fichier :
$dossier = REPERTOIRE_VERSIONS_SHIPHEART.$types_version[$_SESSION['Versions']['type_version']][5]; // Dossier de stockage des fichiers
$fichier = $dossier.'/'.$_SESSION['Versions']['version']['Fichier'];
// Suppression du fichier sur le serveur :
if (unlink($fichier)) $message_information = "La version ".$_SESSION['Versions']['version']['Fichier']." a été supprimée de la base de données et le fichier correspondant a été supprimé du serveur.";
else $message_erreur = "La version ".$_SESSION['Versions']['version']['Fichier']." a bien été supprimée de la base de données mais le fichier correspondant n'a pas pu être supprimé du serveur.";
}
// RAZ des variables de session de la version qui vient d'être supprimée :
$_SESSION['Versions']['version']['Cle_primaire'] = 0;
$_SESSION['Versions']['version']['Fichier'] = "";
$_SESSION['Versions']['version']['Description'] = "";
}
else $message_information = "Le package ".$_SESSION['Versions']['version']['Nom']." a été supprimée de la base de données.";
$_SESSION['Versions']['page'] = "Liste_versions";
}
break;
}
//===================================
case "demande_generation_archive":
{
if ((isset($_GET['type_version'])) && (isset($_GET['id_version'])))
{
$_SESSION['Versions']['type_version'] = $_GET['type_version'];
$_SESSION['Versions']['version']['Cle_primaire'] = $_GET['id_version'];
$_SESSION['Versions']['page'] = "Generation_archive";
}
break;
}
}
if (!$flag_redirection) header('Location:versions.php'.$_SESSION['Versions']['ancre'].'');
}
// Variables POST :
//---------------------------------------------------------------------------
// Création Package :
if ( (isset($_POST['validation_creation_package']) OR
isset($_POST['validation_modification_package'])) AND
isset($_POST['Nom']) AND
isset($_POST['ID_Version_appli']) AND
isset($_POST['ID_Version_qt']) AND
isset($_POST['ID_Version_compagnon_v1']) AND
isset($_POST['ID_Version_compagnon_v2']) AND
isset($_POST['ID_Version_sp812']) AND
isset($_POST['ID_Version_sp4ac']) AND
isset($_POST['ID_Version_sp8dc']) AND
isset($_POST['ID_Version_sbs']) AND
isset($_POST['ID_Version_sql']) AND
isset($_POST['ID_Version_www']) AND
isset($_POST['ID_Version_updater']) AND
isset($_POST['Description_interne']) AND
isset($_POST['Description_externe']))
{
// Mémorisation des valeurs saisies pour éviter de les perdre en cas d'erreur rendant la création impossible :
$_SESSION['Versions']['version']['Nom'] = trim($_POST['Nom']);
$_SESSION['Versions']['version']['Date'] = trim($_POST['Date']);
$_SESSION['Versions']['version']['ID_Version_appli'] = trim($_POST['ID_Version_appli']);
$_SESSION['Versions']['version']['ID_Version_qt'] = trim($_POST['ID_Version_qt']);
$_SESSION['Versions']['version']['ID_Version_compagnon_v1'] = trim($_POST['ID_Version_compagnon_v1']);
$_SESSION['Versions']['version']['ID_Version_compagnon_v2'] = trim($_POST['ID_Version_compagnon_v2']);
$_SESSION['Versions']['version']['ID_Version_sp812'] = trim($_POST['ID_Version_sp812']);
$_SESSION['Versions']['version']['ID_Version_sp4ac'] = trim($_POST['ID_Version_sp4ac']);
$_SESSION['Versions']['version']['ID_Version_sp8dc'] = trim($_POST['ID_Version_sp8dc']);
$_SESSION['Versions']['version']['ID_Version_sbs'] = trim($_POST['ID_Version_sbs']);
$_SESSION['Versions']['version']['ID_Version_sql'] = $_POST['ID_Version_sql'];
$_SESSION['Versions']['version']['ID_Version_www'] = $_POST['ID_Version_www'];
$_SESSION['Versions']['version']['ID_Version_updater'] = trim($_POST['ID_Version_updater']);
$_SESSION['Versions']['version']['Description_interne'] = trim($_POST['Description_interne']);
$_SESSION['Versions']['version']['Description_externe'] = trim($_POST['Description_externe']);
// Vérifications :
// Vérification que le nom n'est pas vide :
if ($_SESSION['Versions']['version']['Nom'] == "") $message_erreur .= "Le nom du package ne peut pas être vide...";
// Si les contrôles ne sont pas invalides, on créé le nouveau package :
if ($message_erreur == "")
{
if (isset($_POST['validation_creation_package']))
{
// Recherche des versions de ShipHeart qui auraient le même nom :
$nb_versions = 0;
$requete = 'SELECT * FROM TB_Versions WHERE Validite=1 AND Nom=? ';
$reponse = Requete_preparee_bdd($requete,
array(
array('s', $_SESSION['Versions']['version']['Nom'])),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$nb_versions ++;
}
Liberation_jeu_de_resultat_bdd($reponse);
if ($nb_versions > 0) $message_erreur .= "Le nom du package [".$_SESSION['Versions']['version']['Nom']."] est déjà utilisé. Vous ne pouvez pas l'utiliser à nouveau...";
if ($message_erreur == "")
{
// Création de la version :
$requete = 'INSERT INTO TB_Versions (Nom, Date, ID_Version_appli, ID_Version_qt, ID_Version_compagnon_v1, ID_Version_compagnon_v2, ID_Version_sp812, ID_Version_sp4ac, ID_Version_sp8dc, ID_Version_sbs, ID_Version_sql, ID_Version_www, ID_Version_updater, Description_interne, Description_externe) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
Requete_preparee_bdd($requete,
array(
array('s', $_SESSION['Versions']['version']['Nom']),
array('s', $_SESSION['Versions']['version']['Date']),
array('i', $_SESSION['Versions']['version']['ID_Version_appli']),
array('i', $_SESSION['Versions']['version']['ID_Version_qt']),
array('i', $_SESSION['Versions']['version']['ID_Version_compagnon_v1']),
array('i', $_SESSION['Versions']['version']['ID_Version_compagnon_v2']),
array('i', $_SESSION['Versions']['version']['ID_Version_sp812']),
array('i', $_SESSION['Versions']['version']['ID_Version_sp4ac']),
array('i', $_SESSION['Versions']['version']['ID_Version_sp8dc']),
array('i', $_SESSION['Versions']['version']['ID_Version_sbs']),
array('i', $_SESSION['Versions']['version']['ID_Version_sql']),
array('i', $_SESSION['Versions']['version']['ID_Version_www']),
array('i', $_SESSION['Versions']['version']['ID_Version_updater']),
array('s', $_SESSION['Versions']['version']['Description_interne']),
array('s', $_SESSION['Versions']['version']['Description_externe'])),
__FILE__, __LINE__);
// Récup de la clé primaire de l'enregistrement créé :
$_SESSION['Versions']['version']['Cle_primaire'] = Recuperation_id_cree_bdd();
// Message d'information :
$message_information = "La version ".$_SESSION['Versions']['version']['Nom']." vient d'être créée";
}
}
else if (isset($_POST['validation_modification_package']))
{
// Mise à jour de la version :
$requete = 'UPDATE TB_Versions SET Nom=?, Date=?, ID_Version_appli=?, ID_Version_qt=?, ID_Version_compagnon_v1=?, ID_Version_compagnon_v2=?, ID_Version_sp812=?, ID_Version_sp4ac=?, ID_Version_sp8dc=?, ID_Version_sbs=?, ID_Version_sql=?, ID_Version_www=?, ID_Version_updater=?, Description_interne=?, Description_externe=? WHERE Cle_primaire=?';
Requete_preparee_bdd($requete,
array(
array('s', $_SESSION['Versions']['version']['Nom']),
array('s', $_SESSION['Versions']['version']['Date']),
array('i', $_SESSION['Versions']['version']['ID_Version_appli']),
array('i', $_SESSION['Versions']['version']['ID_Version_qt']),
array('i', $_SESSION['Versions']['version']['ID_Version_compagnon_v1']),
array('i', $_SESSION['Versions']['version']['ID_Version_compagnon_v2']),
array('i', $_SESSION['Versions']['version']['ID_Version_sp812']),
array('i', $_SESSION['Versions']['version']['ID_Version_sp4ac']),
array('i', $_SESSION['Versions']['version']['ID_Version_sp8dc']),
array('i', $_SESSION['Versions']['version']['ID_Version_sbs']),
array('i', $_SESSION['Versions']['version']['ID_Version_sql']),
array('i', $_SESSION['Versions']['version']['ID_Version_www']),
array('i', $_SESSION['Versions']['version']['ID_Version_updater']),
array('s', $_SESSION['Versions']['version']['Description_interne']),
array('s', $_SESSION['Versions']['version']['Description_externe']),
array('s', $_SESSION['Versions']['version']['Cle_primaire'])),
__FILE__, __LINE__);
// Message d'information :
$message_information = "La version ".$_SESSION['Versions']['version']['Nom']." vient d'être modifiée";
}
$_SESSION['Versions']['page'] = "Liste_versions";
}
}
//---------------------------------------------------------------------------
// Création Version :
if ((isset($_POST['validation_creation_version']) OR
isset($_POST['validation_modification_version'])) AND
isset($_POST['Description']))
{
// Mémorisation des valeurs saisies pour éviter de les perdre en cas d'erreur rendant la création impossible :
$_SESSION['Versions']['version']['Description'] = trim($_POST['Description']);
if (isset($_POST['Repertoire'])) $_SESSION['Versions']['version']['Repertoire'] = trim($_POST['Repertoire']);
if (isset($_POST['validation_creation_version']))
{
do // Dummy loop pour gérer les sorties sur erreur...
{
if($types_version[$_SESSION['Versions']['type_version']][2] == "Fichier")
{
// Traitement des erreurs HTML :
if ($_FILES['new_file']['error'])
{
switch ($_FILES['new_file']['error'])
{
case 1: // UPLOAD_ERR_INI_SIZE (limite de PHP.INI)
{
$message_erreur = 'La taille du fichier est trop importante (taille maxi = '.number_format(MAX_TAILLE_FICHIER_VERSION, 0, ".", " ").' octets) [erreur #1]';
break;
}
case 2: // UPLOAD_ERR_FORM_SIZE (limite du formulaire HTML)
{
$message_erreur = 'La taille du fichier est trop importante (taille maxi = '.number_format(MAX_TAILLE_FICHIER_VERSION, 0, ".", " ").' octets) [erreur #2]';
break;
}
case 3: // UPLOAD_ERR_PARTIAL (interruption pendant le téléchargement)
{
$message_erreur = "Le téléchargement du fichier a été interrompu pendant le transfert... [erreur #3]";
break;
}
case 4: // UPLOAD_ERR_NO_FILE (tentative de téléchargement d'un fichier vide)
{
$message_erreur = "Le fichier que vous avez essayé de télécharger a une taille nulle... [erreur #4]";
break;
}
}
break;
}
if ($message_erreur != "") break; // Sortie de la dummy loop
/* // Vérifications de l'extension du fichier :
$extension = strrchr($_FILES['new_file']['name'], '.'); // Extension du fichier téléchargé
switch ($extension)
{
case ".pdf":
case ".PDF":
{
$extension = ".pdf";
break;
}
default :
{
$message_erreur = 'Vous ne pouvez télécharger une photo qu\'au format PDF (donc avec une extension \'.pdf\' ou \'.PDF\') [erreur #5]';
break;
}
}
if ($message_erreur != "") break; // Sortie de la dummy loop
*/
// Répertoire de stockage de la version :
$dossier = REPERTOIRE_VERSIONS_SHIPHEART.$types_version[$_SESSION['Versions']['type_version']][5]; // Dossier de stockage des fichiers
if (!file_exists($dossier) OR !is_dir($dossier)) mkdir($dossier); // On vérifie d'abord que le répertoire existe. Sinon on le créé
// Création du nom de fichier complet :
$_SESSION['Versions']['version']['Fichier'] = $_FILES['new_file']['name'];
$destination = $dossier.'/'.$_SESSION['Versions']['version']['Fichier'];
// Stockage du fichier :
if(!move_uploaded_file($_FILES['new_file']['tmp_name'], $destination))
{
$message_erreur = 'Erreur de téléchargement... [erreur #7]';
break; // Sortie de la dummy loop
}
}
else // Cas d'un répertoire :
{
}
// Création de la version :
$requete = 'INSERT INTO '.$types_version[$_SESSION['Versions']['type_version']][1].' ('.$types_version[$_SESSION['Versions']['type_version']][2].', Description) VALUES (?, ?)';
Requete_preparee_bdd($requete,
array(
array('s', $_SESSION['Versions']['version'][''.$types_version[$_SESSION['Versions']['type_version']][2].'']),
array('s', $_SESSION['Versions']['version']['Description'])),
__FILE__, __LINE__);
// Récup de la clé primaire de l'enregistrement créé :
$_SESSION['Versions']['version']['Cle_primaire'] = Recuperation_id_cree_bdd();
// Message d'information :
$message_information = "La version ".$_SESSION['Versions']['version']['Fichier']." vient d'être créée";
// Retour à la liste si la création s'est bien passée :
$_SESSION['Versions']['page'] = "Liste_versions";
} while (0);
}
else if (isset($_POST['validation_modification_version']))
{
// Mise à jour de la version :
$requete = 'UPDATE '.$types_version[$_SESSION['Versions']['type_version']][1].' SET '.$types_version[$_SESSION['Versions']['type_version']][2].'=?, Description=? WHERE Cle_primaire=?';
Requete_preparee_bdd($requete,
array(
array('s', $_SESSION['Versions']['version'][''.$types_version[$_SESSION['Versions']['type_version']][2].'']),
array('s', $_SESSION['Versions']['version']['Description']),
array('i', $_SESSION['Versions']['version']['Cle_primaire'])),
__FILE__, __LINE__);
// Message d'information :
$message_information = "La version ".$_SESSION['Versions']['version'][''.$types_version[$_SESSION['Versions']['type_version']][2].'']." vient d'être modifiée";
// Retour à la liste si la modification s'est bien passée :
$_SESSION['Versions']['page'] = "Liste_versions";
}
}
//---------------------------------------------------------------------------
// Génération archive :
if (isset($_POST['validation_generation_archive']))
{
do // Fake loop
{
if ($types_version[$_SESSION['Versions']['type_version']][3] != "package") break; // On ne traite une telle demande que s'il s'agit bien d'un package....
//--------------------------------------------------------------------------------------------------
// Vidage du répertoire temporaire :
//--------------------------------------------------------------------------------------------------
$repertoire_temp = REPERTOIRE_VERSIONS_SHIPHEART.$types_version[$_SESSION['Versions']['type_version']][5].'/temp';
// Sécurité en dur pour s'assurer qu'on ne pointe pas sur un autre répertoire qu'on va supprimer :
if (strpos($repertoire_temp, "/home/ciuqsga/versions/shipheart/packages/temp") === false)
{
$message_erreur .= "L'adresse du répertoire TEMP a été modifiée (répertoire = ".$repertoire_temp."). Afin d'éviter toute catastrophe (ce répertoire et ses sous-répertoires vont être supprimés !), merci de mettre à jour ce test de vérification... ";
break;
}
// Suppression du répertoire (permet de le vider simplement, yc ses sous-répertoires) :
// ATTENTION : la commande est récursive. Il ne faut PAS se tromper de répertoire !!!!
if (file_exists($repertoire_temp) AND is_dir($repertoire_temp))
{
// Vidage mas pas suppression (l'intérêt de cette commande vs 'rm -r' est qu'il ne déclenche pas d'erreur si le répertoire est vide...) :
// NB : le répertoire n'est PAS supprimé par cette commande (juste vidé)
exec("find ".$repertoire_temp."/* -delete");
}
if (!file_exists($repertoire_temp) OR !is_dir($repertoire_temp)) mkdir($repertoire_temp); // Si le répertoire n'existe pas, on le créé.
if (count(glob($repertoire_temp."/*")) != 0) // Compte le nb de fichiers...
{
$message_erreur .= "La préparation du répertoire de nouvelle version [".$repertoire_temp."] a échoué. La génération de l'archive est abandonnée... ";
break;
}
//--------------------------------------------------------------------------------------------------
// Recherche des infos sur le package :
//--------------------------------------------------------------------------------------------------
$requete = 'SELECT * FROM '.$types_version[$_SESSION['Versions']['type_version']][1].' WHERE Cle_primaire="'.$_SESSION['Versions']['version']['Cle_primaire'].'" ';
$reponse = Requete_preparee_bdd($requete,
array(),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$_SESSION['Versions']['version'] = $donnees;
}
Liberation_jeu_de_resultat_bdd($reponse);
//--------------------------------------------------------------------------------------------------
// Création du fichier JSON (début) :
//--------------------------------------------------------------------------------------------------
$donnees_json['NoVersion'] = $_SESSION['Versions']['version']['Nom'];
//--------------------------------------------------------------------------------------------------
// Copie des fichiers de sous-version vers le dossier 'temp' :
//--------------------------------------------------------------------------------------------------
for ($i = 0; (($i < $max_nb_types_version) && ($types_version[$i][0] != "")); $i ++)
{
if ($types_version[$i][4] == "") continue; // On ne traite pas le cas du PACKAGE qui n'a pas de fichier à récupérer....
// Recherche du nom de fichier ou de répertoire qui doit être inclus dans l'archive :
$nom = ""; // Par défaut (utile si un nouveau type de module a été créé mais n'existait pas sur cette version)
$requete = 'SELECT * FROM '.$types_version[$i][1].' WHERE Cle_primaire='.$_SESSION['Versions']['version'][''.$types_version[$i][4].''].' ';
$reponse = Requete_preparee_bdd($requete,
array(),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$nom = $donnees[''.$types_version[$i][2].''];
}
Liberation_jeu_de_resultat_bdd($reponse);
if ($nom == "") continue; // Si le type de module en cours n'existait pas pour cette version, on ne met rien dans le fichier JSON à ce sujet...
// Copie du fichier ou du répertoire dans le répertoire temporaire :
if ($types_version[$i][2] == "Fichier") // Cas d'un fichier simple :
{
$fichier_source = REPERTOIRE_VERSIONS_SHIPHEART.$types_version[$i][5].'/'.$nom;
$fichier_destination = $repertoire_temp.'/'.$nom;
if (!copy($fichier_source, $fichier_destination))
{
$message_erreur .= "La copie du fichier [".$fichier_source."] de son répertoire d'archive vers le répertoire temporaire a échoué. La génération de l'archive est abandonnée... ";
break;
}
// else $message_information .= "La copie du fichier [".$fichier_source."] de son répertoire d'archive vers le répertoire temporaire a été effectué avec succès. La génération de l'archive se poursuit. ";
}
else // Cas d'un répertoire :
{
$repertoire_source = REPERTOIRE_VERSIONS_SHIPHEART.$types_version[$i][5].'/'.$nom;
$repertoire_destination = $repertoire_temp.'/'.$nom;
if ((!file_exists($repertoire_source)) && (!is_dir($repertoire_source)))
{
$message_erreur .= " /!\\ Le répertioire [".$repertoire_source."] n'existe pas ! La génération est arrêtée...
";
break;
}
if (copie_repertoire($repertoire_source, $repertoire_destination) == -1)
{
$message_erreur .= " Erreur lors de la copîe du répertoire [".$repertoire_source."] vers le répertoire [".$repertoire_destination."] La génération est arrêtée...
";
break;
}
}
$donnees_json[''.$types_version[$i][0].''] = $nom; // Ajout du type de firmware/dossier + nom du firmware/dossier dans JSON
}
if ($message_erreur != "") break;
//--------------------------------------------------------------------------------------------------
// Copie du répertoire SYSTEME vers le dossier 'temp' :
//--------------------------------------------------------------------------------------------------
$repertoire_source = REPERTOIRE_VERSIONS_SHIPHEART."/ressources/systeme";
$repertoire_destination = $repertoire_temp.'/systeme';
if (copie_repertoire($repertoire_source, $repertoire_destination) == -1)
{
$message_erreur .= " Erreur lors de la copîe du répertoire [".$repertoire_source."] vers le répertoire [".$repertoire_destination."] La génération est arrêtée...
";
break;
}
//--------------------------------------------------------------------------------------------------
// Copie du répertoire UTILS vers le dossier 'temp' :
//--------------------------------------------------------------------------------------------------
$repertoire_source = REPERTOIRE_VERSIONS_SHIPHEART."/ressources/utils";
$repertoire_destination = $repertoire_temp.'/utils';
if (copie_repertoire($repertoire_source, $repertoire_destination) == -1)
{
$message_erreur .= " Erreur lors de la copîe du répertoire [".$repertoire_source."] vers le répertoire [".$repertoire_destination."] La génération est arrêtée...
";
break;
}
//--------------------------------------------------------------------------------------------------
// Copie du répertoire CONFIG vers le dossier 'temp' :
//--------------------------------------------------------------------------------------------------
$repertoire_source = REPERTOIRE_VERSIONS_SHIPHEART."/ressources/config";
$repertoire_destination = $repertoire_temp.'/config';
if (copie_repertoire($repertoire_source, $repertoire_destination) == -1)
{
$message_erreur .= " Erreur lors de la copîe du répertoire [".$repertoire_source."] vers le répertoire [".$repertoire_destination."] La génération est arrêtée...
";
break;
}
//--------------------------------------------------------------------------------------------------
// Création du fichier JSON (fin):
//--------------------------------------------------------------------------------------------------
$type = "update";
$chaines_a_echapper = array("\"", "\r", "\n"); // Utiliser pour ne pas véroler le fichier JSON dans la partie Description. Mettre ici les chaines interdites....
$chaines_echappement = array("\\\"", " ", ""); // ... et ici leur remplaçante.
$donnees_json['Repertoire_data'] = ""; // Vide dans le cas d'un NEW ou d'un UPDATE (utilisé plus tard dans le cas d'un RESTORE)
$donnees_json['SQL_data'] = ""; // Vide dans le cas d'un NEW ou d'un UPDATE (utilisé plus tard dans le cas d'un RESTORE)
$donnees_json['Type'] = $type;
$donnees_json['Description'] = str_replace($chaines_a_echapper, $chaines_echappement, $_SESSION['Versions']['version']['Description_externe']);
// Génération du nom de fichier JSON de la forme 'v_1_2_14_update.json' où le dernier groupe représente le type de mise à jour ('new' ou 'update' - 'restore' ne peut pas être généré ici) :
$base_nom_archive = 'v_'.str_replace(".", "_", $_SESSION['Versions']['version']['Nom']);
$nom_fichier_json = $base_nom_archive.'_'.$type.'.json';
file_put_contents($repertoire_temp.'/'.$nom_fichier_json, json_encode($donnees_json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); // Le 'file_put_contents' crée le fichier
//--------------------------------------------------------------------------------------------------
// Déplacement vers le répertoire temporaire :
// NB : le déplacement sur le répertoire est impératif. Si on utilise les chemins absolu, cela fonctionne... MAIS
// l'archive contient les chemins absolu de chaque fichier. Le décodage n'est ensuite plus possible !
//--------------------------------------------------------------------------------------------------
if (!chdir($repertoire_temp))
{
$message_erreur .= "Le déplacement vers [".$repertoire_temp."] n'a pas été possible. La génération de l'archive est abandonnée... ";
break;
}
/* ANCIENNE VERSION : Début (< V4)
//--------------------------------------------------------------------------------------------------
// Création du fichier archive UPDATE TAR.GZ :
//--------------------------------------------------------------------------------------------------
$output = null;
$retval = null;
$nom_fichier_tar_gz = 'ShipHeart_'.$base_nom_archive.'_'.$type.'.tar.gz';
$cde = "tar -cvzf ".$nom_fichier_tar_gz." *"; // NB : ne PAS utiliser SUDO qui n'est pas autorisé sur le serveur OVH...
// echo 'Commande = ['.$cde.'] ';
exec($cde, $output, $retval);
if ($retval != 0)
{
$message_erreur .= "La génération du fichier [".$nom_fichier_tar_gz."] a échoué. La génération de l'archive est abandonnée... ";
break;
}
//--------------------------------------------------------------------------------------------------
// Création du fichier encodé UPDATE TAR.GZ.ENC :
//--------------------------------------------------------------------------------------------------
$output = null;
$retval = null;
$nom_fichier_tar_gz_enc = $nom_fichier_tar_gz.".enc";
$cde = "openssl enc -aes-256-cbc -pbkdf2 -iter 10000 -md sha256 -in ".$nom_fichier_tar_gz." -out ".$nom_fichier_tar_gz_enc." -pass pass:".BDD_BATEAU_PASSWORD." ";
// echo 'Commande = ['.$cde.'] ';
exec($cde, $output, $retval); // NB : ne PAS utiliser SUDO qui n'est pas autorisé sur le serveur OVH...
if ($retval != 0)
{
$message_erreur .= "L'encryptage du fichier [".$nom_fichier_tar_gz_enc."] a échoué. La génération de l'archive est abandonnée... ";
break;
}
// Suppression du fichier TAR.GZ qui, sinon, reste là :
exec("rm ".$nom_fichier_tar_gz); // NB : ne PAS utiliser SUDO qui n'est pas autorisé sur le serveur OVH...
ANCIENNE VERSION : Fin */
//--------------------------------------------------------------------------------------------------
// Création du fichier archive TAR.GZ.ENC :
//--------------------------------------------------------------------------------------------------
$nom_fichier = "ShipHeart_".$base_nom_archive.'_'.$type;
$nom_fichier_tar_gz_enc = $nom_fichier.".tar.gz.enc";
if (creer_archive_chiffree($repertoire_temp, $nom_fichier) != 0)
{
$message_erreur .= "\t/!\\ L'encryptage du fichier [".$nom_fichier."] a échoué. La génération de l'archive est abandonnée...\n";
break;
}
//--------------------------------------------------------------------------------------------------
// Création du répertoire d'archive de la version :
//--------------------------------------------------------------------------------------------------
$repertoire_archive_version = REPERTOIRE_VERSIONS_SHIPHEART.$types_version[$_SESSION['Versions']['type_version']][5].'/v_'.str_replace(".", "_", $_SESSION['Versions']['version']['Nom']);
if (!file_exists($repertoire_archive_version) OR !is_dir($repertoire_archive_version)) mkdir($repertoire_archive_version); // On vérifie d'abord que le répertoire existe. Sinon on le créé
$repertoire_archive_version_ressources = $repertoire_archive_version."/ressources";
if (!file_exists($repertoire_archive_version_ressources) OR !is_dir($repertoire_archive_version_ressources)) mkdir($repertoire_archive_version_ressources); // On vérifie d'abord que le répertoire existe. Sinon on le créé
//--------------------------------------------------------------------------------------------------
// Copie du fichier archive UPDATE dans le répertoire de sa version :
//--------------------------------------------------------------------------------------------------
if (!rename($repertoire_temp."/".$nom_fichier_tar_gz_enc, $repertoire_archive_version.'/'.$nom_fichier_tar_gz_enc))
{
$message_erreur .= "\t/!\\ Le déplacement du fichier [".$nom_fichier_tar_gz_enc."] du répertoire temporaire vers le répertoire de version a échoué. La génération de l'archive est abandonnée...\n";
break;
}
//--------------------------------------------------------------------------------------------------
// Relecture du fichier JSON et transformation en version 'new' :
//--------------------------------------------------------------------------------------------------
// Lecture du contenu du fichier JSON puis archivage du fichier :
$contenu = file_get_contents($repertoire_temp.'/'.$base_nom_archive.'_'.$type.'.json'); // Lecture du fichier
$donnees_json = json_decode($contenu, true); // Décodage du fichier JSON (true = tableau associatif)
rename($repertoire_temp.'/'.$base_nom_archive.'_'.$type.'.json', $repertoire_archive_version_ressources.'/'.$base_nom_archive.'_'.$type.'.json'); // Déplacement du JSON d'origine dans le répertoire Ressources
$type = "new";
// Création du nouveau fichier JSON (nouveau nom et contenu mis à jour) :
$nom_fichier_json = $base_nom_archive.'_'.$type.'.json';
$donnees_json['Type'] = $type; //Mise à jour (ou ajout si inexistant) du champ Type
file_put_contents($repertoire_temp.'/'.$nom_fichier_json, json_encode($donnees_json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); // Le 'file_put_contents' crée le fichier
/* ANCIENNE VERSION : Début (< V4)
//--------------------------------------------------------------------------------------------------
// Création du fichier archive NEW TAR.GZ :
//--------------------------------------------------------------------------------------------------
$output = null;
$retval = null;
$nom_fichier_tar_gz = "ShipHeart_".$base_nom_archive.'_'.$type.".tar.gz";
$cde = "tar -cvzf ".$nom_fichier_tar_gz." *"; // NB : ne PAS utiliser SUDO qui n'est pas autorisé sur le serveur OVH...
// echo 'Commande = ['.$cde.'] ';
exec($cde, $output, $retval);
if ($retval != 0)
{
$message_erreur .= "La génération du fichier [".$nom_fichier_tar_gz."] a échoué. La génération de l'archive est abandonnée... ";
break;
}
//--------------------------------------------------------------------------------------------------
// Création du fichier encodé NEW TAR.GZ.ENC :
//--------------------------------------------------------------------------------------------------
$output = null;
$retval = null;
$nom_fichier_tar_gz_enc = $nom_fichier_tar_gz.".enc";
$cde = "openssl enc -aes-256-cbc -pbkdf2 -iter 10000 -md sha256 -in ".$nom_fichier_tar_gz." -out ".$nom_fichier_tar_gz_enc." -pass pass:".BDD_BATEAU_PASSWORD." ";
// echo 'Commande = ['.$cde.'] ';
exec($cde, $output, $retval); // NB : ne PAS utiliser SUDO qui n'est pas autorisé sur le serveur OVH...
if ($retval != 0)
{
$message_erreur .= "L'encryptage du fichier [".$nom_fichier_tar_gz_enc."] a échoué. La génération de l'archive est abandonnée... ";
break;
}
// Suppression du fichier TAR.GZ qui, sinon, reste là :
exec("rm ".$nom_fichier_tar_gz); // NB : ne PAS utiliser SUDO qui n'est pas autorisé sur le serveur OVH...
ANCIENNE VERSION : Fin */
//--------------------------------------------------------------------------------------------------
// Création du fichier archive TAR.GZ.ENC :
//--------------------------------------------------------------------------------------------------
$nom_fichier = "ShipHeart_".$base_nom_archive.'_'.$type;
$nom_fichier_tar_gz_enc = $nom_fichier.".tar.gz.enc";
if (creer_archive_chiffree($repertoire_temp, $nom_fichier) != 0)
{
$message_erreur .= "\t/!\\ L'encryptage du fichier [".$nom_fichier."] a échoué. La génération de l'archive est abandonnée...\n";
break;
}
//--------------------------------------------------------------------------------------------------
// Copie du fichier archive NEW dans le répertoire de sa version :
//--------------------------------------------------------------------------------------------------
if (!rename($repertoire_temp."/".$nom_fichier_tar_gz_enc, $repertoire_archive_version.'/'.$nom_fichier_tar_gz_enc))
{
$message_erreur .= "\t/!\\ Le déplacement du fichier [".$nom_fichier_tar_gz_enc."] du répertoire temporaire vers le répertoire de version a échoué. La génération de l'archive est abandonnée...\n";
break;
}
$message_information .= "Les fichiers archives [".$base_nom_archive."] viennent d'être créés dans le répertoire [".$repertoire_archive_version."]";
//--------------------------------------------------------------------------------------------------
// Copie de tous les fichiers utilisés dans le sous-répertoire Ressources du répertoire de version :
// NB : seul le fichier JSON de en version 'update' y est déjà (on va ici déplacer celui de la version 'new')
// NB 2 : les fichiers encryptés ne sont pas stockés dans Ressources mais à la racine du répertoire
//--------------------------------------------------------------------------------------------------
copie_repertoire($repertoire_temp , $repertoire_archive_version_ressources);
//--------------------------------------------------------------------------------------------------
// Suppression du répeertoire temporaire :
// Nb : on ne teste pas le résultat car pas de soucis en cas d'erreur...
//--------------------------------------------------------------------------------------------------
exec("find ".$repertoire_temp."/* -delete"); // NB : ne PAS utiliser SUDO qui n'est pas autorisé sur le serveur OVH...
rmdir($repertoire_temp);
//--------------------------------------------------------------------------------------------------
// RAZ des paramètres :
//--------------------------------------------------------------------------------------------------
$_SESSION['Versions']['page'] = "Modification_version";
} while (0);
$flag_redirection = true; // Evite que le message d'erreur soit supprimé par la redirection de purge d'URL
}
//************************************************************************************************************************************
// 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['Versions']['page'])
{
//****************************************************************************************************************************
case "Accueil":
{
// Récupération des informations sur les versions :
/* $nb_versions = 0;
$requete = 'SELECT * FROM TB_Versions WHERE Validite=1 ORDER BY Nom DESC';
$reponse = Requete_preparee_bdd($requete,
array(),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$versions[$nb_versions ++] = $donnees;
}
Liberation_jeu_de_resultat_bdd($reponse);
*/
break;
}
//****************************************************************************************************************************
case "Liste_versions":
{
// Récupération des informations sur les versions :
$nb_versions = 0;
switch($types_version[$_SESSION['Versions']['type_version']][3])
{
//---------------------------------------------------------------------------
case "package" : // Uniquement pour les versions principales :
{
$tri = 'INET_ATON('.$types_version[$_SESSION['Versions']['type_version']][2].') DESC';
break;
}
//---------------------------------------------------------------------------
default : // Pour toutes les versions secondaires :
{
$tri = ' '.$types_version[$_SESSION['Versions']['type_version']][2].' DESC';
break;
}
}
$requete = 'SELECT * FROM '.$types_version[$_SESSION['Versions']['type_version']][1].' WHERE Validite=1 ORDER BY '.$tri.' ';
$reponse = Requete_preparee_bdd($requete,
array(),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$versions[$nb_versions ++] = $donnees;
}
Liberation_jeu_de_resultat_bdd($reponse);
break;
}
//****************************************************************************************************************************
case "Liste_evolutions":
{
// Récupération des informations sur les versions :
$nb_versions = 0;
$requete = 'SELECT Cle_primaire, Nom, Date, Description_externe FROM TB_Versions WHERE Validite=1 ORDER BY INET_ATON(Nom) DESC';
$reponse = Requete_preparee_bdd($requete,
array(),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$versions[$nb_versions] = $donnees;
if ($versions[$nb_versions]['Description_externe'] == "") $versions[$nb_versions]['Description_externe'] = "Pas de modification fonctionnelle significative";
$nb_versions ++;
}
Liberation_jeu_de_resultat_bdd($reponse);
break;
}
//****************************************************************************************************************************
case "Creation_version":
case "Modification_version":
{
if ($_SESSION['Versions']['page'] == "Creation_version")
{
switch($types_version[$_SESSION['Versions']['type_version']][3])
{
//---------------------------------------------------------------------------
case "package" : // Uniquement pour les versions principales :
{
$_SESSION['Versions']['version']['Cle_primaire'] = 0;
$_SESSION['Versions']['version']['Nom'] = "";
$_SESSION['Versions']['version']['Date'] = date("Y-m-d");
$_SESSION['Versions']['version']['ID_Version_appli'] = 0;
$_SESSION['Versions']['version']['ID_Version_qt'] = 0;
$_SESSION['Versions']['version']['ID_Version_compagnon_v1'] = 0;
$_SESSION['Versions']['version']['ID_Version_compagnon_v2'] = 0;
$_SESSION['Versions']['version']['ID_Version_sp812'] = 0;
$_SESSION['Versions']['version']['ID_Version_sp4ac'] = 0;
$_SESSION['Versions']['version']['ID_Version_sp8dc'] = 0;
$_SESSION['Versions']['version']['ID_Version_sbs'] = 0;
$_SESSION['Versions']['version']['ID_Version_sql'] = 0;
$_SESSION['Versions']['version']['ID_Version_www'] = 0;
$_SESSION['Versions']['version']['ID_Version_updater'] = 0;
$_SESSION['Versions']['version']['Description_interne'] = "";
$_SESSION['Versions']['version']['Description_externe'] = "";
break;
}
//---------------------------------------------------------------------------
default : // Pour toutes les versions secondaires :
{
$_SESSION['Versions']['version']['Cle_primaire'] = 0;
$_SESSION['Versions']['version']['Fichier'] = "";
$_SESSION['Versions']['version']['Repertoire'] = "";
$_SESSION['Versions']['version']['Description'] = "";
if ($types_version[$_SESSION['Versions']['type_version']][2] == "Repertoire") $message_information .= " /!\\ Pensez à copier le répertoire de la version créée sur le serveur, dans 'versions/shipheart/www' par exemple
";
break;
}
}
}
else // Modification :
{
$requete = 'SELECT * FROM '.$types_version[$_SESSION['Versions']['type_version']][1].' WHERE Cle_primaire="'.$_SESSION['Versions']['version']['Cle_primaire'].'" ';
$reponse = Requete_preparee_bdd($requete,
array(),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$_SESSION['Versions']['version'] = $donnees;
}
Liberation_jeu_de_resultat_bdd($reponse);
}
switch($types_version[$_SESSION['Versions']['type_version']][3])
{
//---------------------------------------------------------------------------
case "package" : // Uniquement pour les versions principales :
{
$nb_versions_secondaires = 0;
for ($i = 0; (($i < $max_nb_types_version) && ($types_version[$i][0] != "")); $i ++)
{
$versions_secondaires[$nb_versions_secondaires]['nb_versions'] = 0;
$requete = 'SELECT * FROM '.$types_version[$i][1].' WHERE Validite=1 ORDER BY '.$types_version[$i][2].' DESC';
$reponse = Requete_preparee_bdd($requete,
array(),
__FILE__, __LINE__);
while ($donnees = Recherche_ligne_bdd($reponse))
{
$versions_secondaires[$nb_versions_secondaires][$versions_secondaires[$nb_versions_secondaires]['nb_versions'] ++]['version'] = $donnees;
}
Liberation_jeu_de_resultat_bdd($reponse);
// Ajout d'une valeur "Aucune" dans la liste des versions secondaire pour la cas où on affiche un package avec un type de version secondaire qui n'existait pas (ID = 0) :
// L'ajout à la fin permet de n'avoir ce choix qu'en tout dernier puisque le tri est DESC dans la requête (la valeur par défaut est la dernière version)
// On n'ajoute ce choix qu'en modification (en création, ça perturebe la valeur par défaut et on ne devrait pas en avoir besoin...).
if ($_SESSION['Versions']['page'] == "Modification_version")
{
$versions_secondaires[$nb_versions_secondaires][$versions_secondaires[$nb_versions_secondaires]['nb_versions']]['version']['Cle_primaire'] = 0;
$versions_secondaires[$nb_versions_secondaires][$versions_secondaires[$nb_versions_secondaires]['nb_versions']]['version'][''.$types_version[$i][2].''] = "--- Aucune ---";
$versions_secondaires[$nb_versions_secondaires]['nb_versions'] ++;
}
$nb_versions_secondaires ++;
}
break;
}
//---------------------------------------------------------------------------
default : // Pour toutes les versions secondaires :
{
break;
}
}
break;
}
//****************************************************************************************************************************
case "Confirmation_suppression_version":
{
break;
}
//****************************************************************************************************************************
case "Generation_archive":
{
break;
}
//****************************************************************************************************************************
default:
{
$_SESSION['Versions']['page'] = "Accueil";
break;
}
}
Fermeture_bdd(); // Déconnexion de MySQL
//************************************************************************************************************************************
// Affichage
//************************************************************************************************************************************
//********************************************************************************************************************************
// Affichage principal :
echo '
';
break;
}
//************************************************************************************************************************
case "Liste_versions":
{
echo '
';
echo '
Versions
';
switch($types_version[$_SESSION['Versions']['type_version']][3])
{
//---------------------------------------------------------------------------
case "package" : // Uniquement pour les versions principales :
{
echo '
Confirmez-vous la suppression de la version
';
echo $_SESSION['Versions']['version'][''.$types_version[$_SESSION['Versions']['type_version']][2].''];
echo ' ?
';
echo '
Si oui, le fichier correspondant et son entrée dans la base de données seront supprimés du serveur !