%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/bbw/farmaci/kritik-portale/module/Basis/src/Basis/EventBus/
Upload File :
Create Path :
Current File : /var/www/html/bbw/farmaci/kritik-portale/module/Basis/src/Basis/EventBus/EventBus.php

<?php
/**
 * Created by PhpStorm.
 * User: juliangilles
 * Date: 17.03.14
 * Time: 11:49
 */

namespace Basis\EventBus;

use Basis\Model\EventBasis,
    Zend\ServiceManager\FactoryInterface,
    Zend\ServiceManager\ServiceLocatorInterface,
    Zend\ServiceManager\ServiceManager;

class EventBus implements FactoryInterface
{
    /**
     * @var ServiceManager
     */
    protected $_serviceLocator;

    protected $_handlers = array();

    public function createService(ServiceLocatorInterface $serviceLocator)
    {
        $this->_serviceLocator = $serviceLocator;
        $config = $serviceLocator->get('Config');
        $eventHandlerProviders = $config['event_sourcing']['event_handler_providers'];

        foreach ($eventHandlerProviders as $eventHandlerProvider) {
            if ($serviceLocator->has($eventHandlerProvider)) {
                $eventHandlerProvider = $serviceLocator->get($eventHandlerProvider);
            } else {
                $eventHandlerProvider = new $eventHandlerProvider();
            }
            foreach ($eventHandlerProvider->getEventHandlers() as $eventHandlerClass) {
                if ($serviceLocator->has($eventHandlerClass)) {
                    $eventHandler = $serviceLocator->get($eventHandlerClass);
                } else {
                    $eventHandler = new $eventHandlerClass();
                }
                if ($eventHandler instanceof \Basis\Handler\HandlerInterface) {
                    $this->addHandler($eventHandler);
                }
            }
        }
        return $this;
    }

    private function addHandler($handler)
    {
        $this->_handlers[] = $handler;
    }

    public function publish(EventBasis $object)
    {
        $eventsTmp = $object->getEvents();
        $events = array();
        foreach ($eventsTmp as $event) {
            $event->setEntityId($object->getId());
            $events[] = $event;
        }
        $object->setEvents($events);

        foreach ($this->_handlers as $handler) {
            $handler->setDatabaseAdapter($this->_serviceLocator->get("viewsDB"));
            $handler->handle($events);
        }
    }

    public function publishEvents(array $events)
    {
        foreach ($this->_handlers as $handler) {
            $handler->setDatabaseAdapter($this->_serviceLocator->get("viewsDB"));
            $handler->handle($events);
        }
    }
}

Zerion Mini Shell 1.0