vendor/kunstmaan/pagepart-bundle/EventListener/CloneListener.php line 44

Open in your IDE?
  1. <?php
  2. namespace Kunstmaan\PagePartBundle\EventListener;
  3. use Doctrine\ORM\EntityManager;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Kunstmaan\AdminBundle\Event\DeepCloneAndSaveEvent;
  6. use Kunstmaan\PagePartBundle\Entity\PagePartRef;
  7. use Kunstmaan\PagePartBundle\Helper\HasPagePartsInterface;
  8. use Kunstmaan\PagePartBundle\Helper\HasPageTemplateInterface;
  9. use Kunstmaan\PagePartBundle\PagePartConfigurationReader\PagePartConfigurationReaderInterface;
  10. use Kunstmaan\PagePartBundle\PageTemplate\PageTemplateConfigurationService;
  11. /**
  12.  * This event will make sure pageparts are being copied when deepClone is done on an entity implementing hasPagePartsInterface
  13.  */
  14. class CloneListener
  15. {
  16.     /**
  17.      * @var EntityManager|EntityManagerInterface
  18.      */
  19.     private $em;
  20.     /**
  21.      * @var PagePartConfigurationReaderInterface
  22.      */
  23.     private $pagePartReader;
  24.     /**
  25.      * @var PageTemplateConfigurationService
  26.      */
  27.     private $pageTemplateConfiguratiorService;
  28.     public function __construct(
  29.         EntityManagerInterface $em,
  30.         PagePartConfigurationReaderInterface $pagePartReader,
  31.         PageTemplateConfigurationService $pageTemplateConfiguratiorService,
  32.     ) {
  33.         $this->em $em;
  34.         $this->pagePartReader $pagePartReader;
  35.         $this->pageTemplateConfiguratiorService $pageTemplateConfiguratiorService;
  36.     }
  37.     public function postDeepCloneAndSave(DeepCloneAndSaveEvent $event)
  38.     {
  39.         $originalEntity $event->getEntity();
  40.         if ($originalEntity instanceof HasPagePartsInterface) {
  41.             $clonedEntity $event->getClonedEntity();
  42.             $contexts $this->pagePartReader->getPagePartContexts($originalEntity);
  43.             foreach ($contexts as $context) {
  44.                 $this->em->getRepository(PagePartRef::class)->copyPageParts($this->em$originalEntity$clonedEntity$context);
  45.             }
  46.         }
  47.         if ($originalEntity instanceof HasPageTemplateInterface) {
  48.             $clonedEntity $event->getClonedEntity();
  49.             $newPageTemplateConfiguration = clone $this->pageTemplateConfiguratiorService->findOrCreateFor($originalEntity);
  50.             $newPageTemplateConfiguration->setId(null);
  51.             $newPageTemplateConfiguration->setPageId($clonedEntity->getId());
  52.             $this->em->persist($newPageTemplateConfiguration);
  53.         }
  54.     }
  55. }