Initial commit

Création de tous les dossiers et fichiers avec mise à part des constantes
This commit is contained in:
Timothée Huneau 2023-04-11 19:11:26 +02:00
commit 4c71fb59b4
42 changed files with 2544 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
local/*

1
.htaccess Normal file
View file

@ -0,0 +1 @@
ErrorDocument 404 https://cuisine.timotheehuneau.fr/index.php?erreur=404

141
asides/aAccueil.php Normal file
View file

@ -0,0 +1,141 @@
<aside>
<form method="POST">
<input type="submit" class="button" value="Appliquer les filtres !"/>
<input
type="checkbox"
class="dropdown"
id="dropdownFiltres"
name="dropdownFiltres"
/>
<label for="dropdownFiltres" class="dropdown">Trier les recettes</label>
<div class="principaleAside">
<div>
Critère :
<select name="typeTri">
<option value="nom" <?= (isset($_SESSION['tri']['typeTri']) and $_SESSION['tri']['typeTri'] == "nom") ? 'selected' : '' ?>>
nom
</option>
<option value="duree" <?= (isset($_SESSION['tri']['typeTri']) and $_SESSION['tri']['typeTri'] == "duree") ? 'selected' : '' ?>>
temps de réalisation
</option>
</select>
</div>
<div>
Ordre :
<select name="sensTri">
<option value="ASC" <?= (isset($_SESSION['tri']['sensTri']) and $_SESSION['tri']['sensTri'] == "ASC") ? 'selected' : '' ?>>
croissant
</option>
<option value="DESC" <?= (isset($_SESSION['tri']['sensTri']) and $_SESSION['tri']['sensTri'] == "DESC") ? 'selected' : '' ?>>
décroissant
</option>
</select>
</div>
</div>
<input
type="checkbox"
class="dropdown"
id="dropdownGenres"
name="dropdownGenres"
/>
<label for="dropdownGenres" class="dropdown">Genres</label>
<div class="principaleAside">
<?php foreach($listeGenre as $id => $elem): ?>
<div class="elemAside">
<label for="genre[<?= $id ?>]">
<?= $elem ?>&nbsp;:
</label>
<input
type="checkbox"
class="choixTri genre"
name="genre[<?= $id ?>]"
id="genre[<?= $id ?>]"
<?= (!isset($_SESSION['tri']['genre']) or isset($_SESSION['tri']['genre'][$id])) ? 'checked' : '' ?>
value="1"
/>
</div>
<?php endforeach ?>
</div>
<input
type="checkbox"
class="dropdown"
id="dropdownIngredients"
name="dropdownIngredients"
/>
<label for="dropdownIngredients" class="dropdown">Ingrédients</label>
<div class="principaleAside">
<div>
<label for="rechercheIngredients">
Rechercher un ingrédient&nbsp;:
</label>
<input
type="text"
id="rechercheIngredients"
/>
</div>
<?php foreach($listeIngredient as $id => $elem): ?>
<div class="elemAside divIngredient" nom="div-<?= $elem['nom'] ?>">
<label>
<?= $elem['nom'] ?>&nbsp;:
</label>
<span>
<input
type="radio"
name="ingredient[<?= $elem['id'] ?>]"
class="choixTri requis"
value="1"
title="Obligatoire"
<?= (isset($_SESSION['tri']['ingredient'][$id]) and $_SESSION['tri']['ingredient'][$id] == 1)? 'checked' : ''?>
/><input
type="radio"
name="ingredient[<?= $elem['id'] ?>]"
class="choixTri autorise"
value="0"
title="Indifférent"
<?= (empty($_SESSION['tri']['ingredient'][$id]) or $_SESSION['tri']['ingredient'][$id] == 0)? 'checked' : ''?>
/><input
type="radio"
name="ingredient[<?= $elem['id'] ?>]"
class="choixTri interdit"
value="-1"
title="Interdit"
<?= (isset($_SESSION['tri']['ingredient'][$id]) and $_SESSION['tri']['ingredient'][$id] == -1)? 'checked' : ''?>
/>
</span>
</div>
<?php endforeach ?>
</div>
<input
type="checkbox"
class="dropdown"
id="dropdownUstensiles"
name="dropdownUstensiles"
/>
<label for="dropdownUstensiles" class="dropdown">Ustensiles</label>
<div class="principaleAside">
<?php foreach($listeUstensile as $id => $elem): ?>
<div class="elemAside">
<label for="ustensile[<?= $elem['id'] ?>]" title="Je ne dispose pas de l'ustensile">
<?= $elem['nom'] ?>&nbsp;:
</label>
<span>
<input
type="checkbox"
name="ustensile[<?= $elem['id'] ?>]"
id="ustensile[<?= $elem['id'] ?>]"
class="choixTri ustensile"
value="1"
<?= (isset($_SESSION['tri']['ustensile']) and $_SESSION['tri']['ustensile'][$id] == 1)? 'checked' : ''?>
/>
</span>
</div>
<?php endforeach ?>
</div>
<input type="hidden" name="tri" value="true" />
<input type="submit" class="button" value="Appliquer les filtres !"/>
</form>
</aside>

134
asides/aRecette.php Normal file
View file

@ -0,0 +1,134 @@
<?php switch($pageExiste): ?>
<?php case 2 ?> <!-- Cas de modification d'une recette -->
<?php case -1 ?> <!-- Cas de création d'une recette -->
<?php if($_SESSION['auth']): ?>
<aside>
<input
type="checkbox"
class="dropdown"
id="dropdownIngredients"
name="dropdownIngredients"
/>
<label for="dropdownIngredients" class="dropdown">Ingrédients</label>
<div class="principaleAside">
<div>
<label for="rechercheIngredients">
Rechercher un ingrédient&nbsp;:
</label>
<input
type="text"
id="rechercheIngredients"
/>
</div>
<?php foreach($listeIngredients as $id => $elem): ?>
<div class="<?= isset($listeIngredientsRecette[$id]) ? 'important' : '' ?> divIngredient" nom="div-<?= $elem['nom'] ?>">
<input
class="autorise cb ingredient"
title="Ajouter"
type="checkbox"
nom="<?= $elem['nom'] ?>"
idIngredient="<?= $id ?>"
name="ingredient<?= $id ?>"
id="cb.ingredient<?= $id ?>"
<?= isset($listeIngredientsRecette[$id]) ? 'checked' : '' ?>
/>
<label for="cb.ingredient<?= $elem['id'] ?>" class="petitLabel">
<?= $elem['nom'] ?>
</label>
</div>
<?php endforeach ?>
</div>
<div>
</div>
<input
type="checkbox"
class="dropdown"
id="dropdownUstensiles"
name="dropdownUstensiles"
/>
<label for="dropdownUstensiles" class="dropdown">Ustensiles</label>
<div class="principaleAside">
<?php foreach($listeUstensiles as $id => $elem): ?>
<div <?= isset($listeUstensilesRecette[$id]) ? 'class="important"' : '' ?>>
<input
class="autorise cb ustensile"
title="Ajouter"
type="checkbox"
nom="<?= $elem['nom'] ?>"
idUstensile="<?= $id ?>"
name="ustensile<?= $id ?>"
id="cb.ustensile<?= $id ?>"
<?= isset($listeUstensilesRecette[$id]) ? 'checked' : '' ?>
/>
<label for="cb.ustensile<?= $id ?>" class="petitLabel">
<?= $elem['nom'] ?>
</label>
</div>
<?php endforeach ?>
</div>
<div>
</div>
<input
type="checkbox"
class="dropdown"
id="dropdownPreparations"
name="dropdownPreparations"
/>
<label for="dropdownPreparations" class="dropdown">Modes de préparations</label>
<div class="principaleAside">
<?php foreach($listePreparations as $id => $elem): ?>
<div class="<?= isset($listePreparationsRecette[$id]) ? 'important' : '' ?>">
<input
class="autorise cb preparation"
title="Ajouter"
type="checkbox"
nom="<?= $elem['nom'] ?>"
idPreparation="<?= $id ?>"
name="preparation<?= $id ?>"
id="cb.preparation<?= $id ?>"
<?= isset($listePreparationsRecette[$id]) ? 'checked' : '' ?>
/>
<label for="cb.preparation<?= $id ?>" class="petitLabel">
<?= $elem['nom'] ?>
</label>
</div>
<?php endforeach ?>
</div>
<div>
</div>
<input
type="checkbox"
class="dropdown"
id="dropdownRecettes"
name="dropdownRecettes"
/>
<label for="dropdownRecettes" class="dropdown">Recettes</label>
<div class="principaleAside">
<?php foreach($listeRecettes as $id => $elem): ?>
<div <?= isset($listeReutiliseRecette[$id]) ? 'class="important"' : '' ?>>
<input
class="autorise cb reutilise"
title="Ajouter"
type="checkbox"
nom="<?= $elem['nom'] ?>"
idRecette="<?= $id ?>"
name="reutilise[<?= $id ?>]"
id="cb.reutilise<?= $id ?>"
<?= isset($listeReutiliseRecette[$id]) ? 'checked' : '' ?>
/>
<label for="cb.reutilise<?= $id ?>" class="petitLabel">
<?= $elem['nom'] ?>
</label>
</div>
<?php endforeach ?>
</div>
</aside>
<?php endif ?>
<?php break; ?>
<?php endswitch ?>

1
asides/void.php Normal file
View file

@ -0,0 +1 @@
<aside class="void"></aside>

48
contenus/closed_lock.svg Normal file
View file

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 426.667 426.667" style="enable-background:new 0 0 426.667 426.667;" xml:space="preserve">
<g>
<g>
<path d="M330.704,170.667H95.963C78.405,170.667,64,184.951,64,202.572v192.19c0,17.593,14.31,31.905,31.963,31.905h234.742
c17.557,0,31.963-14.284,31.963-31.905v-192.19C362.667,184.979,348.357,170.667,330.704,170.667z M320,384H106.667V213.333H320
V384z"/>
</g>
</g>
<g>
<g>
<path d="M217.082,0h-7.498c-56.815,0-102.918,46.172-102.918,102.978v81.645h42.667v-81.645c0-33.256,27.014-60.311,60.251-60.311
h7.498c33.22,0,60.251,27.032,60.251,60.311v81.645H320v-81.645C320,46.134,273.866,0,217.082,0z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1 KiB

1
contenus/croix.svg Normal file
View file

@ -0,0 +1 @@
<svg height="512pt" viewBox="0 0 512 512" width="512pt" xmlns="http://www.w3.org/2000/svg"><path d="m256 512c-141.164062 0-256-114.835938-256-256s114.835938-256 256-256 256 114.835938 256 256-114.835938 256-256 256zm0-480c-123.519531 0-224 100.480469-224 224s100.480469 224 224 224 224-100.480469 224-224-100.480469-224-224-224zm0 0"/><path d="m176.8125 351.1875c-4.097656 0-8.195312-1.554688-11.308594-4.691406-6.25-6.25-6.25-16.382813 0-22.632813l158.398438-158.402343c6.253906-6.25 16.386718-6.25 22.636718 0s6.25 16.382812 0 22.636718l-158.402343 158.398438c-3.15625 3.136718-7.25 4.691406-11.324219 4.691406zm0 0"/><path d="m335.1875 351.1875c-4.09375 0-8.191406-1.554688-11.304688-4.691406l-158.398437-158.378906c-6.253906-6.25-6.253906-16.382813 0-22.632813 6.25-6.253906 16.382813-6.253906 22.632813 0l158.398437 158.398437c6.253906 6.25 6.253906 16.382813 0 22.632813-3.132813 3.117187-7.230469 4.671875-11.328125 4.671875zm0 0"/></svg>

After

Width:  |  Height:  |  Size: 945 B

1
contenus/icone.svg Normal file
View file

@ -0,0 +1 @@
<svg height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><g id="Filled_outline" data-name="Filled outline"><path d="m35.383 148.52h441.235v214.96h-441.235z" fill="#7a432a" transform="matrix(.707 -.707 .707 .707 -106.039 256)"/><path d="m488 176-312 312-97.84-97.84c152.44-49.26 259.35-112.7 374.13-249.87z" fill="#6e3c26"/><g fill="#92563a"><path d="m307.716 83.716h56.569v56.569h-56.569z" transform="matrix(.707 -.707 .707 .707 19.216 270.392)"/><path d="m371.716 147.716h56.569v56.569h-56.569z" transform="matrix(.707 -.707 .707 .707 -7.294 334.392)"/><path d="m243.716 147.716h56.569v56.569h-56.569z" transform="matrix(.707 -.707 .707 .707 -44.784 243.882)"/><path d="m307.716 211.716h56.569v56.569h-56.569z" transform="matrix(.707 -.707 .707 .707 -71.294 307.882)"/><path d="m179.716 211.716h56.569v56.569h-56.569z" transform="matrix(.707 -.707 .707 .707 -108.784 217.373)"/></g><path d="m93.373 288.52h45.255v214.96h-45.255z" fill="#ffb531" transform="matrix(.707 -.707 .707 .707 -246.039 198.01)"/><path d="m384 280-176 176-152-152 88-88 182.28 48.61z" fill="#f35244"/><path d="m384 280-176 176-82.27-82.27c75.25-27.82 139.52-61.32 200.55-109.12z" fill="#e64c3f"/><path d="m208 456-32 32-97.84-97.84q24.54-7.935 47.57-16.43z" fill="#ffa912"/><path d="m144 216 128 104 112-40z" fill="#f2dec2"/><path d="m493.657 170.343-152-152a8 8 0 0 0 -11.314 0l-172.667 172.667 11.314 11.313 167.01-167.009 140.687 140.686-95.087 95.081-235.538-62.811a8.005 8.005 0 0 0 -7.719 2.073l-120 120a8 8 0 0 0 0 11.314l152 152a8 8 0 0 0 11.314 0l312-312a8 8 0 0 0 0-11.314zm-136.548 110.766-83.559 29.843-95.5-77.591zm-181.109 195.577-140.687-140.686 20.687-20.686 140.686 140.686zm32-32-140.687-140.686 71.767-71.766 5.475-5.475 122.4 99.45a8 8 0 0 0 7.735 1.325l78.5-28.034zm133.657-378.343a8 8 0 0 0 -11.314 0l-40 40a8 8 0 0 0 0 11.314l40 40a8 8 0 0 0 11.314 0l40-40a8 8 0 0 0 0-11.314zm-5.657 74.344-28.687-28.687 28.687-28.687 28.687 28.687zm64 83.313a7.974 7.974 0 0 0 5.657-2.343l40-40a8 8 0 0 0 0-11.314l-40-40a8 8 0 0 0 -11.314 0l-40 40a8 8 0 0 0 0 11.314l40 40a7.974 7.974 0 0 0 5.657 2.343zm0-76.687 28.687 28.687-28.687 28.687-28.687-28.687zm-133.657-16.97-40 40a8 8 0 0 0 0 11.314l40 40a8 8 0 0 0 11.314 0l40-40a8 8 0 0 0 0-11.314l-40-40a8 8 0 0 0 -11.314 0zm5.657 74.344-28.687-28.687 28.687-28.687 28.687 28.687zm90.343 37.656 2.344-2.343-28.687-28.687-26.343 26.344-11.314-11.314 32-32a8 8 0 0 1 11.314 0l40 40a8 8 0 0 1 0 11.314l-8 8zm-240 32 11.314 11.314-32 32-11.314-11.314zm24-24 11.314 11.314-12.75 12.75-11.314-11.314z"/></g></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

48
contenus/open_lock.svg Normal file
View file

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 426.667 426.667" style="enable-background:new 0 0 426.667 426.667;" xml:space="preserve">
<g>
<g>
<path d="M330.704,170.667H95.963C78.405,170.667,64,184.951,64,202.572v192.19c0,17.593,14.31,31.905,31.963,31.905h234.742
c17.557,0,31.963-14.284,31.963-31.905v-192.19C362.667,184.979,348.357,170.667,330.704,170.667z M320,384H106.667V213.333H320
V384z"/>
</g>
</g>
<g>
<g>
<path d="M217.082,0h-7.498c-56.815,0-102.918,46.172-102.918,102.978v81.645h42.667v-81.645c0-33.256,27.014-60.311,60.251-60.311
h7.498c33.219,0,60.251,27.037,60.251,60.325V128H320v-25.009C320,46.141,273.867,0,217.082,0z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1 KiB

115
controleurs/cAccueil.php Normal file
View file

@ -0,0 +1,115 @@
<?php
$c = seConnecter();
$sensOrdreListe = " ASC ";
$typeOrdreListe = " nom ";
$whereClause = " 1=1 ";
if (isset($_POST['tri'])){
$_SESSION['tri']['sensTri'] = $_POST['sensTri'];
$_SESSION['tri']['typeTri'] = $_POST['typeTri'];
$sensOrdreListe = $_POST['sensTri'];
$typeOrdreListe = $_POST['typeTri'];
$_SESSION['tri']['ingredient'] = $_POST['ingredient'];
$_SESSION['tri']['ustensile'] = $_POST['ustensile'];
$_SESSION['tri']['genre'] = !isset($_POST['genre']) ? [] : $_POST['genre'];
$whereClause = '';
$clauseIngredientsRequis = '';
$clauseIngredientsInterdits = '';
foreach($_POST['ingredient'] as $id => $demande){
switch($demande){
case 1:
$clauseIngredientsRequis .= " AND ingredient = $id";
break;
case -1:
$clauseIngredientsInterdits .= " OR ingredient = $id";
break;
default:
break;
}
}
$clauseIngredientsRequis = "AND r.id IN (SELECT recette FROM RecetteIngredient WHERE 1=1 $clauseIngredientsRequis)";
$clauseIngredientsInterdits = "r.id NOT IN (SELECT recette FROM RecetteIngredient WHERE 0=1 $clauseIngredientsInterdits)";
$whereClause .= $clauseIngredientsInterdits . $clauseIngredientsRequis;
$clauseUstensilesAutorises = '';
foreach($_POST['ustensile'] as $id => $demande){
if($demande){
$clauseUstensilesAutorises .= " OR ustensile = $id";
}
}
$clauseUstensilesAutorises = " AND r.id NOT IN (SELECT recette FROM RecetteUstensile WHERE 0=1 $clauseUstensilesAutorises)";
$whereClause .= $clauseUstensilesAutorises;
$clauseGenre = ' AND (1=0 ';
if(isset($_POST['genre'])){
foreach($_POST['genre'] as $id => $demande){
$clauseGenre .= " OR genre = $id";
}
}
$whereClause .= $clauseGenre . ')';
}else{
unset($_SESSION['tri']);
}
$requeteListeRecettes = "
SELECT r.id idRecette, r.nom nom, r.tempsTotal duree, g.nom genre, g.id idGenre
FROM Recette r JOIN Genre g ON g.id = r.genre
WHERE $whereClause
ORDER BY $typeOrdreListe $sensOrdreListe;
";
//echo $requeteListeRecettes;
$resultatListeRecettes = mysqli_query($c, $requeteListeRecettes);
if ($resultatListeRecettes){
$listeRecettes = [];
while ($recette = mysqli_fetch_assoc($resultatListeRecettes)){
$idRecette = $recette['idRecette'];
$listeRecettes[$idRecette] = [];
foreach ($recette as $clef => $info){
if ($clef != 'idRecette'){
if($clef == 'duree'){$info = calculeTexteFromMinutes($info);}
$listeRecettes[$idRecette][$clef] = $info;
}
}
}
}
//recuperation des ingredients
$requeteListeIngredient = "SELECT nom, id FROM Ingredient ORDER BY nom;";
$resultatListeIngredient = mysqli_query($c, $requeteListeIngredient);
$listeIngredient = [];
while ($infoIngredient = mysqli_fetch_assoc($resultatListeIngredient)){
$listeIngredient[$infoIngredient['id']] = $infoIngredient;
}
//recuperation des ustensiles
$requeteListeUstensile = "SELECT nom, id FROM Ustensile ORDER BY nom;";
$resultatListeUstensile = mysqli_query($c, $requeteListeUstensile);
$listeUstensile = [];
while ($infoUstensile = mysqli_fetch_assoc($resultatListeUstensile)){
$listeUstensile[$infoUstensile['id']] = $infoUstensile;
}
//recuperation des modes de preparation
$requeteListePreparation = "SELECT nom, id FROM Preparation ORDER BY nom;";
$resultatListePreparation = mysqli_query($c, $requeteListePreparation);
$listePreparation = [];
while ($infoPreparation = mysqli_fetch_assoc($resultatListePreparation)){
$listePreparation[] = $infoPreparation;
}
//recuperation des genre de recette
$listeGenre = recupereGenres($c);
deconnectBD($c);
?>

View file

@ -0,0 +1,58 @@
<?php
$c = seConnecter();
//ajout d'un ingredient
$strAnnee = implode(', ', lANNEE);
if (isset($_POST['nomIngredient'])){
$nomNvlIngredient = transformeCharsAutorises($_POST['nomIngredient']);
$lMoisDispo = [];
foreach (lANNEE as $mois){
$lMoisDispo[] = isset($_POST[$mois]) ? 1 : 0;
}
$strAnneeDispo = implode(', ', $lMoisDispo);
$reqAjoutIngredient = "INSERT INTO Ingredient (nom, $strAnnee)
VALUES (\"$nomNvlIngredient\", $strAnneeDispo);";
$resultat = mysqli_query($c, $reqAjoutIngredient);
}
//ajout d'un ustensile
if (isset($_POST['nomUstensile'])){
$nomNvlUstensile = transformeCharsAutorises($_POST['nomUstensile']);
$reqAjoutUstensile = "INSERT INTO Ustensile (nom) VALUES ('$nomNvlUstensile');";
$resultat = mysqli_query($c, $reqAjoutUstensile);
}
//ajout d'une unite
if (isset($_POST['nomUnite'])){
$nomNvlUnite = htmlspecialchars($_POST['nomUnite']);
$reqAjoutUnite = "INSERT INTO Unite (nom) VALUES ('$nomNvlUnite');";
$resultat = mysqli_query($c, $reqAjoutUnite);
}
//recuperation des ustensiles
$requeteListePersonne = "SELECT nom, id FROM Humain ORDER BY nom;";
$resultatListePersonne = mysqli_query($c, $requeteListePersonne);
$listePersonne = mysqli_fetch_all($resultatListePersonne);
//recuperation des ingredients
$requeteListeIngredient = "
SELECT i.id id, i.nom nom, COUNT(ri.recette) nbr
FROM Ingredient i LEFT JOIN RecetteIngredient ri ON ri.ingredient = i.id
GROUP BY i.id
ORDER BY i.nom;";
$resultatListeIngredient = mysqli_query($c, $requeteListeIngredient);
$listeIngredient = mysqli_fetch_all($resultatListeIngredient);
//recuperation des ustensiles
$requeteListeUstensile = "SELECT nom, id FROM Ustensile ORDER BY nom;";
$resultatListeUstensile = mysqli_query($c, $requeteListeUstensile);
$listeUstensile = mysqli_fetch_all($resultatListeUstensile);
//recuperation des unités
$requeteListeUnite = "SELECT nom, id FROM Unite ORDER BY nom;";
$resultatListeUnite = mysqli_query($c, $requeteListeUnite);
$listeUnite = mysqli_fetch_all($resultatListeUnite);
?>

View file

@ -0,0 +1,23 @@
<?php
$typePage = 0;
if(isset($_POST['motdepasse'])){
if(crypt($_POST['motdepasse'],SEL) == HASHED_PASSWORD){
$typePage = 1;
$_SESSION['auth'] = true;
}
else{
$typePage = -1;
}
}
if(isset($_POST['deconnexion'])){
$_SESSION['auth'] = false;
}
if($_SESSION['auth']){
$typePage = 1;
}
?>

74
controleurs/cElement.php Normal file
View file

@ -0,0 +1,74 @@
<?php
$c = seConnecter();
$titrePartUn = '???';
$titrePartDeux = '???';
$pageExiste = false;
$type = NULL;
$table = NULL;
if (isset($_GET['type'])){
$typeElement = $_GET['type'];
switch ($typeElement){
case 'ingredient':
$type = 'ingredient';
$titrePartUn = 'Ingredient';
$table = 'Ingredient';
$tableliaison = 'RecetteIngredient';
$determinant = "l'";
break;
case 'ustensile':
$type = 'ustensile';
$titrePartUn = 'Ustensile';
$table = 'Ustensile';
$tableliaison = 'RecetteUstensile';
$determinant = "l'";
break;
case 'unite':
$type = 'unite';
$titrePartUn = 'Unite';
$table = 'Unite';
$determinant = "l'";
break;
}
if (isset($_GET['id'])){
$idElement = intval($_GET['id']);
if (isset($_POST['nom'])){
if ($type != 'unite'){
$nomNvl = transformeCharsAutorises($_POST['nom']);
}
$paireColonneValeur = '';
if ($type == 'ingredient'){
foreach (lANNEE as $mois){
$lMoisDispo[$mois] = isset($_POST[$mois]) ? 1 : 0;
}
foreach ($lMoisDispo as $mois => $dispo){
$paireColonneValeur .= $mois . ' = ' . $dispo . ', ';
}
}
$paireColonneValeur .= "nom = '$nomNvl' ";
$reqNvl = "UPDATE $table SET $paireColonneValeur WHERE id = $idElement;";
mysqli_query($c, $reqNvl);
}
$requeteId = "SELECT * FROM $table WHERE id=$idElement;";
$resultatId = mysqli_query($c, $requeteId);
$infoElement = mysqli_fetch_assoc($resultatId);
$pageExiste = ($infoElement) ? true : false ;
$titrePartDeux = $infoElement['nom'];
}
}
$titrePage = $titrePartUn . ' : ' . $titrePartDeux;
$_SESSION['tableDernierElemVu'] = $table;
$_SESSION['typeDernierElemVu'] = $type;
$_SESSION['idDernierElemVu'] = $idElement;
deconnectBD($c);
?>

View file

@ -0,0 +1,7 @@
<?php
$c = seConnecter();
deconnectBD($c);
?>

197
controleurs/cRecette.php Normal file
View file

@ -0,0 +1,197 @@
<?php
$c = seConnecter();
//on commence par supposer que tout va mal (que la page reherchée n'existe pas)
$titrePageAjout = '???';
$pageExiste = false;
if (isset($_GET['id'])){
$idRecette = $_GET['id'];
$_SESSION['idDerniereRecetteVu'] = $idRecette;
$requeteId = "SELECT * FROM Recette WHERE id=$idRecette;";
$resultatId = mysqli_query($c, $requeteId);
$infoRecette = mysqli_fetch_assoc($resultatId);
$pageExiste = ($infoRecette) ? 1 : ( $idRecette ? 0 : -1) ;
if($pageExiste and isset($_GET['mode'])){
switch($_GET['mode']){
case 'edit':
$pageExiste = 2;
break;
case 'suppr':
$pageExiste = 3;
break;
case 'crea':
$pageExiste = -2;
break;
default:
$pageExiste = 1;
}
}
if($pageExiste == 2 or $pageExiste == -1){
$listeIngredients = getAllIngredients();
$listeUstensiles = getAllUstensiles();
$listeRecettes = getAllRecettes();
$listePreparations = getAllPreparations();
}
$titrePageAjout = $infoRecette['nom'];
}
$titrePage .= ' : ' . $titrePageAjout;
if ($pageExiste){
if((isset($_POST['edit']) and $pageExiste == 1) or $pageExiste == -2){
//dans le cas 1, le bouton 'sauvegarder les modifs' a été cliqué, il faut donc faire les UPDATE sql.
//dans le cas 2, une nouvelle recette a éé crée
$infosRecette = [];
$infosRecette['ustensile'] = [];
if(isset($_POST['ustensile'])){
foreach($_POST['ustensile'] as $id => $ustensile){
$infosRecette['ustensile'][$id]['commentaire'] = ecritureVersLecture($ustensile['commentaire']);
}
}
$infosRecette['preparation'] = [];
if(isset($_POST['preparation'])){
foreach($_POST['preparation'] as $id => $preparation){
$infosRecette['preparation'][$id]['duree'] = calculeMinutesFromTexte($preparation['duree']);
$infosRecette['preparation'][$id]['temp'] = $preparation['temp'];
}
}
$infosRecette['ingredient'] = [];
if(isset($_POST['ingredient'])){
foreach($_POST['ingredient'] as $id => $ingredient){
$infosRecette['ingredient'][$id]['quantite'] = $ingredient['quantite'];
$infosRecette['ingredient'][$id]['unite'] = $ingredient['unite'];
}
}
$infosRecette['reutilise'] = [];
if(isset($_POST['reutilise'])){
foreach($_POST['reutilise'] as $id => $elem){
$infosRecette['reutilise'][$id] = $id;
}
}
$infosRecette['nom'] = $_POST['nom'];
$infosRecette['nbPortion'] = $_POST['nbPortion'];
$infosRecette['unitePortion'] = $_POST['unitePortion'];
$infosRecette['tempsTotal'] = $_POST['tempsTotal'];
$infosRecette['genre'] = $_POST['genre'];
$infosRecette['realisation'] = $_POST['procedure'];
$idRecette = insererRecette($infosRecette, $infosRecette['ingredient'], $infosRecette['ustensile'], $infosRecette['preparation'], $infosRecette['reutilise'], $idRecette);
}
//on recupere toutes les infos sur la recette sélectionnée.
//(elles ont p-ê été modifiés juste avant, mais dans le doute ...)
$requeteRecette =
"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 = $idRecette
ORDER BY nom;
";
$requeteIngredient =
"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 = $idRecette
ORDER BY nom;
";
$requeteUstensile = "
SELECT ru.ustensile idUstensile, u.nom nom, ru.commentaire commentaire
FROM Ustensile u JOIN RecetteUstensile ru ON u.id = ru.ustensile
WHERE ru.recette = $idRecette
ORDER BY nom;
";
$requetePreparation = "
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 = $idRecette
ORDER BY nom;
";
$requeteGenre = "
SELECT g.id idGenre, g.nom nom
FROM Genre g JOIN Recette r ON g.id = r.genre
WHERE r.id = $idRecette;
";
$requeteReutilise = "
SELECT reu.utilisee id, rec.nom nom
FROM Reutilise reu JOIN Recette rec ON reu.utilisee = rec.id
WHERE reu.utilisant = $idRecette
ORDER BY nom;
";
$resultatRecette = mysqli_query($c, $requeteRecette);
$resultatIngredient = mysqli_query($c, $requeteIngredient);
$resultatUstensile = mysqli_query($c, $requeteUstensile);
$resultatPreparation = mysqli_query($c, $requetePreparation);
$resultatGenre = mysqli_query($c, $requeteGenre);
$resultatReutilise = mysqli_query($c, $requeteReutilise);
$infoRecette = mysqli_fetch_assoc($resultatRecette);
$infoRecette['tempsTotal'] = calculeTexteFromMinutes($infoRecette['tempsTotal']);
$nomGenre = mysqli_fetch_assoc($resultatGenre)['nom'];
$listeIngredientsRecette = [];
while ($ingredient = mysqli_fetch_assoc($resultatIngredient)){
$listeIngredientsRecette[$ingredient['idIngredient']] = [];
$listeIngredientsRecette[$ingredient['idIngredient']]['nom'] = $ingredient['nom'];
$listeIngredientsRecette[$ingredient['idIngredient']]['quantite'] = $ingredient['quantite'];
$listeIngredientsRecette[$ingredient['idIngredient']]['unite'] = $ingredient['unite'];
$listeIngredientsRecette[$ingredient['idIngredient']]['idU'] = $ingredient['idU'];
}
$listeUstensilesRecette = [];
while ($ustensile = mysqli_fetch_assoc($resultatUstensile)){
$listeUstensilesRecette[$ustensile['idUstensile']] = [];
$listeUstensilesRecette[$ustensile['idUstensile']]['nom'] = $ustensile['nom'];
$listeUstensilesRecette[$ustensile['idUstensile']]['commentaire'] = $ustensile['commentaire'];
}
$listePreparationsRecette = [];
while ($preparation = mysqli_fetch_assoc($resultatPreparation)){
$listePreparationsRecette[$preparation['idPreparation']] = [];
$listePreparationsRecette[$preparation['idPreparation']]['nom'] = $preparation['nom'];
$listePreparationsRecette[$preparation['idPreparation']]['duree'] = calculeTexteFromMinutes($preparation['duree']);
$listePreparationsRecette[$preparation['idPreparation']]['temperature'] = $preparation['temperature'];
}
$listeReutiliseRecette = [];
while ($recette = mysqli_fetch_assoc($resultatReutilise)){
$listeReutiliseRecette[$recette['id']] = $recette;
}
//selon les cas, on peut avoir différentes action à faire
switch($pageExiste){
case 1:
$infoRecette['realisation'] = ecritureVersLecture($infoRecette['realisation']);
foreach($listeUstensilesRecette as $ustensile){
$ustensile['commentaire'] = ecritureVersLecture($ustensile['commentaire']);
}
break;
case 2:
$infoRecette['realisation'] = lectureVersEcriture($infoRecette['realisation']);
foreach($listeUstensilesRecette as $id => $ustensile){
$listeUstensilesRecette[$id]['commentaire'] = lectureVersEcriture($listeUstensilesRecette[$id]['commentaire']);
}
case -1:
$listeUnite = recupereUnites($c);
$listeGenre = recupereGenres($c);
break;
}
}
deconnectBD($c);
?>

View file

@ -0,0 +1,9 @@
<?php
$c = seConnecter();
$requeteNbRecettes = "SELECT COUNT(*) FROM Recette;";
$resultatNbRecettes = mysqli_query($c, $requeteNbRecettes);
$nbRecettes = mysqli_fetch_all($resultatNbRecettes)[0][0];
deconnectBD($c);
?>

View file

@ -0,0 +1,31 @@
<?php
$c = seConnecter();
$reussi = false;
//suppression d'un élément
if (isset($_GET['delete'])){
$tableSuppr = $_SESSION['tableDernierElemVu'];
$idSuppr = $_SESSION['idDernierElemVu'];
$typeSuppr = $_SESSION['typeDernierElemVu'];
if ($tableSuppr != 'Humain'){
$requeteVerifInutilise = "
SELECT *
FROM $tableSuppr t JOIN Recette$tableSuppr rt ON t.id = rt.$typeSuppr
WHERE t.id = $idSuppr;
";
$verifInutilise = mysqli_query($c, $requeteVerifInutilise);
$reussi = !mysqli_fetch_assoc($verifInutilise);
}
else {
$reussi = true;
}
if($reussi){
$requeteSuppr = "DELETE FROM $tableSuppr WHERE id=$idSuppr;";
mysqli_query($c, $requeteSuppr);
}
}
deconnectBD($c);
?>

View file

@ -0,0 +1,36 @@
<?php
$c = seConnecter();
$reussi = false;
//suppression d'une reccette. On vérifie d'abord que l'on peut la supprimer.
if (isset($_GET['id'])){
$idSuppr = $_SESSION['idDerniereRecetteVu'];
$requeteVerifInutilise = "
SELECT *
FROM Reutilise r
WHERE r.utilisee = $idSuppr;
";
$verifInutilise = mysqli_query($c, $requeteVerifInutilise);
$reussi = !mysqli_fetch_assoc($verifInutilise);
if($reussi){
$requetesSuppr = array(
"BEGIN;",
"DELETE FROM RecetteIngredient WHERE recette = $idSuppr;",
"DELETE FROM RecettePreparation WHERE recette = $idSuppr;",
"DELETE FROM RecetteUstensile WHERE recette = $idSuppr;",
"DELETE FROM Reutilise WHERE utilisant = $idSuppr;",
"DELETE FROM Recette WHERE id=$idSuppr;",
"COMMIT;"
);
foreach($requetesSuppr as $req){
$reussi = mysqli_query($c, $req);
}
}
}
?>

11
controleurs/cTests.php Normal file
View file

@ -0,0 +1,11 @@
<?php
if(isset($_POST['textTest'])){
echo "<pre>";
$ret = calculeTexteFromMinutes($_POST['textTest']);
print_r($ret);
echo "</pre>";
}
?>

0
controleurs/void.php Normal file
View file

70
inc/fonctions.php Normal file
View file

@ -0,0 +1,70 @@
<?php
function transformeCharsAutorises($entree){
$transformations = [
'#Œ#' => 'Oe',
'#œ#' => 'oe',
'#Æ#' => 'Ae',
'#æ#' => 'ae',
'#[^a-zàâäéèêëîïôöùûüÿçñA-ZÀÂÄÉÈÊËÎÏÔÖÙÛÜŸÇÑ ,\'-]#' => '',
'#^[ ,-]+#' => '',
'#[ ]+$#' => '',
'#\'#' => '\\\''
];
foreach ($transformations as $reEtape => $remplacement){
$entree = preg_replace($reEtape, $remplacement, $entree);
}
$entree = mb_strtoupper(mb_substr($entree, 0, 1)) . mb_substr($entree, 1);
return $entree;
}
function calculeMinutesFromTexte($texteDuree){
$texteDuree = preg_replace("/ /", "", $texteDuree);
preg_match("#(?:([0-9]*) ?j(?:our\(s\)|our|ours)?)? ?(?:([0-9]*) ?h(?:eure\(s\)|eure|eures)?)? ?(?:([0-9]*) ?min(?:ute\(s\)|ute|utes)?)?#", $texteDuree, $matches) ;
$dureeMinutes = 0;
foreach($matches as $clef => $duree){
if ($clef == 1 and $duree != NULL){$dureeMinutes += 1440*$duree;}
if ($clef == 2 and $duree != NULL){$dureeMinutes += 60*$duree;}
if ($clef == 3){$dureeMinutes += intval($duree);}
}
return $dureeMinutes;
}
function calculeTexteFromMinutes($minute){
$restant = $minute;
$texteMinutes = '';
$tempsJours = intdiv($restant,1440);
$texteMinutes .= ($tempsJours) != 0 ? $tempsJours . ' jour(s) ' : '';
$restant = $restant % 1440;
$tempsHeures = intdiv($restant,60);
$texteMinutes .= ($tempsHeures) != 0 ? $tempsHeures . ' heure(s) ' : '';
$restant = $restant % 60;
$texteMinutes .= ($restant) != 0 ? $restant . ' minute(s)' : '';
return $texteMinutes;
}
function lectureVersEcriture($texte){
$texte = preg_replace("#<br/>#","##",$texte);
$texte = preg_replace("#</p><p>#","\n",$texte);
$texte = preg_replace("#⌀#","#diam",$texte);
return $texte;
}
function ecritureVersLecture($texte){
$texte = preg_replace("/##/","<br/>",$texte);
$texte = preg_replace("/\n/","</p><p>",$texte);
$texte = preg_replace("/#diam/","",$texte);
return $texte;
}
function echappementBDD($texte){ //echappe tous les caractères pour que la chaînes soit acceptable dasn une requete SQL
$texte = preg_replace("/'/","\'",$texte);
return $texte;
}
?>

240
inc/modele.php Normal file
View file

@ -0,0 +1,240 @@
<?php
function seConnecter() {
if($_SESSION['auth']){
$connexion = mysqli_connect(SERVEUR, SUPER_UTILISATRICE, SUPER_MOTDEPASSE, BDD);
}
else{
$connexion = mysqli_connect(SERVEUR, UTILISATRICE_PAR_DEFAUT, MOTDEPASSE_PAR_DEFAUT, BDD);
}
if (mysqli_connect_errno()) {
echo "<script>console.log('Echec de la connexion à la base');</script>";
exit();
}
mysqli_set_charset($connexion,'utf8');
return $connexion;
}
// déconnexion de la BD
function deconnectBD($connexion) {
mysqli_close($connexion);
}
function getAllIngredients(){
$c = seConnecter();
$requete = "
SELECT *
FROM Ingredient
ORDER BY nom;
";
$resultatIngredients = mysqli_query($c, $requete);
$listeIngredients = [];
while($ingredient = mysqli_fetch_assoc($resultatIngredients)){
$listeIngredients[$ingredient['id']] = $ingredient;
}
deconnectBD($c);
return $listeIngredients;
}
function getAllUstensiles(){
$c = seConnecter();
$requete = "
SELECT *
FROM Ustensile
ORDER BY nom;
";
$resultatUstensiles = mysqli_query($c, $requete);
$listeUstensiles = [];
while($ustensile = mysqli_fetch_assoc($resultatUstensiles)){
$listeUstensiles[$ustensile['id']] = $ustensile;
}
deconnectBD($c);
return $listeUstensiles;
}
function getAllPreparations(){
$c = seConnecter();
$requete = "
SELECT *
FROM Preparation
ORDER BY nom;
";
$resultatPreparations = mysqli_query($c, $requete);
$listePreparations = [];
while($preparation = mysqli_fetch_assoc($resultatPreparations)){
$listePreparations[$preparation['id']] = $preparation;
}
deconnectBD($c);
return $listePreparations;
}
function getAllRecettes(){
$c = seConnecter();
$requete = "
SELECT *
FROM Recette
ORDER BY nom;
";
$resultatRecettes = mysqli_query($c, $requete);
$listeRecettes = [];
while($recette = mysqli_fetch_assoc($resultatRecettes)){
$listeRecettes[$recette['id']] = $recette;
}
deconnectBD($c);
return $listeRecettes;
}
function recupereGenres($c){
$requete = "
SELECT *
FROM Genre
;";
$resultatGenre = mysqli_query($c,$requete);
$listeGenres = [];
while ($genre = mysqli_fetch_assoc($resultatGenre)){
$listeGenres[$genre['id']] = $genre['nom'];
}
return $listeGenres;
}
function recupereUnites($c){
$requete = "
SELECT *
FROM Unite
;";
$resultatUnite = mysqli_query($c,$requete);
$listeUnites = [];
while ($unite = mysqli_fetch_assoc($resultatUnite)){
$listeUnites[$unite['id']] = $unite['nom'];
}
return $listeUnites;
}
// 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;
}
?>

83
inc/routes.php Normal file
View file

@ -0,0 +1,83 @@
<?php
$routes = array(
'accueil' => array(
'controleur' => 'cAccueil',
'vue' => 'vAccueil',
'nom' => 'Accueil',
'aside' => 'aAccueil',
'script' => 'sAccueil'
),
'ajouterRecette' => array(
'controleur' => 'cAjouterRecette',
'vue' => 'vAjouterRecette',
'nom' => 'Ajouter une recette',
'aside' => 'aAjouterRecette',
'script' => 'void'
),
'ajouterElement' => array(
'controleur' => 'cAjouterElement',
'vue' => 'vAjouterElement',
'nom' => 'Ajouter des éléments',
'aside' => 'void',
'script' => 'void'
),
'statistiques' => array(
'controleur' => 'cStatistiques',
'vue' => 'vStatistiques',
'nom' => 'Statistiques',
'aside' => 'void',
'script' => 'void'
),
'recette' => array(
'controleur' => 'cRecette',
'vue' => 'vRecette',
'nom' => 'Recette',
'aside' => 'aRecette',
'script' => 'sRecette'
),
'supprimerRecette' => array(
'controleur' => 'cSupprimerRecette',
'vue' => 'vSupprimerRecette',
'nom' => 'Suppresion d\'une recette',
'aside' => 'void',
'script' => 'void'
),
'supprimerElement' => array(
'controleur' => 'cSupprimerElement',
'vue' => 'vSupprimerElement',
'nom' => 'Suppresion d\'un élément',
'aside' => 'void',
'script' => 'void'
),
'element' => array(
'controleur' => 'cElement',
'vue' => 'vElement',
'nom' => '',
'aside' => 'void',
'script' => 'void'
),
'connexion' => array(
'controleur' => 'cConnexion',
'vue' => 'vConnexion',
'nom' => 'Connexion',
'aside' => 'void',
'script' => 'void'
),
'test' => array(
'controleur' => 'cTests',
'vue' => 'vTests',
'nom' => 'Tests',
'aside' => 'void',
'script' => 'void'
)
);
?>

72
index.php Normal file
View file

@ -0,0 +1,72 @@
<?php // contrôleur frontal
session_start();
require('inc/constantes.php');
require('inc/routes.php');
require('inc/modele.php');
require('inc/fonctions.php');
if(!(isset($_SESSION['auth']))){
$_SESSION['auth'] = false;
}
$titrePage = 'Recettes & pâtisserie &#x1F36A '; //pre-set des valeurs des chemins des fichiers
$cheminControleur = 'controleurs/cAccueil.php'; //par défaut, on charge l'accueil
$cheminVue = 'vues/vAccueil.php';
$cheminAside = 'asides/aAccueil.php';
if(isset($_GET['page'])) { //on détermine quelle page est demandée
$nomPage = $_GET['page'];
}else{
$nomPage = 'accueil';
}
if(!isset($routes[$nomPage])) { //si la page demandée est définie, on crée les chemins
$nomPage = "accueil";
}
$controleur = $routes[$nomPage]['controleur'];
$vue = $routes[$nomPage]['vue'];
$aside = $routes[$nomPage]['aside'];
$script = $routes[$nomPage]['script'];
$cheminControleur = "controleurs/$controleur.php";
$cheminVue = "vues/$vue.php";
$cheminAside = "asides/$aside.php";
$cheminScript = "scripts/$script.js";
$titrePage = $titrePage . $routes[$nomPage]['nom'];
include($cheminControleur); //on charge le controlleur avant tout affichage de HTML
?>
<!DOCTYPE html> <!--Définit la structure grossière de la page, ainsi que le meta-->
<html>
<head>
<meta charset='utf-8'/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="description" content="Bienvenue sur mon classeur de recettes, contenant un peu de tout, du gâteau au plat en passant par les boissons !"/>
<meta name="keywords" content="cuisine, recette, recettes, pâtisserie"/>
<meta name="robots" content="index, nofollow"/>
<title><?= $titrePage ?></title>
<link rel='stylesheet' href='style.css' type='text/css'/>
<script type="module" src="<?= $cheminScript ?>"></script>
<link rel="icon" href="contenus/icone.svg" />
</head>
<body>
<?php
include("static/entete.php"); //chargement des éléments statiques et de la vue
?>
<div id="central">
<?php
include("static/menu.php");
include($cheminVue);
include($cheminAside);
?>
</div>
<?php
include("static/footer.php");
?>
</body>
</html>

13
scripts/fonctions.js Normal file
View file

@ -0,0 +1,13 @@
export var setEventSample = function(iRechercheIngredients, ldIngredients){
iRechercheIngredients.addEventListener('input', function (el, index, table){
Array.from(ldIngredients).forEach(function(el, index, ldIngredients){
if(RegExp("div-.*" + this.value, 'i').test(el.getAttribute('nom'))){
el.classList.remove('sample');
}
else{
el.classList.add("sample");
}
}, iRechercheIngredients);
});
};

9
scripts/sAccueil.js Normal file
View file

@ -0,0 +1,9 @@
import * as fonc from "./fonctions.js";
window.onload = function(){
var iRechercheIngredients = document.getElementById('rechercheIngredients');
var ldIngredients = document.getElementsByClassName('divIngredient');
fonc.setEventSample(iRechercheIngredients, ldIngredients);
}

129
scripts/sRecette.js Normal file
View file

@ -0,0 +1,129 @@
import * as fonc from "./fonctions.js";
window.onload = function(){
var iRechercheIngredients = document.getElementById('rechercheIngredients');
var ldIngredients = document.getElementsByClassName('divIngredient');
fonc.setEventSample(iRechercheIngredients, ldIngredients);
var aCheckboxes = document.querySelectorAll('aside input.cb');
var liListeIngredients = document.getElementById('listeIngredients');
var liListeUstensiles = document.getElementById('listeUstensiles');
var liListePreparations = document.getElementById('listePreparations');
var ancreNoeudsReutilise = document.getElementById('ancreNoeudsReutilise');
if (liListeIngredients){
var sampleIngredient = document.getElementById('sampleIngredient');
var sampleUstensile = document.getElementById('sampleUstensile');
var samplePreparation = document.getElementById('samplePreparation');
for (var cb of aCheckboxes){
cb.onchange = function(){
if(this.checked){
this.parentNode.setAttribute('class', 'important')
}else{
this.parentNode.removeAttribute('class');
}
switch(this.className){
case 'autorise cb ingredient':
var id = this.getAttribute('idIngredient')
if (this.checked){
var nvlIngredient = sampleIngredient.cloneNode(true);
nvlIngredient.removeAttribute('class');
nvlIngredient.setAttribute('id', 'ingredient' + id);
var nomIngredient = this.getAttribute('nom') + ' : ';
var label = nvlIngredient.firstElementChild;
label.appendChild(document.createTextNode(nomIngredient));
label.setAttribute('for', 'ingredient' + id);
var input = label.nextElementSibling;
input.setAttribute('id', 'ingredient' + id);
input.setAttribute('name', 'ingredient[' + id + '][quantite]');
input.setAttribute('required', '');
var selectElem = input.nextElementSibling;
selectElem.setAttribute('name', 'ingredient[' + id + '][unite]');
selectElem.setAttribute('required', '');
liListeIngredients.appendChild(nvlIngredient);
}else{
document.getElementById('ingredient' + id).remove();
}
break;
case 'autorise cb ustensile':
var id = this.getAttribute('idUstensile')
if(this.checked){
var nvlUstensile = sampleUstensile.cloneNode(true);
nvlUstensile.removeAttribute('class');
nvlUstensile.setAttribute('id', 'ustensile' + id);
var nomUstensile = this.getAttribute('nom') + ' : ';
var label = nvlUstensile.firstElementChild;
label.appendChild(document.createTextNode(nomUstensile));
label.setAttribute('for', 'ustensile' + id);
var input = label.nextElementSibling;
input.setAttribute('name', 'ustensile[' + id + '][commentaire]');
liListeUstensiles.appendChild(nvlUstensile);
}else{
document.getElementById('ustensile' + id).remove();
}
break;
case 'autorise cb preparation':
var id = this.getAttribute('idPreparation')
if(this.checked){
var nvlPreparation = samplePreparation.cloneNode(true);
nvlPreparation.removeAttribute('class');
nvlPreparation.setAttribute('id', 'preparation' + id);
var nomPreparation = this.getAttribute('nom') + ' : ';
var label = nvlPreparation.firstElementChild;
label.appendChild(document.createTextNode(nomPreparation));
var inputDuree = label.nextElementSibling;
inputDuree.setAttribute('name', 'preparation[' + id + '][duree]');
inputDuree.setAttribute('required', true);
var inputTemp = label.nextElementSibling.nextElementSibling;
inputTemp.setAttribute('name', 'preparation[' + id + '][temp]');
inputTemp.setAttribute('required', true);
liListePreparations.appendChild(nvlPreparation);
}else{
document.getElementById('preparation' + id).remove();
}
break;
case 'autorise cb reutilise':
var id = this.getAttribute('idRecette');
if(this.checked){
var nvlInputReutilise = document.createElement('input');
nvlInputReutilise.setAttribute('name','reutilise[' + id + ']');
nvlInputReutilise.setAttribute('value', true);
nvlInputReutilise.setAttribute('type', 'hidden');
var nvlSpan = document.createElement('span');
nvlSpan.setAttribute('id', 'reutilise' + id);
var nvlText1 = document.createTextNode(this.getAttribute('nom') + String.fromCharCode(0x0020,0x00B7,0x0020));
nvlSpan.appendChild(nvlInputReutilise);
nvlSpan.appendChild(nvlText1);
ancreNoeudsReutilise.appendChild(nvlSpan);
}else{
document.getElementById('reutilise' + id).remove();
}
}
}
}
}
}

0
scripts/void.js Normal file
View file

5
static/entete.php Normal file
View file

@ -0,0 +1,5 @@
<header>
<h1><a href= "index.php">
Cuisine et pâtisserie
</a></h1>
</header>

5
static/footer.php Normal file
View file

@ -0,0 +1,5 @@
<footer>
<p>Réalisé par <a href="https://timotheehuneau.fr">Timothée Huneau</a></p>
<p>@2022</p>
<p>Icons from <a href="https://www.flaticon.com/" title="Flaticon"> www.flaticon.com</a></p>
</footer>

16
static/menu.php Normal file
View file

@ -0,0 +1,16 @@
<nav>
<a href="index.php" title="Retour à la liste des recettes"><p>Accueil</p></a>
<a href="index.php?page=recette&id=0"><p>Ajouter une recette</p></a>
<a href="index.php?page=ajouterElement" title="Les ingrédients, unités et ustensiles déjà enregistrés"><p>Les éléments déjà présents</p></a>
<a href="index.php?page=statistiques"><p>Statistiques</p></a>
<a href="index.php?page=connexion" title="Se connecter permet d'ajouter et de modifier des recettes">
<p>
<?= !$_SESSION['auth'] ? 'Se connecter' : 'Se déconnecter'?>
<span class="<?= $_SESSION['auth'] ? 'lock' : 'unlock' ?>">
<img
src="contenus/<?= $_SESSION['auth'] ? 'closed_lock' : 'open_lock' ?>.svg"
/>
</span>
</p>
</a>
</nav>

478
style.css Normal file
View file

@ -0,0 +1,478 @@
:root {
--couleur-principale: #d8d8f8;
--couleur-vert-1: #d8f0b0;
--couleur-rouge-1: #f0c8b0;
--couleur-gris-1: #f8f8f8;
--couleur-gris-2: #efefef;
--couleur-gris-3: #404040;
--couleur-gris-4: #242450;
--char-oui: '\2726';
--char-non: '\2727';
--char-fleche-droite: '\27a4';
--largeur-minimale: 50em;
}
body{
background-color: var(--couleur-gris-1);
color: var(--couleur-gris-4);
margin: 0px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
}
h1{
font-size: 3em;
}
h2{
font-size: 2em;
}
h3{
font-size: 1.5em;
}
p{
font-size : 1em;
}
#central{
width: 100%;
display: flex;
flex-direction: row;
align-items: start;
justify-content: start;
}
#principal{
border: 1px var(--couleur-gris-4) solid;
border-top: none;
border-bottom: none;
padding: 10px;
background-color: var(--couleur-gris-2);
margin: 0%;
margin-top: 1%;
padding: 3%;
display: flex;
flex-direction: column;
flex-wrap: wrap;
align-items: left;
position: relative;
width: 40%;
}
nav, aside, #principal{
margin-left: 1%;
}
header, nav, footer, aside form{
margin: 0%;
padding: 3%;
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
}
nav, aside form{
flex-direction: column;
align-items: stretch;
justify-content: flex-end;
}
aside form{
width: 100%;
}
nav, aside{
width: 20%;
background-color: inherit;
border: none;
}
aside{
margin-left: 3%;
}
header, footer{
width: 100%;
padding: 0%;
background-color: var(--couleur-gris-2);
}
footer{
margin-top: 1%;
}
a{
color: var(--couleur-gris-3);
}
a:hover{
color : var(--couleur-principale);
background-color: var(--couleur-gris-3);
}
footer *, nav a, header a{
background-color: var(--couleur-principale);
margin: 1%;
padding: 1%;
border-radius: 20px;
font-size : 1em;
display: inline-flex;
flex-direction: row;
flex-wrap: wrap;
align-items: baseline;
justify-content: center;
transition: all 0.5s;
}
footer a:hover, nav a:hover, aside a:hover, header a:hover{
background-color: var(--couleur-gris-3);
border-radius: 0px;
}
header h1{
width: 100%;
margin: 0px;
padding: 0px;
display: flex;
flex-direction: column;
align-items: center;
}
header a{
text-align: center;
margin: 0%;
padding: 0%;
min-width: auto;
width: 60%;
height: 3ex;
border-radius: 2em;
transition: all 1s;
}
header a:hover{
width: 100%;
border-radius: 0px;
}
div.principaleAside, aside .button{
display:flex;
flex-direction: column;
align-items: flex-end;
background-color: var(--couleur-gris-2);
margin: 1%;
padding: 1%;
border-radius: 20px;
transition: all 0.5s;
}
div.principaleAside div {
margin: 0.5em;
}
aside .button{
border: none;
font-size: 1.2em;
font-family: serif;
font-weight: bold;
padding: 3ex;
}
div.principaleAside:hover, aside .button:hover{
border-radius: 0px;
}
#asideGenre {
align-items: center;
}
aside .button:hover {
background-color: var(--couleur-gris-3);
color: var(--couleur-principale);
}
label.petitLabel:hover {
text-decoration: underline;
}
aside > label, aside > form > label {
font-size: 2em;
align-self: flex-start;
}
form ul{
list-style-type: none;
}
div.recetteInfos{
display: flex;
flex-direction: row;
justify-content: space-between;
}
div.recette{
border: 1px var(--couleur-gris-4) solid;
border-left: none;
border-right: none;
margin: 0px;
margin-bottom: -1px;
padding: 1%;
height: 100%;
display: flex;
flex-direction: column;
}
div.recette:hover{
background-color: var(--couleur-principale);
}
div.recette a{
align-self: flex-start;
padding: 0%;
margin: 0%;
width: 99%;
border-radius: 20px;
transition: all 1s;
}
div.recette a:hover{
border-radius: 0px;
}
.recette a h3{
margin: 1%;
}
/*Gestion des input (au niveau du aside)*/
input[type="radio"]{
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
margin: 0px;
}
input[type="radio"]::after, input[type="checkbox"].choixTri::before{
border: none;
border-radius: 0.5ex;
color: var(--couleur-gris-3);
font-weight: bold;
font-size: 2em;
position: relative;
top: 0.4ex;
content: var(--char-non);
transition: all 0.2s;
}
input[type="radio"]:hover::after, input[type="checkbox"].choixTri:hover::before{
color: var(--couleur-gris-1);
border-radius: 0px;
}
input[type="radio"]:checked::after{
content: var(--char-oui);
}
input[type="radio"].autorise::after, input[type="checkbox"].choixTri.ustensile::before{
background-color: var(--couleur-principale);
}
input[type="radio"].interdit::after{
background-color: var(--couleur-rouge-1);
margin: 0px;
}
input[type="radio"].requis::after, input[type="checkbox"].choixTri.genre::before {
background-color: var(--couleur-vert-1);
}
span.choixTri {
width: 0px;
margin: 0px;
}
input[type="checkbox"].choixTri {
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
}
input[type="checkbox"].choixTri.genre:checked::before, input[type="checkbox"].choixTri.ustensile:not(:checked)::before{
content: var(--char-oui);
}
input[type="checkbox"].choixTri.genre:not(:checked)::before, input[type="checkbox"].choixTri.ustensile:checked::before{
background-color: var(--couleur-rouge-1);
}
.centre{
text-align: center;
}
/*Gestion des dropdowns*/
input[type="checkbox"].cb{
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
input[type="checkbox"].cb + label::before,
input[type="checkbox"].cb + label::after {
font-size: 1em;
padding: 0.2ex;
}
input[type="checkbox"].cb:not(:checked) + label::before,
input[type="checkbox"].cb:not(:checked) + label::after{
content: var(--char-non);
}
input[type="checkbox"].cb:checked + label::before,
input[type="checkbox"].cb:checked + label::after{
content: var(--char-oui);
}
input[type="checkbox"].dropdown {
-webkit-appearance: none;
appearance: none;
}
input[type="checkbox"].dropdown + label::before{
transition: all 0.2s;
display: inline-block;
content: ' ' var(--char-fleche-droite) ' ';
}
input[type="checkbox"].dropdown + label:hover::before{
color: var(--couleur-principale);
}
input[type="checkbox"].dropdown:checked + label::before {
transform: rotate(0.25turn);
}
input[type="checkbox"].dropdown:checked + * + div {
animation-duration: 0.2s;
animation-name: montrer;
}
input[type="checkbox"].dropdown:not(:checked) + * + div {
opacity: 0;
display: none;
}
@keyframes montrer {
0%{
opacity: 0;
}
100%{
opacity: 1;
}
}
#modifs{
align-self: flex-end;
display: flex;
flex-direction: column;
align-items: flex-end;
}
#modifs>*{
border-radius: 1em;
transition: all 0.5s;
}
#edition, #suppression, #important {
padding: 0.5em;
text-decoration: underline;
border: none;
margin: 0px;
font-family: serif;
font-size: 1em;
}
#edition {
background-color: var(--couleur-vert-1);
}
#edition:hover {
color: var(--couleur-vert-1);
background-color: var(--couleur-gris-3);
}
#suppression {
background-color: var(--couleur-rouge-1);
}
#suppression:hover {
color: var(--couleur-rouge-1);
background-color: var(--couleur-gris-3);
}
#important{
background-color: var(--couleur-principale);
}
#important:hover {
color: var(--couleur-principale);
background-color: var(--couleur-gris-3);
}
.important {
color: var(--couleur-principale);
background-color: var(--couleur-gris-3);
}
div:hover > span.important{
color: var(--couleur-gris-3);
background-color: var(--couleur-principale);
}
.lock img, .unlock img{
border-radius: 1em;
height: 1em;
}
.lock img{
background-color: var(--couleur-vert-1);
}
.unlock img{
background-color: var(--couleur-rouge-1);
}
select{
border: none;
}
textarea{
width: 100%;
}
.sample{
display: none;
}
@media (max-width: 75em){
#central {
flex-direction: column;
align-items: center;
}
#principal{
width: 90%;
}
nav, footer{
flex-direction: row;
justify-content: center;
flex-wrap: wrap;
}
aside form{
width: 100%;
}
nav, aside{
width: 90%;
}
header a {
width: 100%;
}
div.recetteInfos{
display: flex;
flex-direction: column;
}
}

