<?php
/*
* This file has been created by developers from BitBag.
* Feel free to contact us once you face any issues or want to start
* another great project.
* You can find more information about us on https://bitbag.io and write us
* an email on hello@bitbag.io.
*/
declare(strict_types=1);
namespace BitBag\SyliusB2BPlugin\Form\Factory;
use BitBag\SyliusB2BPlugin\Entity\OrderInterface;
use Sylius\Bundle\ResourceBundle\Controller\RequestConfiguration;
use Sylius\Bundle\ResourceBundle\Controller\ResourceFormFactoryInterface;
use Sylius\Component\Resource\Model\ResourceInterface;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\Form\FormInterface;
final class ResourceFormFactory implements ResourceFormFactoryInterface
{
private FormFactoryInterface $formFactory;
public function __construct(FormFactoryInterface $formFactory)
{
$this->formFactory = $formFactory;
}
public function create(RequestConfiguration $requestConfiguration, ResourceInterface $resource): FormInterface
{
$formType = (string) $requestConfiguration->getFormType();
$formOptions = $requestConfiguration->getFormOptions();
/** @var array|string $validationGroups */
$validationGroups = $formOptions['validation_groups'] ?? [];
$defaultValidationGroups = 'sylius_shipping_address_update';
$isValidationGroupInArray = is_array($validationGroups) && in_array($defaultValidationGroups, $validationGroups, true);
$isValidationGroupContainsDefault = $isValidationGroupInArray || $defaultValidationGroups === $validationGroups;
$isOrder = $resource instanceof OrderInterface;
if ($isOrder && $isValidationGroupContainsDefault && null !== $resource->getOrganization()) {
$formOptions['validation_groups'] = ['bitbag_organization_shipping_address'];
}
if ($requestConfiguration->isHtmlRequest()) {
return $this->formFactory->create($formType, $resource, $formOptions);
}
return $this->formFactory->createNamed('', $formType, $resource, array_merge($formOptions, ['csrf_protection' => false]));
}
}