open-orchestra/open-orchestra-media-admin-bundle

View on GitHub
MediaAdmin/EventSubscriber/CreateRootFolderSubscriber.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace OpenOrchestra\MediaAdmin\EventSubscriber;

use Doctrine\Common\Persistence\ObjectManager;
use OpenOrchestra\Media\Model\FolderInterface;
use OpenOrchestra\ModelInterface\Event\SiteEvent;
use OpenOrchestra\ModelInterface\SiteEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Translation\TranslatorInterface;

/**
 * Class CreateRootFolderSubscriber
 */
class CreateRootFolderSubscriber implements EventSubscriberInterface
{

    protected $repositoryTemplate;
    protected $objectManager;
    protected $translator;
    protected $folderClass;

    /**
     * @param ObjectManager       $objectManager
     * @param TranslatorInterface $translator
     * @param string              $folderClass
     * @param array               $backLanguages
     */
    public function __construct(
        ObjectManager $objectManager,
        TranslatorInterface $translator,
        $folderClass,
        array $backLanguages
    ) {
        $this->objectManager = $objectManager;
        $this->translator = $translator;
        $this->folderClass = $folderClass;
        $this->backLanguages = $backLanguages;
    }

    /**
     * @param SiteEvent $siteEvent
     */
    public function createRootFolder(SiteEvent $siteEvent)
    {
        $site = $siteEvent->getSite();
        /** @var FolderInterface $folder */
        $folder = new $this->folderClass();
        $folder->setSiteId($site->getSiteId());
        $name = $this->translator->trans('open_orchestra_media_admin.folder.root_name');
        foreach ($this->backLanguages as $language) {
            $folder->addName($language, $name);
        }
        $this->objectManager->persist($folder);
        $this->objectManager->flush();
    }

    /**
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return array(
            SiteEvents::SITE_CREATE => 'createRootFolder',
        );
    }
}