summaryrefslogtreecommitdiff
path: root/Readme.md
blob: bd67538a4fcf2f4074f9535d05e7bd3f518e82b0 (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
128
129
130
131
132
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
```


## Examples

Set `contentFolderPath` in root `config.yaml` to `./examples/$example/content`, `pluginsFolderPath` to `./examples/$example/plugins` and run the app.