From de28da8c8c47c9a25b807265c94df455de89faa4 Mon Sep 17 00:00:00 2001 From: Kazhnuz Date: Fri, 11 Apr 2025 18:48:20 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Rework=20how=20the=20valid?= =?UTF-8?q?ation=20are=20done?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/core.php | 2 + kernel/helpers/validators.php | 70 +++++++++++++++++++++++++++++++++++ kernel/init.php | 17 ++++++--- kernel/postdata.php | 59 +++++++++++++++++++++++++++++ kernel/renderer.php | 7 ++++ 5 files changed, 150 insertions(+), 5 deletions(-) create mode 100644 kernel/helpers/validators.php create mode 100644 kernel/postdata.php diff --git a/kernel/core.php b/kernel/core.php index 5ce5d07..d9f6c85 100644 --- a/kernel/core.php +++ b/kernel/core.php @@ -5,6 +5,8 @@ $controlrow = mysqli_fetch_array($controlquery); $router = new Router(); $renderer = new Renderer(); +$messages = new Messages(); +$postData = new PostData(); // Application des différents namespace utilisés par le systeme $router->registerNamespace('admin', 2, false); diff --git a/kernel/helpers/validators.php b/kernel/helpers/validators.php new file mode 100644 index 0000000..2040f60 --- /dev/null +++ b/kernel/helpers/validators.php @@ -0,0 +1,70 @@ + 0) { + return "{$name} already taken, it must be unique"; + } + return null; + } +} \ No newline at end of file diff --git a/kernel/init.php b/kernel/init.php index 8ee661a..e27267d 100644 --- a/kernel/init.php +++ b/kernel/init.php @@ -29,11 +29,18 @@ if (DEBUG_MODE) { error_reporting(E_ERROR); } -include(PATH_KERNEL . 'lib.php'); -include(PATH_KERNEL . 'cookies.php'); -include(PATH_KERNEL . 'renderer.php'); -include(PATH_KERNEL . 'namespace.php'); -include(PATH_KERNEL . 'router.php'); +// Defined folders +define('PATH_HELPERS', PATH_KERNEL . 'helpers' . DS); + +require(PATH_HELPERS . 'validators.php'); + +require(PATH_KERNEL . 'lib.php'); +require(PATH_KERNEL . 'cookies.php'); +require(PATH_KERNEL . 'renderer.php'); +require(PATH_KERNEL . 'namespace.php'); +require(PATH_KERNEL . 'router.php'); +require(PATH_KERNEL . 'messages.php'); +require(PATH_KERNEL . 'postdata.php'); $starttime = getmicrotime(); diff --git a/kernel/postdata.php b/kernel/postdata.php new file mode 100644 index 0000000..71db7bb --- /dev/null +++ b/kernel/postdata.php @@ -0,0 +1,59 @@ +nonCleanDatas = $_POST; + $this->validators = new Validator(); + } + + public function addField($name, $rules, $fieldName, $database = []) { + $this->addFields($name, $rules, [$fieldName], $database); + } + + public function addFields($name, $rules, $fieldNames, $database = []) { + $this->fields[] = ["name"=>$name, "rules"=>$rules, "fieldNames"=>$fieldNames, "database"=>$database]; + } + + public function validate() { + foreach ($this->fields as $field) { + $this->validateField($field); + $this->getDataFromField($field); + } + return (count($this->errors) == 0); + } + + public function getField($field) { + return $this->datas[$field]; + } + + private function validateField($field) { + $rules = $field["rules"]; + if (count($rules) > 0) { + foreach ($rules as $rule) { + $this->applyValidation($rule, $field["name"], $this->nonCleanDatas, $field["fieldNames"], $field["database"]); + } + } + } + + private function getDataFromField($field) { + $fieldNames = $field["fieldNames"]; + foreach ($fieldNames as $name) { + $this->datas[$name] = $this->nonCleanDatas[$name]; + } + } + + private function applyValidation($rule, $name, $array, $keys, $database) { + $error = call_user_func(array($this->validators, $rule), $name, $this->nonCleanDatas, $keys, $database); + if ($error != null) { + echo($error); + $this->errors[] = $error; + } + } +} \ No newline at end of file diff --git a/kernel/renderer.php b/kernel/renderer.php index 8538445..298d8fe 100644 --- a/kernel/renderer.php +++ b/kernel/renderer.php @@ -57,4 +57,11 @@ class Renderer { $this->prepare("content", $content); $this->render("simplepage.twig"); } + + public function addPostFields($fields) { + global $postData; + foreach ($fields as $field) { + $this->prepare("field_{$field}", $postData->getField($field)); + } + } } \ No newline at end of file