cuisine/inc/modele.php
Timothée Huneau 90be5dd519 Refactorisation passage à SLQite3 (début)
Pages faites :
- accueil
- statistiques
- ajouterElement
2025-02-23 23:56:23 +01:00

309 lines
8.5 KiB
PHP

<?php
function getDB() {return new SQLite3("db/cuisine.db");}
function getAssocFromQueryString($qs){
$db = getDB();
$stmt = $db->prepare($qs);
$result = $stmt->execute();
$assocArray = [];
while ($ligne = $result->fetchArray(SQLITE3_ASSOC)){
$assocArray[] = $ligne;
}
return $assocArray;
}
function getAllIngredients(){
$requeteListeIngredient = "SELECT nom, id FROM Ingredient ORDER BY nom;";
$resultatListeIngredient = getAssocFromQueryString($requeteListeIngredient);
$listeIngredient = [];
foreach ($resultatListeIngredient as $infoIngredient){
$listeIngredient[$infoIngredient['id']] = $infoIngredient;
}
return $listeIngredient;
}
function getAllUstensiles(){
$requete = "SELECT nom, id FROM Ustensile ORDER BY nom;";
$resultatListeUstensile = getAssocFromQueryString($requete);
$listeUstensile = [];
foreach ($resultatListeUstensile as $infoUstensile){
$listeUstensile[$infoUstensile['id']] = $infoUstensile;
}
return $listeUstensile;
}
function getAllPreparations(){
$requete = "SELECT nom, id FROM Preparation ORDER BY nom;";
$resultatListePreparation = getAssocFromQueryString($requete);
$listePreparation = [];
foreach ($resultatListePreparation as $infoPreparation){
$listePreparation[$infoPreparation['id']] = $infoPreparation;
}
return $listePreparation;
}
function getAllRecettes(){
$requete = "SELECT * FROM Recette ORDER BY nom;";
$resultatRecettes = getAssocFromQueryString($requete);
$listeRecette = [];
foreach($resultatRecettes as $infoRecette){
$listeRecette[$infoRecette['id']] = $infoRecette;
}
return $listeRecette;
}
function getAllGenres(){
$requete = "SELECT nom, id FROM Genre;";
$resultatGenre = getAssocFromQueryString($requete);
$listeGenre = [];
foreach ($resultatGenre as $infoGenre){
$listeGenre[$infoGenre['id']] = $infoGenre;
}
return $listeGenre;
}
function getAllUnites(){
$requete = "SELECT * FROM Unite;";
$resultatUnite = getAssocFromQueryString($requete);
$listeUnite = [];
foreach ($resultatUnite as $unite){
$listeUnite[$unite['id']] = $unite;
}
return $listeUnite;
}
function getRecetteFromId($id){
$requete = "SELECT * FROM Recette WHERE id=$id;";
$resultat = getAssocFromQueryString($requete);
return ($resultat ? $resultat[0] : false);
}
function getRecetteFullFromId($id){
$requete =
"SELECT r.nom, r.id idRecette, r.nbPortion portions, u.nom unite, r.realisation, u.id idU, r.tempsTotal tempsTotal, g.nom genre
FROM Recette r JOIN Unite u ON r.unitePortion = u.id JOIN Genre g ON r.genre = g.id
WHERE r.id = $id";
$resultat = getAssocFromQueryString($requete);
return ($resultat ? $resultat[0] : false);
}
function getAllIngredientsWithRecetteId($id){
$requete =
"SELECT ri.ingredient idIngredient, i.nom nom, ri.quantite quantite, u.nom unite, u.id idU
FROM Ingredient i JOIN RecetteIngredient ri ON i.id = ri.ingredient JOIN Unite u ON ri.unite = u.id
WHERE ri.recette = $id
ORDER BY nom;";
$resultat = getAssocFromQueryString($requete);
$listeIngredient = [];
foreach ($resultat as $key => $value) {
$listeIngredient[] = $value;
}
return $listeIngredient;
}
function getAllUstensileWithRecetteId($id){
$requete =
"SELECT ru.ustensile idUstensile, u.nom nom, ru.commentaire commentaire
FROM Ustensile u JOIN RecetteUstensile ru ON u.id = ru.ustensile
WHERE ru.recette = $id
ORDER BY nom;";
$resultat = getAssocFromQueryString($requete);
$listeUstensile = [];
foreach ($resultat as $key => $value) {
$listeUstensile[] = $value;
}
return $listeUstensile;
}
function getAllPreparationWithRecetteId($id){
$requete =
"SELECT rp.preparation idPreparation, p.nom nom, rp.duree duree, rp.temperature temperature
FROM Preparation p JOIN RecettePreparation rp ON p.id = rp.preparation
WHERE rp.recette = $id
ORDER BY nom;";
$resultat = getAssocFromQueryString($requete);
$listePreparation = [];
foreach ($resultat as $key => $value) {
$listePreparation[] = $value;
}
return $listePreparation;
}
function getGenreWithRecetteId($id){
$requete =
"SELECT g.id id, g.nom nom
FROM Genre g JOIN Recette r ON g.id = r.genre
WHERE r.id = $id;";
$resultat = getAssocFromQueryString($requete);
return ($resultat ? $resultat[0] : false);
}
function getAllReutiliseeWithRecetteId($id){
$requete =
"SELECT reu.utilisee id, rec.nom nom
FROM Reutilise reu JOIN Recette rec ON reu.utilisee = rec.id
WHERE reu.utilisant = $id
ORDER BY nom;";
$resultat = getAssocFromQueryString($requete);
$listeReutilisee = [];
foreach ($resultat as $key => $value) {
$listePreparation[] = $value;
}
return $listeReutilisee;
}
function getRecetteCount(){
$requete = "SELECT COUNT(*) nb FROM Recette;";
$ret = getAssocFromQueryString($requete)[0]["nb"];
return $ret;
}
function safePutIngredient($nom, $dispo){
$db = getDB();
$nomSafe = $db->escapeString($nom);
$requete = "INSERT INTO Ingredient (nom, " . implode(', ', lANNEE) . ") VALUES ('$nomSafe'";
foreach (lANNEE as $mois){
$requete .= ", " . ($dispo[$mois] ? "1" : "0");
}
$requete .= ");";
return $db->exec($requete);
}
function safePutUstensile($nom){
$db = getDB();
$nomSafe = $db->escapeString($nom);
$requete = "INSERT INTO Ustensile (nom) VALUES ('$nomSafe');";
return $db->exec($requete);
}
function safePutUnite($nom){
$db = getDB();
$nomSafe = $db->escapeString($nom);
$requete = "INSERT INTO Unite (nom) VALUES ('$nomSafe');";
return $db->exec($requete);
}
// modification vaut false si on effectue une création de recette et l'id de la recette à modifier sinon
// les listes d'ingrédients, de préparation et d'ustensile sont des tableaux de tableaux indexés sur les id des éléments utilisés.
function insererRecette($infosRecette, $listeIngredients, $listeUstensile, $listePreparation, $listeReutilise, $modification){
$c = seConnecter();
try {
mysqli_begin_transaction($c);
$nom = echappementBDD($infosRecette['nom']);
$tempsTotal = calculeMinutesFromTexte($infosRecette['tempsTotal']);
$genre = $infosRecette['genre'];
$unitePortion = $infosRecette['unitePortion'];
$nbPortion = $infosRecette['nbPortion'];
$realisation = echappementBDD(ecritureVersLecture($infosRecette['realisation']));
if($modification){
$idRecette = $modification;
$requetePrincipale = "
UPDATE Recette
SET
nom = '$nom',
tempsTotal = $tempsTotal,
genre = $genre,
unitePortion = $unitePortion,
nbPortion = $nbPortion,
realisation = '$realisation'
WHERE id = $idRecette;
";
mysqli_query($c, $requetePrincipale);
$requeteSupprIngredients = "DELETE FROM RecetteIngredient WHERE recette = $idRecette;";
mysqli_query($c, $requeteSupprIngredients);
$requeteSupprUstensiles = "DELETE FROM RecetteUstensile WHERE recette = $idRecette;";
mysqli_query($c, $requeteSupprUstensiles);
$requeteSupprPreparations = "DELETE FROM RecettePreparation WHERE recette = $idRecette;";
mysqli_query($c, $requeteSupprPreparations);
$requeteSupprReutilises = "DELETE FROM Reutilise WHERE utilisant = $idRecette;";
mysqli_query($c, $requeteSupprReutilises);
}else{
$requetePrincipale = "
INSERT INTO Recette (nom, tempsTotal, genre, unitePortion, nbPortion, realisation)
VALUES (
'$nom',
$tempsTotal,
$genre,
$unitePortion,
$nbPortion,
'$realisation'
);";
mysqli_query($c, $requetePrincipale);
$idRecette = mysqli_insert_id($c);
}
foreach($listeIngredients as $id => $ingredient){
$quantite = $ingredient['quantite'];
$unite = $ingredient['unite'];
$requete = "
INSERT INTO RecetteIngredient (ingredient, recette, quantite, unite)
VALUES (
$id,
$idRecette,
$quantite,
$unite
)
;";
mysqli_query($c, $requete);
}
foreach($listeUstensile as $id => $ustensile){
$commentaire = mysqli_real_escape_string($c, $ustensile['commentaire']);
$requete = "
INSERT INTO RecetteUstensile (ustensile, recette, commentaire)
VALUES (
$id,
$idRecette,
'$commentaire'
)
;";
mysqli_query($c, $requete);
}
foreach($listePreparation as $id => $preparation){
$duree = $preparation['duree'];
$temperature = $preparation['temp'];
$requete = "
INSERT INTO RecettePreparation (preparation, recette, duree, temperature)
VALUES (
$id,
$idRecette,
'$duree',
'$temperature'
)
;";
mysqli_query($c, $requete);
}
foreach($listeReutilise as $id => $utilisee){
$requete = "
INSERT INTO Reutilise (utilisee, utilisant)
VALUES (
$id,
$idRecette
)
;";
mysqli_query($c, $requete);
}
mysqli_commit($c);
}
catch (Exception $e){
mysqli_query('ROLLBACK');
$echec = true;
}
return $idRecette;
}
?>