protected function __trigger() { $supported_language_codes = LanguageRedirect::instance()->getSupportedLanguageCodes(); // only do something when there is a set of supported languages defined if (!empty($supported_language_codes)) { $current_language_code = LanguageRedirect::instance()->getLanguageCode(); // no redirect, set current language and region in cookie if (isset($current_language_code) and in_array($current_language_code, $supported_language_codes)) { $Cookie = new Cookie(__SYM_COOKIE_PREFIX_ . 'language-redirect', TWO_WEEKS, __SYM_COOKIE_PATH__); $Cookie->set('language', LanguageRedirect::instance()->getLanguage()); $Cookie->set('region', LanguageRedirect::instance()->getRegion()); } else { $current_path = !isset($current_language_code) ? $this->_env['param']['current-path'] : substr($this->_env['param']['current-path'], strlen($current_language_code) + 1); $browser_languages = $this->getBrowserLanguages(); foreach ($browser_languages as $language) { if (in_array($language, $supported_language_codes)) { $in_browser_languages = true; $browser_language = $language; break; } } $Cookie = new Cookie(__SYM_COOKIE_PREFIX_ . 'language-redirect', TWO_WEEKS, __SYM_COOKIE_PATH__); $cookie_language_code = $Cookie->get('language'); if (strlen($cookie_language_code) > 0) { $language_code = $Cookie->get('region') ? $cookie_language_code . '-' . $Cookie->get('region') : $cookie_language_code; } elseif ($in_browser_languages) { $language_code = $browser_language; } else { $language_code = $supported_language_codes[0]; } // redirect and exit header('Location: ' . $this->_env['param']['root'] . '/' . $language_code . '/' . $current_path); die; } $all_languages = LanguageRedirect::instance()->getAllLanguages(); $result = new XMLElement('language-redirect'); $current_language_xml = new XMLElement('current-language', $all_languages[$current_language_code] ? $all_languages[$current_language_code] : $current_language_code); $current_language_xml->setAttribute('handle', $current_language_code); $result->appendChild($current_language_xml); $supported_languages_xml = new XMLElement('supported-languages'); foreach ($supported_language_codes as $language) { $language_code = new XMLElement('item', $all_languages[$language] ? $all_languages[$language] : $language); $language_code->setAttribute('handle', $language); $supported_languages_xml->appendChild($language_code); } $result->appendChild($supported_languages_xml); return $result; } return false; }
/** * * Method called by Symphony in order to build the * @param $param_pool * @return XMLElement */ public function grab(&$param_pool) { // get the current page id $current_page_id = (int) $this->_env['param']['current-page-id']; // prepare output $result = new XMLElement($this->dsParamROOTELEMENT); // if multilangual extensions are enabled if ($this->isMultiLangual) { // current language $lang = LanguageRedirect::instance()->getLanguageCode(); } // get current page title including all parents $titles = PageManager::resolvePage($current_page_id, isset($lang) ? 'page_lhandles_t_' . $lang : 'title'); // get current page path including all parents $handles = PageManager::resolvePage($current_page_id, isset($lang) ? 'page_lhandles_h_' . $lang : 'handle'); // generate the output foreach ($titles as $key => $title) { $path = implode('/', array_slice($handles, 0, $key + 1)); $result->appendChild(new XMLElement('page', $title, array('path' => $path))); } // return xml result set return $result; }