formPath . '/fields/_fields.toml'); $fields = []; // if a page is requested if ($page) { if (! isset($parsed['page'])) { throw new \Exception('Form has no pages'); } if (! isset($parsed['page'][$page])) { throw new \Exception('Form has no page ' . $page); } $fields = $this->buildSinglePageFields($parsed['page'][$page]); } // else get all fields else { // if form is paged if (isset($parsed['page'])) { $pages = $parsed['page']; foreach ($pages as $pageKey => $pageFields) { $fields[$pageKey] = $this->buildSinglePageFields($pageFields); } } // if form is not paged else { foreach ($parsed['field'] as $key => $field) { $fields[$key] = $this->buildSingleField($key, $field); } } } return $fields; } public function buildSinglePageFields(array $pageFields): array { $fields = []; if (! empty($pageFields['file'])) { $pageFields = array_replace_recursive($pageFields, Toml::parseFile($this->formPath . '/fields/' . $pageFields['file'])); } foreach ($pageFields['field'] as $key => $field) { $fields[$key] = $this->buildSingleField($key, $field); } return $fields; } public function buildSingleField(string $key, array $field): array { if (! empty($field['file'])) { $field = array_replace_recursive($field, Toml::parseFile($this->formPath . '/fields/' . $field['file'])); } if (empty($field['name'])) { $field['name'] = $key; } return $field; } }