Skip to content

Commit

Permalink
Use new JLanguageHelper::getInstalledLanguages across core (#12671)
Browse files Browse the repository at this point in the history
* new JLanguageHelper::getInstalledLanguages

* some mroe improvs

* correct deprecated comment

* fix bug

* cs

* positive

* strict

* be sure there in an index for each client

* check if file exists

* remove extra )

* remove check
  • Loading branch information
andrepereiradasilva authored and rdeutz committed Nov 15, 2016
1 parent 0ef219f commit e6537ac
Show file tree
Hide file tree
Showing 8 changed files with 38 additions and 97 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,13 @@ public static function getContentlangs()
*
* @return array of language extension objects.
*
* @deprecated 4.0 Use JLanguageMultilang::getSiteLangs() instead.
* @deprecated 4.0 Use JLanguageHelper::getInstalledLanguages(0) instead.
*/
public static function getSitelangs()
{
JLog::add(__METHOD__ . ' is deprecated, use JLanguageMultilang::getSiteLangs() instead.', JLog::WARNING, 'deprecated');
JLog::add(__METHOD__ . ' is deprecated, use JLanguageHelper::getInstalledLanguages(0) instead.', JLog::WARNING, 'deprecated');

return JLanguageMultilang::getSiteLangs();
return JLanguageHelper::getInstalledLanguages(0);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public function display($tpl = null)
$this->switchers = MultilangstatusHelper::getLangswitchers();
$this->listUsersError = MultilangstatusHelper::getContacts();
$this->contentlangs = MultilangstatusHelper::getContentlangs();
$this->site_langs = JLanguageMultilang::getSiteLangs();
$this->site_langs = JLanguageHelper::getInstalledLanguages(0);
$this->statuses = MultilangstatusHelper::getStatus();
$this->homepages = JLanguageMultilang::getSiteHomePages();

Expand Down
2 changes: 1 addition & 1 deletion components/com_content/helpers/association.php
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public static function displayAssociations($id)
}

// Do not display language without frontend UI
if (!array_key_exists($language->lang_code, JLanguageMultilang::getSiteLangs()))
if (!array_key_exists($language->lang_code, JLanguageHelper::getInstalledLanguages(0)))
{
continue;
}
Expand Down
51 changes: 13 additions & 38 deletions installation/application/web.php
Original file line number Diff line number Diff line change
Expand Up @@ -294,52 +294,27 @@ public function getLocalise()
*/
public function getLocaliseAdmin($db = false)
{
// Read the files in the admin area.
$path = JLanguage::getLanguagePath(JPATH_ADMINISTRATOR);
$langfiles['admin'] = JFolder::folders($path);

// Read the files in the site area.
$path = JLanguage::getLanguagePath(JPATH_SITE);
$langfiles['site'] = JFolder::folders($path);
$langfiles = array();

// If db connection, fetch them from the database.
if ($db)
{
$langfiles_disk = $langfiles;
$langfiles = array();
$langfiles['admin'] = array();
$langfiles['site'] = array();

$query = $db->getQuery(true)
->select($db->quoteName(array('element','client_id')))
->from($db->quoteName('#__extensions'))
->where($db->quoteName('type') . ' = ' . $db->quote('language'));
$db->setQuery($query);
$langs = $db->loadObjectList();

foreach ($langs as $lang)
foreach (JLanguageHelper::getInstalledLanguages() as $clientId => $language)
{
switch ($lang->client_id)
$clientName = $clientId === 0 ? 'site' : 'admin';

foreach ($language as $languageCode => $lang)
{
// Site.
case 0:
if (in_array($lang->element, $langfiles_disk['site']))
{
$langfiles['site'][] = $lang->element;
}

break;

// Administrator.
case 1:
if (in_array($lang->element, $langfiles_disk['admin']))
{
$langfiles['admin'][] = $lang->element;
}

break;
$langfiles[$clientName][] = $lang->element;
}
}
}
// Read the folder names in the site and admin area.
else
{
$langfiles['site'] = JFolder::folders(JLanguage::getLanguagePath(JPATH_SITE));
$langfiles['admin'] = JFolder::folders(JLanguage::getLanguagePath(JPATH_ADMINISTRATOR));
}

return $langfiles;
}
Expand Down
21 changes: 3 additions & 18 deletions libraries/cms/language/multilang.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,28 +69,13 @@ public static function isEnabled()
* @return array of language extension objects.
*
* @since 3.5
* @deprecated __DEPLOY_VERSION__ Use JLanguageHelper::getInstalledLanguages(0) instead.
*/
public static function getSiteLangs()
{
// To avoid doing duplicate database queries.
static $multilangSiteLangs = null;

if (!isset($multilangSiteLangs))
{
// Check for published Site Languages.
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('element')
->from('#__extensions')
->where('type = ' . $db->quote('language'))
->where('client_id = 0')
->where('enabled = 1');
$db->setQuery($query);

$multilangSiteLangs = $db->loadObjectList('element');
}
JLog::add(__METHOD__ . ' is deprecated. Use JLanguageHelper::getInstalledLanguages(0) instead.', JLog::WARNING, 'deprecated');

return $multilangSiteLangs;
return JLanguageHelper::getInstalledLanguages(0);
}

