Compare commits
11 Commits
9b63c9261e
...
BenBack
| Author | SHA1 | Date | |
|---|---|---|---|
| e02b7abb0a | |||
| edfa8c93b9 | |||
| f933065275 | |||
| 060e54d27e | |||
| 05533d68c6 | |||
| a9e7e0331c | |||
| 83857ef4e2 | |||
| 0ae685753f | |||
| aa1ec2296f | |||
| f633d4f73d | |||
| 251bbce109 |
@@ -1,9 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'host' => 'localhost',
|
||||
'port' => 3306,
|
||||
'user' => 'benjamin',
|
||||
'pass' => '011235813',
|
||||
'name' => 'siterecette'
|
||||
];
|
||||
@@ -1,8 +1,9 @@
|
||||
<?php
|
||||
|
||||
// Config
|
||||
return [
|
||||
'website_url' => 'http://127.0.0.1:8080/',
|
||||
'website_name' => 'Les recettes des Papis',
|
||||
'website_name' => 'Les recettes de Papis',
|
||||
|
||||
'website_path' => APP_ROOT,
|
||||
];
|
||||
@@ -31,7 +31,7 @@ html, body{
|
||||
|
||||
#logo {
|
||||
background-color: aqua;
|
||||
background-image: url("Logo.jpg");
|
||||
background-image: url("../images/Logo.jpg");
|
||||
/*background:no-repeat;*/
|
||||
height: 103px;
|
||||
width: 141px;
|
||||
@@ -57,7 +57,7 @@ nav {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.nav-list {
|
||||
.nav-list{
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
@@ -67,6 +67,15 @@ nav {
|
||||
border-radius: 40px;
|
||||
}
|
||||
|
||||
.nav-list li {
|
||||
/*border: 1px solid black;*/
|
||||
border-radius: 2000px;
|
||||
}
|
||||
|
||||
.nav-list li:hover {
|
||||
background-color: #00d8a2;
|
||||
}
|
||||
|
||||
|
||||
.nav-element {
|
||||
line-height: 2.5;
|
||||
@@ -85,12 +94,13 @@ nav {
|
||||
|
||||
#login {
|
||||
border: 1px solid black;
|
||||
border-radius: 6px;
|
||||
border-radius: 2000px;
|
||||
background-color: #ffc478;
|
||||
}
|
||||
|
||||
#login:hover {
|
||||
background-color: #0bbd90;
|
||||
box-shadow: 1px 1px 7px black;
|
||||
}
|
||||
|
||||
/*Body et son contenu */
|
||||
@@ -121,6 +131,34 @@ body {
|
||||
/*display:none;*/
|
||||
}
|
||||
|
||||
.title-site {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.title {
|
||||
width: 100%;
|
||||
height: 50%;
|
||||
font-size: 100px;
|
||||
}
|
||||
|
||||
.random-proposition {
|
||||
gap: 5%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.recommandation img {
|
||||
max-width: calc( 7vh + 7vw );
|
||||
max-height: calc( 7vh + 7vw );
|
||||
}
|
||||
|
||||
.line-acceuil {
|
||||
color: #03be90;
|
||||
box-shadow: 20px 6px 8px #007054;
|
||||
}
|
||||
|
||||
.tag-selected-div {
|
||||
flex: 4;
|
||||
}
|
||||
@@ -143,6 +181,8 @@ body {
|
||||
}
|
||||
|
||||
.search-form {
|
||||
margin-top: .5%;
|
||||
padding: .5% 0 .5% .5%;
|
||||
border: 1px solid black;
|
||||
border-radius: 20px;
|
||||
box-shadow: 0px 0px 10px rgb(131, 131, 131);
|
||||
@@ -191,6 +231,7 @@ nav {
|
||||
background-clip: border-box;
|
||||
padding-right: 2%;
|
||||
padding-left: 2%;
|
||||
padding-bottom: 5px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@@ -447,11 +488,23 @@ ul {
|
||||
box-shadow: 2px 2px 0px #000000;
|
||||
}
|
||||
|
||||
.btn {
|
||||
padding: .5% 2%;
|
||||
border: 2px solid black;
|
||||
border-radius: 10px;
|
||||
margin-top: .5%;
|
||||
margin-left: .5%;
|
||||
background-color: #ffd9a0;
|
||||
}
|
||||
|
||||
.btn:hover {
|
||||
background-color: #0bbd90;
|
||||
box-shadow: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
padding: 1%;
|
||||
border-radius: 10px;
|
||||
box-shadow: 3px 4px 5px #8c8c8c;
|
||||
}
|
||||
@@ -466,8 +519,9 @@ ul {
|
||||
margin: 10px;
|
||||
padding: 10px;
|
||||
border: 1px solid black;
|
||||
background: white;
|
||||
background: #fff9f1;
|
||||
border-radius: 20px;
|
||||
box-shadow: 2px 2px 3px #a06100;
|
||||
}
|
||||
|
||||
.recette-form-group {
|
||||
@@ -477,7 +531,7 @@ ul {
|
||||
}
|
||||
|
||||
#recette-form-div-desc {
|
||||
height: 300px;
|
||||
height: 220px;
|
||||
}
|
||||
|
||||
#recette-form-description {
|
||||
@@ -523,6 +577,8 @@ ul {
|
||||
border: 1px solid black;
|
||||
border-radius: 10px;
|
||||
box-shadow: 1px 1px 1px black;
|
||||
margin-top: .25%;
|
||||
margin-bottom: .25%;
|
||||
}
|
||||
|
||||
.liste-ingr-elem:hover {
|
||||
@@ -553,6 +609,8 @@ ul {
|
||||
border: 1px solid black;
|
||||
border-radius: 10px;
|
||||
box-shadow: 1px 1px 1px black;
|
||||
margin-top: .25%;
|
||||
margin-bottom: .25%;
|
||||
}
|
||||
|
||||
.liste-tag-elem:hover {
|
||||
@@ -591,4 +649,11 @@ footer{
|
||||
background: rgb(11, 189, 144);
|
||||
color: white;
|
||||
border-top: 1px solid black;
|
||||
}
|
||||
}
|
||||
|
||||
.meta-recettes {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ document.addEventListener("DOMContentLoaded", function(){
|
||||
if (data.success) {
|
||||
let new_elem = document.createElement("option");
|
||||
|
||||
new_elem.setAttribute("value",document.getElementById('recette-form-ingr-nom').value);
|
||||
new_elem.setAttribute("value",data.id);
|
||||
new_elem.innerText = document.getElementById('recette-form-ingr-nom').value;
|
||||
|
||||
cible.appendChild(new_elem);
|
||||
@@ -86,7 +86,7 @@ document.addEventListener("DOMContentLoaded", function(){
|
||||
if (data.success) {
|
||||
let new_elem = document.createElement("option");
|
||||
|
||||
new_elem.setAttribute("value",nomTag.value);
|
||||
new_elem.setAttribute("value",data.id);
|
||||
new_elem.innerText = nomTag.value;
|
||||
|
||||
cible.appendChild(new_elem);
|
||||
@@ -146,7 +146,11 @@ document.addEventListener("DOMContentLoaded", function(){
|
||||
else {
|
||||
reponse.json().then( data => {
|
||||
if (data.success) {
|
||||
alert( "Envoyé" );
|
||||
if( IS_EDIT )
|
||||
alert( "Votre recette a été ajouté, vous allez être redirigé." );
|
||||
else
|
||||
alert( "Votre recette a été ajouté, vous allez être redirigé." );
|
||||
window.location.href = data.route !== null ? data.route : window.location.origin;
|
||||
} else {
|
||||
alert( data.error || "" );
|
||||
}
|
||||
|
||||
@@ -49,14 +49,15 @@ document.addEventListener( 'DOMContentLoaded', function(){
|
||||
fetch( FORM.action, options ).then( ( response ) => {
|
||||
if( response.ok ){
|
||||
response.json().then( ( responseJSON ) => {
|
||||
|
||||
if( responseJSON.success === true ){
|
||||
window.location.href = window.location.origin; // Redirection sur la page d'accueil si succès.
|
||||
} else {
|
||||
FORM.showError( responseJSON.message || "Mauvais nom d'utilisateur ou mauvais mot de passe." );
|
||||
FORM.showError( "Mauvais nom d'utilisateur ou mauvais mot de passe." );
|
||||
}
|
||||
|
||||
})
|
||||
} else {
|
||||
FORM.showError( "Mauvais nom d'utilisateur ou mauvais mot de passe." );
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ class IngredientManagementController extends Controller {
|
||||
public static function defineRoutes(): array
|
||||
{
|
||||
return [
|
||||
self::Route( routeUrl: '/manage/ingredients', routeName: 'manage->ingredients', routeAction: 'index' ),
|
||||
self::Route( routeUrl: '/manage/ingredients', routeName: 'manage->ingredients', routeAction: 'index', pageHeadTitle: 'Gestion des ingredients' ),
|
||||
self::Route( routeUrl: '/ingredients/edit/{int}', routeName: 'ingredients->edit', routeAction: 'edit', routeMethods: [ 'POST' ] ),
|
||||
self::Route( routeUrl: '/ingredients/delete/{int}', routeName: 'ingredients->delete', routeAction: 'delete' ),
|
||||
];
|
||||
|
||||
@@ -6,6 +6,7 @@ use App\Domain\Controller;
|
||||
use App\Helpers\UploadFiles;
|
||||
use App\Http\JSONResponse;
|
||||
use App\Http\Request;
|
||||
use App\Kernel;
|
||||
|
||||
class IngredientsAPIController extends Controller {
|
||||
|
||||
@@ -25,7 +26,7 @@ class IngredientsAPIController extends Controller {
|
||||
if( !$name || $name == "" )
|
||||
JSONResponse::sendError( [ 'error' => 'Name not defined' ] );
|
||||
|
||||
$urlOrError = UploadFiles::uploadFile( $fileNameField );
|
||||
$urlOrError = UploadFiles::uploadFile( $fileNameField, UploadFiles::IMAGE_MIME_TYPES );
|
||||
if( is_int( $urlOrError ) ){
|
||||
JSONResponse::sendError( [ 'error' => $urlOrError ] );
|
||||
}
|
||||
@@ -39,7 +40,7 @@ class IngredientsAPIController extends Controller {
|
||||
if( !new IngredientRepository()->add( $ingredient ) )
|
||||
JSONResponse::sendError( [ 'error' => 'An error occured while adding ingredient' ] );
|
||||
|
||||
JSONResponse::sendSuccess( [ 'image_url' => $urlOrError ] );
|
||||
JSONResponse::sendSuccess( [ 'image_url' => $urlOrError, 'id' => Kernel::$DB->pdo->lastInsertId() ] );
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Domain\Pages;
|
||||
|
||||
use App\Domain\Controller;
|
||||
use App\Domain\Recettes\RecetteRepository;
|
||||
use App\Infrastructure\View;
|
||||
|
||||
/**
|
||||
@@ -28,7 +29,7 @@ class PagesController extends Controller {
|
||||
* @return void
|
||||
*/
|
||||
public function index(): View {
|
||||
return new View( 'home', [ 'ok' => 'bla' ] );
|
||||
return new View( 'home', [ 'recettes' => new RecetteRepository()->getAllRecettesBrowse(1, 3 ) ] );
|
||||
}
|
||||
|
||||
}
|
||||
@@ -9,6 +9,7 @@ use App\Helpers\UploadFiles;
|
||||
use App\Http\JSONResponse;
|
||||
use App\Http\Request;
|
||||
use App\Http\Router;
|
||||
use App\Kernel;
|
||||
|
||||
class RecettesAPIController extends Controller {
|
||||
|
||||
@@ -80,13 +81,14 @@ class RecettesAPIController extends Controller {
|
||||
JSONResponse::sendError( [ 'error' => "One required fields is missing" ] );
|
||||
|
||||
// Upload & Vérification de l'image.
|
||||
$urlOrError = UploadFiles::uploadFile( $fileField );
|
||||
$urlOrError = UploadFiles::uploadFile( $fileField, UploadFiles::IMAGE_MIME_TYPES );
|
||||
if( is_int( $urlOrError ) ){
|
||||
JSONResponse::sendError( [ 'error' => $urlOrError ] );
|
||||
}
|
||||
|
||||
// Vérification d'une entrée qui existerait déjà.
|
||||
$slug = strtolower( $name );
|
||||
$slug = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $slug);
|
||||
$slug = str_replace( ' ', '', $slug );
|
||||
|
||||
$recetteRepo = new RecetteRepository();
|
||||
@@ -116,7 +118,7 @@ class RecettesAPIController extends Controller {
|
||||
}
|
||||
|
||||
// Pour actualiser l'ID.
|
||||
$recette = $recetteRepo->getBySlug( $slug );
|
||||
$recette = $recetteRepo->getById( Kernel::$DB->pdo->lastInsertId() );
|
||||
|
||||
// Ajout du lien ingrédients recettes.
|
||||
foreach( $ingredientsId as $ingredientId ){
|
||||
@@ -136,7 +138,7 @@ class RecettesAPIController extends Controller {
|
||||
}
|
||||
}
|
||||
|
||||
JSONResponse::sendSuccess( [ 'recette' => $recette ] );
|
||||
JSONResponse::sendSuccess( [ 'recette' => $recette, 'route' => Router::getRouteURL('recettes->show', $recette->slug ) ] );
|
||||
}
|
||||
|
||||
public function edit(){
|
||||
@@ -171,7 +173,7 @@ class RecettesAPIController extends Controller {
|
||||
}
|
||||
|
||||
// Upload & Vérification de l'image.
|
||||
$urlOrError = UploadFiles::uploadFile( $fileField );
|
||||
$urlOrError = UploadFiles::uploadFile( $fileField, UploadFiles::IMAGE_MIME_TYPES );
|
||||
if( is_int( $urlOrError ) ){
|
||||
// Ingore image.
|
||||
} else {
|
||||
@@ -180,10 +182,11 @@ class RecettesAPIController extends Controller {
|
||||
|
||||
// Vérification d'une entrée qui existerait déjà.
|
||||
$slug = strtolower( $name );
|
||||
$slug = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $slug);
|
||||
$slug = str_replace( ' ', '', $slug );
|
||||
|
||||
$recette->titre_recette = $name;
|
||||
$recette->slug = $slug;
|
||||
// $recette->slug = $slug;
|
||||
|
||||
$recette->temps_de_preparation = intval( $temps <= 0 ? 1 : $temps );
|
||||
$recette->description_recette = $description;
|
||||
@@ -273,7 +276,7 @@ class RecettesAPIController extends Controller {
|
||||
}
|
||||
}
|
||||
|
||||
JSONResponse::sendSuccess( [ 'recette' => $recette ] );
|
||||
JSONResponse::sendSuccess( [ 'recette' => $recette, 'route' => Router::getRouteURL('recettes->show', $recette->slug ) ] );
|
||||
}
|
||||
|
||||
public function delete(){
|
||||
|
||||
@@ -15,8 +15,8 @@ class RecettesManagementController extends Controller {
|
||||
public static function defineRoutes(): array
|
||||
{
|
||||
return [
|
||||
self::Route( routeUrl: '/recettes/create', routeName: 'recettes->create', routeAction: 'create' ),
|
||||
self::Route( routeUrl: '/recettes/edit/{int}', routeName: 'recettes->edit', routeAction: 'edit' ),
|
||||
self::Route( routeUrl: '/recettes/create', routeName: 'recettes->create', routeAction: 'create', pageHeadTitle: 'Créer une recette' ),
|
||||
self::Route( routeUrl: '/recettes/edit/{int}', routeName: 'recettes->edit', routeAction: 'edit', pageHeadTitle: 'Modifier une recette' ),
|
||||
self::Route( routeUrl: '/recettes/delete/{int}', routeName: 'recettes->delete', routeAction: 'delete' ),
|
||||
];
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ class TagManagementController extends Controller {
|
||||
public static function defineRoutes(): array
|
||||
{
|
||||
return [
|
||||
self::Route( routeUrl: '/manage/tags', routeName: 'manage->tags', routeAction: 'index' ),
|
||||
self::Route( routeUrl: '/manage/tags', routeName: 'manage->tags', routeAction: 'index', pageHeadTitle: 'Gestion des tags' ),
|
||||
self::Route( routeUrl: '/tags/edit/{int}', routeName: 'tags->edit', routeAction: 'edit', routeMethods: [ 'POST' ] ),
|
||||
self::Route( routeUrl: '/tags/delete/{int}', routeName: 'tags->delete', routeAction: 'delete' ),
|
||||
];
|
||||
|
||||
@@ -6,6 +6,7 @@ use App\Domain\Controller;
|
||||
use App\Helpers\UploadFiles;
|
||||
use App\Http\JSONResponse;
|
||||
use App\Http\Request;
|
||||
use App\Kernel;
|
||||
|
||||
class TagsAPIController extends Controller {
|
||||
|
||||
@@ -32,7 +33,7 @@ class TagsAPIController extends Controller {
|
||||
if( !new TagRepository()->add( $tag ) )
|
||||
JSONResponse::sendError( [ 'error' => 'An error occured while adding tag' ] );
|
||||
|
||||
JSONResponse::sendSuccess();
|
||||
JSONResponse::sendSuccess( [ 'id' => Kernel::$DB->pdo->lastInsertId() ] );
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -43,12 +43,14 @@ class AuthentificationController extends Controller {
|
||||
|
||||
Request::setCORS();
|
||||
|
||||
$username = Request::get( 'username' );
|
||||
$password = Request::get( 'password' );
|
||||
$username = Request::post( 'username' );
|
||||
$password = Request::post( 'password' );
|
||||
|
||||
// TODO : Récupération de l'utilisateur et verify_password.
|
||||
$userId = new UtilisateurRepository()->login( $username, $password );
|
||||
if( !$userId ) {
|
||||
return JSONResponse::sendError();
|
||||
}
|
||||
|
||||
$userId = 1;
|
||||
Authentification::loginUser( $userId );
|
||||
return JSONResponse::sendSuccess( [ 'user_id' => $userId ] );
|
||||
|
||||
|
||||
20
src/Domain/Utilisateurs/Utilisateur.php
Normal file
20
src/Domain/Utilisateurs/Utilisateur.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Domain\Utilisateurs;
|
||||
|
||||
use App\Domain\Model;
|
||||
//use App\Helpers\Markdown;
|
||||
|
||||
class Utilisateur extends Model {
|
||||
|
||||
public int $num_user;
|
||||
public string $username;
|
||||
public string $userpassword;
|
||||
|
||||
|
||||
public function getID(): int
|
||||
{
|
||||
return $this->num_user;
|
||||
}
|
||||
|
||||
}
|
||||
80
src/Domain/Utilisateurs/UtilisateurRepository.php
Normal file
80
src/Domain/Utilisateurs/UtilisateurRepository.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
namespace App\Domain\Utilisateurs;
|
||||
|
||||
use App\Domain\Model;
|
||||
use App\Domain\Repository;
|
||||
|
||||
|
||||
/**
|
||||
* Classe qui permet de faire le lien entre la BDD et le site pour les utilisateurs.
|
||||
*/
|
||||
class UtilisateurRepository extends Repository {
|
||||
|
||||
public static function getEntity(): string
|
||||
{
|
||||
return Utilisateur::class;
|
||||
}
|
||||
|
||||
public static function getStructure(): array
|
||||
{
|
||||
return [
|
||||
'table' => 'User',
|
||||
'columns' => [
|
||||
'num_user', 'username', 'userpassword'
|
||||
]
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Permet d'obtenir une liste de toutes les recettes objet Utilisateur.
|
||||
*
|
||||
* @return Utilisateur[]|null
|
||||
*/
|
||||
public function getAll(): ?array {
|
||||
$sqlQuery = "SELECT * FROM {$this->tableName};";
|
||||
$results = $this->selectGetAll($sqlQuery);
|
||||
if( $results === null )
|
||||
return null;
|
||||
return $results;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Permet d'avoir un utilisateur par un ID.
|
||||
*
|
||||
* @param int $id
|
||||
* @return Utilisateur|null
|
||||
*/
|
||||
public function getByID( int $id ): ?Utilisateur {
|
||||
$sqlQuery = "SELECT * FROM {$this->tableName} WHERE num_user = {$id}";
|
||||
$results = $this->selectGetAll($sqlQuery);
|
||||
if( $results === null || count( $results ) > 1 )
|
||||
return null;
|
||||
return $results[0];
|
||||
}
|
||||
|
||||
|
||||
public function login(string $name, string $pass): int|bool{
|
||||
|
||||
$users = new UtilisateurRepository()->getAll();
|
||||
foreach($users as $user){
|
||||
if((strcmp($name,$user->username)==0) and (strcmp($pass,$user->userpassword)==0))return $user->num_user;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function add( Model $utilisateurs ): bool {
|
||||
return $this->addEntity( $utilisateurs );
|
||||
}
|
||||
|
||||
public function update( Model $utilisateurs ): bool {
|
||||
return $this->updateEntity( $utilisateurs, 'num_user' );
|
||||
}
|
||||
|
||||
public function delete( Model $utilisateurs ): bool {
|
||||
return $this->deleteEntity( $utilisateurs, 'num_user' );
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,6 +7,8 @@ use App\Kernel;
|
||||
|
||||
class UploadFiles {
|
||||
|
||||
const array IMAGE_MIME_TYPES = [ 'image/png', 'image/jpeg' ];
|
||||
|
||||
public static function uploadFolderPath(){
|
||||
return APP_ROOT . 'public/uploads/';
|
||||
}
|
||||
@@ -16,6 +18,7 @@ class UploadFiles {
|
||||
|
||||
/**
|
||||
* @param string $fileName
|
||||
* @param array $allowedMimeTypes Les mimes types autorisés pour ce fichier. Une liste vide n'a pas de restriction de mime type.
|
||||
*
|
||||
* @return string|int
|
||||
*
|
||||
@@ -23,8 +26,9 @@ class UploadFiles {
|
||||
* 2: Erreur dans le fichier
|
||||
* 3: Déjà existant.
|
||||
* 4: Erreur dans le déplacement.
|
||||
* 5: Erreur dans le mimetype.
|
||||
*/
|
||||
public static function uploadFile( string $fileArg ): string|int {
|
||||
public static function uploadFile( string $fileArg, array $allowedMimeTypes = [] ): string|int {
|
||||
|
||||
if( !isset( $_FILES[ $fileArg ] ) )
|
||||
return 1;
|
||||
@@ -36,6 +40,11 @@ class UploadFiles {
|
||||
$tempFileName = $file['tmp_name'];
|
||||
$fileName = $file['name'];
|
||||
|
||||
if( $allowedMimeTypes !== [] ){
|
||||
if( !in_array( $file['type'], $allowedMimeTypes ) )
|
||||
return 5;
|
||||
}
|
||||
|
||||
$full_name = self::uploadFolderPath() . $fileName;
|
||||
$full_uri = self::uploadFolderUri() . $fileName;
|
||||
|
||||
|
||||
@@ -1,2 +1,23 @@
|
||||
<h1>Coucou</h1>
|
||||
<?php $str = "Markdown **text**\n# SOLONG\n*text*."; $md = \App\Helpers\Markdown::convertToHTML( $str ); echo "<p>$md</p>"; ?>
|
||||
<?php use App\Infrastructure\View as V; ?>
|
||||
|
||||
<div class="content">
|
||||
<div class="title-site">
|
||||
<h1 class="title">Les Recettes De Papis</h1>
|
||||
<hr class="line-acceuil">
|
||||
<h3>Proposition de recette :</h3>
|
||||
</div>
|
||||
<div class="random-proposition">
|
||||
<?php foreach( V::arg( 'recettes' ) as $recette ): ?>
|
||||
<a class="recette-icone" href="<?php V::routeUrl( 'recettes->show', $recette->slug ); ?>">
|
||||
<img class="recette-preview-image" src="<?php echo $recette->photo; ?>">
|
||||
<div class="recette-icone-content">
|
||||
<h3><?php echo $recette->titre_recette; ?></h3>
|
||||
<ul class="meta-recettes">
|
||||
<li>Temps de préparation : <?php echo $recette->temps_de_preparation; ?> minutes</li>
|
||||
<li>Nombre d'ingrédients : <?php echo $recette->getNumberOfIngredients(); ?></li>
|
||||
</ul>
|
||||
</div>
|
||||
</a>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -6,11 +6,12 @@
|
||||
<title><?php echo V::getHeadTitle(); ?></title>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="stylesheet" href="<?php V::assetUrl( 'css/style.css' ); ?>" />
|
||||
<link rel="icon" type="image/x-icon" href="<?php V::assetUrl( 'images/Logo.ico' ); ?>" />
|
||||
</head>
|
||||
<body>
|
||||
<header id="header">
|
||||
<div id="logo">
|
||||
<a href="index.php">
|
||||
<a href="<?php V::routeUrl( 'home'); ?>">
|
||||
<img src="<?php V::assetUrl( 'images/Logo.jpg'); ?>" class="logo">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -7,9 +7,6 @@
|
||||
<ul>
|
||||
</ul>
|
||||
</div>
|
||||
<form class="sidebar-search" action="none">
|
||||
<input type="text" class="search-form search-form-tag" name="search-tag" placeholder="Rechercher..." >
|
||||
</form>
|
||||
<div class="tag-unselected-div">
|
||||
<ul id="tagsList">
|
||||
<?php foreach( V::arg( 'tagsList') as $tag ): ?>
|
||||
@@ -25,9 +22,6 @@
|
||||
<ul>
|
||||
</ul>
|
||||
</div>
|
||||
<form class="sidebar-search" action="none">
|
||||
<input type="text" class="search-form search-form-tag" name="search-ingr" placeholder="Rechercher..." >
|
||||
</form>
|
||||
<div class="ing-unselected-div">
|
||||
<ul id="ingredientsList">
|
||||
<?php foreach( V::arg( 'ingredientsList') as $tag ): ?>
|
||||
|
||||
@@ -5,6 +5,7 @@ use App\Infrastructure\View as V; ?>
|
||||
<div class="content">
|
||||
<div class="recette-add-form-all">
|
||||
<form id="recette-form-complete" class="recette-form recette-form-add" action="/api/recettes/create" method="POST">
|
||||
<legend><h1>Nouvelle Recette : </h1></legend>
|
||||
<div class="recette-form-group form-group">
|
||||
<label for="nom">Titre : </label>
|
||||
<input type="text" class="form-control" id="recette-form-nom" name="nom" placeholder="Titre de votre recette">
|
||||
@@ -15,7 +16,7 @@ use App\Infrastructure\View as V; ?>
|
||||
</div>
|
||||
<div class="recette-form-group form-group">
|
||||
<label for="image">Photo du plat : </label>
|
||||
<input type="file" class="form-control" id="recette-form-photo" name="image" placeholder="ajouter votre image">
|
||||
<input type="file" class="form-control" id="recette-form-photo" name="image" placeholder="ajouter votre image" accept="image/jpeg, image/png">
|
||||
</div>
|
||||
<div class="recette-form-group form-group" id="recette-form-div-ingr">
|
||||
<label for="ingr">Ingredients</label>
|
||||
@@ -35,13 +36,14 @@ use App\Infrastructure\View as V; ?>
|
||||
</div>
|
||||
<div class="recette-form-group form-group" id="recette-form-div-desc">
|
||||
<label for="description">Description</label>
|
||||
<textarea type="texte" class="form-control" id="recette-form-description" name="description" placeholder="Description..."></textarea>
|
||||
<textarea type="texte" class="form-control" id="recette-form-description" name="description" placeholder="Markdown supporté pour les titres de niveau 1,2, le gras ainsi que l'italique"></textarea>
|
||||
</div>
|
||||
|
||||
<button type='submit' class='btn btn-primary'>Confirmer</button>
|
||||
<button type='submit' class='btn btn-primary'>Envoyer la recette</button>
|
||||
</form>
|
||||
<div class="recette-form-add-additional">
|
||||
<form id="recette-form-ingr-add" class="recette-form recette-form-add-ingr" action="" method="POST">
|
||||
<legend><h2>Nouvel Ingrédient :</h2></legend>
|
||||
<div class="recette-form-group form-group">
|
||||
<label for="name">Nom de l'Ingrédient</label>
|
||||
<input type="texte" class="form-control" id="recette-form-ingr-nom" name="name" placeholder="Nom de l'ingrédient" value="">
|
||||
@@ -57,6 +59,7 @@ use App\Infrastructure\View as V; ?>
|
||||
</div>
|
||||
</form>
|
||||
<form id="recette-form-tag-add" class="recette-form recette-form-add-tag" action="" method="POST">
|
||||
<legend><h2>Nouveau Tag : </h2></legend>
|
||||
<div class="recette-form-group form-group">
|
||||
<label for="tag">Tags</label>
|
||||
<input type="text" class="form-control" id="recette-form-tag-nom" name="name" placeholder="Nom de l'ingrédient">
|
||||
|
||||
@@ -5,6 +5,7 @@ use App\Infrastructure\View as V; ?>
|
||||
<div class="content">
|
||||
<div class="recette-add-form-all">
|
||||
<form id="recette-form-complete" class="recette-form recette-form-add" action="/api/recettes/edit" method="POST">
|
||||
<legend><h1>Editer une Recette : </h1></legend>
|
||||
<div class="recette-form-group form-group">
|
||||
<label for="nom">Titre : </label>
|
||||
<input type="text" class="form-control" id="recette-form-nom" name="nom" placeholder="Titre de votre recette" value="<?php echo $R->titre_recette; ?>">
|
||||
@@ -15,7 +16,7 @@ use App\Infrastructure\View as V; ?>
|
||||
</div>
|
||||
<div class="recette-form-group form-group">
|
||||
<label for="image">Photo du plat : </label>
|
||||
<input type="file" class="form-control" id="recette-form-photo" name="image" placeholder="ajouter votre image">
|
||||
<input type="file" class="form-control" id="recette-form-photo" name="image" placeholder="ajouter votre image" accept="image/jpeg, image/png">
|
||||
</div>
|
||||
<div class="recette-form-group form-group" id="recette-form-div-ingr">
|
||||
<label for="ingr">Ingredients</label>
|
||||
@@ -42,6 +43,7 @@ use App\Infrastructure\View as V; ?>
|
||||
</form>
|
||||
<div class="recette-form-add-additional">
|
||||
<form id="recette-form-ingr-add" class="recette-form recette-form-add-ingr" action="" method="POST">
|
||||
<legend><h2>Nouvel Ingrédient :</h2></legend>
|
||||
<div class="recette-form-group form-group">
|
||||
<label for="name">Nom de l'Ingrédient</label>
|
||||
<input type="texte" class="form-control" id="recette-form-ingr-nom" name="name" placeholder="Nom de l'ingrédient" value="">
|
||||
@@ -57,6 +59,7 @@ use App\Infrastructure\View as V; ?>
|
||||
</div>
|
||||
</form>
|
||||
<form id="recette-form-tag-add" class="recette-form recette-form-add-tag" action="" method="POST">
|
||||
<legend><h2>Nouveau Tag : </h2></legend>
|
||||
<div class="recette-form-group form-group">
|
||||
<label for="tag">Tags</label>
|
||||
<input type="text" class="form-control" id="recette-form-tag-nom" name="name" placeholder="Nom de l'ingrédient">
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
<img class="recette-preview-image" src="<?php echo $recette->photo; ?>">
|
||||
<div class="recette-icone-content">
|
||||
<h3><?php echo $recette->titre_recette; ?></h3>
|
||||
<ul>
|
||||
<li>Temps de préparation : <?php echo $recette->temps_de_preparation; ?></li>
|
||||
<ul class="meta-recettes">
|
||||
<li>Temps de préparation : <?php echo $recette->temps_de_preparation; ?> minutes</li>
|
||||
<li>Nombre d'ingrédients : <?php echo $recette->getNumberOfIngredients(); ?></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user