3
vues/pageManquante.php Normal file
View file

@ -0,0 +1,3 @@
<section>
<h2>La page recherchée n'existe pas (encore ?). Vous pouvez retourner à <a href="index.php">l'accueil</a></h2>
</section>

18
vues/vAccueil.php Normal file
View file

@ -0,0 +1,18 @@
<section id="principal">
<h2>Bienvenue dans le classeur de recettes familiales !</h2>
<?php if (isset($listeRecettes)): ?>
<?= empty($listeRecettes) ? "Il n'y a pas de recette correspondant à ces critères ! Vous pouvez néanmoins en ajouter ..." : "" ?>
<?php foreach ($listeRecettes as $idRecette => $recette): ?>
<div id="<?= $idRecette ?>" class="recette">
<a href="index.php?page=recette&id=<?= $idRecette ?>"><h3><?= $recette['nom'] ?></h3></a>
<div class="recetteInfos">
<p><?= $recette['genre'] ?></p>
<p>Réalisation : <?= $recette['duree'] ?></p>
</div>
</div>
<?php endforeach ?>
<?php else: ?>
<?= !isset($listeRecettes) ? "Petit problème interne ..." : "" ?>
<?php endif ?>
</section>

60
vues/vAjouterElement.php Normal file
View file

@ -0,0 +1,60 @@
<section id="principal">
<h2>Liste des ingrédients existants :</h2>
<ul>
<?php foreach($listeIngredient as $ingredient): ?>
<li><a href="index.php?page=element&type=ingredient&id=<?=$ingredient[0]?>"><?=$ingredient[1]?></a> (<?=$ingredient[2]?>)</li>
<?php endforeach ?>
</ul>
<?php if($_SESSION['auth']): ?>
<p>Ajouter un ingrédient :</p>
<form method="POST" action="index.php?page=ajouterElement">
<label for="nomIngredient">Nom :</label>
<input type="text" name="nomIngredient" pattern="<?=PATTERN_CHAMPS_NOM?>" title="<?=DESC_CHAMPS_NOM?>" required />
<br/>
<p>Disponibilité :</p>
<?php foreach (lANNEE as $mois):?>
&#x00B7
<input type="checkbox" name="<?=$mois?>" id="<?=$mois?>" checked="true"/>
<label for="<?=$mois?>"><?=$mois?></label>
<?php endforeach ?>
&#x00B7
<br/>
<input type="submit" value="Ajouter l'ingrédient"/>
</form>
<?php endif ?>
<h2>Liste des ustensiles existants :</h2>
<ul>
<?php foreach($listeUstensile as $ustensile): ?>
<li><a href="index.php?page=element&type=ustensile&id=<?=$ustensile[1]?>"><?=$ustensile[0]?></a></li>
<?php endforeach ?>
</ul>
<?php if($_SESSION['auth']): ?>
<p>Ajouter un ustensile :</p>
<form method="POST" action="index.php?page=ajouterElement">
<label for="nomUstensile">Nom :</label>
<input type="text" name="nomUstensile" pattern="<?=PATTERN_CHAMPS_NOM?>" title="<?=DESC_CHAMPS_NOM?>" required />
<br/>
<input type="submit" value="Ajouter l'ustensile"/>
</form>
<?php endif ?>
<h2>Liste des unités existantes :</h2>
<ul>
<?php foreach($listeUnite as $unite): ?>
<li><a href="index.php?page=element&type=unite&id=<?=$unite[1]?>"><?=$unite[0]?></a></li>
<?php endforeach ?>
</ul>
<?php if($_SESSION['auth']): ?>
<p>Ajouter une unité :</p>
<form method="POST" action="index.php?page=ajouterElement">
<label for="nomUnite">Symbole :</label>
<input type="text" name="nomUnite" required />
<br/>
<input type="submit" value="Ajouter l'unité"/>
</form>
<?php endif ?>
</section>

