diff --git a/src/Core/Form.php b/src/Core/Form.php new file mode 100644 index 0000000000..7d594482cd --- /dev/null +++ b/src/Core/Form.php @@ -0,0 +1,55 @@ +. +// }}} + +/** + * Handle network public feed + * + * @package GNUsocial + * @category Wrapper + * + * @author Hugo Sales + * @copyright 2020 Free Software Foundation, Inc http://www.fsf.org + * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later + */ + +namespace App\Core; + +use Symfony\Component\Form\Form as SymfForm; +use Symfony\Component\Form\FormFactoryInterface; + +abstract class Form +{ + private static ?FormFactoryInterface $form_factory; + + public static function setFactory($ff): void + { + self::$form_factory = $ff; + } + + public static function create(array $form, + string $type = 'Symfony\Component\Form\Extension\Core\Type\FormType', + array $options = null): SymfForm + { + $fb = self::$form_factory->createBuilder($type, $options ?: ['translation_domain' => false]); + foreach ($form as $f) { + $fb->add(...$f); + } + return $fb->getForm(); + } +} diff --git a/src/Core/GNUsocial.php b/src/Core/GNUsocial.php index 3d3c39d218..aca8a1d9f3 100644 --- a/src/Core/GNUsocial.php +++ b/src/Core/GNUsocial.php @@ -49,6 +49,7 @@ use Psr\Log\LoggerInterface; use Symfony\Component\Console\Event\ConsoleCommandEvent; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\Routing\RouterInterface; @@ -60,6 +61,7 @@ class GNUsocial implements EventSubscriberInterface protected TranslatorInterface $translator; protected EntityManagerInterface $entity_manager; protected RouterInterface $router; + protected FormFactoryInterface $form_factory; /** * Symfony dependency injection gives us access to these services @@ -67,12 +69,14 @@ class GNUsocial implements EventSubscriberInterface public function __construct(LoggerInterface $logger, TranslatorInterface $translator, EntityManagerInterface $em, - RouterInterface $router) + RouterInterface $router, + FormFactoryInterface $ff) { $this->logger = $logger; $this->translator = $translator; $this->entity_manager = $em; $this->router = $router; + $this->form_factory = $ff; } /** @@ -87,6 +91,7 @@ class GNUsocial implements EventSubscriberInterface I18nHelper::setTranslator($this->translator); DB::setManager($this->entity_manager); Router::setRouter($this->router); + Form::setFactory($this->form_factory); DefaultSettings::setDefaults(); ModulesManager::loadModules();