src/UI/Admin/Controller/SiteController.php line 94

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\UI\Admin\Controller;
  4. use App\Application\PaymentGatewayConfig\Command\EditPaymentGatewayConfig\EditPaymentGatewayConfigCommand;
  5. use App\Application\Site\Command\ActivateSite\ActivateSiteCommand;
  6. use App\Application\Site\Command\EditSite\EditSiteCommand;
  7. use App\Application\Site\Command\EditSiteBillingInformation\EditSiteBillingInformationCommand;
  8. use App\Application\Site\Command\RemoveSite\RemoveSiteCommand;
  9. use App\Domain\PaymentGateway\Model\IbanXSConfiguration;
  10. use App\Domain\PaymentGateway\Model\YapilyPayConfiguration;
  11. use App\Domain\PaymentGateway\Model\DimocoPayConfiguration;
  12. use App\Domain\Site\Model\Site;
  13. use App\Infrastructure\Shared\Bus\Command\CommandBusInterface;
  14. use App\UI\Admin\ActionStackFactory\SiteActionStackFactory;
  15. use App\UI\Admin\Datatable\SiteDatatable;
  16. use App\UI\Admin\Form\Type\PaymentGateway\PaymentGatewayConfigEditType;
  17. use App\UI\Admin\Form\Type\Site\SiteCreateType;
  18. use App\UI\Admin\Form\Type\Site\SiteEditBillingInformationType;
  19. use App\UI\Admin\Form\Type\Site\SiteEditIntegrationDataType;
  20. use App\UI\Admin\Form\Type\Site\SiteEditType;
  21. use App\UI\Shared\Controller\AbstractController;
  22. use App\UI\Shared\Status\BooleanStatus;
  23. use Sg\DatatablesBundle\Response\DatatableResponse;
  24. use Symfony\Component\HttpFoundation\Request;
  25. use Symfony\Component\HttpFoundation\Response;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. use Symfony\Component\Serializer\SerializerInterface;
  28. #[Route('/sites')]
  29. class SiteController extends AbstractController
  30. {
  31.     #[Route(path'/'name'admin_sites')]
  32.     public function index(
  33.         Request $request,
  34.         SiteDatatable $datatable,
  35.         DatatableResponse $datatableResponse
  36.     ): Response {
  37.         $isAjax $request->isXmlHttpRequest();
  38.         $datatable->buildDatatable();
  39.         if ($isAjax) {
  40.             $datatableResponse->setDatatable($datatable);
  41.             $datatableResponse->getDatatableQueryBuilder();
  42.             return $datatableResponse->getResponse();
  43.         }
  44.         return $this->render('admin/site/index.html.twig', [
  45.             'datatable' => $datatable,
  46.         ]);
  47.     }
  48.     #[Route(path'/create'name'admin_sites_create')]
  49.     public function create(Request $requestCommandBusInterface $commandBus): Response
  50.     {
  51.         return $this->handleForm(
  52.             $request,
  53.             $commandBus,
  54.             SiteCreateType::class,
  55.             null,
  56.             [],
  57.             'admin/site/create.html.twig',
  58.             [],
  59.             'admin_sites_edit'
  60.         );
  61.     }
  62.     #[Route(path'/{id}/edit'name'admin_sites_edit')]
  63.     public function edit(Request $requestSite $siteCommandBusInterface $commandBus): Response
  64.     {
  65.         return $this->handleForm(
  66.             $request,
  67.             $commandBus,
  68.             SiteEditType::class,
  69.             new EditSiteCommand(
  70.                 (string) $site->getId(),
  71.                 $site->getName(),
  72.                 $site->getDescription(),
  73.                 (string) $site->getMerchant()->getId()
  74.             ),
  75.             [],
  76.             'admin/site/edit.html.twig',
  77.             [
  78.                 'site' => $site,
  79.             ],
  80.         );
  81.     }
  82.     #[Route(path'/{id}/edit-billing-information'name'admin_sites_edit_billing_information')]
  83.     public function editBillingInformation(Request $requestSite $siteCommandBusInterface $commandBus): Response
  84.     {
  85.         return $this->handleForm(
  86.             $request,
  87.             $commandBus,
  88.             SiteEditBillingInformationType::class,
  89.             new EditSiteBillingInformationCommand(
  90.                 (string) $site->getId(),
  91.                 $site->getBillingInformation()->getName(),
  92.                 $site->getBillingInformation()->getCountry(),
  93.                 $site->getBillingInformation()->getCity(),
  94.                 $site->getBillingInformation()->getStreet(),
  95.                 $site->getBillingInformation()->getStreetNumber(),
  96.                 $site->getBillingInformation()->getPostalCode(),
  97.                 $site->getBillingInformation()->getIban(),
  98.                 $site->getBillingInformation()->getIsBankWebhook()
  99.             ),
  100.             [
  101.                 'action' => $this->generateUrl('admin_sites_edit_billing_information', ['id' => $site->getId()]),
  102.             ],
  103.             'admin/site/_edit_billing_information.html.twig',
  104.             [
  105.                 'site' => $site,
  106.             ],
  107.         );
  108.     }
  109.     #[Route(path'/{id}/edit-payment-gateway-config'name'admin_sites_edit_payment_gateway_config')]
  110.     public function editPaymentGatewayConfig(
  111.         Request $request,
  112.         Site $site,
  113.         CommandBusInterface $commandBus,
  114.         SerializerInterface $serializer
  115.     ): Response {
  116.         $paymentGatewayConfig $site->getPaymentGatewayConfig();
  117.         $factoryName $paymentGatewayConfig->getFactoryName();
  118.         $configArray $paymentGatewayConfig->getConfig();
  119.         $config null;
  120.         if (is_array($configArray) && count($configArray) > 0) {
  121.             // choose correct DTO/domain config class based on factory name
  122.             switch ($factoryName) {
  123.                 case 'iban_xs':
  124.                     $targetClass IbanXSConfiguration::class;
  125.                     break;
  126.                 case 'yapily_pay':
  127.                     $targetClass YapilyPayConfiguration::class;
  128.                     break;
  129.                 case 'dimoco_pay':
  130.                     $targetClass DimocoPayConfiguration::class;
  131.                     break;
  132.                 default:
  133.                     $targetClass null;
  134.             }
  135.             if ($targetClass) {
  136.                 $config $serializer->deserialize(json_encode($configArray), $targetClass'json');
  137.             }
  138.         }
  139.         return $this->handleForm(
  140.             $request,
  141.             $commandBus,
  142.             PaymentGatewayConfigEditType::class,
  143.             new EditPaymentGatewayConfigCommand(
  144.                 (string) $paymentGatewayConfig->getId(),
  145.                 $paymentGatewayConfig->getFactoryName(),
  146.                 $config
  147.             ),
  148.             [
  149.                 'action' => $this->generateUrl('admin_sites_edit_payment_gateway_config', ['id' => $site->getId()]),
  150.             ],
  151.             'admin/site/_edit_payment_gateway_config.html.twig',
  152.             [
  153.                 'site' => $site,
  154.             ],
  155.         );
  156.     }
  157.     #[Route(path'/{id}/edit-integration-data'name'admin_sites_edit_integration_data')]
  158.     public function editIntegrationData(Site $site): Response
  159.     {
  160.         $form $this->createForm(SiteEditIntegrationDataType::class, [
  161.             'id' => $site->getId(),
  162.             'password' => $site->getPassword(),
  163.             'secret' => $site->getSecret(),
  164.         ], [
  165.             'action' => $this->generateUrl('admin_sites_edit_integration_data', [
  166.                 'id' => $site->getId(),
  167.             ]),
  168.         ]);
  169.         return $this->render('admin/site/_edit_integration_data.html.twig', [
  170.             'form' => $form->createView(),
  171.             'site' => $site,
  172.         ]);
  173.     }
  174.     #[Route(path'/{id}/status'name'admin_sites_status')]
  175.     public function status(
  176.         Site $site,
  177.         SiteActionStackFactory $siteActionStackFactory
  178.     ): Response {
  179.         return $this->render('admin/site/status.html.twig', [
  180.             'site' => $site,
  181.             'status' => BooleanStatus::getHtmlStatus($site->isActive()),
  182.             'actionStack' => $siteActionStackFactory->create($site),
  183.         ]);
  184.     }
  185.     #[Route(path'/{id}/remove'name'admin_sites_remove')]
  186.     public function remove(Site $siteCommandBusInterface $commandBus): Response
  187.     {
  188.         try {
  189.             $commandBus->dispatch(new RemoveSiteCommand((string) $site->getId()));
  190.         } catch (\Exception $exception) {
  191.             return $this->createErrorJsonResponse($exception->getMessage());
  192.         }
  193.         return new Response(nullResponse::HTTP_NO_CONTENT);
  194.     }
  195.     #[Route(path'/{id}/restore'name'admin_sites_restore')]
  196.     public function restore(Site $siteCommandBusInterface $commandBus): Response
  197.     {
  198.         try {
  199.             $commandBus->dispatch(new ActivateSiteCommand((string) $site->getId()));
  200.         } catch (\Exception $exception) {
  201.             return $this->createErrorJsonResponse($exception->getMessage());
  202.         }
  203.         return new Response(nullResponse::HTTP_NO_CONTENT);
  204.     }
  205. }