From 75f3e8ab4b3d65d6eba16575ca0a4a669b7e27ac Mon Sep 17 00:00:00 2001 From: Daniel Weipert Date: Thu, 6 Jan 2022 01:36:07 +0100 Subject: Validate fields with custom function --- src/App.php | 19 ++++++++++++++++--- tests/Test.php | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/src/App.php b/src/App.php index 1a12f6a..0c0773b 100644 --- a/src/App.php +++ b/src/App.php @@ -9,6 +9,8 @@ use Yosymfony\Toml\TomlBuilder; class App { + public string $formPath; + /** * App constructor. */ @@ -42,7 +44,7 @@ class App // GET if ($method == 'GET') { if (str_ends_with($path, '/fields')) { - $formPath = $contentRoot . str_replace('/fields', '', $path); + $this->formPath = $formPath = $contentRoot . str_replace('/fields', '', $path); $fields = $this->buildFields($formPath, $_GET['page'] ?? null); @@ -62,7 +64,7 @@ class App // POST else if ($method == 'POST') { if (str_ends_with($path, '/validate')) { - $formPath = $contentRoot . str_replace('/validate', '', $path); + $this->formPath = $formPath = $contentRoot . str_replace('/validate', '', $path); $fields = $this->buildFields($formPath, $_GET['page'] ?? null); @@ -70,7 +72,7 @@ class App } else if (str_ends_with($path, '/submit')) { - $formPath = $contentRoot . str_replace('/submit', '', $path); + $this->formPath = $formPath = $contentRoot . str_replace('/submit', '', $path); $fields = $this->buildFields($formPath); @@ -268,6 +270,11 @@ class App $field['is_valid'] = false; } + $validationFunctionName = 'validate_' . basename($this->formPath) . '_' . $field['name']; + if (function_exists($validationFunctionName)) { + $field = call_user_func($validationFunctionName, $field, $value); + } + return $field; } @@ -288,6 +295,12 @@ class App $config['api']['keys'] = $apiKeys; } + // include custom functions + $functionsFile = $currentDirectory . '/config/functions.php'; + if (file_exists($functionsFile)) { + include_once $functionsFile; + } + if (str_ends_with($currentDirectory, '/' . basename($_ENV['app']['contentFolderPath'])) || $currentDirectory == '/') { break; } diff --git a/tests/Test.php b/tests/Test.php index 37e5f65..b8a02f3 100644 --- a/tests/Test.php +++ b/tests/Test.php @@ -22,6 +22,7 @@ class Test extends TestCase @mkdir($contentRoot . '/config'); @mkdir($contentRoot . '/customername/formname/config'); @mkdir($contentRoot . '/customername/formname/fields'); + @mkdir($contentRoot . '/customername/pagedform/config'); @mkdir($contentRoot . '/customername/pagedform/fields'); # root config @@ -78,6 +79,18 @@ class Test extends TestCase data-value = 123 EOF); + file_put_contents($contentRoot . '/customername/formname/config/functions.php', ' + assertArrayNotHasKey('second', $body); $this->assertEquals(true, $body['date']['is_valid']); $this->assertEquals(true, $body['text']['is_valid']); + + // valid response validation_function + $response = $this->request('POST', 'customername/formname/submit?key=' . $this->apiKey, [ + 'form_params' => [ + 'name' => 'Adelbert', + 'email' => 'EMAIL', + 'date' => 'DATE', + ], + ]); + $body = json_decode((string)$response->getBody(), true); + $this->assertArrayNotHasKey('error', $body); + $body = $body['data']; + $this->assertEquals(true, $body['name']['is_valid']); + $this->assertEquals(true, $body['email']['is_valid']); + $this->assertEquals(true, $body['date']['is_valid']); + + // invalid response validation_function + $response = $this->request('POST', 'customername/formname/submit?key=' . $this->apiKey, [ + 'form_params' => [ + 'name' => 'NAME', + 'email' => 'EMAIL', + 'date' => 'DATE', + ], + ]); + $body = json_decode((string)$response->getBody(), true); + $this->assertArrayHasKey('error', $body); + $body = $body['data']; + $this->assertEquals(false, $body['name']['is_valid']); + $this->assertEquals(true, $body['email']['is_valid']); + $this->assertEquals(true, $body['date']['is_valid']); } } -- cgit v1.2.3