<?php
/**
* Created by PhpStorm.
* User: albert
* Date: 1/10/18
* Time: 18:35
*/
namespace AWCmsBundle\EventListener;
use AWCmsBundle\Event\ModuleEvent;;
use AWCmsBundle\Modules\Module;
use AWCmsBundle\Modules\ModuleAdderInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class ModuleEventListener implements EventSubscriberInterface
{
/** @var ModuleAdderInterface[] */
private $moduleAdders = [];
/** @var Module[] */
private $modules = [];
public function __construct($moduleAdders = [])
{
$this->moduleAdders = $moduleAdders;
}
/**
* Returns the events to which this class has subscribed.
*
* Return format:
* array(
* array('event' => 'the-event-name', 'method' => 'onEventName', 'class' => 'some-class', 'format' => 'json'),
* array(...),
* )
*
* The class may be omitted if the class wants to subscribe to events of all classes.
* Same goes for the format key.
*
* @return array
*/
public static function getSubscribedEvents()
{
return [
ModuleEvent::TO_POPULATE_EVENT => 'onModuleToPopulate'
];
}
/**
* @param ModuleEvent $event
* @return array||Module[]
*/
public function onModuleToPopulate(ModuleEvent $event)
{
if(!$this->modules) {
$modules = $event->getModules();
foreach ($this->moduleAdders as $moduleAdder) {
$modules = $moduleAdder->addModules($modules);
}
$this->modules = $modules;
}
$event->setModules($this->modules);
return $this->modules;
}
public function addModuleAdder(ModuleAdderInterface $moduleAdder)
{
$this->moduleAdders[] = $moduleAdder;
}
}