summaryrefslogtreecommitdiff
path: root/Readme.md
blob: fe7b71f54d0719040c4e5b43ed60c21da6ed9940 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Flat-File Forms
===

Forms and Submissions managed flat-file

Callable via REST-API


## Directory Structure

- config.yaml (main config)
- $contentFolder/
  - config/
  - $group/
- $pluginsFolder/
  - $pluginName/
    - Plugin.php

### config consists of

- config/
  - config.yaml
  - functions.php

### $group consists of

- $group/
  - config/
  - $form/

### $form consists of

- $form/
  - config/
  - entries/
    - $year
      - $month
        - $day
          - \$year\$month\$day_\$hour\$minute_\$hash.yaml
  - fields/
    - _fields.yaml
    - email.yaml
    - name.yaml


## config

adjust $contentFolder and $pluginsFolder path in main config.yaml

`config.yaml` with config values in $contentFolder/config/  
overwritten by config.yaml in $group/config/  
overwritten by config.yaml in $form/config/

`functions.php` with custom code in $contentFolder/config/  
included if exists in subsequent config folders


## REST-API

`localhost:3000/$group/$group/$form`

`GET` `...$form/fields`  
`GET` `...$form/entries?dateFrom=$date`

`POST` `...$form/validate`  
`POST` `...$form/submit`


## Plugins

1. create `$pluginName` directory in $pluginsFolder
2. create `Plugin.php` with `FlatFileForms\Plugins\$pluginName` namespace and `Plugin` class
3. write code in `__construct` method


## Docker

*docker-compose.yml*
```yaml
version: "3.7"

services:
  app:
    build: .
    volumes:
      - "./config.yaml:/app/config.yaml:ro"
      - "./content:/app/content"
      - "./plugins:/app/plugins"

  nginx:
    image: nginx:alpine
    ports:
      - "8080:80"
    environment:
      - "PHP_SERVICE_DOCUMENT_ROOT=/app/public"
      - "PHP_SERVICE_NAME=app"
      - "PHP_SERVICE_PORT=9000"
    volumes:
      - "./default.conf.template:/etc/nginx/templates/default.conf.template"
```

*default.conf.template*
```nginx
server {
  location / {
    try_files $uri $uri/ /index.php?$args;
  }

  location ~ \.php$ {
    root ${PHP_SERVICE_DOCUMENT_ROOT}; # ex.: /app/public

    fastcgi_pass ${PHP_SERVICE_NAME}:${PHP_SERVICE_PORT}; # ex.: php:9000

    include fastcgi.conf;
  }
}
```

then run

```
touch config.yaml # copy from config.example.yaml
mkdir content
mkdir plugins

docker-compose up -d
```