diff --git a/public/assets/css/style.css b/public/assets/css/style.css index 174341a..aaf9b82 100755 --- a/public/assets/css/style.css +++ b/public/assets/css/style.css @@ -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 */ @@ -143,6 +153,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 +203,7 @@ nav { background-clip: border-box; padding-right: 2%; padding-left: 2%; + padding-bottom: 5px; overflow: hidden; } @@ -447,11 +460,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 +491,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 +503,7 @@ ul { } #recette-form-div-desc { - height: 300px; + height: 220px; } #recette-form-description { @@ -523,6 +549,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 +581,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 +621,7 @@ footer{ background: rgb(11, 189, 144); color: white; border-top: 1px solid black; -} \ No newline at end of file +} + + + diff --git a/public/assets/js/login.js b/public/assets/js/login.js index e14ca46..15e0d21 100755 --- a/public/assets/js/login.js +++ b/public/assets/js/login.js @@ -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." ); } }) diff --git a/src/Domain/Ingredients/IngredientsAPIController.php b/src/Domain/Ingredients/IngredientsAPIController.php index 1e3b59d..d906e14 100644 --- a/src/Domain/Ingredients/IngredientsAPIController.php +++ b/src/Domain/Ingredients/IngredientsAPIController.php @@ -25,7 +25,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 ] ); } diff --git a/src/Domain/Recettes/RecettesAPIController.php b/src/Domain/Recettes/RecettesAPIController.php index 9698c57..5819b09 100644 --- a/src/Domain/Recettes/RecettesAPIController.php +++ b/src/Domain/Recettes/RecettesAPIController.php @@ -80,7 +80,7 @@ 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 ] ); } @@ -171,7 +171,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 { diff --git a/src/Domain/Utilisateurs/AuthentificationController.php b/src/Domain/Utilisateurs/AuthentificationController.php index f1e93e8..481f0f4 100644 --- a/src/Domain/Utilisateurs/AuthentificationController.php +++ b/src/Domain/Utilisateurs/AuthentificationController.php @@ -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 ] ); diff --git a/src/Domain/Utilisateurs/Utilisateur.php b/src/Domain/Utilisateurs/Utilisateur.php new file mode 100644 index 0000000..f69c15b --- /dev/null +++ b/src/Domain/Utilisateurs/Utilisateur.php @@ -0,0 +1,20 @@ +num_user; + } + +} \ No newline at end of file diff --git a/src/Domain/Utilisateurs/UtilisateurRepository.php b/src/Domain/Utilisateurs/UtilisateurRepository.php new file mode 100644 index 0000000..1d7295c --- /dev/null +++ b/src/Domain/Utilisateurs/UtilisateurRepository.php @@ -0,0 +1,80 @@ + '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' ); + } + +} \ No newline at end of file diff --git a/src/Helpers/UploadFiles.php b/src/Helpers/UploadFiles.php index 658fe48..8c3ac92 100644 --- a/src/Helpers/UploadFiles.php +++ b/src/Helpers/UploadFiles.php @@ -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; diff --git a/views/home.php b/views/home.php index bf307b7..ade1ed7 100644 --- a/views/home.php +++ b/views/home.php @@ -1,2 +1 @@