HosipLan

Untitled

Jan 9th, 2012
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.09 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4.  * This file is part of the Kdyby (http://www.kdyby.org)
  5.  *
  6.  * Copyright (c) 2008, 2011 Filip Procházka ([email protected])
  7.  *
  8.  * @license http://www.kdyby.org/license
  9.  */
  10.  
  11. namespace Kdyby\CMS;
  12.  
  13. use Kdyby;
  14. use Nette;
  15. use Nette\Http;
  16.  
  17.  
  18.  
  19. /**
  20.  * @author Filip Procházka
  21.  */
  22. class Router extends Nette\Application\Routers\Route
  23. {
  24.  
  25.     /** @var RouterContext */
  26.     private $context;
  27.  
  28.     /** @var array */
  29.     private $params = array();
  30.  
  31.  
  32.  
  33.     /**
  34.      * Context must contain
  35.      * - languages in $params
  36.      * - Content\Node service
  37.      *
  38.      * @todo Solve secured routes
  39.      *
  40.      * @param RouterContext $context
  41.      */
  42.     public function __construct(RouterContext $context, $prefix = NULL)
  43.     {
  44.         $this->context = $context;
  45.  
  46.         parent::__construct($prefix . '/[<language [a-z]{2,3}>/]<path .*>[.<extension [a-z0-9.]{2,7}>]', array(
  47.             'presenter' => 'Controller',
  48.             'action' => 'default',
  49.             // todo FILTER_IN for lang
  50.             'language' => array(
  51.                 self::VALUE => NULL,
  52.                 self::FILTER_IN => callback($this, 'filterInLanguage'),
  53.                 self::FILTER_OUT => callback($this, 'filterOutLanguage')
  54.             ),
  55.             'path' => array(
  56.                 self::VALUE => NULL,
  57.                 self::FILTER_IN => callback($this, 'filterInNode'),
  58.                 self::FILTER_OUT => callback($this, 'filterOutNode')
  59.             ),
  60.             'extension' => array(
  61.                 self::VALUE => 'html',
  62.                 self::FILTER_IN => callback($this, 'filterInExtension'),
  63.                 self::FILTER_OUT => callback($this, 'filterInExtension')
  64.             )
  65.         ));
  66.     }
  67.  
  68.  
  69.  
  70.     /**
  71.      * @param Http\IRequest $httpRequest
  72.      * @return Nette\Application\Request
  73.      */
  74.     public function match(Http\IRequest $httpRequest)
  75.     {
  76.         $this->params = array();
  77.         $request = parent::match($httpRequest);
  78.         $request->setParams($this->params + $request->getParams());
  79.         return $request;
  80.     }
  81.  
  82.  
  83.  
  84.     /**
  85.      * Constructs absolute URL from Request object.
  86.      * @param  Nette\Application\Request
  87.      * @param  Nette\Http\Url
  88.      * @return string|NULL
  89.      */
  90.     public function constructUrl(Nette\Application\Request $appRequest, Http\Url $refUrl)
  91.     {
  92.         $appRequest = clone $appRequest;
  93.         $params = $appRequest->getParams();
  94.         unset($params['node']);
  95.         $appRequest->setParams($params);
  96.         return parent::constructUrl($appRequest, $refUrl);
  97.     }
  98.  
  99.  
  100.  
  101.     /**
  102.      * @param string $lang
  103.      * @return string
  104.      */
  105.     public function filterInLanguage($lang)
  106.     {
  107.         return rawurldecode($lang);
  108.     }
  109.  
  110.  
  111.  
  112.     /**
  113.      * @param string $lang
  114.      * @return string
  115.      */
  116.     public function filterOutLanguage($lang)
  117.     {
  118.         return $lang;
  119.     }
  120.  
  121.  
  122.  
  123.     /**
  124.      * @param string $path
  125.      * @return string
  126.      */
  127.     public function filterInNode($path)
  128.     {
  129.         $path = trim(rawurldecode($path), '/');
  130.         $this->params['node'] = NULL;
  131.         return $path;
  132.     }
  133.  
  134.  
  135.  
  136.     /**
  137.      * @param string $path
  138.      * @return string
  139.      */
  140.     public function filterOutNode($path)
  141.     {
  142.         return $path;
  143.     }
  144.  
  145.  
  146.  
  147.     /**
  148.      * @param string $extension
  149.      * @return string
  150.      */
  151.     public function filterInExtension($extension)
  152.     {
  153.         return rawurldecode($extension);
  154.     }
  155.  
  156.  
  157.  
  158.     /**
  159.      * @param string $extension
  160.      * @return string
  161.      */
  162.     public function filterOutExtension($extension)
  163.     {
  164.         return $extension;
  165.     }
  166.  
  167. }
Advertisement
Add Comment
Please, Sign In to add comment