$system['dob'] = '0000-00-00';
// Ensure that the user contains data
- $user = DBA::selectFirst('user', ['prvkey', 'guid'], ['uid' => 0]);
+ $user = DBA::selectFirst('user', ['prvkey', 'guid', 'language'], ['uid' => 0]);
if (empty($user['prvkey']) || empty($user['guid'])) {
$fields = [
'username' => $system['name'],
$system['guid'] = $fields['guid'];
} else {
- $system['guid'] = $user['guid'];
+ $system['guid'] = $user['guid'];
+ $system['language'] = $user['language'];
}
return $system;
return $default_circle;
}
+/**
+ * Fetch the language code from the given user. If the code is invalid, return the system language
+ *
+ * @param integer $uid User-Id
+ * @param boolean $short If true, return the short form g.g. "en", otherwise the long form e.g. "en_UK"
+ * @return string
+ */
+ public static function getLanguageCode(int $uid, bool $short): string
+ {
+ $owner = self::getOwnerDataById($uid);
+ $languages = DI::l10n()->getAvailableLanguages();
+ if (in_array($owner['language'], array_keys($languages))) {
+ $language = $owner['language'];
+ } else {
+ $language = DI::config()->get('system', 'language');
+ }
+ if ($short) {
+ return substr($language, 0, 2);
+ }
+ return $language;
+ }
+
/**
* Authenticate a user with a clear text password
*
'accesskey' => 'd'
];
- $owner = User::getOwnerDataById($this->session->getLocalUserId());
+ $language = User::getLanguageCode($this->session->getLocalUserId(), false);
$languages = $this->l10n->getAvailableLanguages();
- if (!empty($owner['language']) && !empty($languages[$owner['language']])) {
- $tabs[] = [
- 'label' => $languages[$owner['language']],
- 'url' => 'channel/' . self::LANGUAGE,
- 'sel' => self::$content == self::LANGUAGE ? 'active' : '',
- 'title' => $this->l10n->t('Posts in %s', $languages[$owner['language']]),
- 'id' => 'channel-language-tab',
- 'accesskey' => 'g'
- ];
-
- $tabs[] = [
- 'label' => $this->l10n->t('Whats Hot %s', $languages[$owner['language']]),
- 'url' => 'channel/' . self::HOTLANG,
- 'sel' => self::$content == self::HOTLANG ? 'active' : '',
- 'title' => $this->l10n->t('Posts in %s with a lot of interactions', $languages[$owner['language']]),
- 'id' => 'channel-hotlang-tab',
- 'accesskey' => 'o'
- ];
- }
+ $tabs[] = [
+ 'label' => $languages[$language],
+ 'url' => 'channel/' . self::LANGUAGE,
+ 'sel' => self::$content == self::LANGUAGE ? 'active' : '',
+ 'title' => $this->l10n->t('Posts in %s', $languages[$language]),
+ 'id' => 'channel-language-tab',
+ 'accesskey' => 'g'
+ ];
+
+ $tabs[] = [
+ 'label' => $this->l10n->t('Whats Hot %s', $languages[$language]),
+ 'url' => 'channel/' . self::HOTLANG,
+ 'sel' => self::$content == self::HOTLANG ? 'active' : '',
+ 'title' => $this->l10n->t('Posts in %s with a lot of interactions', $languages[$language]),
+ 'id' => 'channel-hotlang-tab',
+ 'accesskey' => 'o'
+ ];
$tab_tpl = Renderer::getMarkupTemplate('common_tabs.tpl');
$o .= Renderer::replaceMacros($tab_tpl, ['$tabs' => $tabs]);
} elseif (self::$content == self::AUDIO) {
$condition = ["`media-type` & ?", 4];
} elseif (self::$content == self::LANGUAGE) {
- $owner = User::getOwnerDataById($this->session->getLocalUserId());
- $condition = ["JSON_EXTRACT(`language`, ?) > ?", '$.' . $owner['language'], $this->config->get('channel', 'language_threshold')];
+ $condition = ["JSON_EXTRACT(JSON_KEYS(language), '$[0]') = ?", User::getLanguageCode($this->session->getLocalUserId(), true)];
} elseif (self::$content == self::HOTLANG) {
- $owner = User::getOwnerDataById($this->session->getLocalUserId());
if (!is_null(self::$accountType)) {
- $condition = ["(`comments` >= ? OR `activities` >= ?) AND `contact-type` = ? AND JSON_EXTRACT(`language`, ?) > ?", $this->getMedianComments(4), $this->getMedianActivities(4), self::$accountType, '$.' . $owner['language'], $this->config->get('channel', 'language_threshold')];
+ $condition = ["(`comments` >= ? OR `activities` >= ?) AND `contact-type` = ? AND JSON_EXTRACT(JSON_KEYS(language), '$[0]') = ?",
+ $this->getMedianComments(4), $this->getMedianActivities(4), self::$accountType, User::getLanguageCode($this->session->getLocalUserId(), true)];
} else {
- $condition = ["(`comments` >= ? OR `activities` >= ?) AND `contact-type` != ? AND JSON_EXTRACT(`language`, ?) > ?", $this->getMedianComments(4), $this->getMedianActivities(4), Contact::TYPE_COMMUNITY, '$.' . $owner['language'], $this->config->get('channel', 'language_threshold')];
+ $condition = ["(`comments` >= ? OR `activities` >= ?) AND `contact-type` != ? AND JSON_EXTRACT(JSON_KEYS(language), '$[0]') = ?",
+ $this->getMedianComments(4), $this->getMedianActivities(4), Contact::TYPE_COMMUNITY, User::getLanguageCode($this->session->getLocalUserId(), true)];
}
}