/** * Get language data */ protected static function _buildLanguageLookup() { if( self::$lang_lookup !== null ) return; // Create map of: item language code to SEF URL language code // We don't use helper function so that we also get non-published ones $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('a.sef AS sef') ->select('a.lang_code AS lang_code') ->from('#__languages AS a'); $db->setQuery($query); $langs = $db->loadObjectList(); foreach ($langs as $lang) { self::$lang_lookup[$lang->lang_code] = $lang->sef; } // Get configuration whether to remove SEF language code from URL $plugin = JPluginHelper::getPlugin('system', 'languagefilter'); if (!empty($plugin)) { $pluginParams = FLEXI_J16GE ? new JRegistry($plugin->params) : new JParameter($plugin->params); self::$add_url_lang = ! $pluginParams->get('remove_default_prefix', 0); } else { self::$add_url_lang = 1; } // No need to do more work since we will not add language code to the URLs if ( !self::$add_url_lang ) return; // Get user's access levels $user = JFactory::getUser(); $levels = JAccess::getAuthorisedViewLevels($user->id); // Get home page menu items according to language, and $menus = JFactory::getApplication()->getMenu('site', array()); // Get content languages and filter them to include only inteface languages $content_langs = JLanguageHelper::getLanguages(); $interface_langs = array(); foreach ($content_langs as $i => &$language) { // Do not display language without frontend UI if (!JLanguage::exists($language->lang_code)) continue; // Do not display language without specific home menu elseif (!$menus->getDefault($language->lang_code)) continue; // Do not display language without authorized access level elseif (isset($language->access) && $language->access && !in_array($language->access, $levels)) continue; self::$interface_langs[$language->lang_code] = $language; } // DEBUG print the filtered languages //foreach (self::$interface_langs as $lang_code => $lang) echo $lang->title.'['.$lang_code.']'."<br/>\n"; }