You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
4.0 KiB

  1. <?php
  2. class Route extends \BaseController {
  3. public $_routes;
  4. private $_page;
  5. public function __construct() {
  6. $this->_routes = array(
  7. 'account' => false,
  8. 'accountnext' => array('s', 'err'),
  9. 'visio' => false,
  10. 'main' => false,
  11. 'news' => false,
  12. 'loading' => false,
  13. 'admin' => false,
  14. 'explore' => false,
  15. 'discover' => false,
  16. 'profile' => false,
  17. 'contact' => false,
  18. 'chat' => false,
  19. 'infos' => false,
  20. 'media' => array('f'),
  21. 'conf' => false,
  22. 'help' => false,
  23. 'about' => array('x'),
  24. 'login' => array('err'),
  25. 'pods' => false,
  26. 'disconnect' => array('err'),
  27. 'friend' => array('f'),
  28. 'blog' => array('f'),
  29. 'feed' => array('f', 'n'),
  30. 'nodeconfig' => array('s', 'n'),
  31. 'node' => array('s', 'n'),
  32. 'server' => array('s'),
  33. );
  34. }
  35. public function find() {
  36. $cd = new \Modl\ConfigDAO();
  37. $config = $cd->get();
  38. if($config->rewrite == true) {
  39. $request = explode('/', $this->fetchGet('query'));
  40. $this->_page = $request[0];
  41. array_shift($request);
  42. if(isset($this->_routes[$this->_page]))
  43. $route = $this->_routes[$this->_page];
  44. if(count($request) && isset($route)) {
  45. $i = 0;
  46. foreach($route as $key) {
  47. if (isset($request[$i])) {
  48. $_GET[$key] = $request[$i];
  49. }
  50. $i++;
  51. }
  52. }
  53. } else {
  54. $this->_page = $this->fetchGet('q');
  55. }
  56. if(empty($this->_page))
  57. $this->_page = 'main';
  58. if(!isset($this->_routes[$this->_page]))
  59. $this->_page = 'notfound';
  60. return $this->_page;
  61. }
  62. public static function urlize($page, $params = false, $tab = false) {
  63. $r = new Route();
  64. $routes = $r->_routes;
  65. $cd = new \Modl\ConfigDAO();
  66. $config = $cd->get();
  67. if($page === 'root')
  68. return BASE_URI;
  69. if(isset($routes[$page])) {
  70. if($params != false && count($routes[$page]) != count($params)) {
  71. throw new Exception(__('error.route', $page));
  72. } else {
  73. if($tab != false)
  74. $tab = '#'.$tab;
  75. //We construct a classic URL if the rewriting is disabled
  76. if($config->rewrite == false) {
  77. $uri = BASE_URI . '?q='.$page;
  78. if($params != false && is_array($params)) {
  79. $i = 0;
  80. foreach($params as $value) {
  81. $uri .= '&'.$routes[$page][$i].'='.$value;
  82. $i++;
  83. }
  84. }
  85. elseif($params != false)
  86. $uri .= '&'.$routes[$page][0].'='.$params;
  87. }
  88. // Here we got a beautiful rewriten URL !
  89. else {
  90. $uri = BASE_URI . $page;
  91. if($params != false && is_array($params))
  92. foreach($params as $value)
  93. $uri .= '/'.$value;
  94. elseif($params != false)
  95. $uri .= '/'.$params;
  96. }
  97. return $uri.$tab;
  98. }
  99. } else {
  100. throw new Exception(__('Route not set for the page %s', $page));
  101. }
  102. }
  103. }