20
vues/vConnexion.php Normal file
View file

@ -0,0 +1,20 @@
<section id='principal'>
<?php switch($typePage): ?>
<?php case 0 ?>
<form method="POST" action="index.php?page=connexion">
<input type="password" required name="motdepasse"/>
<input type="submit">
</form>
<?php break; ?>
<?php case 1 ?>
<p>Vous êtes connecté.e !</p>
<form method="POST" action="index.php?page=connexion">
<input type="submit" value="Se déconnecter ?" name="deconnexion">
</form>
<?php break; ?>
<?php case -1 ?>
<p>Echec de la connexion ... Vous pouvez <a href="index.php?page=connexion">rééssayer</a>.</p>
<?php break; ?>
<?php endswitch ?>
</section>

38
vues/vElement.php Normal file
View file

@ -0,0 +1,38 @@
<?php if ($pageExiste): ?>
<section id='principal'>
<form method="POST" action="index.php?page=element&type=<?=$type?>&id=<?=$infoElement['id']?>">
<?php if($_SESSION['auth']): ?>
<div id="modifs">
<a href="index.php?page=supprimerElement&delete=true" id="suppression">Supprimer <?=$determinant . $type?></a>
<input type="submit" value="Enregistrer les valeurs" id="edition"/>
</div>
<?php else: ?>
<div id="modifs">
<a href="index.php?page=connexion" id="important">Pour effectuer des modification, vous devez vous connecter</a>
</div>
<?php endif ?>
<input
type="text"
value="<?=$infoElement['nom']?>"
name="nom"
<?= $_SESSION['auth'] ? '' : 'disabled' ?>
/>
<?php if ($type == 'ingredient'): ?>
<br/>
<?=SEPARATEUR?>
<?php foreach (lANNEE as $mois): ?>
<input type="checkbox" name="<?=$mois?>" id="<?=$mois?>" <?=$infoElement[$mois]?'checked="true"':''?> <?= $_SESSION['auth'] ? '' : 'disabled' ?>/>
<label for="<?=$mois?>"><?=$mois?></label>
<?=SEPARATEUR?>
<?php endforeach ?>
<?php endif ?>
<br/>
</form>
</section>
<?php else: ?>
<?php include('pageManquante.php')?>
<?php endif ?>

