createFormForPage($page, $name, $form); } /** * @param PageInterface $page * @param string $name * @param array $form * @return FormInterface|null */ public function createFormForPage(PageInterface $page, string $name, array $form): ?FormInterface { // Fire event $grav = Grav::instance(); $grav->fireEvent('onBeforeFlexFormInitialize', new Event(['page' => $page, 'name' => $name, 'form' => &$form])); $page->addForms([$form], true); $formFlex = $form['flex'] ?? []; $type = $formFlex['type'] ?? null; $key = $formFlex['key'] ?? null; if (null !== $key && !is_string($key)) { $key = (string)$key; } $layout = $formFlex['layout'] ?? $name; /** @var Flex $flex */ $flex = Grav::instance()['flex_objects']; if (is_string($type)) { $directory = $flex->getDirectory($type); if (!$directory) { return null; } $create = $form['actions']['create'] ?? true; $edit = $form['actions']['edit'] ?? true; $object = $edit && null !== $key ? $directory->getObject($key) : null; if ($object) { if (is_callable([$object, 'refresh'])) { $object->refresh(); } } elseif ($create) { $object = $directory->createObject([], $key ?? ''); } } else { $object = $flex->getObject($key); } return $object ? $object->getForm($layout, ['form' => $form]) : null; } }