public unserializePageSnapshotData ( Networking\InitCmsBundle\Model\PageSnapshotInterface $pageSnapshot, boolean $unserializeTranslations = true ) : Networking\InitCmsBundle\Model\PageInterface | ||
$pageSnapshot | Networking\InitCmsBundle\Model\PageSnapshotInterface | |
$unserializeTranslations | boolean | |
return | Networking\InitCmsBundle\Model\PageInterface |
public function unserializePageSnapshotData(PageSnapshotInterface $pageSnapshot, $unserializeTranslations = true)
{
/** @var \JMS\Serializer\SerializerInterface $serializer */
$serializer = $this->getService('serializer');
$context = new PageSnapshotDeserializationContext();
$context->setDeserializeTranslations($unserializeTranslations);
return $serializer->deserialize($pageSnapshot->getVersionedData(), $pageSnapshot->getResourceName(), 'json', $context);
}
/** * Returns the corresponding route of the given URL for the locale supplied * If none is found it returns the original route object * * @param $oldUrl * @param $locale * @return array|\Networking\InitCmsBundle\Component\Routing\Route * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException */ public function getTranslationRoute($oldUrl, $locale) { $cookies = $this->request->cookies ? $this->request->cookies->all() : array(); $oldRequest = Request::create($oldUrl, 'GET', array(), $cookies); if ($this->request->getSession()) { $oldRequest->setSession($this->request->getSession()); } try { $request = $this->pageHelper->matchContentRouteRequest($oldRequest); } catch (ResourceNotFoundException $e) { $request = $oldRequest; } if (!($content = $request->get('_content', false))) { try { $route = $this->router->matchRequest(Request::create($oldUrl)); } catch (ResourceNotFoundException $e) { if ($route = $this->router->matchRequest(Request::create('/404'))) { return $route; } throw new NotFoundHttpException(sprintf('Could not find a translation to "%s" for this request"', $locale)); } if (!array_key_exists('_content', $route)) { return $route; } if (!($content = $route['_content'])) { return $route; } } if ($content instanceof PageInterface) { $translation = $content->getAllTranslations()->get($locale); if (is_null($translation)) { //@todo does this make sense, or should we throw an exception return array('_route' => 'networking_init_cms_home'); } //return a contentRoute object $contentRoute = $translation->getContentRoute()->setContent($translation); return ContentRouteManager::generateRoute($contentRoute, $contentRoute->getPath(), ''); } if ($content instanceof PageSnapshotInterface) { $content = $this->pageHelper->unserializePageSnapshotData($content); $translation = $content->getAllTranslations()->get($locale); if ($translation && ($snapshotId = $translation->getId())) { /** @var $snapshot PageSnapshotInterface */ $snapshot = $this->om->getRepository($content->getSnapshotClassType())->findOneBy(array('resourceId' => $snapshotId)); if ($snapshot) { $contentRoute = $snapshot->getRoute(); return ContentRouteManager::generateRoute($contentRoute, $contentRoute->getPath(), ''); } } } if ($this->fallbackRoute) { return $this->fallbackRoute; } if ($route = $this->router->matchRequest(Request::create('/404'))) { return $route; } //no valid translation found throw new NotFoundHttpException(sprintf('Could not find a translation to "%s" for content "%s"', $locale, $content->__toString())); }