318
vues/vRecette.php Normal file
View file

@ -0,0 +1,318 @@
<section id='principal'>
<?php switch($pageExiste): ?>
<?php case 0 ?>
<?php include('pageManquante.php')?>
<?php break; ?>
<?php case 1 ?> <!-- Simple affichage de la recette -->
<div id="modifs">
<a id="edition" href="index.php?page=recette&id=<?= $infoRecette['idRecette']?>&mode=edit"><span>Modifier la recette</span></a>
<a id="suppression" href="index.php?page=recette&id=<?= $infoRecette['idRecette']?>&mode=suppr"><span>Supprimer la recette</span></a>
</div>
<h1><?= $infoRecette['nom'] ?></h1>
<p>Pour <?= $infoRecette['portions'] . " " . $infoRecette['unite'] ?>
<br/>
Réalisation : <?= $infoRecette['tempsTotal'] ?>
<br/>
Genre : <?= $infoRecette['genre'] ?></p>
<h3>Ingrédient(s) :</h3>
<ul>
<?php foreach ($listeIngredientsRecette as $id => $infos): ?>
<li id="ingredient<?=D.$id?>">
<?= $infos['nom'] . " : " . $infos['quantite'] . " " . $infos['unite'] ?>
</li>
<?php endforeach ?>
</ul>
<h3>Ustensile(s) :</h3>
<ul>
<?php foreach ($listeUstensilesRecette as $id => $infos): ?>
<li id="ustensile<?=D.$id?>">
<?= $infos['nom'] . ($infos['commentaire'] ? (" : " . $infos['commentaire']) : "") ?>
</li>
<?php endforeach ?>
</ul>
<h3>Mode(s) de préparation :</h3>
<ul>
<?php foreach ($listePreparationsRecette as $id => $infos): ?>
<li id="preparation<?=D.$id?>">
<?= $infos['nom'] . " : " . $infos['duree'] . ($infos['temperature'] == '-' ? '' :" à " . $infos['temperature']) ?>
</li>
<?php endforeach ?>
</ul>
<h3>Procédure :</h3>
<p>
<?= $infoRecette['realisation'] ?>
</p>
<h3>Recette(s) liée(s) :</h3>
<p>
<?php if(!empty($listeReutiliseRecette)): ?>
<?=SEPARATEUR?>
<?php foreach ($listeReutiliseRecette as $infos): ?>
<a href="index.php?page=recette&id=<?=$infos['id']?>"><?= $infos['nom'] ?></a>
<?=SEPARATEUR?>
<?php endforeach ?>
<?php else: ?> Aucune
<?php endif ?>
</p>
<?php break; ?>
<?php case 2 ?> <!-- Cas de modification d'une recette -->
<?php case -1 ?> <!-- Cas de création d'une recette -->
<?php if($_SESSION['auth']): ?>
<div id="modifs">
<?php if($pageExiste == 2): ?>
<a id="important" href="index.php?page=recette&id=<?= $infoRecette['idRecette']?>"><span>Annuler</span></a>
<?php endif ?>
</div>
<form
method="POST"
<?php if($pageExiste == 2): ?>
action="index.php?page=recette&id=<?=$infoRecette['idRecette']?>"
<?php else: ?>
action="index.php?page=recette&id=0&mode=crea"
<?php endif ?>
>
<h1>
<input
type="text"
name="nom"
pattern="<?= PATTERN_CHAMPS_NOM ?>"
placeholder="Nom de la recette"
<?php if($pageExiste == 2): ?>
value="<?= $infoRecette['nom'] ?>"
<?php endif ?>
required
/>
</h1>
Pour
<input
type="text"
name="nbPortion"
pattern="<?=PATTERN_CHAMPS_QUANTITE?>"
title="<?=DESC_CHAMPS_QUANTITE?>"
placeholder="Quantité"
<?php if($pageExiste == 2): ?>
value="<?= $infoRecette['portions'] ?>"
<?php endif ?>
required
/>
<select name="unitePortion" required>
<option disabled selected value="NULL"><span>Unité</span></option>
<?php foreach ($listeUnite as $id => $nom): ?>
<option value="<?=$id?>" <?= ($pageExiste == 2 and $infoRecette['idU'] == $id) ? 'selected' : '' ?>>
<?=$nom?>
</option>
<?php endforeach ?>
</select>
<br/>
Réalisation :
<input
type="text"
name="tempsTotal"
pattern="<?=PATTERN_CHAMPS_DUREE?>"
title="<?=DESC_CHAMPS_DUREE?>"
placeholder="Durée total de réalisation"
<?php if($pageExiste == 2): ?>
value="<?= $infoRecette['tempsTotal'] ?>"
<?php endif ?>
required
/>
<br/>
Genre :
<select required name="genre">
<option disabled selected>Genre</option>
<?php foreach($listeGenre as $id => $genre): ?>
<option value="<?=$id?>" <?= ($pageExiste == 2 and $infoRecette['genre'] == $genre) ? 'selected' : '' ?> ><?=$genre?></option>
<?php endforeach ?>
</select>
<h3>Ingrédient(s) :</h3>
<ul id="listeIngredients">
<li class="sample" id="sampleIngredient">
<label></label>
<input
type="text"
pattern="<?=PATTERN_CHAMPS_QUANTITE?>"
title="<?=DESC_CHAMPS_QUANTITE?>"
placeholder="Quantité"
/>
<select name="">
<option disabled selected value="NULL"><span>Unité</span></option>
<?php foreach ($listeUnite as $idU => $unite): ?>
<option value="<?=$idU?>">
<?=$unite?>
</option>
<?php endforeach ?>
</select>
</li>
<?php if($pageExiste == 2): ?>
<?php foreach($listeIngredientsRecette as $idI => $ingredient): ?>
<li id="ingredient<?= $idI ?>">
<label for="ingredient[<?= $idI ?>]"><?=$ingredient['nom']?></label>
:
<input
type="text"
name="ingredient[<?= $idI?>][quantite]"
pattern="<?=PATTERN_CHAMPS_QUANTITE?>"
title="<?=DESC_CHAMPS_QUANTITE?>"
value="<?= $ingredient['quantite'] ?>"
placeholder="Quantité"
required
/>
<select name="ingredient[<?=$idI?>][unite]" required>
<option disabled selected value="NULL"><span>Unité</span></option>
<?php foreach ($listeUnite as $idU => $unite): ?>
<option value="<?=$idU?>"
<?= $listeIngredientsRecette[$idI]['idU'] == $idU ? 'selected' : '' ?>>
<?=$unite?>
</option>
<?php endforeach ?>
</select>
</li>
<?php endforeach ?>
<?php endif ?>
</ul>
<h3>Ustensile(s) :</h3>
<ul id="listeUstensiles">
<li class="sample" id="sampleUstensile">
<label></label>
<input
type="text"
pattern="<?=PATTERN_CHAMPS_COMM?>"
title="<?=DESC_CHAMPS_COMM?>"
placeholder="Decription (éventuelle)"
/>
</li>
<?php if($pageExiste == 2): ?>
<?php foreach($listeUstensilesRecette as $id => $ustensile): ?>
<li id="ustensile<?=$id?>">
<label for="ustensile<?=D.$id?>"><?=$ustensile['nom']?></label>
:
<input
type="text"
name="ustensile[<?=$id?>][commentaire]"
pattern="<?=PATTERN_CHAMPS_COMM?>"
title="<?=DESC_CHAMPS_COMM?>"
placeholder="Description (éventuelle)"
value="<?= $ustensile['commentaire'] ?>"
/>
</li>
<?php endforeach ?>
<?php endif ?>
</ul>
<h3>Mode(s) de préparation :</h3>
<ul id="listePreparations">
<li class="sample" id="samplePreparation">
<label></label>
pendant
<input
type="text"
pattern="<?=PATTERN_CHAMPS_DUREE?>"
title="<?=DESC_CHAMPS_DUREE?>"
/>
minutes, à
<input
type="text"
pattern="<?=PATTERN_CHAMPS_TEMP?>"
title="<?=DESC_CHAMPS_TEMP?>"
/>
</li>
<?php if($pageExiste == 2): ?>
<?php foreach($listePreparationsRecette as $id => $preparation): ?>
<li id="preparation<?=$id?>">
<label><?=$preparation['nom']?></label>
pendant
<input
type="text"
required
value="<?= $preparation['duree'] ?>"
name="preparation[<?=$id?>][duree]"
pattern="<?=PATTERN_CHAMPS_DUREE?>"
title="<?=DESC_CHAMPS_DUREE?>"
/>
minutes, à
<input
type="text"
required
value="<?= $preparation['temperature'] ?>"
name="preparation[<?=$id?>][temp]"
pattern="<?=PATTERN_CHAMPS_TEMP?>"
title="<?=DESC_CHAMPS_TEMP?>"
/>
</li>
<?php endforeach ?>
<?php endif ?>
</ul>
<h3>Procédure :</h3>
<textarea name="procedure" rows="5"><?php if($pageExiste == 2): ?><?= $infoRecette['realisation'] ?><?php endif ?></textarea>
<h3>Recette(s) liée(s) :</h3>
<p id="ancreNoeudsReutilise"> <?=SEPARATEUR?>
<?php foreach ($listeReutiliseRecette as $id => $infos) :?>
<span id="reutilise<?=$id?>">
<input
type="hidden"
value="true"
name="reutilise[<?=$id?>]"
/>
<?=$infos['nom']?> <?=SEPARATEUR?>
</span>
<?php endforeach ?>
</p>
<div class="centre">
<input type="hidden" name="edit" value="1"/>
<input id="edition" type="submit" value="Sauvegarder les modifications" title="Attention ! C'est définitif, il n'est pas possible de revenir en arrière."/>
</div>
</form>
<?php else: ?>
<p>Vous devez être connecté pour faire ça ! Vous pouvez le faire <a href="index.php?page=connexion">ici</a>.</p>
<?php endif ?>
<?php break; ?>
<?php case 3 ?>
<?php if($_SESSION['auth']): ?>
<div class="centre">
<p>Attention ! La suppression d'une recette est définitive. Voulez vous continuer ?</p>
<form method="GET" action="index.php?">
<span>
<input type="hidden" value="supprimerRecette" name="page"/>
<input type="hidden" value="<?= $infoRecette['idRecette'] ?>" name="id"/>
<input type="submit" value="Oui, supprimer la recette !" id="suppression"/>
<a href="index.php?page=recette&id=<?= $infoRecette['idRecette']?>" id="important" >Non, en fait<a/>
</span>
</form>
</div>
<?php else: ?>
<p>Vous devez être connecté pour faire ça ! Vous pouvez le faire <a href="index.php?page=connexion">ici</a>.</p>
<?php endif ?>
<?php break; ?>
<?php case -2 ?>
<div class="centre">
<p>La recette a bien été ajoutée !</p>
<span>
<a id="important" href="index.php?page=recette&id=<?=$idRecette?>" >Voir la recette</a>
<a id="edition" href="index.php?page=recette&id=0">Ajouter une autre recette</a>
</span>
</div>
<?php break; ?>
<?php endswitch ?>
</section>

