From 2c89c0ec184c0ed76562c899722bb3615cd83add Mon Sep 17 00:00:00 2001 From: polo Date: Sun, 26 Jul 2026 13:42:25 +0200 Subject: =?UTF-8?q?choix=20d'une=20strat=C3=A9gie=20par=20type=20d'objet,?= =?UTF-8?q?=20suppression=20des=20isset=20inutiles,=20suppression=20de=20$?= =?UTF-8?q?validated?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/index.php | 9 +--- src/controller/ContactFormController.php | 4 +- src/controller/UserController.php | 8 +-- src/service/FormValidation.php | 88 ++++++++++++++++---------------- 4 files changed, 53 insertions(+), 56 deletions(-) diff --git a/public/index.php b/public/index.php index 2ab799b..19011d1 100644 --- a/public/index.php +++ b/public/index.php @@ -45,21 +45,16 @@ if(IS_ADMIN){ // remplit la BDD initiale, ne fonctionne que si la BDD est vide DatabaseSettingUp::run($entityManager); -$request = Request::createFromGlobals(); - /* -- partie 2: routage et contrôleurs -- */ - +$request = Request::createFromGlobals(); define('CURRENT_PAGE', htmlspecialchars($request->query->get('page') ?? '')); -//Router::dispatch($request, $entityManager); -//$response = Router::dispatch($request, $entityManager); - $router = new Router($request, $entityManager); $response = $router->dispatch(); $response->send(); -// gestion des erreurs +// avec gestion des erreurs /*try{ $response = $router->dispatch(); } diff --git a/src/controller/ContactFormController.php b/src/controller/ContactFormController.php index cbc1837..e078af2 100644 --- a/src/controller/ContactFormController.php +++ b/src/controller/ContactFormController.php @@ -28,7 +28,7 @@ class ContactFormController } static public function setEmailParam(EntityManager $entityManager, array $json): JsonResponse { - $form = new FormValidation($json, 'email_params'); + $form = new FormValidation($json, ValidationStrategy::EmailParam); if($form->validate()){ $form_data = $entityManager->find(EmailForm::class, $json['id']); @@ -45,7 +45,7 @@ class ContactFormController // les deux méthodes suivantes sont "factorisables", elles ne se distinguent que par la gestion ou non du formulaire rempli par le visiteur static public function sendVisitorEmail(EntityManager $entityManager, array $json): JsonResponse { - $form = new FormValidation($json, 'email_send'); + $form = new FormValidation($json, ValidationStrategy::EmailSend); $error = ''; if($form->validate()){ diff --git a/src/controller/UserController.php b/src/controller/UserController.php index 03686ee..750b01b 100644 --- a/src/controller/UserController.php +++ b/src/controller/UserController.php @@ -25,7 +25,7 @@ class UserController { unset($_SESSION['user']); - $form = new FormValidation($_POST, 'create_user'); + $form = new FormValidation($_POST, ValidationStrategy::CreateUser); $url = new URL; $error = ''; @@ -58,7 +58,7 @@ class UserController } unset($_SESSION['user']); - $form = new FormValidation($_POST, 'connection'); + $form = new FormValidation($_POST, ValidationStrategy::Connection); $error = ''; if($form->validate()){ @@ -135,7 +135,7 @@ class UserController $url = new URL(['page' => 'user_edit']); isset($_GET['from']) ? $url->addParams(['from' => $_GET['from']]) : null; - $form = new FormValidation($_POST, 'username_update'); + $form = new FormValidation($_POST, ValidationStrategy::UsernameUpdate); $error = ''; if($form->validate()){ @@ -174,7 +174,7 @@ class UserController $url = new URL(['page' => 'user_edit']); isset($_GET['from']) ? $url->addParams(['from' => $_GET['from']]) : null; - $form = new FormValidation($_POST, 'password_update'); + $form = new FormValidation($_POST, ValidationStrategy::PasswordUpdate); $error = ''; if($form->validate()){ diff --git a/src/service/FormValidation.php b/src/service/FormValidation.php index cdd1ae3..9646a6b 100644 --- a/src/service/FormValidation.php +++ b/src/service/FormValidation.php @@ -1,35 +1,50 @@ 'emailStrategy', + self::EmailParam => 'emailParamStrategy', + self::CreateUser => 'createUserStrategy', + self::Connection => 'connectionStrategy', + self::UsernameUpdate => 'usernameUpdateStrategy', + self::PasswordUpdate => 'passwordUpdateStrategy' + }; + } +} + class FormValidation { private array $data; // tableau associatif (probablement $_POST) private Closure $callStrategy; private array $errors; - private bool $validated = false; - public function __construct(array $data, string $strategy_name){ + public function __construct(array $data, ValidationStrategy $strategy){ $this->data = $data; - $this->callStrategy = match($strategy_name){ - // bloc formulaire de contact - 'email_send' => fn() => $this->emailStrategy(), // raccourci pour: 'email_send' => function () { return $this->emailStrategy(); }, - 'email_params' => fn() => $this->emailParamsStrategy(), - // formulaires pages spéciales - 'create_user' => fn() => $this->createUserStrategy(), - 'connection' => fn() => $this->connectionStrategy(), - 'username_update' => fn() => $this->usernameUpdateStrategy(), - 'password_update' => fn() => $this->passwordUpdateStrategy(), - default => throw new LogicException("server_error_strategy_not_found") - }; + $method = $strategy->method(); + $this->callStrategy = fn() => $this->$method(); } public function validate(): bool { $this->errors = []; - ($this->callStrategy)(); - $this->validated = true; + ($this->callStrategy)(); // appel de la callback return empty($this->errors); } @@ -40,7 +55,7 @@ class FormValidation public function getField(string $field): string { - return $this->validated ? $this->data[$field] : ''; + return $this->data[$field] ?? ''; } // méthodes de validation @@ -76,9 +91,7 @@ class FormValidation { $this->captchaValidate(false); - if(!isset($this->data['name']) || empty($this->data['name']) - || !isset($this->data['email']) || empty($this->data['email']) - || !isset($this->data['message']) || empty($this->data['message']) + if(empty($this->data['name']) || empty($this->data['email']) || empty($this->data['message']) || !isset($this->data['hidden']) || !empty($this->data['hidden'])){ $this->errors[] = 'missing_fields'; } @@ -91,34 +104,28 @@ class FormValidation $this->data['email'] = htmlspecialchars(trim($this->data['email'])); $this->data['message'] = htmlspecialchars($this->data['message']); } - private function emailParamsStrategy(): void + private function emailParamStrategy(): void { - if(!isset($this->data['id'], $this->data['what_param'], $this->data['value'], $this->data['hidden']) - || !empty($this->data['hidden'])){ + if(empty($this->data['id']) || empty($this->data['what_param']) || empty($this->data['value']) + || !isset($this->data['hidden']) || !empty($this->data['hidden'])){ $this->errors[] = 'missing_fields'; } - elseif($this->data['value'] !== ''){ - if(!in_array($this->data['what_param'], ['smtp_host', 'smtp_secure', 'smtp_username', 'smtp_password', 'email_dest'])){ - $this->errors[] = 'unknown_parameter'; - } - elseif($this->data['what_param'] === 'smtp_username' || $this->data['what_param'] === 'email_dest'){ - if(!filter_var($this->data['value'], FILTER_VALIDATE_EMAIL)){ - $this->errors[] = 'invalide_email_address'; - } + if(!in_array($this->data['what_param'], ['smtp_host', 'smtp_secure', 'smtp_username', 'smtp_password', 'email_dest'])){ + $this->errors[] = 'unknown_parameter'; + } + elseif($this->data['what_param'] === 'smtp_username' || $this->data['what_param'] === 'email_dest'){ + if(!filter_var($this->data['value'], FILTER_VALIDATE_EMAIL)){ + $this->errors[] = 'invalide_email_address'; } } - - // htmlspecialchars exécutés à l'affichage dans FormBuilder } private function createUserStrategy(): void { $this->captchaValidate(); // test mauvais paramètres - if(!isset($this->data['login']) || empty($this->data['login']) - || !isset($this->data['password']) || empty($this->data['password']) - || !isset($this->data['password_confirmation']) || empty($this->data['password_confirmation']) + if(empty($this->data['login']) || empty($this->data['password']) || empty($this->data['password_confirmation']) || !isset($this->data['create_user_hidden']) || !empty($this->data['create_user_hidden'])) { $this->errors[] = 'bad_login_or_password'; @@ -137,8 +144,7 @@ class FormValidation { $this->captchaValidate(); - if(!isset($this->data['login']) || empty($this->data['login']) - || !isset($this->data['password']) || empty($this->data['password']) + if(empty($this->data['login']) || empty($this->data['password']) || !isset($this->data['connection_hidden']) || !empty($this->data['connection_hidden'])) { $this->errors[] = 'bad_login_or_password'; @@ -148,9 +154,7 @@ class FormValidation { $this->captchaValidate(); - if(!isset($this->data['login']) || empty($this->data['login']) - || !isset($this->data['password']) || empty($this->data['password']) - || !isset($this->data['new_login']) || empty($this->data['new_login']) + if(empty($this->data['login']) || empty($this->data['password']) || empty($this->data['new_login']) || !isset($this->data['modify_username_hidden']) || !empty($this->data['modify_username_hidden'])) { $this->errors[] = 'bad_login_or_password'; @@ -172,9 +176,7 @@ class FormValidation { $this->captchaValidate(); - if(!isset($this->data['login']) || empty($this->data['login']) - || !isset($this->data['password']) || empty($this->data['password']) - || !isset($this->data['new_password']) || empty($this->data['new_password']) + if(empty($this->data['login']) || empty($this->data['password']) || empty($this->data['new_password']) || !isset($this->data['modify_password_hidden']) || !empty($this->data['modify_password_hidden'])) { $this->errors[] = 'bad_login_or_password'; -- cgit v1.2.3