lib/composer/PageBundle/src/VisualMedia/PageBundle/Manager/BasePageManager.php line 74

Open in your IDE?
  1. <?php
  2. /**
  3.  * Base Page Manager
  4.  *
  5.  * @author Vincent van Waasbergen <v.vanwaasbergen@visualmedia.nl>
  6.  */
  7. namespace VisualMedia\PageBundle\Manager;
  8. use Exception;
  9. use Doctrine\Common\Collections\ArrayCollection;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Doctrine\ORM\Mapping\ClassMetadata;
  12. use Symfony\Component\Serializer\Serializer;
  13. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  14. use Symfony\Contracts\Translation\TranslatorInterface;
  15. use VisualMedia\LisaBundle\Component\ManagerData;
  16. use VisualMedia\PageBundle\Repository\BasePageRepository;
  17. use VisualMedia\PageBundle\Entity\BasePage;
  18. use VisualMedia\PageBundle\Entity\BasePageContent;
  19. use VisualMedia\TranslationBundle\Service\ChannelProvider;
  20. /**
  21.  * Base Page Manager
  22.  */
  23. class BasePageManager extends BasePageRepository
  24. {
  25.     /**
  26.      * @var TranslatorInterface
  27.      */
  28.     protected $translator;
  29.     /**
  30.      * @var ChannelProvider
  31.      */
  32.     protected $channelProvider;
  33.     /**
  34.      * {@inheritdoc}
  35.      */
  36.     public static function getEntityName(): string
  37.     {
  38.         return BasePage::class;
  39.     }
  40.     /**
  41.      * @param TranslatorInterface $translator
  42.      * @param ChannelProvider $channelProvider
  43.      */
  44.     public function initialize(TranslatorInterface $translatorChannelProvider $channelProvider): void
  45.     {
  46.         $this->translator $translator;
  47.         $this->channelProvider $channelProvider;
  48.     }
  49.     /**
  50.      * @param string $key
  51.      * @param array $properties
  52.      * @return BasePage
  53.      */
  54.     public function getOrCreatePage(string $key, array $properties): BasePage
  55.     {
  56.         if (!$this->translator) {
  57.             throw new Exception('Translator is not configured.');
  58.         }
  59.         $slug $this->translator->trans(sprintf('%s.slug'$key), [], 'pages');
  60.         $managerData = new ManagerData([
  61.             static::OPTION_SLUG => $slug,
  62.             static::OPTION_CHANNEL => $channel $this->channelProvider->getCurrentChannel(),
  63.         ]);
  64.         if (null === $page $this->getFirst($managerData)) {
  65.             $normalizer = new ObjectNormalizer();
  66.             $serializer = new Serializer(array($normalizer));
  67.             $page $serializer->denormalize($properties, static::getEntityName());
  68.             $page->channels = new ArrayCollection();
  69.             $page->slug $slug;
  70.             $page->systemPage true;
  71.             if ($channel !== null) {
  72.                 $page->channels->add($channel);
  73.             }
  74.             $content $serializer->denormalize($propertiesBasePageContent::class);
  75.             $content->page $page;
  76.             $content->slug $slug;
  77.             $content->channel $channel;
  78.             $content->locale $locale $this->channelProvider->getCurrentLocale();
  79.             $page->contents->add($content);
  80.             $this->persist($page);
  81.             $this->flush();
  82.         }
  83.         return $page;
  84.     }
  85. }