151 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Nextend\Framework\Router;
 | |
| 
 | |
| use Nextend\Framework\Form\Form;
 | |
| use Nextend\Framework\Router\Base\PlatformRouter;
 | |
| use Nextend\Framework\Router\WordPress\WordPressRouter;
 | |
| use Nextend\Framework\Url\UrlHelper;
 | |
| 
 | |
| class Router {
 | |
| 
 | |
|     /**
 | |
|      * @var Base\PlatformRouter
 | |
|      */
 | |
|     private $platformRouter;
 | |
| 
 | |
|     /**
 | |
|      * @var string
 | |
|      */
 | |
|     protected $baseUrl;
 | |
| 
 | |
|     /**
 | |
|      * @var bool|string
 | |
|      */
 | |
|     protected $baseUrlAjax;
 | |
| 
 | |
|     /**
 | |
|      * @var bool|string
 | |
|      */
 | |
|     protected $networkUrl = false;
 | |
| 
 | |
|     /**
 | |
|      * Router constructor.
 | |
|      *
 | |
|      * @param string      $baseUrl
 | |
|      * @param string|bool $baseUrlAjax
 | |
|      * @param string|bool $networkUrl
 | |
|      */
 | |
|     public function __construct($baseUrl, $baseUrlAjax = false, $networkUrl = false) {
 | |
|         $this->platformRouter = new WordPressRouter($this);
 | |
| 
 | |
|         $this->baseUrl = $baseUrl;
 | |
| 
 | |
|         if ($baseUrlAjax === false) {
 | |
|             $baseUrlAjax = UrlHelper::add_query_arg(array('nextendajax' => 1), $this->baseUrl);
 | |
|         }
 | |
|         $this->baseUrlAjax = $baseUrlAjax;
 | |
| 
 | |
|         $this->networkUrl = $networkUrl;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @return string
 | |
|      */
 | |
|     public function getBaseUrl() {
 | |
|         return $this->baseUrl;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param string $baseUrl
 | |
|      */
 | |
|     public function setBaseUrl($baseUrl) {
 | |
|         $this->baseUrl = $baseUrl;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @return bool|string
 | |
|      */
 | |
|     public function getNetworkUrl() {
 | |
| 
 | |
|         return $this->networkUrl;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param array|string $url
 | |
|      * @param bool         $isPost
 | |
|      * @param bool         $isAjax
 | |
|      *
 | |
|      * @return string
 | |
|      */
 | |
|     public function createUrl($url, $isPost = false, $isAjax = false) {
 | |
|         //create url from array
 | |
|         // [0] = controller/method
 | |
|         // [1] = query parameters
 | |
|         if (is_array($url)) {
 | |
|             $href = $this->route($url[0], (isset($url[1]) ? $url[1] : array()), $isPost, $isAjax);
 | |
|         } elseif (filter_var($url, FILTER_VALIDATE_URL)) {
 | |
|             //completed url, no mods, just fun
 | |
|             $href = $url;
 | |
|         } elseif (strpos($url, "/") !== false) {
 | |
|             //create url from string
 | |
|             //format: controller/method
 | |
|             $href = $this->route($url, array(), $isPost, $isAjax);
 | |
|         } else {
 | |
|             //fake link, replace to hashtag
 | |
|             $href = "#";
 | |
|         }
 | |
| 
 | |
|         return $href;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param array|string $url
 | |
|      *
 | |
|      * @return string
 | |
|      */
 | |
|     public function createAjaxUrl($url) {
 | |
| 
 | |
|         return $this->createUrl($url, false, true);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param       $url
 | |
|      * @param array $queryArgs
 | |
|      * @param bool  $isPost
 | |
|      * @param bool  $isAjax
 | |
|      *
 | |
|      * @return string
 | |
|      */
 | |
|     private function route($url, $queryArgs = array(), $isPost = false, $isAjax = false) {
 | |
| 
 | |
|         if ($isAjax) {
 | |
|             $baseUrl = $this->baseUrlAjax;
 | |
|         } else {
 | |
|             $baseUrl = $this->baseUrl;
 | |
|         }
 | |
| 
 | |
|         $parsedAction = explode("/", $url);
 | |
| 
 | |
|         $queryArgs = array(
 | |
|                 'nextendcontroller' => strtolower(trim($parsedAction[0])),
 | |
|                 'nextendaction'     => strtolower(trim($parsedAction[1]))
 | |
|             ) + $queryArgs;
 | |
| 
 | |
|         if ($isPost || $isAjax) {
 | |
|             $queryArgs += Form::tokenizeUrl();
 | |
|         }
 | |
| 
 | |
|         return UrlHelper::add_query_arg($queryArgs, $baseUrl);
 | |
|     }
 | |
| 
 | |
|     public function setMultiSite() {
 | |
| 
 | |
|         $this->platformRouter->setMultiSite();
 | |
|     }
 | |
| 
 | |
|     public function unSetMultiSite() {
 | |
| 
 | |
|         $this->platformRouter->unSetMultiSite();
 | |
|     }
 | |
| } |