3
vues/vStatistiques.php Normal file
View file

@ -0,0 +1,3 @@
<section id='principal'>
<p>Il y a actuellement <?=$nbRecettes?> recettes enregistrée(s).</p>
</section>

View file

@ -0,0 +1,10 @@
<section id="principal">
<h2>
<?php if($reussi): ?>
La suppresion s'est bien déroulée.</h2>
<?php else: ?>
L'élément n'a pas être supprimé</h2>
<p>Vérifiez qu'il existe (encore) et qu'il n'est utilisé dans aucune recette.</p>
<?php endif ?>
<p>Vous pouvez retourner à <a href="index.php">l'accueil</a> ou à <a href="index.php?page=ajouterElement" >la liste des ingrédients</a></p>
</section>

View file

@ -0,0 +1,10 @@
<section id="principal">
<h2>
<?php if($reussi): ?>
La suppresion s'est bien déroulée.</h2>
<?php else: ?>
La recette n'a pas être supprimée</h2>
<p>Vérifiez qu'elle existe (encore) et qu'elle n'est utilisée nul part ailleur.</p>
<?php endif ?>
<p>Vous pouvez retourner à <a href="index.php">l'accueil</a> ou à <a href="index.php?page=ajouterElement" >la liste des ingrédients</a></p>
</section>

7
vues/vTests.php Normal file
View file

@ -0,0 +1,7 @@
<section id='principal'>
<form method="POST" action="index.php?page=test">
<input type="text" required name="textTest" value="100" title="<?=DESC_CHAMPS_DUREE?>"/>
<input type="submit">
</form>
<a href="index.php?page=ajouterElement">Retourner à la liste</a>
</section>