mirror of
				https://github.com/kevinveenbirkenbach/infinito.git
				synced 2025-11-04 03:07:58 +00:00 
			
		
		
		
	Implemented ActionTemplateDataStoreService in MVC and template
This commit is contained in:
		@@ -6,4 +6,5 @@ twig:
 | 
			
		||||
    globals:
 | 
			
		||||
        layer_action_map: "@Infinito\\Domain\\LayerManagement\\LayerActionMap"
 | 
			
		||||
        action_icon_class_map: "@Infinito\\Domain\\TwigManagement\\ActionIconClassMap"
 | 
			
		||||
        action_template_name_service: "@Infinito\\Domain\\TemplateManagement\\ActionTemplateNameServiceInterface"
 | 
			
		||||
        action_template_name_service: "@Infinito\\Domain\\TemplateManagement\\ActionTemplateNameServiceInterface"
 | 
			
		||||
        action_template_data_store_service: "@Infinito\\Domain\\TemplateManagement\\ActionTemplateDataStoreServiceInterface"
 | 
			
		||||
@@ -3,15 +3,19 @@
 | 
			
		||||
namespace Infinito\Domain\MVCManagement;
 | 
			
		||||
 | 
			
		||||
use FOS\RestBundle\View\View;
 | 
			
		||||
use Infinito\Entity\EntityInterface;
 | 
			
		||||
use Infinito\Domain\ActionManagement\ActionHandlerServiceInterface;
 | 
			
		||||
use Infinito\Domain\TemplateManagement\TemplateNameServiceInterface;
 | 
			
		||||
use Infinito\Domain\TemplateManagement\ActionTemplateDataStoreServiceInterface;
 | 
			
		||||
use Infinito\Attribut\ActionTypeAttribut;
 | 
			
		||||
use Infinito\DBAL\Types\ActionType;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author kevinfrantz
 | 
			
		||||
 */
 | 
			
		||||
