Skip to content

Commit

Permalink
Merge pull request #291 from lenybernard/feature/get-view-reference-w…
Browse files Browse the repository at this point in the history
…ith-children

Feature/get view reference with children
  • Loading branch information
Leny BERNARD committed Dec 2, 2015
2 parents d7ee7d3 + c2e88a1 commit 0530ba8
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,17 @@ public function generateXml(array $nodes, $rootNode = null, $url = '')
$viewReference->getViewNamespace(), 'array'
);
foreach ($arrayTransformer->reverseTransform($viewReference) as $key => $value) {
$itemNode->addAttribute($key, $value);
if (!is_array($value)) {
$itemNode->addAttribute($key, $value);
}
}

$_url = ltrim($url.'/'.$viewReference->getSlug(), '/');
$itemNode->attributes()->url = $_url;

//Build url thanks to hierarchy
if (!empty($node['children'])) {
$childrenNode = $itemNode->addChild('children');
$this->generateXml($node['children'], $childrenNode, $_url);
$this->generateXml($node['children'], $itemNode, $_url);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ public function getReferenceByUrl($url, $locale)
if ($url) {
//add every hierarchy item in the xpath var
$xpath .= sprintf(
'/children/viewReference[@slug="%s"]',
implode('"]/children/viewReference[@slug="', $urlParts)
'/viewReference[@slug="%s"]',
implode('"]/viewReference[@slug="', $urlParts)
);
}

Expand All @@ -67,11 +67,11 @@ public function getReferenceByUrl($url, $locale)
*
* @param $parameters
*
* @return ViewReference|null
* @return ViewReference|\SimpleXMLElement|null
*/
public function getOneReferenceByParameters($parameters, $transform = true)
public function getOneReferenceByParameters($parameters, $transform = true, $keepChildren = false)
{
$viewReferences = $this->getReferencesByParameters($parameters, $transform);
$viewReferences = $this->getReferencesByParameters($parameters, $transform, $keepChildren);
if (count($viewReferences)) {
return $viewReferences[0];
}
Expand All @@ -80,24 +80,31 @@ public function getOneReferenceByParameters($parameters, $transform = true)
/**
* @param array $parameters
*
* @return ViewReference[]
* @return ViewReference[]|\SimpleXMLElement[]
*/
public function getReferencesByParameters($parameters, $transform = true)
public function getReferencesByParameters($parameters, $transform = true, $keepChildren = false)
{
$viewsReferences = [];
$arguments = [];

/** @var \SimpleXmlElement[] $xmlReferences */
if ($xmlReferences = $this->driver->readCache()->xpath(ViewReferenceHelper::buildXpath($parameters))) {
foreach ($xmlReferences as $xmlReference) {
foreach ($xmlReferences as $reference) {
if ($transform === true) {
if (isset($xmlReference['entityId'])) {
$viewRefTransformer = new XMLToBusinessPageReferenceTransformer();
} else {
$viewRefTransformer = new XMLToViewReferenceTransformer();
}
$viewReference = $viewRefTransformer->transform($xmlReference);
$transformViewReferenceFn = function ($parentViewReference) use (&$transformViewReferenceFn, $keepChildren) {
$transformer = ViewReferenceXmlCacheRepository::findTransformerFromXmlElement($parentViewReference);
$reference = $transformer->transform($parentViewReference);
if ($keepChildren) {
foreach ($parentViewReference->children() as $child) {
$reference->addChild($transformViewReferenceFn($child));
}
}

return $reference;
};

$reference = $transformViewReferenceFn($reference);
}
$viewsReferences[] = $viewReference;
$viewsReferences[] = $reference;
}
}

Expand Down Expand Up @@ -129,7 +136,7 @@ public function getChoices(\SimpleXMLElement $node = null, $depth = 0)
$node = $this->driver->readCache();
}

foreach ($node->children() as $child) {
foreach ($node as $child) {
$viewReferenceTransformer = self::findTransformerFromXmlElement($child);
$viewReference = $viewReferenceTransformer->transform($child);
if ($viewReference->getName() != '') {
Expand Down
26 changes: 26 additions & 0 deletions Bundle/ViewReferenceBundle/ViewReference/ViewReference.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@ class ViewReference
protected $url;
protected $viewId;
protected $viewNamespace;
protected $children;

public function __construct($id = null)
{
$this->id = $id;
$this->children = [];
}

/**
Expand Down Expand Up @@ -133,4 +135,28 @@ public function setUrl($url)
{
$this->url = $url;
}

/**
* @return ViewReference[]
*/
public function getChildren()
{
return $this->children;
}

/**
* @param ViewReference[] $children
*/
public function setChildren($children)
{
$this->children = $children;
}

/**
* @param ViewReference $child
*/
public function addChild($child)
{
$this->children[] = $child;
}
}

0 comments on commit 0530ba8

Please sign in to comment.