summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--composer.json21
-rw-r--r--public/index.php8
-rw-r--r--src/App.php79
-rw-r--r--templates/config/templates/email/email.html2
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>
+