/**
Expand Down
47 changes: 14 additions & 33 deletions libraries/joomla/language/helper.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,41 +32,19 @@ class JLanguageHelper
*/
public static function createLanguageList($actualLanguage, $basePath = JPATH_BASE, $caching = false, $installed = false)
{
$list = array();
$list = array();
$clientId = $basePath === JPATH_ADMINISTRATOR ? 1 : 0;
$languages = $installed ? static::getInstalledLanguages($clientId, true) : JLanguage::getKnownLanguages($basePath);

// Cache activation
$langs = JLanguage::getKnownLanguages($basePath);

if ($installed)
foreach ($languages as $languageCode => $language)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('element')
->from('#__extensions')
->where('type=' . $db->quote('language'))
->where('state=0')
->where('enabled=1')
->where('client_id=' . ($basePath == JPATH_ADMINISTRATOR ? 1 : 0));
$db->setQuery($query);
$installed_languages = $db->loadObjectList('element');
}

foreach ($langs as $lang => $metadata)
{
if (!$installed || array_key_exists($lang, $installed_languages))
{
$option = array(
'text' => isset($metadata['nativeName']) ? $metadata['nativeName'] : $metadata['name'],
'value' => $lang,
);
$metadata = $installed ? $language->metadata : $language;

if ($lang === $actualLanguage)
{
$option['selected'] = 'selected="selected"';
}

$list[] = $option;
}
$list[] = array(
'text' => isset($metadata['nativeName']) ? $metadata['nativeName'] : $metadata['name'],
'value' => $languageCode,
'selected' => $languageCode === $actualLanguage ? 'selected="selected"' : null,
);
}

return $list;
Expand Down Expand Up @@ -224,8 +202,11 @@ public static function getInstalledLanguages($clientId = null, $processMetaData
}
}

$languages = array();
$clients = $clientId === null ? array(0, 1) : array((int) $clientId);
$languages = array(
0 => array(),
1 => array(),
);

foreach ($installedLanguages as $language)
{
Expand Down
2 changes: 1 addition & 1 deletion modules/mod_languages/helper.php
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public static function getList(&$params)
}

$levels = $user->getAuthorisedViewLevels();
$sitelangs = JLanguageMultilang::getSiteLangs();
$sitelangs = JLanguageHelper::getInstalledLanguages(0);
$multilang = JLanguageMultilang::isEnabled();

// Filter allowed languages
Expand Down
4 changes: 2 additions & 2 deletions plugins/system/languagefilter/languagefilter.php
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ public function __construct(&$subject, $config)
// @todo: In Joomla 2.5.4 and earlier access wasn't set. Non modified Content Languages got 0 as access value
// we also check if frontend language exists and is enabled
if (($language->access && !in_array($language->access, $levels))
|| (!array_key_exists($language->lang_code, JLanguageMultilang::getSiteLangs())))
|| (!array_key_exists($language->lang_code, JLanguageHelper::getInstalledLanguages(0))))
{
unset($this->lang_codes[$language->lang_code]);
unset($this->sefs[$language->sef]);
Expand Down Expand Up @@ -741,7 +741,7 @@ public function onAfterDispatch()
switch (true)
{
// Language without frontend UI || Language without specific home menu || Language without authorized access level
case (!array_key_exists($i, JLanguageMultilang::getSiteLangs())):
case (!array_key_exists($i, JLanguageHelper::getInstalledLanguages(0))):
case (!isset($homes[$i])):
case (isset($language->access) && $language->access && !in_array($language->access, $levels)):
unset($languages[$i]);
Expand Down

0 comments on commit e6537ac

Please sign in to comment.