[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/modules/mod_languages/src/Helper/ -> LanguagesHelper.php (source)

   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  }


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer