| | <?php |
| |
|
| | namespace Kanboard\Core\Http; |
| |
|
| | use Kanboard\Core\Base; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | class Route extends Base |
| | { |
| | |
| | |
| | |
| | |
| | |
| | |
| | private $activated = false; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | private $paths = array(); |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | private $urls = array(); |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function enable() |
| | { |
| | $this->activated = true; |
| | return $this; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function addRoute($path, $controller, $action, $plugin = '') |
| | { |
| | if ($this->activated) { |
| | $path = ltrim($path, '/'); |
| | $items = explode('/', $path); |
| | $params = $this->findParams($items); |
| |
|
| | $this->paths[] = array( |
| | 'items' => $items, |
| | 'count' => count($items), |
| | 'controller' => $controller, |
| | 'action' => $action, |
| | 'plugin' => $plugin, |
| | ); |
| |
|
| | $this->urls[$plugin][$controller][$action][] = array( |
| | 'path' => $path, |
| | 'params' => $params, |
| | 'count' => count($params), |
| | ); |
| | } |
| |
|
| | return $this; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function findRoute($path) |
| | { |
| | $items = explode('/', ltrim($path, '/')); |
| | $count = count($items); |
| |
|
| | foreach ($this->paths as $route) { |
| | if ($count === $route['count']) { |
| | $params = array(); |
| |
|
| | for ($i = 0; $i < $count; $i++) { |
| | if ($route['items'][$i][0] === ':') { |
| | $params[substr($route['items'][$i], 1)] = urldecode($items[$i]); |
| | } elseif ($route['items'][$i] !== $items[$i]) { |
| | break; |
| | } |
| | } |
| |
|
| | if ($i === $count) { |
| | $this->request->setParams($params); |
| | return array( |
| | 'controller' => $route['controller'], |
| | 'action' => $route['action'], |
| | 'plugin' => $route['plugin'], |
| | ); |
| | } |
| | } |
| | } |
| |
|
| | return array( |
| | 'controller' => 'DashboardController', |
| | 'action' => 'show', |
| | 'plugin' => '', |
| | ); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function findUrl($controller, $action, array $params = array(), $plugin = '') |
| | { |
| | if ($plugin === '' && isset($params['plugin'])) { |
| | $plugin = $params['plugin']; |
| | unset($params['plugin']); |
| | } |
| |
|
| | if (! isset($this->urls[$plugin][$controller][$action])) { |
| | return ''; |
| | } |
| |
|
| | foreach ($this->urls[$plugin][$controller][$action] as $route) { |
| | if (array_diff_key($params, $route['params']) === array()) { |
| | $url = $route['path']; |
| | $i = 0; |
| |
|
| | foreach ($params as $variable => $value) { |
| | $value = urlencode($value); |
| | $url = str_replace(':'.$variable, $value, $url); |
| | $i++; |
| | } |
| |
|
| | if ($i === $route['count']) { |
| | return $url; |
| | } |
| | } |
| | } |
| |
|
| | return ''; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function findParams(array $items) |
| | { |
| | $params = array(); |
| |
|
| | foreach ($items as $item) { |
| | if ($item !== '' && $item[0] === ':') { |
| | $params[substr($item, 1)] = true; |
| | } |
| | } |
| |
|
| | return $params; |
| | } |
| | } |
| |
|