diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2018-07-05 00:41:59 +0200 |
---|---|---|
committer | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2018-07-05 14:33:08 +0200 |
commit | 772bbd99bee83d17707c73a630a4d47c4b8bc807 (patch) | |
tree | 9cc5293fe3454e3e71be018b80825a5686516ae5 /lib/private/L10N | |
parent | cbfcfb236f3e8ace6c64ab5a654b9a331a3ce1c0 (diff) | |
download | nextcloud-server-772bbd99bee83d17707c73a630a4d47c4b8bc807.tar.gz nextcloud-server-772bbd99bee83d17707c73a630a4d47c4b8bc807.zip |
Backend work to provide NC whats New info to users
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Diffstat (limited to 'lib/private/L10N')
-rw-r--r-- | lib/private/L10N/Factory.php | 34 | ||||
-rw-r--r-- | lib/private/L10N/LanguageIterator.php | 137 |
2 files changed, 143 insertions, 28 deletions
diff --git a/lib/private/L10N/Factory.php b/lib/private/L10N/Factory.php index 79495f5ff88..cc2de174509 100644 --- a/lib/private/L10N/Factory.php +++ b/lib/private/L10N/Factory.php @@ -35,6 +35,7 @@ use OCP\IRequest; use OCP\IUser; use OCP\IUserSession; use OCP\L10N\IFactory; +use OCP\L10N\ILanguageIterator; /** * A factory that generates language instances @@ -322,35 +323,12 @@ class Factory implements IFactory { return array_search($lang, $languages) !== false; } - public function iterateLanguage(bool $reset = false): string { - static $i = 0; - if($reset) { - $i = 0; - } - switch($i) { - /** @noinspection PhpMissingBreakStatementInspection */ - case 0: - $i++; - $forcedLang = $this->config->getSystemValue('force_language', false); - if(is_string($forcedLang)) { - return $forcedLang; - } - /** @noinspection PhpMissingBreakStatementInspection */ - case 1: - $i++; - $user = $this->userSession->getUser(); - if($user instanceof IUser) { - $userLang = $this->config->getUserValue($user->getUID(), 'core', 'lang', null); - if(is_string($userLang)) { - return $userLang; - } - } - case 2: - $i++; - return $this->config->getSystemValue('default_language', 'en'); - default: - return 'en'; + public function getLanguageIterator(IUser $user = null): ILanguageIterator { + $user = $user ?? $this->userSession->getUser(); + if($user === null) { + throw new \RuntimeException('Failed to get an IUser instance'); } + return new LanguageIterator($user, $this->config); } /** diff --git a/lib/private/L10N/LanguageIterator.php b/lib/private/L10N/LanguageIterator.php new file mode 100644 index 00000000000..ba8f942c912 --- /dev/null +++ b/lib/private/L10N/LanguageIterator.php @@ -0,0 +1,137 @@ +<?php +declare(strict_types=1); +/** + * @copyright Copyright (c) 2018 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\L10N; + +use OCP\IConfig; +use OCP\IUser; +use OCP\L10N\ILanguageIterator; + +class LanguageIterator implements ILanguageIterator { + private $i = 0; + /** @var IConfig */ + private $config; + /** @var IUser */ + private $user; + + public function __construct(IUser $user, IConfig $config) { + $this->config = $config; + $this->user = $user; + } + + /** + * Rewind the Iterator to the first element + */ + public function rewind() { + $this->i = 0; + } + + /** + * Return the current element + * + * @since 14.0.0 + */ + public function current(): string { + switch($this->i) { + /** @noinspection PhpMissingBreakStatementInspection */ + case 0: + $forcedLang = $this->config->getSystemValue('force_language', false); + if(is_string($forcedLang)) { + return $forcedLang; + } + $this->next(); + /** @noinspection PhpMissingBreakStatementInspection */ + case 1: + $forcedLang = $this->config->getSystemValue('force_language', false); + if(is_string($forcedLang) + && ($truncated = $this->getTruncatedLanguage($forcedLang)) !== $forcedLang + ) { + return $truncated; + } + $this->next(); + /** @noinspection PhpMissingBreakStatementInspection */ + case 2: + $userLang = $this->config->getUserValue($this->user->getUID(), 'core', 'lang', null); + if(is_string($userLang)) { + return $userLang; + } + $this->next(); + /** @noinspection PhpMissingBreakStatementInspection */ + case 3: + $userLang = $this->config->getUserValue($this->user->getUID(), 'core', 'lang', null); + if(is_string($userLang) + && ($truncated = $this->getTruncatedLanguage($userLang)) !== $userLang + ) { + return $truncated; + } + $this->next(); + case 4: + return $this->config->getSystemValue('default_language', 'en'); + /** @noinspection PhpMissingBreakStatementInspection */ + case 5: + $defaultLang = $this->config->getSystemValue('default_language', 'en'); + if(($truncated = $this->getTruncatedLanguage($defaultLang)) !== $defaultLang) { + return $truncated; + } + $this->next(); + default: + return 'en'; + } + } + + /** + * Move forward to next element + * + * @since 14.0.0 + */ + public function next() { + ++$this->i; + } + + /** + * Return the key of the current element + * + * @since 14.0.0 + */ + public function key(): int { + return $this->i; + } + + /** + * Checks if current position is valid + * + * @since 14.0.0 + */ + public function valid(): bool { + return $this->i <= 6; + } + + protected function getTruncatedLanguage(string $lang):string { + $pos = strpos($lang, '_'); + if($pos !== false) { + $lang = substr($lang, 0, $pos); + } + return $lang; + } +} |