Skip to content

refactor getViewsReferences to read the cache if already computed #85

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions Bundle/CoreBundle/CacheWarmer/ViewCacheWarmer.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Victoire\Bundle\CoreBundle\CacheWarmer;

use Doctrine\ORM\EntityManager;
use Victoire\Bundle\CoreBundle\Helper\ViewCacheHelper;
use Victoire\Bundle\CoreBundle\Helper\ViewHelper;

Expand All @@ -18,10 +19,11 @@ class ViewCacheWarmer
* @param ViewHelper $viewHelper @victoire_page.page_helper
* @param ViewCacheHelper $viewCacheHelper @victoire_core.view_cache_helper
*/
public function __construct(ViewHelper $viewHelper, ViewCacheHelper $viewCacheHelper)
public function __construct(ViewHelper $viewHelper, ViewCacheHelper $viewCacheHelper, EntityManager $entityManager)
{
$this->viewHelper = $viewHelper;
$this->viewCacheHelper = $viewCacheHelper;
$this->entityManager = $entityManager;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indentation ?

}

/**
Expand All @@ -31,7 +33,8 @@ public function __construct(ViewHelper $viewHelper, ViewCacheHelper $viewCacheHe
public function warmUp($cacheDir)
{
if (!$this->viewCacheHelper->fileExists()) {
$viewsReferences = $this->viewHelper->getAllViewsReferences();
$views = $this->entityManager->createQuery("SELECT v FROM VictoireCoreBundle:View v")->getResult();

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indentation ?

$viewsReferences = $this->viewHelper->buildViewsReferences($views);
$this->viewCacheHelper->write($viewsReferences);
}
}
Expand Down
4 changes: 2 additions & 2 deletions Bundle/CoreBundle/Command/GenerateViewCacheCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ public function configure()
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$viewsReferences = $this->getContainer()->get('victoire_core.view_helper')->getAllViewsReferences();
$views = $this->getContainer()->get('doctrine.orm.entity_manager')->createQuery("SELECT v FROM VictoireCoreBundle:View v")->getResult();

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indentation

$viewsReferences = $this->getContainer()->get('victoire_core.view_helper')->buildViewsReferences($views);
$this->getContainer()->get('victoire_core.view_cache_helper')->write($viewsReferences);
}

}
3 changes: 0 additions & 3 deletions Bundle/CoreBundle/DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,6 @@ public function getConfigTreeBuilder()
->children()
->scalarNode('user_class')->defaultNull()->end()
->end()
->children()
->scalarNode('watch_view_cache')->defaultValue(true)->end()
->end()
->children()
->scalarNode('cache_dir')->defaultValue('%kernel.cache_dir%/victoire/Entity')->end()
->end()
Expand Down
59 changes: 44 additions & 15 deletions Bundle/CoreBundle/Helper/ViewCacheHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

namespace Victoire\Bundle\CoreBundle\Helper;

use Symfony\Component\Config\Util\XmlUtils;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\SimpleXMLElement;
use Symfony\Component\HttpFoundation\RequestStack;
use Victoire\Bundle\BusinessEntityPageBundle\Entity\BusinessEntityPage;
use Victoire\Bundle\CoreBundle\Entity\View;
Expand Down Expand Up @@ -60,6 +60,9 @@ public function buildItemNode($viewReference, $itemNode)
if (array_key_exists('locale', $viewReference)) {
$itemNode->addAttribute('locale', $viewReference['locale']);
}
if (array_key_exists('name', $viewReference)) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indentation

$itemNode->addAttribute('name', $viewReference['name']);
}
}
/**
* Write given views references in a xml file
Expand All @@ -68,7 +71,7 @@ public function buildItemNode($viewReference, $itemNode)
*/
public function write($viewsReferences)
{
$rootNode = new SimpleXMLElement("<?xml version='1.0' encoding='UTF-8' ?><viewReferences></viewReferences>");
$rootNode = new \SimpleXMLElement("<?xml version='1.0' encoding='UTF-8' ?><viewReferences></viewReferences>");

foreach ($viewsReferences as $viewReference) {
$itemNode = $rootNode->addChild('viewReference');
Expand All @@ -81,11 +84,36 @@ public function write($viewsReferences)
/**
* get the content of the view cache file
*
* @return SimpleXMLElement
* @return \SimpleXMLElement
*/
public function readCache()
{
return new SimpleXMLElement(file_get_contents($this->xmlFile));
return new \SimpleXMLElement(file_get_contents($this->xmlFile));
}

public function convertXmlCacheToArray()
{
$xml = $this->readCache();

$cachedArray = json_decode(json_encode((array) $xml), TRUE);
$viewsReferences = [];


foreach ($cachedArray['viewReference'] as $cachedViewReference) {
$viewReference['id'] = !empty($cachedViewReference['@attributes']['id']) ? $cachedViewReference['@attributes']['id'] : null ;
$viewReference['locale'] = !empty($cachedViewReference['@attributes']['locale']) ? $cachedViewReference['@attributes']['locale'] : null ;
$viewReference['entityId'] = !empty($cachedViewReference['@attributes']['entityId']) ? $cachedViewReference['@attributes']['entityId'] : null ;
$viewReference['entityNamespace'] = !empty($cachedViewReference['@attributes']['entityNamespace']) ? $cachedViewReference['@attributes']['entityNamespace'] : null ;
$viewReference['url'] = !empty($cachedViewReference['@attributes']['url']) ? $cachedViewReference['@attributes']['url'] : null ;
$viewReference['viewId'] = !empty($cachedViewReference['@attributes']['viewId']) ? $cachedViewReference['@attributes']['viewId'] : null ;
$viewReference['viewNamespace'] = !empty($cachedViewReference['@attributes']['viewNamespace']) ? $cachedViewReference['@attributes']['viewNamespace'] : null ;
$viewReference['patternId'] = !empty($cachedViewReference['@attributes']['patternId']) ? $cachedViewReference['@attributes']['patternId'] : null ;
$viewReference['name'] = !empty($cachedViewReference['@attributes']['name']) ? $cachedViewReference['@attributes']['name'] : null ;

$viewsReferences[] = $viewReference;
}

return $viewsReferences;
}

/**
Expand Down Expand Up @@ -131,14 +159,15 @@ public function getReferenceByParameters($parameters)
$arguments = array_merge($arguments, $locale);

if ($xmlReference = $this->readCache()->xpath("//viewReference[".implode(' and ', $arguments)."]")) {
$viewReference['id'] = $xmlReference[0]->getAttributeAsPhp('id');
$viewReference['locale'] = $xmlReference[0]->getAttributeAsPhp('locale');
$viewReference['entityId'] = $xmlReference[0]->getAttributeAsPhp('entityId');
$viewReference['entityNamespace'] = $xmlReference[0]->getAttributeAsPhp('entityNamespace');
$viewReference['url'] = $xmlReference[0]->getAttributeAsPhp('url');
$viewReference['viewId'] = $xmlReference[0]->getAttributeAsPhp('viewId');
$viewReference['viewNamespace'] = $xmlReference[0]->getAttributeAsPhp('viewNamespace');
$viewReference['patternId'] = $xmlReference[0]->getAttributeAsPhp('patternId');
$viewReference['id'] = XmlUtils::phpize($xmlReference[0]['id']);
$viewReference['locale'] = XmlUtils::phpize($xmlReference[0]['locale']);
$viewReference['entityId'] = XmlUtils::phpize($xmlReference[0]['entityId']);
$viewReference['entityNamespace'] = XmlUtils::phpize($xmlReference[0]['entityNamespace']);
$viewReference['url'] = XmlUtils::phpize($xmlReference[0]['url']);
$viewReference['viewId'] = XmlUtils::phpize($xmlReference[0]['viewId']);
$viewReference['viewNamespace'] = XmlUtils::phpize($xmlReference[0]['viewNamespace']);
$viewReference['patternId'] = XmlUtils::phpize($xmlReference[0]['patternId']);
$viewReference['name'] = XmlUtils::phpize($xmlReference[0]['name']);
} else {
$viewReference = null;
}
Expand All @@ -162,12 +191,12 @@ public function getViewReferenceId(View $view, $entity = null)
}

/**
* write SimpleXMLElement in the cache file
* @param SimpleXMLElement $rootNode
* write \SimpleXMLElement in the cache file
* @param \SimpleXMLElement $rootNode
*
* @return void
*/
protected function writeFile(SimpleXMLElement $rootNode)
protected function writeFile(\SimpleXMLElement $rootNode)
{
if (!is_dir(dirname($this->xmlFile))) {
mkdir(dirname($this->xmlFile), 0777, true);
Expand Down
22 changes: 13 additions & 9 deletions Bundle/CoreBundle/Helper/ViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,23 +59,26 @@ public function __construct(
'locale',
);

/**
* This method get all views (BasePage and Template) in DB and return the references, including non persisted Business entity page (pattern and businessEntityName based)
* @return array the computed views as array
*/
public function getAllViewsReferences()
public function buildViewsReferences($views)
{
$viewsReferences = array();
//@todo This query is not optimized because we need the property "businessEntityName" later, and it's only present in Pattern pages
$views = $this->em->createQuery("SELECT v FROM VictoireCoreBundle:View v")->getResult();

foreach ($views as $view) {
$viewsReferences = array_merge($viewsReferences, $this->buildViewReference($view));
$this->em->refresh($view);
}

return $viewsReferences;
}
/**
* This method get all views (BasePage and Template) in DB and return the references, including non persisted Business entity page (pattern and businessEntityName based)
* @return array the computed views as array
*/
public function getAllViewsReferences()
{
$viewsReferences = $this->viewCacheHelper->convertXmlCacheToArray();

return $viewsReferences;
}

/**
* Generate update the page parameters with the entity
Expand Down Expand Up @@ -152,7 +155,7 @@ protected function setEntityAttributeValue($entity, $field, $value)
* find the view reference for giver page instance
* @param Page $page
*
* @return void
* @return array
*/
public function findViewReferenceForPage(Page $page)
{
Expand Down Expand Up @@ -417,4 +420,5 @@ protected function cloneBusinessEntityPagePattern(BusinessEntityPagePattern $vie
$businessEntity = $this->get('victoire_core.helper.business_entity_helper')->findById($businessEntityId);
$businessProperties = $businessEntity->getBusinessPropertiesByType('seoable');
}

}
12 changes: 1 addition & 11 deletions Bundle/CoreBundle/Resources/config/services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -99,17 +99,6 @@ services:
calls:
- [ setContainer, ["@service_container"] ]


victoire_core.view_cache_listener:
class: Victoire\Bundle\CoreBundle\Listener\ViewCacheListener
arguments:
- "@victoire_core.view_helper"
- "@victoire_core.view_cache_helper"
- "%kernel.debug%"
- "%victoire_core.watch_view_cache%"
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

# ================== Annotations ================== #

victoire_core.annotation_reader:
Expand Down Expand Up @@ -154,6 +143,7 @@ services:
arguments:
- @victoire_core.view_helper
- @victoire_core.view_cache_helper
- @doctrine.orm.entity_manager
tags:
- { name: kernel.event_listener, event: kernel.request, method: warmUp }

Expand Down