open-orchestra/open-orchestra-cms-bundle

View on GitHub
Backoffice/Manager/BlockManager.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace OpenOrchestra\Backoffice\Manager;

use Doctrine\Common\Util\Inflector;
use OpenOrchestra\BackofficeBundle\StrategyManager\GenerateFormManager;
use OpenOrchestra\ModelInterface\Model\BlockInterface;

/**
 * Class BlockManager
 */
class BlockManager
{
    protected $blockClass;
    protected $generateFormManager;
    protected $fixedParameters;

    /**
     * Constructor
     *
     * @param string                $blockClass
     * @param GenerateFormManager   $generateFormManager
     * @param array                 $fixedParameters
     */
    public function __construct(
        $blockClass,
        GenerateFormManager $generateFormManager,
        array $fixedParameters
    ){
        $this->blockClass = $blockClass;
        $this->generateFormManager = $generateFormManager;
        $this->fixedParameters = $fixedParameters;
    }

    /**
     * @param string  $component
     * @param string  $siteId
     * @param string  $language
     * @param boolean $isTransverse
     *
     * @return BlockInterface
     */
    public function initializeBlock($component, $siteId, $language, $isTransverse)
    {
        /** @var BlockInterface $block */
        $block = new $this->blockClass();
        $block->setComponent($component);
        $block->setTransverse($isTransverse);
        $block->setSiteId($siteId);
        $block->setLanguage($language);
        $this->setDefaultAttributes($block);

        return $block;
    }

    /**
     * @param BlockInterface $block
     * @param string         $language
     *
     * @return BlockInterface
     */
    public function createToTranslateBlock(BlockInterface $block, $language)
    {
        $block = clone $block;
        $oldLanguage = $block->getLanguage();
        $block->setLanguage($language);
        $block->setLabel($block->getLabel()."[".$oldLanguage."]");

        return $block;
    }

    /**
     * @param BlockInterface $block
     */
    protected function setDefaultAttributes(BlockInterface $block)
    {
        $defaultConfiguration = $this->generateFormManager->getDefaultConfiguration($block);
        foreach ($defaultConfiguration as $key => $value) {
            if (in_array($key, $this->fixedParameters) &&
                method_exists($block, $setter = 'set' . Inflector::classify($key))
            ) {
                $block->$setter($value);
                unset($defaultConfiguration[$key]);
            }
        }
        $block->setAttributes($defaultConfiguration);
    }
}