Author: Yorkie Chadwick (y.chadwick@networking.ch)
Inheritance: implements Networking\InitCmsBundle\Model\ContentRouteManagerInterface
Example #1
0
 /**
  * {@inheritDoc}
  */
 public function getRoute()
 {
     return ContentRouteManager::generateRoute($this->contentRoute, $this->contentRoute->getPath(), $this);
 }
 /**
  * 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()));
 }
 /**
  * @param ContentRoute $contentRoute
  * @return \Networking\InitCmsBundle\Component\Routing\Route
  */
 protected function getRoute(ContentRoute $contentRoute)
 {
     return ContentRouteManager::generateRoute($contentRoute, $contentRoute->getPath(), '');
 }