open-orchestra/open-orchestra-cms-bundle

View on GitHub
Backoffice/EventSubscriber/UpdateReferenceSubscriber.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace OpenOrchestra\Backoffice\EventSubscriber;

use OpenOrchestra\ModelInterface\ContentEvents;
use OpenOrchestra\ModelInterface\Event\ContentEvent;
use OpenOrchestra\ModelInterface\Event\NodeEvent;
use OpenOrchestra\ModelInterface\Event\TrashcanEvent;
use OpenOrchestra\ModelInterface\NodeEvents;
use OpenOrchestra\ModelInterface\TrashcanEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use OpenOrchestra\ModelInterface\BlockEvents;
use OpenOrchestra\ModelInterface\Event\BlockEvent;
use OpenOrchestra\Backoffice\Reference\ReferenceManager;
use OpenOrchestra\ModelInterface\ContentTypeEvents;
use OpenOrchestra\ModelInterface\Event\ContentTypeEvent;

/**
 * Class UpdateReferenceSubscriber
 */
class UpdateReferenceSubscriber implements EventSubscriberInterface
{
    protected $referenceManager;

    /**
     * @param ReferenceManager $referenceManager
     */
    public function __construct(ReferenceManager $referenceManager)
    {
        $this->referenceManager = $referenceManager;
    }

    /**
     * @param BlockEvent $event
     */
    public function updateReferencesToBlock(BlockEvent $event)
    {
        $block = $event->getBlock();
        $this->referenceManager->updateReferencesToEntity($block);
    }

    /**
     * @param BlockEvent $event
     */
    public function removeReferencesToBlock(BlockEvent $event)
    {
        $block = $event->getBlock();
        $this->referenceManager->removeReferencesToEntity($block);
    }

    /**
     * @param ContentEvent $event
     */
    public function updateReferencesToContent(ContentEvent $event)
    {
        $content = $event->getContent();
        $this->referenceManager->updateReferencesToEntity($content);
    }

    /**
     * @param ContentTypeEvent $event
     */
    public function updateReferencesToContentType(ContentTypeEvent $event)
    {
        $contentType = $event->getContentType();
        $this->referenceManager->updateReferencesToEntity($contentType);
    }

    /**
     * @param NodeEvent $event
     */
    public function updateReferencesToNode(NodeEvent $event)
    {
        $node = $event->getNode();
        $this->referenceManager->updateReferencesToEntity($node);
    }

    /**
     * @param TrashcanEvent $event
     */
    public function removeReferencesToEntity(TrashcanEvent $event)
    {
        $deletedElement = $event->getDeletedEntity();
        $this->referenceManager->removeReferencesToEntity($deletedElement);
    }

    /**
     * @return array The event names to listen to
     */
    public static function getSubscribedEvents()
    {
        return array(
            BlockEvents::POST_BLOCK_CREATE => 'updateReferencesToBlock',
            BlockEvents::POST_BLOCK_UPDATE => 'updateReferencesToBlock',
            BlockEvents::POST_BLOCK_DELETE => 'removeReferencesToBlock',
            ContentEvents::CONTENT_UPDATE => 'updateReferencesToContent',
            ContentEvents::CONTENT_CREATION => 'updateReferencesToContent',
            ContentEvents::CONTENT_DUPLICATE => 'updateReferencesToContent',
            NodeEvents::NODE_UPDATE => 'updateReferencesToNode',
            NodeEvents::NODE_CREATION => 'updateReferencesToNode',
            ContentTypeEvents::CONTENT_TYPE_CREATE => 'updateReferencesToContentType',
            ContentTypeEvents::CONTENT_TYPE_UPDATE => 'updateReferencesToContentType',
            TrashcanEvents::TRASHCAN_REMOVE_ENTITY => 'removeReferencesToEntity',
        );
    }
}