mirror of
				https://github.com/kevinveenbirkenbach/infinito.git
				synced 2025-11-03 18:58:01 +00:00 
			
		
		
		
	Optimized view management
This commit is contained in:
		@@ -1,5 +1,4 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Infinito\Domain\ViewManagement;
 | 
			
		||||
 | 
			
		||||
use FOS\RestBundle\View\View;
 | 
			
		||||
@@ -7,61 +6,108 @@ use Infinito\Domain\RequestManagement\Action\RequestedActionInterface;
 | 
			
		||||
use Infinito\Domain\ActionManagement\ActionServiceInterface;
 | 
			
		||||
use Infinito\Domain\ActionManagement\ActionFactoryServiceInterface;
 | 
			
		||||
use Infinito\Domain\TemplateManagement\TemplateNameServiceInterface;
 | 
			
		||||
use Infinito\Domain\ParameterManagement\OptionalGetParameterService;
 | 
			
		||||
use Infinito\Domain\ParameterManagement\OptionalGetParameterServiceInterface;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 * @author kevinfrantz
 | 
			
		||||
 */
 | 
			
		||||
final class ViewBuilder implements ViewBuilderInterface
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * @var string The path to the atom entity template
 | 
			
		||||
     */
 | 
			
		||||
    const TWIG_ENTITY_ATOM_TEMPLATE_PATH = 'entity/_entity.html.twig';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * @var string The path to the molecule entity template
 | 
			
		||||
     */
 | 
			
		||||
    const TWIG_ENTITY_MOLECULE_TEMPLATE_PATH = 'entity/entity.html.twig';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * @var View
 | 
			
		||||
     */
 | 
			
		||||
    private $view;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * @var RequestedActionInterface
 | 
			
		||||
     */
 | 
			
		||||
    private $actionService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * @var ActionFactoryServiceInterface
 | 
			
		||||
     */
 | 
			
		||||
    private $actionFactoryService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * @var TemplateNameServiceInterface
 | 
			
		||||
     */
 | 
			
		||||
    private $templateNameService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * @var OptionalGetParameterServiceInterface
 | 
			
		||||
     */
 | 
			
		||||
    private $optionalGetParameterService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Containes the routine to decide if the template should be loaded with or without frame
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    private function checkLoadWithFrame(): bool
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->optionalGetParameterService->hasParameter(OptionalGetParameterServiceInterface::FRAME_PARAMETER)) {
 | 
			
		||||
            return $this->optionalGetParameterService->getParameter(OptionalGetParameterServiceInterface::FRAME_PARAMETER);
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Don't know if this function will be usefull in the future.
 | 
			
		||||
     * Feel free to remove it if this should not be the case.
 | 
			
		||||
     *
 | 
			
		||||
     * @todo Implement tests
 | 
			
		||||
     *
 | 
			
		||||
     *      
 | 
			
		||||
     * @return string The general entity template or a individual template if it is set
 | 
			
		||||
     */
 | 
			
		||||
    private function getTemplate(): string
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->templateNameService->doesMoleculeTemplateExist()) {
 | 
			
		||||
            return $this->templateNameService->getMoleculeTemplateName();
 | 
			
		||||
        if ($this->checkLoadWithFrame()) {
 | 
			
		||||
            if ($this->templateNameService->doesMoleculeTemplateExist()) {
 | 
			
		||||
                return $this->templateNameService->getMoleculeTemplateName();
 | 
			
		||||
            }
 | 
			
		||||
            return self::TWIG_ENTITY_MOLECULE_TEMPLATE_PATH;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return self::TWIG_ENTITY_TEMPLATE_PATH;
 | 
			
		||||
        if ($this->templateNameService->doesAtomTemplateExist()) {
 | 
			
		||||
            return $this->templateNameService->getAtomTemplateName();
 | 
			
		||||
        }
 | 
			
		||||
        return self::TWIG_ENTITY_ATOM_TEMPLATE_PATH;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param ActionServiceInterface        $actionService
 | 
			
		||||
     *
 | 
			
		||||
     * @param ActionServiceInterface $actionService
 | 
			
		||||
     * @param ActionFactoryServiceInterface $actionFactoryService
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(ActionServiceInterface $actionService, ActionFactoryServiceInterface $actionFactoryService, TemplateNameServiceInterface $templateNameService)
 | 
			
		||||
    public function __construct(ActionServiceInterface $actionService, ActionFactoryServiceInterface $actionFactoryService, TemplateNameServiceInterface $templateNameService, OptionalGetParameterServiceInterface $optionalGetParameterService)
 | 
			
		||||
    {
 | 
			
		||||
        $this->view = View::create();
 | 
			
		||||
        $this->actionService = $actionService;
 | 
			
		||||
        $this->templateNameService = $templateNameService;
 | 
			
		||||
        $this->optionalGetParameterService = $optionalGetParameterService;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * @return View
 | 
			
		||||
     */
 | 
			
		||||
    public function getView(): View
 | 
			
		||||
@@ -73,6 +119,7 @@ final class ViewBuilder implements ViewBuilderInterface
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * {@inheritdoc}
 | 
			
		||||
     *
 | 
			
		||||
     * @see \Infinito\Domain\ViewManagement\ViewBuilderInterface::getActionService()
 | 
			
		||||
@@ -83,6 +130,7 @@ final class ViewBuilder implements ViewBuilderInterface
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * {@inheritdoc}
 | 
			
		||||
     *
 | 
			
		||||
     * @see \Infinito\Domain\ViewManagement\ViewBuilderInterface::build()
 | 
			
		||||
 
 | 
			
		||||
@@ -10,11 +10,6 @@ use Infinito\Domain\ActionManagement\ActionServiceInterface;
 | 
			
		||||
 */
 | 
			
		||||
interface ViewBuilderInterface
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string The path to the general entity template
 | 
			
		||||
     */
 | 
			
		||||
    const TWIG_ENTITY_TEMPLATE_PATH = 'entity/entity.html.twig';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return View
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
<html>
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="{{ app.request.locale }}">
 | 
			
		||||
	<head>
 | 
			
		||||
		<title>
 | 
			
		||||
			{% block title %}infinito{% endblock %}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
<table class="Table">
 | 
			
		||||
<table class="table">
 | 
			
		||||
	<tr>
 | 
			
		||||
		<th>{{'Attribut'|trans}}</th>
 | 
			
		||||
		<th>{{'Value'|trans}}</th>
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,58 @@
 | 
			
		||||
<?php
 | 
			
		||||
namespace Tests\Integration\Domain\ViewManagement;
 | 
			
		||||
 | 
			
		||||
use Symfony\Component\HttpFoundation\Request;
 | 
			
		||||
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * @author kevinfrantz
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
class ViewBuilderIntegrationTest extends WebTestCase
 | 
			
		||||
{   
 | 
			
		||||
    public  function testHomepageFrameless(): void
 | 
			
		||||
    {
 | 
			
		||||
        $client = static::createClient();
 | 
			
		||||
        $client->request(Request::METHOD_GET, 'api/rest/source/HOMEPAGE.html?frame=0');
 | 
			
		||||
        $this->assertEquals(200, $client->getResponse()->getStatusCode());
 | 
			
		||||
        $xml = @simplexml_load_string($client->getResponse()->getContent());
 | 
			
		||||
        $this->assertFalse($xml);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    public  function testHomepageFrameWithoutParameter(): void
 | 
			
		||||
    {
 | 
			
		||||
        $client = static::createClient();
 | 
			
		||||
        $client->request(Request::METHOD_GET, 'api/rest/source/HOMEPAGE.html');
 | 
			
		||||
        $this->assertEquals(200, $client->getResponse()->getStatusCode());
 | 
			
		||||
        $content = $client->getResponse()->getContent();
 | 
			
		||||
        $xml = @simplexml_load_string($content);
 | 
			
		||||
        $this->assertTrue($xml,"The content <<\n$content\n>> is no valid xml!");
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
//     /**
 | 
			
		||||
//      * @param string $url
 | 
			
		||||
//      * @param int    $status
 | 
			
		||||
//      */
 | 
			
		||||
//     public  function testHomepageFrameless(): void
 | 
			
		||||
//     {
 | 
			
		||||
//         $client = static::createClient();
 | 
			
		||||
//         $crawler = $client->request(Request::METHOD_GET, 'api/rest/source/HOMEPAGE.html?frame=');
 | 
			
		||||
//         $this->assertEquals(200, $client->getResponse()->getStatusCode());
 | 
			
		||||
//         $this->assertEquals(1,$crawler->filter('html')->count());
 | 
			
		||||
//     }
 | 
			
		||||
    
 | 
			
		||||
//     /**
 | 
			
		||||
//      * @param string $url
 | 
			
		||||
//      * @param int    $status
 | 
			
		||||
//      */
 | 
			
		||||
//     public  function testHomepageExplizitNoFrame(): void
 | 
			
		||||
//     {
 | 
			
		||||
//         $client = static::createClient();
 | 
			
		||||
//         $crawler = $client->request(Request::METHOD_GET, 'api/rest/source/HOMEPAGE.html?frame=0');
 | 
			
		||||
//         $this->assertEquals(200, $client->getResponse()->getStatusCode());
 | 
			
		||||
//         $this->assertEquals(1,$crawler->filter('html')->count());
 | 
			
		||||
//     }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user