public function init() { if ($this->_inited) { return; } $this->_inited = true; if (@application::get_instance()->config->resource->lang->type == 'session') { $lang_cookie = @$_COOKIE[$this->_key]; $lang_session = session::get('lang'); if ($lang_session) { if ($lang_session != $lang_cookie) { $this->set($lang_session); } $lang_param = $lang_session; } else { $lang_param = $lang_cookie; } } else { $lang_param = application::get_instance()->request->param->lang; } $ml = new model_lang(); $this->data = $ml->fetch_row(array('show_it' => '1'), array('(`stitle` = ' . $ml->adapter->quote($lang_param) . ')' => 'desc', '(`is_default` = 1)' => 'desc')); $this->default = $ml->fetch_row(array('is_default' => '1')); if (!$lang_param) { if (application::get_instance()->config->resource->lang->type == 'session') { session::set('lang', $this->default->stitle); } } }
function url($url = '') { $url = $url ? $url : application::get_instance()->request->url; if (application::get_instance()->config->resource->lang) { $m = new model_lang(); $langs = $m->fetch_col('stitle', array('show_it' => 1)); $url = preg_replace('/^\\/(' . implode('|', $langs) . ')\\//si', '/', $url); } $m = new model_meta(); $data = $m->fetch_by_url($url); if ($data) { $this->auto($data, false); } }
function set_action() { $id = (string) $this->request->param->id; $ml = new model_lang(); $lang = $ml->fetch_one('id', array('stitle' => $id)); $url = @$_SERVER['HTTP_REFERER']; if (stripos($url, @$_SERVER['HTTP_HOST']) === false) { $url = '/'; } if ($id) { $this->view->lang()->set($id); } header('Location: ' . $url); exit; }
function __construct($config) { if ($config->type != 'session') { if (preg_match('/^\\/x\\//i', @$_SERVER['REQUEST_URI'])) { return; } $route = new data(); if (count(application::get_instance()->config->route)) { $ml = new model_lang(); $default = $ml->fetch_one('stitle', array('is_default' => 1)); foreach (application::get_instance()->config->route as $k => $v) { $route->{$k} = array('type' => 'chain', 'param' => array('part' => array(array('type' => 'rewrite', 'param' => array('url' => '([^\\/]+)', 'map' => 'lang', 'default' => $default)), clone $v), 'controller' => $v->param ? $v->param->controller : null, 'action' => $v->param ? $v->param->action : null, 'inner' => $v->inner, 'title' => $v->title)); } } application::get_instance()->router = new router($route); } application::get_instance()->config->plugin[] = 'lang'; }
public function controller_before() { $ml = new model_lang(); $ids = $ml->fetch_col('stitle', array('show_it' => 1)); if (@application::get_instance()->config->resource->lang->type == 'session') { if ($ids) { $lang_session = session::get('lang'); $lang_cookie = @$_COOKIE['lang']; if ($lang_session && !in_array($lang_session, $ids)) { session::remove('lang'); $lang_session = null; } if ($lang_cookie && !in_array($lang_cookie, $ids) || $lang_cookie && $lang_session && $lang_session != $lang_cookie) { setcookie('lang', null, time() + 86400 * 30, '/'); } if ($lang_cookie && !$lang_session) { session::set('lang', $lang_cookie); $lang_session = $lang_cookie; } if (application::get_instance()->config->resource->lang->detect && !$lang_session) { $lang_detected = $this->prefered_language($ids, @$_SERVER['HTTP_ACCEPT_LANGUAGE']); if ($lang_detected) { session::set('lang', $lang_detected); } } } } else { if ($ids && !in_array(application::get_instance()->controller->request->param->lang, $ids)) { unset(application::get_instance()->controller->request->param->lang); } if (!application::get_instance()->controller->request->param->lang) { application::get_instance()->controller->request->param->lang = application::get_instance()->controller->view->lang()->default->stitle; } if (application::get_instance()->request->url == '/control') { header('Location: /' . application::get_instance()->controller->view->lang()->default->stitle . '/control'); exit; } else { if (application::get_instance()->request->url == '/error') { header('Location: /' . application::get_instance()->controller->view->lang('stitle') . '/error'); exit; } } } }