diff options
author | Daniel Weipert <code@drogueronin.de> | 2021-12-13 21:15:46 +0100 |
---|---|---|
committer | Daniel Weipert <code@drogueronin.de> | 2022-01-10 11:29:13 +0100 |
commit | 37e2bc4f55eed597cf61b9513df097d1850691e6 (patch) | |
tree | 267aedb4ac468bce9d63125a171d028611d45388 | |
parent | 8fb7768af3f43c524f91d80c46c99db0d88e40ab (diff) |
Add composer and routes
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | composer.json | 21 | ||||
-rw-r--r-- | public/index.php | 8 | ||||
-rw-r--r-- | src/App.php | 79 | ||||
-rw-r--r-- | templates/config/templates/email/email.html | 2 |
5 files changed, 113 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49b567d --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/vendor/ +/content/ + diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..50e771c --- /dev/null +++ b/composer.json @@ -0,0 +1,21 @@ +{ + "name": "flat-file-forms/flat-file-forms", + "type": "project", + "autoload": { + "psr-4": { + "FlatFileForms\\": "src/" + } + }, + "authors": [ + { + "name": "Daniel Weipert", + "email": "code@drogueronin.de" + } + ], + "require": { + "twig/twig": "^3.3", + "symfony/http-foundation": "^6.0", + "symfony/routing": "^6.0", + "yosymfony/toml": "^1.0" + } +} diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..1cd408e --- /dev/null +++ b/public/index.php @@ -0,0 +1,8 @@ +<?php + +use FlatFileForms\App; + +require_once dirname(__DIR__) . '/vendor/autoload.php'; + +new App(); + diff --git a/src/App.php b/src/App.php new file mode 100644 index 0000000..c0df751 --- /dev/null +++ b/src/App.php @@ -0,0 +1,79 @@ +<?php + +namespace FlatFileForms; + +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Yosymfony\Toml\Toml; + +class App +{ + private array $routes = [ + + ]; + + /** + * App constructor. + */ + public function __construct() + { + $request = Request::createFromGlobals(); + $response = new Response(); + + $content = [ + 'data' => '', + ]; + $contentRoot = dirname(__DIR__) . '/content'; + + $method = $request->getMethod(); + $path = $request->getPathInfo(); + + // GET + if ($method == 'GET') { + if (str_ends_with($path, '/fields')) { + $content['data'] = Toml::parseFile($contentRoot . $path . '/_fields.toml'); + } + else { + $content['data'] = Toml::parseFile($contentRoot . $path . '.toml'); + } + } + + // POST + else if ($method == 'POST') { + if (str_ends_with($path, 'submit')) { + $formPath = $contentRoot . str_replace('/submit', '', $path); + + // build fields + $fields = $this->buildFields($formPath); + + foreach ($fields as $field) { + if ($field['required'] ?? false) { + $content['error'] = 'REQUIRED!'; + } + } + + $content['data'] = $fields; + $content['POST'] = $_POST; + } + } + + $response->headers->set('Content-Type', 'application/json'); + $response->setContent(json_encode($content)); + $response->send(); + } + + /** + * @param string $formPath + */ + public function buildFields($formPath) + { + $fields = Toml::parseFile($formPath . '/fields/_fields.toml')['field'] ?? []; + foreach ($fields as $key => $field) { + $field = array_merge($field, Toml::parseFile($formPath . '/fields/' . $field['file'])); + $fields[$key] = $field; + } + + return $fields; + } +} + diff --git a/templates/config/templates/email/email.html b/templates/config/templates/email/email.html new file mode 100644 index 0000000..3c706b1 --- /dev/null +++ b/templates/config/templates/email/email.html @@ -0,0 +1,2 @@ +<h1>Hello this is E-Mail!</h1> + |