final class MVCRoutineService implements MVCRoutineServiceInterface
 | 
			
		||||
{
 | 
			
		||||
    use ActionTypeAttribut;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var ActionHandlerServiceInterface
 | 
			
		||||
     */
 | 
			
		||||
@@ -23,27 +27,30 @@ final class MVCRoutineService implements MVCRoutineServiceInterface
 | 
			
		||||
    private $templateNameService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param EntityInterface[]|EntityInterface|null $result
 | 
			
		||||
     *
 | 
			
		||||
     * @return array Well formated data for view
 | 
			
		||||
     * @var ActionTemplateDataStoreServiceInterface
 | 
			
		||||
     */
 | 
			
		||||
    private function getViewData($result): array
 | 
			
		||||
    private $actionTemplateDataStore;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return View
 | 
			
		||||
     */
 | 
			
		||||
    private function getView(): View
 | 
			
		||||
    {
 | 
			
		||||
        switch (gettype($result)) {
 | 
			
		||||
            case 'object':
 | 
			
		||||
                return ['entity' => $result];
 | 
			
		||||
            case 'null':
 | 
			
		||||
                return [];
 | 
			
		||||
        }
 | 
			
		||||
        $view = View::create();
 | 
			
		||||
        $view->setTemplate($this->templateNameService->getMoleculeTemplateName());
 | 
			
		||||
        $view->setData($this->actionTemplateDataStore->getAllStoredData());
 | 
			
		||||
 | 
			
		||||
        return $view;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param ActionHandlerServiceInterface $actionHandlerService
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(ActionHandlerServiceInterface $actionHandlerService, TemplateNameServiceInterface $templateNameService)
 | 
			
		||||
    public function __construct(ActionHandlerServiceInterface $actionHandlerService, TemplateNameServiceInterface $templateNameService, ActionTemplateDataStoreServiceInterface $actionTemplateDataStore)
 | 
			
		||||
    {
 | 
			
		||||
        $this->actionHandlerService = $actionHandlerService;
 | 
			
		||||
        $this->templateNameService = $templateNameService;
 | 
			
		||||
        $this->actionTemplateDataStore = $actionTemplateDataStore;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -53,24 +60,13 @@ final class MVCRoutineService implements MVCRoutineServiceInterface
 | 
			
		||||
     */
 | 
			
		||||
    public function process(): View
 | 
			
		||||
    {
 | 
			
		||||
        $result = $this->actionHandlerService->handle();
 | 
			
		||||
        $data = $this->getViewData($result);
 | 
			
		||||
        $view = $this->getView($data);
 | 
			
		||||
        if (!$this->actionType) {
 | 
			
		||||
            $result = $this->actionHandlerService->handle();
 | 
			
		||||
            $this->actionTemplateDataStore->setData(ActionType::READ, $result);
 | 
			
		||||
            $view = $this->getView();
 | 
			
		||||
 | 
			
		||||
        return $view;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * {@inheritdoc}
 | 
			
		||||
     *
 | 
			
		||||
     * @see \Infinito\Domain\MVCManagement\MVCRoutineServiceInterface::getView()
 | 
			
		||||
     */
 | 
			
		||||
    public function getView(array $data): View
 | 
			
		||||
    {
 | 
			
		||||
        $view = View::create();
 | 
			
		||||
        $view->setTemplate($this->templateNameService->getMoleculeTemplateName());
 | 
			
		||||
        $view->setData($data);
 | 
			
		||||
 | 
			
		||||
        return $view;
 | 
			
		||||
            return $view;
 | 
			
		||||
        }
 | 
			
		||||
        throw new \Exception('Not implemented yet!');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,13 +3,14 @@
 | 
			
		||||
namespace Infinito\Domain\MVCManagement;
 | 
			
		||||
 | 
			
		||||
use FOS\RestBundle\View\View;
 | 
			
		||||
use Infinito\Attribut\ActionTypeAttributInterface;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This interface offers the options to process an MVC routine.
 | 
			
		||||
 *
 | 
			
		||||
 * @author kevinfrantz
 | 
			
		||||
 */
 | 
			
		||||
interface MVCRoutineServiceInterface
 | 
			
		||||
interface MVCRoutineServiceInterface extends ActionTypeAttributInterface
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Process through the layers.
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,7 @@ use Infinito\Form\AbstractType;
 | 
			
		||||
use Infinito\Entity\EntityInterface;
 | 
			
		||||
use Infinito\Domain\ActionManagement\AbstractAction;
 | 
			
		||||
use Infinito\Exception\NotCorrectInstanceException;
 | 
			
		||||
use Doctrine\Common\Collections\Collection;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author kevinfrantz
 | 
			
		||||
@@ -30,9 +31,9 @@ final class ActionTemplateDataStoreService implements ActionTemplateDataStoreSer
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var ArrayCollection
 | 
			
		||||
     * @var Collection
 | 
			
		||||
     */
 | 
			
		||||
    private $actionDataMap;
 | 
			
		||||
    private $actionDataStore;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $actionType
 | 
			
		||||
@@ -68,7 +69,7 @@ final class ActionTemplateDataStoreService implements ActionTemplateDataStoreSer
 | 
			
		||||
 | 
			
		||||
    public function __construct()
 | 
			
		||||
    {
 | 
			
		||||
        $this->actionDataMap = new ArrayCollection();
 | 
			
		||||
        $this->actionDataStore = new ArrayCollection();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -81,7 +82,7 @@ final class ActionTemplateDataStoreService implements ActionTemplateDataStoreSer
 | 
			
		||||
        if ($this->isValidActionType($actionType) && $this->isValidActionData($actionType, $data) && $this->isDataStored($actionType)) {
 | 
			
		||||
            throw new AllreadySetException("The data for the action type <<$actionType>> is allready set!");
 | 
			
		||||
        }
 | 
			
		||||
        $this->actionDataMap->set($actionType, $data);
 | 
			
		||||
        $this->actionDataStore->set($actionType, $data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -92,7 +93,7 @@ final class ActionTemplateDataStoreService implements ActionTemplateDataStoreSer
 | 
			
		||||
    public function getData(string $actionType)
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->isValidActionType($actionType) && $this->isDataStored($actionType)) {
 | 
			
		||||
            return $this->actionDataMap->get($actionType);
 | 
			
		||||
            return $this->actionDataStore->get($actionType);
 | 
			
		||||
        }
 | 
			
		||||
        throw new NotSetException("The data for the action type <<$actionType>> is not set!");
 | 
			
		||||
    }
 | 
			
		||||
@@ -104,6 +105,16 @@ final class ActionTemplateDataStoreService implements ActionTemplateDataStoreSer
 | 
			
		||||
     */
 | 
			
		||||
    public function isDataStored(string $actionType): bool
 | 
			
		||||
    {
 | 
			
		||||
        return $this->actionDataMap->containsKey($actionType);
 | 
			
		||||
        return $this->actionDataStore->containsKey($actionType);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * {@inheritdoc}
 | 
			
		||||
     *
 | 
			
		||||
     * @see \Infinito\Domain\TemplateManagement\ActionTemplateDataStoreServiceInterface::getAllData()
 | 
			
		||||
     */
 | 
			
		||||
    public function getAllStoredData(): Collection
 | 
			
		||||
    {
 | 
			
		||||
        return $this->actionDataStore;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,8 @@
 | 
			
		||||
 | 
			
		||||
namespace Infinito\Domain\TemplateManagement;
 | 
			
		||||
 | 
			
		||||
use Doctrine\Common\Collections\Collection;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class offers a temporary data store to pass data from the controller logic to the template.
 | 
			
		||||
 *
 | 
			
		||||
@@ -30,4 +32,9 @@ interface ActionTemplateDataStoreServiceInterface
 | 
			
		||||
     * @return bool True if the data is set
 | 
			
		||||
     */
 | 
			
		||||
    public function isDataStored(string $actionType): bool;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return Collection
 | 
			
		||||
     */
 | 
			
		||||
    public function getAllStoredData(): Collection;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1 +1 @@
 | 
			
		||||
{{ entity.text }}
 | 
			
		||||
{{ action_template_data_store_service.getData(action).text }}
 | 
			
		||||
@@ -1,2 +1 @@
 | 
			
		||||
{% set source = entity %}
 | 
			
		||||
{% extends "entity/source/source.html.twig" %}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
{% extends "frames/default.html.twig" %}
 | 
			
		||||
{% set entity = action_template_data_store_service.getData('read') %}
 | 
			
		||||
{% block title %}
 | 
			
		||||
	{{ 'Source'|trans }}: {% if entity.hasSlug %}{{ entity.slug }}{% endif %}#{{ entity.id }}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user