diff --git a/classes/Multilang.php b/classes/Multilang.php
deleted file mode 100644
index d15e454..0000000
--- a/classes/Multilang.php
+++ /dev/null
@@ -1,9 +0,0 @@
-load('multilang');
-
- if($config->auto_detect)
- {
- // Get the list of supported languages
- $languages = $config->languages;
- $cookie = $config->cookie;
-
- // Look for language cookie first
- if($lang = Cookie::get($cookie))
- {
- // Valid language found in cookie
- if(isset($languages[$lang]))
- {
- return $lang;
- }
-
- // Delete cookie with unset language
- Cookie::delete($cookie);
- }
-
- // Parse HTTP Accept-Language headers
- foreach(Request::accept_lang() as $lang => $quality)
- {
- // Return the first language found (the language with the highest quality)
- if(isset($languages[$lang]))
- {
- return $lang;
- }
- }
- }
- // Return the hard-coded default language as final fallback
- return $config->default;
- }
-
- /**
- * Initialize the config and cookies
- */
- static public function init()
- {
- $config = Kohana::$config->load('multilang');
-
- // Get the list of supported languages
- $langs = $config->languages;
-
- // Set the language in I18n
- I18n::lang($langs[Request::$lang]['i18n']);
-
- // Set locale
- setlocale(LC_ALL, $langs[Request::$lang]['locale']);
-
- $cookie = $config->cookie;
- // Update language cookie if needed
- if(Cookie::get($cookie) !== Request::$lang)
- {
- Cookie::set($cookie, Request::$lang);
- }
- }
-
- /**
- * Return a language selector menu
- * @param boolean $current Display the current language or not
- * @return View
- */
- static public function selector($current = TRUE)
- {
- $config = Kohana::$config->load('multilang');
-
- $languages = $config->languages;
-
- // Get the current route name
- $current_route = Route::name(Request::initial()->route());
-
-
- $params = Request::initial()->param();
-
- if($current_route !== 'default' && strpos($current_route, '.') !== FALSE)
- {
- // Split the route path
- list($lang, $name) = explode('.', $current_route, 2);
- }
- else
- {
- $name = $current_route;
- }
-
- // Create uris for each language
- foreach($languages as $lang => &$language)
- {
- // If it's the current language
- if($lang === Request::$lang)
- {
- // We only display it when required
- if($current)
- {
- $selectors[$lang] = ''.$languages[$lang]['label'].'';
- }
- }
- else
- {
- $route = NULL;
-
- // If it's the default route, it's unique and special (like you <3)
- if($current_route === 'default')
- {
- // We juste need to change the language parameter
- $route = Request::initial()->route();
- $params['lang'] = NULL;
- if(!$config->hide_default || $config->default !== $lang)
- {
- $params['lang'] = $lang;
- }
-
-
- }
- else
- {
- if(Arr::get(Route::all(), $lang.'.'.$name))
- {
- $route = Route::get($name, $lang);
- }
- }
-
- if($route !== NULL)
- {
- $selectors[$lang] = HTML::anchor($route->uri($params), $languages[$lang]['label'], array('class' => 'multilang-selectable multilang-'.$lang, 'title' => $languages[$lang]['label']));
- }
- }
- }
-
- // We display the menu only if we can select another language for this page
- if(count($selectors) > 1)
- {
- return View::factory('multilang/selector')
- ->bind('selectors', $selectors);
- }
- return '';
- }
-}
\ No newline at end of file
diff --git a/classes/Multilang/Request.php b/classes/Multilang/Request.php
deleted file mode 100644
index b85f29c..0000000
--- a/classes/Multilang/Request.php
+++ /dev/null
@@ -1,199 +0,0 @@
-load('multilang');
-
- // If we don't hide the default language, we must look for a language code for the root uri
- if(Request::detect_uri() === '' AND $config->auto_detect AND $uri === TRUE)
- {
- $lang = Multilang::find_user_language();
- if(!$config->hide_default OR $lang != $config->default)
- {
- // Use the default server protocol
- $protocol = (isset($_SERVER['SERVER_PROTOCOL'])) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1';
-
- // Redirect to the root URI, but with language prepended
- header($protocol.' 302 Found');
- header('Location: '.URL::base(TRUE, TRUE).$lang.'/');
- exit;
- }
- }
-
- return parent::factory($uri, $client_params, $allow_external, $injected_routes);
- }
-
- /**
- * We don't want to remove the trailing slash from the uri
- */
- public function __construct($uri, $client_params = array(), $allow_external = TRUE, $injected_routes = array())
- {
- $client_params = is_array($client_params) ? $client_params : array();
-
- // Initialise the header
- $this->_header = new HTTP_Header(array());
-
- // Assign injected routes
- $this->_routes = $injected_routes;
-
- // Cleanse query parameters from URI (faster that parse_url())
- $split_uri = explode('?', $uri);
- $uri = array_shift($split_uri);
-
- // Initial request has global $_GET already applied
- if (Request::$initial !== NULL)
- {
- if ($split_uri)
- {
- parse_str($split_uri[0], $this->_get);
- }
- }
-
- // Detect protocol (if present)
- // $allow_external = FALSE prevents the default index.php from
- // being able to proxy external pages.
- if ( ! $allow_external OR strpos($uri, '://') === FALSE)
- {
- // Remove trailing slashes from the URI (We don't want that)
- //$this->_uri = trim($uri, '/');
- $this->_uri = ltrim($uri, '/');
- //$this->_route = new Route($uri);
- // Apply the client
- $this->_client = new Request_Client_Internal($client_params);
- }
- else
- {
- // Create a route
- $this->_route = new Route($uri);
-
- // Store the URI
- $this->_uri = $uri;
-
- // Set the security setting if required
- if (strpos($uri, 'https://') === 0)
- {
- $this->secure(TRUE);
- }
-
- // Set external state
- $this->_external = TRUE;
-
- // Setup the client
- $this->_client = Request_Client_External::factory($client_params);
- }
- }
-
- /**
- * Altered to detect the language in the uri
- *
- * @return Response
- * @throws Request_Exception
- * @throws HTTP_Exception_404
- * @uses [Kohana::$profiling]
- * @uses [Profiler]
- */
- public function execute()
- {
- if ( ! $this->_external)
- {
- $processed = Request::process($this, $this->_routes);
-
- if ($processed)
- {
- // Store the matching route
- $this->_route = $processed['route'];
- $params = $processed['params'];
-
- // Is this route external?
- $this->_external = $this->_route->is_external();
-
- if (isset($params['directory']))
- {
- // Controllers are in a sub-directory
- $this->_directory = $params['directory'];
- }
-
- // Store the controller
- $this->_controller = $params['controller'];
-
- // Store the action
- $this->_action = (isset($params['action']))
- ? $params['action']
- : Route::$default_action;
-
- // These are accessible as public vars and can be overloaded
- unset($params['controller'], $params['action'], $params['directory']);
-
- // Params cannot be changed once matched
- $this->_params = $params;
- }
- }
-
- if ( ! $this->_route instanceof Route)
- {
- return HTTP_Exception::factory(404, 'Unable to find a route to match the URI: :uri', array(
- ':uri' => $this->_uri,
- ))->request($this)
- ->get_response();
- }
-
- if ( ! $this->_client instanceof Request_Client)
- {
- throw new Request_Exception('Unable to execute :uri without a Kohana_Request_Client', array(
- ':uri' => $this->_uri,
- ));
- }
-
- // Multilang part
- if(Request::$lang === NULL)
- {
- Request::$lang = $this->_route->lang;
- }
-
- $config = Kohana::$config->load('multilang');
- if($config->hide_default AND $this->param('lang') === NULL OR $this->_route->lang === NULL AND $this->param('lang') === NULL)
- {
- Request::$lang = $config->default;
- }
- else
- {
- Request::$lang = $this->param('lang');
- }
- Multilang::init();
-
- return $this->_client->execute($this);
- }
-
-
-}
\ No newline at end of file
diff --git a/classes/Multilang/Route.php b/classes/Multilang/Route.php
deleted file mode 100644
index d94f483..0000000
--- a/classes/Multilang/Route.php
+++ /dev/null
@@ -1,346 +0,0 @@
-load('multilang');
-
- if(!$config->hide_default || $config->default != $lang)
- {
- if($lang !== NULL)
- {
- $uri_callback = '/'.$uri_callback;
- $regex['lang'] = $lang;
- }
- }
-
- if($lang !== NULL)
- {
- $name = $lang.'.'.$name;
- }
-
- return Route::$_routes[$name] = new Route($uri_callback, $regex, $lang);
- }
-
-
- /**
- * Retrieves a named route.
- *
- * $route = Route::get('default');
- *
- * @param string route name
- * @return Route
- * @throws Kohana_Exception
- */
- static public function get($name, $lang = NULL)
- {
- // We use the current language if none given
- if($lang === NULL)
- {
- $lang = Request::$lang;
- }
-
- // We first look for a "given_language.name" route.
- if(isset(Route::$_routes[$lang.'.'.$name]))
- {
- $name = $lang.'.'.$name;
-
- } // then the default language
- elseif(isset(Route::$_routes[Kohana::$config->load('multilang')->default.'.'.$name])) {
- $name = $config->default.'.'.$name;
- }
- // And if we don't have any for this language, it means that route is neither defined nor multilingual
- return parent::get($name);
- }
-
- /**
- * Altered constructor to handle multilingual routes
- *
- * Creates a new route. Sets the URI and regular expressions for keys.
- * Routes should always be created with [Route::set] or they will not
- * be properly stored.
- *
- * $route = new Route($uri, $regex);
- *
- * The $uri parameter can either be a string for basic regex matching or it
- * can be a valid callback or anonymous function (php 5.3+). If you use a
- * callback or anonymous function, your method should return an array
- * containing the proper keys for the route. If you want the route to be
- * "reversable", you need to return a 'uri' key in the standard syntax.
- *
- * $route = new Route(function($uri)
- * {
- * if (list($controller, $action, $param) = explode('/', $uri) AND $controller == 'foo' AND $action == 'bar')
- * {
- * return array(
- * 'controller' => 'foobar',
- * 'action' => $action,
- * 'id' => $param,
- * 'uri' => 'foo/bar/.html
- * );
- * }
- * });
- *
- * @param mixed route URI pattern or lambda/callback function
- * @param array key patterns
- * @param
- * @return void
- * @uses Route::_compile
- */
- public function __construct($uri = NULL, array $regex = NULL, $lang = NULL)
- {
- $this->lang = $lang;
- return parent::__construct($uri, $regex);
- }
-
-
- /**
- * Generates a URI for the current route based on the parameters given.
- *
- * // Using the "default" route: "users/profile/10"
- * $route->uri(array(
- * 'controller' => 'users',
- * 'action' => 'profile',
- * 'id' => '10'
- * ));
- *
- * @param array $params URI parameters
- * @return string
- * @throws Kohana_Exception
- * @uses Route::REGEX_Key
- */
- public function uri(array $params = NULL, $lang = NULL)
- {
- // We define the language if required
- if($this->lang !== NULL)
- {
- $params['lang'] = ($lang === NULL ? $this->lang : $lang);
- }
-
- // Start with the routed URI
- $uri = $this->_uri;
-
- if (strpos($uri, '<') === FALSE AND strpos($uri, '(') === FALSE)
- {
- // This is a static route, no need to replace anything
-
- if ( ! $this->is_external())
- return $uri;
-
- // If the localhost setting does not have a protocol
- if (strpos($this->_defaults['host'], '://') === FALSE)
- {
- // Use the default defined protocol
- $params['host'] = Route::$default_protocol.$this->_defaults['host'];
- }
- else
- {
- // Use the supplied host with protocol
- $params['host'] = $this->_defaults['host'];
- }
-
- // Compile the final uri and return it
- return rtrim($params['host'], '/').'/'.$uri;
- }
-
- // Keep track of whether an optional param was replaced
- $provided_optional = FALSE;
-
- while (preg_match('#\([^()]++\)#', $uri, $match))
- {
-
- // Search for the matched value
- $search = $match[0];
-
- // Remove the parenthesis from the match as the replace
- $replace = substr($match[0], 1, -1);
-
- while (preg_match('#'.Route::REGEX_KEY.'#', $replace, $match))
- {
- list($key, $param) = $match;
-
- if (isset($params[$param]) AND $params[$param] !== Arr::get($this->_defaults, $param))
- {
- // Future optional params should be required
- $provided_optional = TRUE;
-
- // Replace the key with the parameter value
- $replace = str_replace($key, $params[$param], $replace);
- }
- elseif ($provided_optional)
- {
- // Look for a default
- if (isset($this->_defaults[$param]))
- {
- $replace = str_replace($key, $this->_defaults[$param], $replace);
- }
- else
- {
- // Ungrouped parameters are required
- throw new Kohana_Exception('Required route parameter not passed: :param', array(
- ':param' => $param,
- ));
- }
- }
- else
- {
- // This group has missing parameters
- $replace = '';
- break;
- }
- }
-
- // Replace the group in the URI
- $uri = str_replace($search, $replace, $uri);
- }
-
- while (preg_match('#'.Route::REGEX_KEY.'#', $uri, $match))
- {
- list($key, $param) = $match;
-
- if ( ! isset($params[$param]))
- {
- // Look for a default
- if (isset($this->_defaults[$param]))
- {
- $params[$param] = $this->_defaults[$param];
- }
- else
- {
- // Ungrouped parameters are required
- throw new Kohana_Exception('Required route parameter not passed: :param', array(
- ':param' => $param,
- ));
- }
- }
-
- $uri = str_replace($key, $params[$param], $uri);
- }
-
- // Trim all extra slashes from the URI
- //$uri = preg_replace('#//+#', '/', rtrim($uri, '/'));
- $uri = preg_replace('#//+#', '/', $uri);
-
- if ($this->is_external())
- {
- // Need to add the host to the URI
- $host = $this->_defaults['host'];
-
- if (strpos($host, '://') === FALSE)
- {
- // Use the default defined protocol
- $host = Route::$default_protocol.$host;
- }
-
- // Clean up the host and prepend it to the URI
- $uri = rtrim($host, '/').'/'.$uri;
- }
-
- return $uri;
- }
-
- /**
- * Altered method to handle multilingual parameter
- *
- * Create a URL from a route name. This is a shortcut for:
- *
- * echo URL::site(Route::get($name)->uri($params), $protocol);
- *
- * @param string route name
- * @param array URI parameters
- * @param mixed protocol string or boolean, adds protocol and domain
- * @return string
- * @since 3.0.7
- * @uses URL::site
- */
- static public function url($name, array $params = NULL, $protocol = NULL, $lang = NULL)
- {
- // Create a URI with the route and convert it to a URL
- return URL::site(Route::get($name, $lang)->uri($params), $protocol);
- }
-
- /**
- * We don't want to remove the trailing slash.
- */
- public function matches(Request $request)
- {
- // Get the URI from the Request
- //$uri = trim($request->uri(), '/');
- $uri = ltrim($request->uri(), '/');
-
- if ( ! preg_match($this->_route_regex, $uri, $matches))
- return FALSE;
-
- $params = array();
- foreach ($matches as $key => $value)
- {
- if (is_int($key))
- {
- // Skip all unnamed keys
- continue;
- }
-
- // Set the value for all matched keys
- $params[$key] = $value;
- }
-
- foreach ($this->_defaults as $key => $value)
- {
- if ( ! isset($params[$key]) OR $params[$key] === '')
- {
- // Set default values for any key that was not matched
- $params[$key] = $value;
- }
- }
-
- if ( ! empty($params['controller']))
- {
- // PSR-0: Replace underscores with spaces, run ucwords, then replace underscore
- $params['controller'] = str_replace(' ', '_', ucwords(str_replace('_', ' ', $params['controller'])));
- }
-
- if ( ! empty($params['directory']))
- {
- // PSR-0: Replace underscores with spaces, run ucwords, then replace underscore
- $params['directory'] = str_replace(' ', '_', ucwords(str_replace('_', ' ', $params['directory'])));
- }
-
- if ($this->_filters)
- {
- foreach ($this->_filters as $callback)
- {
- // Execute the filter giving it the route, params, and request
- $return = call_user_func($callback, $this, $params, $request);
-
- if ($return === FALSE)
- {
- // Filter has aborted the match
- return FALSE;
- }
- elseif (is_array($return))
- {
- // Filter has modified the parameters
- $params = $return;
- }
- }
- }
-
- return $params;
- }
-
-}
\ No newline at end of file
diff --git a/classes/Multilang/Routes.php b/classes/Multilang/Routes.php
deleted file mode 100644
index 4be4498..0000000
--- a/classes/Multilang/Routes.php
+++ /dev/null
@@ -1,77 +0,0 @@
- 'home',
- * 'fr' => 'accueil',
- * ))->defaults(array(
- * 'controller' => 'homepage',
- * 'action' => 'index',
- * ));
- *
- * @param string route name
- * @param array URI patterns (array of "language code" => "uri")
- * @param array regex patterns for route keys
- * @return Routes
- */
- static public function set($name, $uris = array(), $regex = NULL)
- {
- $config = Kohana::$config->load('multilang');
- $routes = new Routes();
-
- // We add the routes for each language and set their names to lang.name (en.homepage for example).
- // The segment is also added on the uri if it's not hidden
-
- $default_lang = $config->default;
- $languages = $config->languages;
-
- // We first look for the default language uri which is obviously compulsory
- $default_uri = Arr::get($uris, $default_lang);
- if($default_uri === NULL)
- {
- throw new Kohana_Exception('The default language route uri is required for the route: :route', array(':route' => $name));
- }
- else
- {
- $routes->_routes[$default_lang.'.'.$name] = Route::set($name, $default_uri, $regex, $default_lang);
- }
- unset($languages[$default_lang]);
-
- // Then we add the routes for all the other languages
- foreach($languages as $lang => $settings)
- {
- $uri = (Arr::get($uris, $lang) ? $uris[$lang] : $uris[$default_lang]);
-
- // For the uri, we use the one given or the default one
- $routes->_routes[$lang.'.'.$name] = Route::set($name, $uri, $regex, $lang);
- }
- return $routes;
- }
-
-
- /**
- * Set the defaults values for each route
- * @param array $defaults
- * @return Multilang_Routes
- */
- public function defaults(array $defaults = NULL)
- {
- foreach($this->_routes as $route)
- {
- $route->defaults($defaults);
- }
- return $this;
- }
-
-
-}
\ No newline at end of file
diff --git a/classes/Multilang/URL.php b/classes/Multilang/URL.php
deleted file mode 100644
index 570f754..0000000
--- a/classes/Multilang/URL.php
+++ /dev/null
@@ -1,22 +0,0 @@
-load('multilang');
-
- if($config->auto_detect)
- {
- // Get the list of supported languages
- $languages = $config->languages;
- $cookie = $config->cookie;
-
- // Look for language cookie first
- if($lang = Cookie::get($cookie))
- {
- // Valid language found in cookie
- if(isset($languages[$lang]))
- {
- return $lang;
- }
-
- // Delete cookie with unset language
- Cookie::delete($cookie);
- }
-
- // Parse HTTP Accept-Language headers
- foreach(Request::accept_lang() as $lang => $quality)
- {
- // Return the first language found (the language with the highest quality)
- if(isset($languages[$lang]))
- {
- return $lang;
- }
- }
- }
- // Return the hard-coded default language as final fallback
- return $config->default;
- }
-
- /**
- * Initialize the config and cookies
- */
- static public function init()
- {
- $config = Kohana::$config->load('multilang');
-
- // Get the list of supported languages
- $langs = $config->languages;
-
- // Set the language in I18n
- I18n::lang($langs[Request::$lang]['i18n']);
-
- // Set locale
- setlocale(LC_ALL, $langs[Request::$lang]['locale']);
-
- $cookie = $config->cookie;
- // Update language cookie if needed
- if(Cookie::get($cookie) !== Request::$lang)
- {
- Cookie::set($cookie, Request::$lang);
- }
- }
-
- /**
- * Return a language selector menu
- * @param boolean $current Display the current language or not
- * @return View
- */
- static public function selector($current = TRUE)
- {
- $config = Kohana::$config->load('multilang');
-
- $languages = $config->languages;
-
- // Get the current route name
- $current_route = Route::name(Request::initial()->route());
-
-
- $params = Request::initial()->param();
-
- if($current_route !== 'default' && strpos($current_route, '.') !== FALSE)
- {
- // Split the route path
- list($lang, $name) = explode('.', $current_route, 2);
- }
- else
- {
- $name = $current_route;
- }
-
- // Create uris for each language
- foreach($languages as $lang => &$language)
- {
- // If it's the current language
- if($lang === Request::$lang)
- {
- // We only display it when required
- if($current)
- {
- $selectors[$lang] = ''.$languages[$lang]['label'].'';
- }
- }
- else
- {
- $route = NULL;
-
- // If it's the default route, it's unique and special (like you <3)
- if($current_route === 'default')
- {
- // We juste need to change the language parameter
- $route = Request::initial()->route();
- $params['lang'] = NULL;
- if(!$config->hide_default || $config->default !== $lang)
- {
- $params['lang'] = $lang;
- }
-
-
- }
- else
- {
- if(Arr::get(Route::all(), $lang.'.'.$name))
- {
- $route = Route::get($name, $lang);
- }
- }
-
- if($route !== NULL)
- {
- $selectors[$lang] = HTML::anchor($route->uri($params), $languages[$lang]['label'], array('class' => 'multilang-selectable multilang-'.$lang, 'title' => $languages[$lang]['label']));
- }
- }
- }
-
- // We display the menu only if we can select another language for this page
- if(count($selectors) > 1)
- {
- return View::factory('multilang/selector')
- ->bind('selectors', $selectors);
- }
- return '';
- }
-}
\ No newline at end of file
diff --git a/classes/multilang/request.php b/classes/multilang/request.php
deleted file mode 100644
index b85f29c..0000000
--- a/classes/multilang/request.php
+++ /dev/null
@@ -1,199 +0,0 @@
-load('multilang');
-
- // If we don't hide the default language, we must look for a language code for the root uri
- if(Request::detect_uri() === '' AND $config->auto_detect AND $uri === TRUE)
- {
- $lang = Multilang::find_user_language();
- if(!$config->hide_default OR $lang != $config->default)
- {
- // Use the default server protocol
- $protocol = (isset($_SERVER['SERVER_PROTOCOL'])) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1';
-
- // Redirect to the root URI, but with language prepended
- header($protocol.' 302 Found');
- header('Location: '.URL::base(TRUE, TRUE).$lang.'/');
- exit;
- }
- }
-
- return parent::factory($uri, $client_params, $allow_external, $injected_routes);
- }
-
- /**
- * We don't want to remove the trailing slash from the uri
- */
- public function __construct($uri, $client_params = array(), $allow_external = TRUE, $injected_routes = array())
- {
- $client_params = is_array($client_params) ? $client_params : array();
-
- // Initialise the header
- $this->_header = new HTTP_Header(array());
-
- // Assign injected routes
- $this->_routes = $injected_routes;
-
- // Cleanse query parameters from URI (faster that parse_url())
- $split_uri = explode('?', $uri);
- $uri = array_shift($split_uri);
-
- // Initial request has global $_GET already applied
- if (Request::$initial !== NULL)
- {
- if ($split_uri)
- {
- parse_str($split_uri[0], $this->_get);
- }
- }
-
- // Detect protocol (if present)
- // $allow_external = FALSE prevents the default index.php from
- // being able to proxy external pages.
- if ( ! $allow_external OR strpos($uri, '://') === FALSE)
- {
- // Remove trailing slashes from the URI (We don't want that)
- //$this->_uri = trim($uri, '/');
- $this->_uri = ltrim($uri, '/');
- //$this->_route = new Route($uri);
- // Apply the client
- $this->_client = new Request_Client_Internal($client_params);
- }
- else
- {
- // Create a route
- $this->_route = new Route($uri);
-
- // Store the URI
- $this->_uri = $uri;
-
- // Set the security setting if required
- if (strpos($uri, 'https://') === 0)
- {
- $this->secure(TRUE);
- }
-
- // Set external state
- $this->_external = TRUE;
-
- // Setup the client
- $this->_client = Request_Client_External::factory($client_params);
- }
- }
-
- /**
- * Altered to detect the language in the uri
- *
- * @return Response
- * @throws Request_Exception
- * @throws HTTP_Exception_404
- * @uses [Kohana::$profiling]
- * @uses [Profiler]
- */
- public function execute()
- {
- if ( ! $this->_external)
- {
- $processed = Request::process($this, $this->_routes);
-
- if ($processed)
- {
- // Store the matching route
- $this->_route = $processed['route'];
- $params = $processed['params'];
-
- // Is this route external?
- $this->_external = $this->_route->is_external();
-
- if (isset($params['directory']))
- {
- // Controllers are in a sub-directory
- $this->_directory = $params['directory'];
- }
-
- // Store the controller
- $this->_controller = $params['controller'];
-
- // Store the action
- $this->_action = (isset($params['action']))
- ? $params['action']
- : Route::$default_action;
-
- // These are accessible as public vars and can be overloaded
- unset($params['controller'], $params['action'], $params['directory']);
-
- // Params cannot be changed once matched
- $this->_params = $params;
- }
- }
-
- if ( ! $this->_route instanceof Route)
- {
- return HTTP_Exception::factory(404, 'Unable to find a route to match the URI: :uri', array(
- ':uri' => $this->_uri,
- ))->request($this)
- ->get_response();
- }
-
- if ( ! $this->_client instanceof Request_Client)
- {
- throw new Request_Exception('Unable to execute :uri without a Kohana_Request_Client', array(
- ':uri' => $this->_uri,
- ));
- }
-
- // Multilang part
- if(Request::$lang === NULL)
- {
- Request::$lang = $this->_route->lang;
- }
-
- $config = Kohana::$config->load('multilang');
- if($config->hide_default AND $this->param('lang') === NULL OR $this->_route->lang === NULL AND $this->param('lang') === NULL)
- {
- Request::$lang = $config->default;
- }
- else
- {
- Request::$lang = $this->param('lang');
- }
- Multilang::init();
-
- return $this->_client->execute($this);
- }
-
-
-}
\ No newline at end of file
diff --git a/classes/multilang/route.php b/classes/multilang/route.php
deleted file mode 100644
index d94f483..0000000
--- a/classes/multilang/route.php
+++ /dev/null
@@ -1,346 +0,0 @@
-load('multilang');
-
- if(!$config->hide_default || $config->default != $lang)
- {
- if($lang !== NULL)
- {
- $uri_callback = '/'.$uri_callback;
- $regex['lang'] = $lang;
- }
- }
-
- if($lang !== NULL)
- {
- $name = $lang.'.'.$name;
- }
-
- return Route::$_routes[$name] = new Route($uri_callback, $regex, $lang);
- }
-
-
- /**
- * Retrieves a named route.
- *
- * $route = Route::get('default');
- *
- * @param string route name
- * @return Route
- * @throws Kohana_Exception
- */
- static public function get($name, $lang = NULL)
- {
- // We use the current language if none given
- if($lang === NULL)
- {
- $lang = Request::$lang;
- }
-
- // We first look for a "given_language.name" route.
- if(isset(Route::$_routes[$lang.'.'.$name]))
- {
- $name = $lang.'.'.$name;
-
- } // then the default language
- elseif(isset(Route::$_routes[Kohana::$config->load('multilang')->default.'.'.$name])) {
- $name = $config->default.'.'.$name;
- }
- // And if we don't have any for this language, it means that route is neither defined nor multilingual
- return parent::get($name);
- }
-
- /**
- * Altered constructor to handle multilingual routes
- *
- * Creates a new route. Sets the URI and regular expressions for keys.
- * Routes should always be created with [Route::set] or they will not
- * be properly stored.
- *
- * $route = new Route($uri, $regex);
- *
- * The $uri parameter can either be a string for basic regex matching or it
- * can be a valid callback or anonymous function (php 5.3+). If you use a
- * callback or anonymous function, your method should return an array
- * containing the proper keys for the route. If you want the route to be
- * "reversable", you need to return a 'uri' key in the standard syntax.
- *
- * $route = new Route(function($uri)
- * {
- * if (list($controller, $action, $param) = explode('/', $uri) AND $controller == 'foo' AND $action == 'bar')
- * {
- * return array(
- * 'controller' => 'foobar',
- * 'action' => $action,
- * 'id' => $param,
- * 'uri' => 'foo/bar/.html
- * );
- * }
- * });
- *
- * @param mixed route URI pattern or lambda/callback function
- * @param array key patterns
- * @param
- * @return void
- * @uses Route::_compile
- */
- public function __construct($uri = NULL, array $regex = NULL, $lang = NULL)
- {
- $this->lang = $lang;
- return parent::__construct($uri, $regex);
- }
-
-
- /**
- * Generates a URI for the current route based on the parameters given.
- *
- * // Using the "default" route: "users/profile/10"
- * $route->uri(array(
- * 'controller' => 'users',
- * 'action' => 'profile',
- * 'id' => '10'
- * ));
- *
- * @param array $params URI parameters
- * @return string
- * @throws Kohana_Exception
- * @uses Route::REGEX_Key
- */
- public function uri(array $params = NULL, $lang = NULL)
- {
- // We define the language if required
- if($this->lang !== NULL)
- {
- $params['lang'] = ($lang === NULL ? $this->lang : $lang);
- }
-
- // Start with the routed URI
- $uri = $this->_uri;
-
- if (strpos($uri, '<') === FALSE AND strpos($uri, '(') === FALSE)
- {
- // This is a static route, no need to replace anything
-
- if ( ! $this->is_external())
- return $uri;
-
- // If the localhost setting does not have a protocol
- if (strpos($this->_defaults['host'], '://') === FALSE)
- {
- // Use the default defined protocol
- $params['host'] = Route::$default_protocol.$this->_defaults['host'];
- }
- else
- {
- // Use the supplied host with protocol
- $params['host'] = $this->_defaults['host'];
- }
-
- // Compile the final uri and return it
- return rtrim($params['host'], '/').'/'.$uri;
- }
-
- // Keep track of whether an optional param was replaced
- $provided_optional = FALSE;
-
- while (preg_match('#\([^()]++\)#', $uri, $match))
- {
-
- // Search for the matched value
- $search = $match[0];
-
- // Remove the parenthesis from the match as the replace
- $replace = substr($match[0], 1, -1);
-
- while (preg_match('#'.Route::REGEX_KEY.'#', $replace, $match))
- {
- list($key, $param) = $match;
-
- if (isset($params[$param]) AND $params[$param] !== Arr::get($this->_defaults, $param))
- {
- // Future optional params should be required
- $provided_optional = TRUE;
-
- // Replace the key with the parameter value
- $replace = str_replace($key, $params[$param], $replace);
- }
- elseif ($provided_optional)
- {
- // Look for a default
- if (isset($this->_defaults[$param]))
- {
- $replace = str_replace($key, $this->_defaults[$param], $replace);
- }
- else
- {
- // Ungrouped parameters are required
- throw new Kohana_Exception('Required route parameter not passed: :param', array(
- ':param' => $param,
- ));
- }
- }
- else
- {
- // This group has missing parameters
- $replace = '';
- break;
- }
- }
-
- // Replace the group in the URI
- $uri = str_replace($search, $replace, $uri);
- }
-
- while (preg_match('#'.Route::REGEX_KEY.'#', $uri, $match))
- {
- list($key, $param) = $match;
-
- if ( ! isset($params[$param]))
- {
- // Look for a default
- if (isset($this->_defaults[$param]))
- {
- $params[$param] = $this->_defaults[$param];
- }
- else
- {
- // Ungrouped parameters are required
- throw new Kohana_Exception('Required route parameter not passed: :param', array(
- ':param' => $param,
- ));
- }
- }
-
- $uri = str_replace($key, $params[$param], $uri);
- }
-
- // Trim all extra slashes from the URI
- //$uri = preg_replace('#//+#', '/', rtrim($uri, '/'));
- $uri = preg_replace('#//+#', '/', $uri);
-
- if ($this->is_external())
- {
- // Need to add the host to the URI
- $host = $this->_defaults['host'];
-
- if (strpos($host, '://') === FALSE)
- {
- // Use the default defined protocol
- $host = Route::$default_protocol.$host;
- }
-
- // Clean up the host and prepend it to the URI
- $uri = rtrim($host, '/').'/'.$uri;
- }
-
- return $uri;
- }
-
- /**
- * Altered method to handle multilingual parameter
- *
- * Create a URL from a route name. This is a shortcut for:
- *
- * echo URL::site(Route::get($name)->uri($params), $protocol);
- *
- * @param string route name
- * @param array URI parameters
- * @param mixed protocol string or boolean, adds protocol and domain
- * @return string
- * @since 3.0.7
- * @uses URL::site
- */
- static public function url($name, array $params = NULL, $protocol = NULL, $lang = NULL)
- {
- // Create a URI with the route and convert it to a URL
- return URL::site(Route::get($name, $lang)->uri($params), $protocol);
- }
-
- /**
- * We don't want to remove the trailing slash.
- */
- public function matches(Request $request)
- {
- // Get the URI from the Request
- //$uri = trim($request->uri(), '/');
- $uri = ltrim($request->uri(), '/');
-
- if ( ! preg_match($this->_route_regex, $uri, $matches))
- return FALSE;
-
- $params = array();
- foreach ($matches as $key => $value)
- {
- if (is_int($key))
- {
- // Skip all unnamed keys
- continue;
- }
-
- // Set the value for all matched keys
- $params[$key] = $value;
- }
-
- foreach ($this->_defaults as $key => $value)
- {
- if ( ! isset($params[$key]) OR $params[$key] === '')
- {
- // Set default values for any key that was not matched
- $params[$key] = $value;
- }
- }
-
- if ( ! empty($params['controller']))
- {
- // PSR-0: Replace underscores with spaces, run ucwords, then replace underscore
- $params['controller'] = str_replace(' ', '_', ucwords(str_replace('_', ' ', $params['controller'])));
- }
-
- if ( ! empty($params['directory']))
- {
- // PSR-0: Replace underscores with spaces, run ucwords, then replace underscore
- $params['directory'] = str_replace(' ', '_', ucwords(str_replace('_', ' ', $params['directory'])));
- }
-
- if ($this->_filters)
- {
- foreach ($this->_filters as $callback)
- {
- // Execute the filter giving it the route, params, and request
- $return = call_user_func($callback, $this, $params, $request);
-
- if ($return === FALSE)
- {
- // Filter has aborted the match
- return FALSE;
- }
- elseif (is_array($return))
- {
- // Filter has modified the parameters
- $params = $return;
- }
- }
- }
-
- return $params;
- }
-
-}
\ No newline at end of file
diff --git a/classes/multilang/routes.php b/classes/multilang/routes.php
deleted file mode 100644
index 4be4498..0000000
--- a/classes/multilang/routes.php
+++ /dev/null
@@ -1,77 +0,0 @@
- 'home',
- * 'fr' => 'accueil',
- * ))->defaults(array(
- * 'controller' => 'homepage',
- * 'action' => 'index',
- * ));
- *
- * @param string route name
- * @param array URI patterns (array of "language code" => "uri")
- * @param array regex patterns for route keys
- * @return Routes
- */
- static public function set($name, $uris = array(), $regex = NULL)
- {
- $config = Kohana::$config->load('multilang');
- $routes = new Routes();
-
- // We add the routes for each language and set their names to lang.name (en.homepage for example).
- // The segment is also added on the uri if it's not hidden
-
- $default_lang = $config->default;
- $languages = $config->languages;
-
- // We first look for the default language uri which is obviously compulsory
- $default_uri = Arr::get($uris, $default_lang);
- if($default_uri === NULL)
- {
- throw new Kohana_Exception('The default language route uri is required for the route: :route', array(':route' => $name));
- }
- else
- {
- $routes->_routes[$default_lang.'.'.$name] = Route::set($name, $default_uri, $regex, $default_lang);
- }
- unset($languages[$default_lang]);
-
- // Then we add the routes for all the other languages
- foreach($languages as $lang => $settings)
- {
- $uri = (Arr::get($uris, $lang) ? $uris[$lang] : $uris[$default_lang]);
-
- // For the uri, we use the one given or the default one
- $routes->_routes[$lang.'.'.$name] = Route::set($name, $uri, $regex, $lang);
- }
- return $routes;
- }
-
-
- /**
- * Set the defaults values for each route
- * @param array $defaults
- * @return Multilang_Routes
- */
- public function defaults(array $defaults = NULL)
- {
- foreach($this->_routes as $route)
- {
- $route->defaults($defaults);
- }
- return $this;
- }
-
-
-}
\ No newline at end of file
diff --git a/classes/multilang/url.php b/classes/multilang/url.php
deleted file mode 100644
index 570f754..0000000
--- a/classes/multilang/url.php
+++ /dev/null
@@ -1,22 +0,0 @@
-