[ Index ] |
PHP Cross Reference of Joomla 4.2.2 documentation |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * @package Joomla.Site 5 * @subpackage mod_languages 6 * 7 * @copyright (C) 2010 Open Source Matters, Inc. <https://www.joomla.org> 8 * @license GNU General Public License version 2 or later; see LICENSE.txt 9 */ 10 11 namespace Joomla\Module\Languages\Site\Helper; 12 13 use Joomla\CMS\Association\AssociationServiceInterface; 14 use Joomla\CMS\Factory; 15 use Joomla\CMS\Language\Associations; 16 use Joomla\CMS\Language\LanguageHelper; 17 use Joomla\CMS\Language\Multilanguage; 18 use Joomla\CMS\Router\Route; 19 use Joomla\CMS\Uri\Uri; 20 use Joomla\Component\Menus\Administrator\Helper\MenusHelper; 21 22 // phpcs:disable PSR1.Files.SideEffects 23 \defined('_JEXEC') or die; 24 // phpcs:enable PSR1.Files.SideEffects 25 26 /** 27 * Helper for mod_languages 28 * 29 * @since 1.6 30 */ 31 abstract class LanguagesHelper 32 { 33 /** 34 * Gets a list of available languages 35 * 36 * @param \Joomla\Registry\Registry &$params module params 37 * 38 * @return array 39 */ 40 public static function getList(&$params) 41 { 42 $user = Factory::getUser(); 43 $lang = Factory::getLanguage(); 44 $languages = LanguageHelper::getLanguages(); 45 $app = Factory::getApplication(); 46 $menu = $app->getMenu(); 47 $active = $menu->getActive(); 48 49 // Get menu home items 50 $homes = []; 51 $homes['*'] = $menu->getDefault('*'); 52 53 foreach ($languages as $item) { 54 $default = $menu->getDefault($item->lang_code); 55 56 if ($default && $default->language === $item->lang_code) { 57 $homes[$item->lang_code] = $default; 58 } 59 } 60 61 // Load associations 62 $assoc = Associations::isEnabled(); 63 64 if ($assoc) { 65 if ($active) { 66 $associations = MenusHelper::getAssociations($active->id); 67 } 68 69 $option = $app->input->get('option'); 70 $component = $app->bootComponent($option); 71 72 if ($component instanceof AssociationServiceInterface) { 73 $cassociations = $component->getAssociationsExtension()->getAssociationsForItem(); 74 } else { 75 // Load component associations 76 $class = str_replace('com_', '', $option) . 'HelperAssociation'; 77 \JLoader::register($class, JPATH_SITE . '/components/' . $option . '/helpers/association.php'); 78 79 if (class_exists($class) && \is_callable(array($class, 'getAssociations'))) { 80 $cassociations = \call_user_func(array($class, 'getAssociations')); 81 } 82 } 83 } 84 85 $levels = $user->getAuthorisedViewLevels(); 86 $sitelangs = LanguageHelper::getInstalledLanguages(0); 87 $multilang = Multilanguage::isEnabled(); 88 89 // Filter allowed languages 90 foreach ($languages as $i => &$language) { 91 // Do not display language without frontend UI 92 if (!\array_key_exists($language->lang_code, $sitelangs)) { 93 unset($languages[$i]); 94 } elseif (!isset($homes[$language->lang_code])) { 95 // Do not display language without specific home menu 96 unset($languages[$i]); 97 } elseif (isset($language->access) && $language->access && !\in_array($language->access, $levels)) { 98 // Do not display language without authorized access level 99 unset($languages[$i]); 100 } else { 101 $language->active = ($language->lang_code === $lang->getTag()); 102 103 // Fetch language rtl 104 // If loaded language get from current JLanguage metadata 105 if ($language->active) { 106 $language->rtl = $lang->isRtl(); 107 } else { 108 // If not loaded language fetch metadata directly for performance 109 $languageMetadata = LanguageHelper::getMetadata($language->lang_code); 110 $language->rtl = $languageMetadata['rtl']; 111 } 112 113 if ($multilang) { 114 if (isset($cassociations[$language->lang_code])) { 115 $language->link = Route::_($cassociations[$language->lang_code]); 116 } elseif (isset($associations[$language->lang_code]) && $menu->getItem($associations[$language->lang_code])) { 117 $itemid = $associations[$language->lang_code]; 118 $language->link = Route::_('index.php?lang=' . $language->sef . '&Itemid=' . $itemid); 119 } elseif ($active && $active->language === '*') { 120 $language->link = Route::_('index.php?lang=' . $language->sef . '&Itemid=' . $active->id); 121 } else { 122 if ($language->active) { 123 $language->link = Uri::getInstance()->toString(array('path', 'query')); 124 } else { 125 $itemid = isset($homes[$language->lang_code]) ? $homes[$language->lang_code]->id : $homes['*']->id; 126 $language->link = Route::_('index.php?lang=' . $language->sef . '&Itemid=' . $itemid); 127 } 128 } 129 } else { 130 $language->link = Route::_('&Itemid=' . $homes['*']->id); 131 } 132 } 133 } 134 135 return $languages; 136 } 137 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Sep 7 05:41:13 2022 | Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer |