vendor/ezsystems/repository-forms/lib/Content/View/Filter/ContentEditViewFilter.php line 69

Open in your IDE?
  1. <?php
  2. /**
  3.  * @copyright Copyright (C) eZ Systems AS. All rights reserved.
  4.  * @license For full copyright and license information view LICENSE file distributed with this source code.
  5.  */
  6. declare(strict_types=1);
  7. namespace EzSystems\RepositoryForms\Content\View\Filter;
  8. use eZ\Publish\API\Repository\ContentService;
  9. use eZ\Publish\API\Repository\ContentTypeService;
  10. use eZ\Publish\API\Repository\Values\Content\Content;
  11. use eZ\Publish\API\Repository\Values\ContentType\ContentType;
  12. use eZ\Publish\Core\MVC\Symfony\Locale\UserLanguagePreferenceProviderInterface;
  13. use eZ\Publish\Core\MVC\Symfony\View\Event\FilterViewBuilderParametersEvent;
  14. use eZ\Publish\Core\MVC\Symfony\View\ViewEvents;
  15. use EzSystems\RepositoryForms\Data\Content\ContentUpdateData;
  16. use EzSystems\RepositoryForms\Data\Mapper\ContentUpdateMapper;
  17. use EzSystems\RepositoryForms\Form\Type\Content\ContentEditType;
  18. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  19. use Symfony\Component\Form\FormFactoryInterface;
  20. use Symfony\Component\Form\FormInterface;
  21. class ContentEditViewFilter implements EventSubscriberInterface
  22. {
  23.     /** @var \eZ\Publish\API\Repository\ContentService */
  24.     private $contentService;
  25.     /** @var \eZ\Publish\API\Repository\ContentTypeService */
  26.     private $contentTypeService;
  27.     /** @var \Symfony\Component\Form\FormFactoryInterface */
  28.     private $formFactory;
  29.     /** @var \eZ\Publish\Core\MVC\Symfony\Locale\UserLanguagePreferenceProviderInterface */
  30.     private $languagePreferenceProvider;
  31.     /**
  32.      * @param \eZ\Publish\API\Repository\ContentService $contentService
  33.      * @param \eZ\Publish\API\Repository\ContentTypeService $contentTypeService
  34.      * @param \Symfony\Component\Form\FormFactoryInterface $formFactory
  35.      * @param \eZ\Publish\Core\MVC\Symfony\Locale\UserLanguagePreferenceProviderInterface $languagePreferenceProvider
  36.      */
  37.     public function __construct(
  38.         ContentService $contentService,
  39.         ContentTypeService $contentTypeService,
  40.         FormFactoryInterface $formFactory,
  41.         UserLanguagePreferenceProviderInterface $languagePreferenceProvider
  42.     ) {
  43.         $this->contentService $contentService;
  44.         $this->contentTypeService $contentTypeService;
  45.         $this->formFactory $formFactory;
  46.         $this->languagePreferenceProvider $languagePreferenceProvider;
  47.     }
  48.     public static function getSubscribedEvents()
  49.     {
  50.         return [ViewEvents::FILTER_BUILDER_PARAMETERS => 'handleContentEditForm'];
  51.     }
  52.     /**
  53.      * @param \eZ\Publish\Core\MVC\Symfony\View\Event\FilterViewBuilderParametersEvent $event
  54.      *
  55.      * @throws \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
  56.      * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException
  57.      * @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException
  58.      */
  59.     public function handleContentEditForm(FilterViewBuilderParametersEvent $event)
  60.     {
  61.         if ('ez_content_edit:editVersionDraftAction' !== $event->getParameters()->get('_controller')) {
  62.             return;
  63.         }
  64.         $request $event->getRequest();
  65.         $languageCode $request->attributes->get('language');
  66.         $contentDraft $this->contentService->loadContent(
  67.             $request->attributes->get('contentId'),
  68.             [$languageCode], // @todo: rename to languageCode in 3.0
  69.             $request->attributes->get('versionNo')
  70.         );
  71.         $contentType $this->contentTypeService->loadContentType(
  72.             $contentDraft->contentInfo->contentTypeId,
  73.             $this->languagePreferenceProvider->getPreferredLanguages()
  74.         );
  75.         $contentUpdate $this->resolveContentEditData($contentDraft$languageCode$contentType);
  76.         $form $this->resolveContentEditForm(
  77.             $contentUpdate,
  78.             $languageCode,
  79.             $contentDraft
  80.         );
  81.         $event->getParameters()->add(['form' => $form->handleRequest($request)]);
  82.     }
  83.     /**
  84.      * @param \eZ\Publish\API\Repository\Values\Content\Content $content
  85.      * @param string $languageCode
  86.      * @param \eZ\Publish\API\Repository\Values\ContentType\ContentType $contentType
  87.      *
  88.      * @return \EzSystems\RepositoryForms\Data\Content\ContentUpdateData
  89.      */
  90.     private function resolveContentEditData(
  91.         Content $content,
  92.         string $languageCode,
  93.         ContentType $contentType
  94.     ): ContentUpdateData {
  95.         $contentUpdateMapper = new ContentUpdateMapper();
  96.         return $contentUpdateMapper->mapToFormData($content, [
  97.             'languageCode' => $languageCode,
  98.             'contentType' => $contentType,
  99.         ]);
  100.     }
  101.     /**
  102.      * @param \EzSystems\RepositoryForms\Data\Content\ContentUpdateData $contentUpdate
  103.      * @param string $languageCode
  104.      * @param \eZ\Publish\API\Repository\Values\Content\Content $content
  105.      *
  106.      * @return \Symfony\Component\Form\FormInterface
  107.      */
  108.     private function resolveContentEditForm(
  109.         ContentUpdateData $contentUpdate,
  110.         string $languageCode,
  111.         Content $content
  112.     ): FormInterface {
  113.         return $this->formFactory->create(
  114.             ContentEditType::class,
  115.             $contentUpdate,
  116.             [
  117.                 'languageCode' => $languageCode,
  118.                 'mainLanguageCode' => $content->contentInfo->mainLanguageCode,
  119.                 'drafts_enabled' => true,
  120.             ]
  121.         );
  122.     }
  123. }