aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
m---------3rdparty0
-rw-r--r--apps/admin_audit/appinfo/info.xml3
-rw-r--r--apps/admin_audit/composer/composer/autoload_classmap.php1
-rw-r--r--apps/admin_audit/composer/composer/autoload_static.php1
-rw-r--r--apps/admin_audit/lib/AppInfo/Application.php98
-rw-r--r--apps/admin_audit/lib/BackgroundJobs/Rotate.php52
-rw-r--r--apps/dav/lib/Connector/Sabre/Directory.php11
-rw-r--r--apps/dav/lib/Connector/Sabre/File.php22
-rw-r--r--apps/dav/lib/Settings/CalDAVSettings.php2
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php2
-rw-r--r--apps/dav/tests/unit/Settings/CalDAVSettingsTest.php2
-rw-r--r--apps/federatedfilesharing/l10n/fi.js1
-rw-r--r--apps/federatedfilesharing/l10n/fi.json1
-rw-r--r--apps/federatedfilesharing/templates/settings-admin.php13
-rw-r--r--apps/federation/css/settings-admin.css4
-rw-r--r--apps/files/css/files.scss3
-rw-r--r--apps/files/lib/Settings/Admin.php2
-rw-r--r--apps/files/templates/appnavigation.php2
-rw-r--r--apps/files/tests/Settings/AdminTest.php2
-rw-r--r--apps/files/tests/js/fileUploadSpec.js2
-rw-r--r--apps/files_external/l10n/de.js1
-rw-r--r--apps/files_external/l10n/de.json1
-rw-r--r--apps/files_external/l10n/de_DE.js1
-rw-r--r--apps/files_external/l10n/de_DE.json1
-rw-r--r--apps/files_external/l10n/es.js1
-rw-r--r--apps/files_external/l10n/es.json1
-rw-r--r--apps/files_external/l10n/es_MX.js1
-rw-r--r--apps/files_external/l10n/es_MX.json1
-rw-r--r--apps/files_external/l10n/fi.js1
-rw-r--r--apps/files_external/l10n/fi.json1
-rw-r--r--apps/files_external/l10n/fr.js1
-rw-r--r--apps/files_external/l10n/fr.json1
-rw-r--r--apps/files_external/l10n/it.js1
-rw-r--r--apps/files_external/l10n/it.json1
-rw-r--r--apps/files_external/l10n/pt_BR.js1
-rw-r--r--apps/files_external/l10n/pt_BR.json1
-rw-r--r--apps/files_external/l10n/ru.js1
-rw-r--r--apps/files_external/l10n/ru.json1
-rw-r--r--apps/files_external/l10n/sr.js1
-rw-r--r--apps/files_external/l10n/sr.json1
-rw-r--r--apps/files_external/l10n/tr.js1
-rw-r--r--apps/files_external/l10n/tr.json1
-rw-r--r--apps/files_external/lib/Lib/Storage/AmazonS3.php18
-rw-r--r--apps/files_external/lib/Lib/Storage/OwnCloud.php4
-rw-r--r--apps/files_sharing/lib/External/Storage.php3
-rw-r--r--apps/files_versions/appinfo/info.xml9
-rw-r--r--apps/files_versions/composer/composer/autoload_classmap.php6
-rw-r--r--apps/files_versions/composer/composer/autoload_static.php6
-rw-r--r--apps/files_versions/lib/AppInfo/Application.php13
-rw-r--r--apps/files_versions/lib/Sabre/RestoreFolder.php86
-rw-r--r--apps/files_versions/lib/Sabre/RootCollection.php65
-rw-r--r--apps/files_versions/lib/Sabre/VersionCollection.php102
-rw-r--r--apps/files_versions/lib/Sabre/VersionFile.php94
-rw-r--r--apps/files_versions/lib/Sabre/VersionHome.php90
-rw-r--r--apps/files_versions/lib/Sabre/VersionRoot.php100
-rw-r--r--apps/oauth2/l10n/zh_CN.js1
-rw-r--r--apps/oauth2/l10n/zh_CN.json1
-rw-r--r--apps/theming/l10n/es_MX.js6
-rw-r--r--apps/theming/l10n/es_MX.json6
-rw-r--r--apps/theming/l10n/sr.js5
-rw-r--r--apps/theming/l10n/sr.json5
-rw-r--r--apps/updatenotification/l10n/es_MX.js1
-rw-r--r--apps/updatenotification/l10n/es_MX.json1
-rw-r--r--apps/updatenotification/l10n/fi.js1
-rw-r--r--apps/updatenotification/l10n/fi.json1
-rw-r--r--apps/updatenotification/lib/Settings/Admin.php4
-rw-r--r--apps/updatenotification/tests/Settings/AdminTest.php4
-rw-r--r--apps/user_ldap/l10n/es_MX.js1
-rw-r--r--apps/user_ldap/l10n/es_MX.json1
-rw-r--r--apps/workflowengine/js/admin.js747
-rw-r--r--apps/workflowengine/js/filesystemtagsplugin.js4
-rw-r--r--apps/workflowengine/l10n/de.js2
-rw-r--r--apps/workflowengine/l10n/de.json2
-rw-r--r--apps/workflowengine/l10n/de_DE.js2
-rw-r--r--apps/workflowengine/l10n/de_DE.json2
-rw-r--r--apps/workflowengine/l10n/es_MX.js1
-rw-r--r--apps/workflowengine/l10n/es_MX.json1
-rw-r--r--apps/workflowengine/l10n/sr.js1
-rw-r--r--apps/workflowengine/l10n/sr.json1
-rw-r--r--apps/workflowengine/l10n/zh_CN.js1
-rw-r--r--apps/workflowengine/l10n/zh_CN.json1
-rw-r--r--build/.phan/config.php6
-rw-r--r--build/mergejs.php5
-rw-r--r--core/css/apps.scss11
-rw-r--r--core/css/icons.scss4
-rw-r--r--core/css/styles.scss34
-rw-r--r--core/css/variables.scss2
-rw-r--r--core/img/actions/quota.svg (renamed from apps/files/img/quota.svg)0
-rw-r--r--core/js/oc-dialogs.js2
-rw-r--r--core/l10n/da.js2
-rw-r--r--core/l10n/da.json2
-rw-r--r--core/l10n/es_MX.js4
-rw-r--r--core/l10n/es_MX.json4
-rw-r--r--core/l10n/fi.js4
-rw-r--r--core/l10n/fi.json4
-rw-r--r--core/vendor/core.js6
-rw-r--r--lib/composer/composer/autoload_classmap.php8
-rw-r--r--lib/composer/composer/autoload_static.php8
-rw-r--r--lib/private/Files/Storage/Common.php4
-rw-r--r--lib/private/Files/Storage/Wrapper/Quota.php22
-rw-r--r--lib/private/Files/Stream/Encryption.php6
-rw-r--r--lib/private/Files/View.php8
-rw-r--r--lib/private/Lock/MemcacheLockingProvider.php19
-rw-r--r--lib/private/Log.php46
-rw-r--r--lib/private/Log/Errorlog.php11
-rw-r--r--lib/private/Log/File.php71
-rw-r--r--lib/private/Log/LogFactory.php78
-rw-r--r--lib/private/Log/Rotate.php26
-rw-r--r--lib/private/Log/Syslog.php25
-rw-r--r--lib/private/Server.php21
-rw-r--r--lib/private/Settings/Admin/Mail.php (renamed from lib/private/Settings/Admin/Additional.php)6
-rw-r--r--lib/private/Settings/Admin/Overview.php154
-rw-r--r--lib/private/Settings/Admin/Server.php56
-rw-r--r--lib/private/Settings/Manager.php17
-rw-r--r--lib/private/Template/SCSSCacher.php6
-rw-r--r--lib/private/legacy/app.php2
-rw-r--r--lib/public/IServerContainer.php9
-rw-r--r--lib/public/Lock/LockedException.php10
-rw-r--r--lib/public/Log/IFileBased.php43
-rw-r--r--lib/public/Log/ILogFactory.php48
-rw-r--r--lib/public/Log/IWriter.php37
-rw-r--r--lib/public/Log/RotationTrait.php71
-rw-r--r--settings/Controller/CommonSettingsTrait.php2
-rw-r--r--settings/Controller/LogSettingsController.php17
-rw-r--r--settings/css/settings.scss148
-rw-r--r--settings/img/help.svg2
-rw-r--r--settings/js/federationscopemenu.js6
-rw-r--r--settings/js/federationsettingsview.js7
-rw-r--r--settings/l10n/af.js4
-rw-r--r--settings/l10n/af.json4
-rw-r--r--settings/l10n/ast.js4
-rw-r--r--settings/l10n/ast.json4
-rw-r--r--settings/l10n/bg.js2
-rw-r--r--settings/l10n/bg.json2
-rw-r--r--settings/l10n/ca.js4
-rw-r--r--settings/l10n/ca.json4
-rw-r--r--settings/l10n/cs.js4
-rw-r--r--settings/l10n/cs.json4
-rw-r--r--settings/l10n/da.js4
-rw-r--r--settings/l10n/da.json4
-rw-r--r--settings/l10n/de.js6
-rw-r--r--settings/l10n/de.json6
-rw-r--r--settings/l10n/de_DE.js6
-rw-r--r--settings/l10n/de_DE.json6
-rw-r--r--settings/l10n/el.js5
-rw-r--r--settings/l10n/el.json5
-rw-r--r--settings/l10n/en_GB.js4
-rw-r--r--settings/l10n/en_GB.json4
-rw-r--r--settings/l10n/es.js4
-rw-r--r--settings/l10n/es.json4
-rw-r--r--settings/l10n/es_419.js4
-rw-r--r--settings/l10n/es_419.json4
-rw-r--r--settings/l10n/es_AR.js4
-rw-r--r--settings/l10n/es_AR.json4
-rw-r--r--settings/l10n/es_CL.js4
-rw-r--r--settings/l10n/es_CL.json4
-rw-r--r--settings/l10n/es_CO.js4
-rw-r--r--settings/l10n/es_CO.json4
-rw-r--r--settings/l10n/es_CR.js4
-rw-r--r--settings/l10n/es_CR.json4
-rw-r--r--settings/l10n/es_DO.js4
-rw-r--r--settings/l10n/es_DO.json4
-rw-r--r--settings/l10n/es_EC.js4
-rw-r--r--settings/l10n/es_EC.json4
-rw-r--r--settings/l10n/es_GT.js4
-rw-r--r--settings/l10n/es_GT.json4
-rw-r--r--settings/l10n/es_HN.js4
-rw-r--r--settings/l10n/es_HN.json4
-rw-r--r--settings/l10n/es_MX.js7
-rw-r--r--settings/l10n/es_MX.json7
-rw-r--r--settings/l10n/es_NI.js4
-rw-r--r--settings/l10n/es_NI.json4
-rw-r--r--settings/l10n/es_PA.js4
-rw-r--r--settings/l10n/es_PA.json4
-rw-r--r--settings/l10n/es_PE.js4
-rw-r--r--settings/l10n/es_PE.json4
-rw-r--r--settings/l10n/es_PR.js4
-rw-r--r--settings/l10n/es_PR.json4
-rw-r--r--settings/l10n/es_PY.js4
-rw-r--r--settings/l10n/es_PY.json4
-rw-r--r--settings/l10n/es_SV.js4
-rw-r--r--settings/l10n/es_SV.json4
-rw-r--r--settings/l10n/es_UY.js4
-rw-r--r--settings/l10n/es_UY.json4
-rw-r--r--settings/l10n/eu.js4
-rw-r--r--settings/l10n/eu.json4
-rw-r--r--settings/l10n/fi.js11
-rw-r--r--settings/l10n/fi.json11
-rw-r--r--settings/l10n/fr.js4
-rw-r--r--settings/l10n/fr.json4
-rw-r--r--settings/l10n/he.js2
-rw-r--r--settings/l10n/he.json2
-rw-r--r--settings/l10n/hu.js4
-rw-r--r--settings/l10n/hu.json4
-rw-r--r--settings/l10n/ia.js2
-rw-r--r--settings/l10n/ia.json2
-rw-r--r--settings/l10n/id.js2
-rw-r--r--settings/l10n/id.json2
-rw-r--r--settings/l10n/is.js4
-rw-r--r--settings/l10n/is.json4
-rw-r--r--settings/l10n/it.js6
-rw-r--r--settings/l10n/it.json6
-rw-r--r--settings/l10n/ja.js4
-rw-r--r--settings/l10n/ja.json4
-rw-r--r--settings/l10n/ka_GE.js4
-rw-r--r--settings/l10n/ka_GE.json4
-rw-r--r--settings/l10n/ko.js4
-rw-r--r--settings/l10n/ko.json4
-rw-r--r--settings/l10n/lt_LT.js2
-rw-r--r--settings/l10n/lt_LT.json2
-rw-r--r--settings/l10n/lv.js2
-rw-r--r--settings/l10n/lv.json2
-rw-r--r--settings/l10n/nb.js4
-rw-r--r--settings/l10n/nb.json4
-rw-r--r--settings/l10n/nl.js4
-rw-r--r--settings/l10n/nl.json4
-rw-r--r--settings/l10n/pl.js4
-rw-r--r--settings/l10n/pl.json4
-rw-r--r--settings/l10n/pt_BR.js6
-rw-r--r--settings/l10n/pt_BR.json6
-rw-r--r--settings/l10n/pt_PT.js4
-rw-r--r--settings/l10n/pt_PT.json4
-rw-r--r--settings/l10n/ru.js4
-rw-r--r--settings/l10n/ru.json4
-rw-r--r--settings/l10n/sk.js4
-rw-r--r--settings/l10n/sk.json4
-rw-r--r--settings/l10n/sl.js2
-rw-r--r--settings/l10n/sl.json2
-rw-r--r--settings/l10n/sq.js4
-rw-r--r--settings/l10n/sq.json4
-rw-r--r--settings/l10n/sr.js6
-rw-r--r--settings/l10n/sr.json6
-rw-r--r--settings/l10n/sv.js4
-rw-r--r--settings/l10n/sv.json4
-rw-r--r--settings/l10n/th.js2
-rw-r--r--settings/l10n/th.json2
-rw-r--r--settings/l10n/tr.js4
-rw-r--r--settings/l10n/tr.json4
-rw-r--r--settings/l10n/uk.js2
-rw-r--r--settings/l10n/uk.json2
-rw-r--r--settings/l10n/zh_CN.js4
-rw-r--r--settings/l10n/zh_CN.json4
-rw-r--r--settings/l10n/zh_TW.js4
-rw-r--r--settings/l10n/zh_TW.json4
-rw-r--r--settings/templates/settings/admin/overview.php172
-rw-r--r--settings/templates/settings/admin/server.php136
-rw-r--r--settings/templates/settings/personal/personal.info.php107
-rw-r--r--settings/templates/settings/personal/security.php2
-rw-r--r--tests/lib/Files/Storage/Wrapper/QuotaTest.php5
-rw-r--r--tests/lib/Log/FileTest.php29
-rw-r--r--tests/lib/Log/LogFactoryTest.php144
-rw-r--r--tests/lib/LoggerTest.php34
-rw-r--r--tests/lib/Settings/Admin/MailTest.php (renamed from tests/lib/Settings/Admin/AdditionalTest.php)9
-rw-r--r--tests/lib/Settings/Admin/ServerTest.php53
-rw-r--r--tests/lib/Settings/ManagerTest.php30
255 files changed, 2633 insertions, 1287 deletions
diff --git a/3rdparty b/3rdparty
-Subproject d4e8f89af1df2e0b690ce8cae72b63e86447255
+Subproject d0794726e2c370c80fbcd29d29b2291fdf9e15f
diff --git a/apps/admin_audit/appinfo/info.xml b/apps/admin_audit/appinfo/info.xml
index 054ed9580f2..3006551b409 100644
--- a/apps/admin_audit/appinfo/info.xml
+++ b/apps/admin_audit/appinfo/info.xml
@@ -17,4 +17,7 @@
<dependencies>
<nextcloud min-version="14" max-version="14" />
</dependencies>
+ <background-jobs>
+ <job>OCA\AdminAudit\BackgroundJobs\Rotate</job>
+ </background-jobs>
</info>
diff --git a/apps/admin_audit/composer/composer/autoload_classmap.php b/apps/admin_audit/composer/composer/autoload_classmap.php
index c08200c7c20..95ddaac7452 100644
--- a/apps/admin_audit/composer/composer/autoload_classmap.php
+++ b/apps/admin_audit/composer/composer/autoload_classmap.php
@@ -18,4 +18,5 @@ return array(
'OCA\\AdminAudit\\Actions\\UserManagement' => $baseDir . '/../lib/Actions/UserManagement.php',
'OCA\\AdminAudit\\Actions\\Versions' => $baseDir . '/../lib/Actions/Versions.php',
'OCA\\AdminAudit\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\AdminAudit\\BackgroundJobs\\Rotate' => $baseDir . '/../lib/BackgroundJobs/Rotate.php',
);
diff --git a/apps/admin_audit/composer/composer/autoload_static.php b/apps/admin_audit/composer/composer/autoload_static.php
index ef088bd22d9..1c01a35ceb2 100644
--- a/apps/admin_audit/composer/composer/autoload_static.php
+++ b/apps/admin_audit/composer/composer/autoload_static.php
@@ -33,6 +33,7 @@ class ComposerStaticInitAdminAudit
'OCA\\AdminAudit\\Actions\\UserManagement' => __DIR__ . '/..' . '/../lib/Actions/UserManagement.php',
'OCA\\AdminAudit\\Actions\\Versions' => __DIR__ . '/..' . '/../lib/Actions/Versions.php',
'OCA\\AdminAudit\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\AdminAudit\\BackgroundJobs\\Rotate' => __DIR__ . '/..' . '/../lib/BackgroundJobs/Rotate.php',
);
public static function getInitializer(ClassLoader $loader)
diff --git a/apps/admin_audit/lib/AppInfo/Application.php b/apps/admin_audit/lib/AppInfo/Application.php
index df39e3eb111..77b76885a20 100644
--- a/apps/admin_audit/lib/AppInfo/Application.php
+++ b/apps/admin_audit/lib/AppInfo/Application.php
@@ -53,8 +53,26 @@ use OCP\Share;
class Application extends App {
+ /** @var ILogger */
+ protected $logger;
+
public function __construct() {
parent::__construct('admin_audit');
+ $this->initLogger();
+ }
+
+ public function initLogger() {
+ $c = $this->getContainer()->getServer();
+ $config = $c->getConfig();
+
+ $default = $config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/audit.log';
+ $logFile = $config->getAppValue('admin_audit', 'logfile', $default);
+ if($logFile === null) {
+ $this->logger = $c->getLogger();
+ return;
+ }
+ $this->logger = $c->getLogFactory()->getCustomLogger($logFile);
+
}
public function register() {
@@ -65,26 +83,24 @@ class Application extends App {
* Register hooks in order to log them
*/
protected function registerHooks() {
- $logger = $this->getContainer()->getServer()->getLogger();
-
- $this->userManagementHooks($logger);
- $this->groupHooks($logger);
- $this->authHooks($logger);
+ $this->userManagementHooks();
+ $this->groupHooks();
+ $this->authHooks();
- $this->consoleHooks($logger);
- $this->appHooks($logger);
+ $this->consoleHooks();
+ $this->appHooks();
- $this->sharingHooks($logger);
+ $this->sharingHooks();
- $this->fileHooks($logger);
- $this->trashbinHooks($logger);
- $this->versionsHooks($logger);
+ $this->fileHooks();
+ $this->trashbinHooks();
+ $this->versionsHooks();
- $this->securityHooks($logger);
+ $this->securityHooks();
}
- protected function userManagementHooks(ILogger $logger) {
- $userActions = new UserManagement($logger);
+ protected function userManagementHooks() {
+ $userActions = new UserManagement($this->logger);
Util::connectHook('OC_User', 'post_createUser', $userActions, 'create');
Util::connectHook('OC_User', 'post_deleteUser', $userActions, 'delete');
@@ -97,8 +113,8 @@ class Application extends App {
$userSession->listen('\OC\User', 'postUnassignedUserId', [$userActions, 'unassign']);
}
- protected function groupHooks(ILogger $logger) {
- $groupActions = new GroupManagement($logger);
+ protected function groupHooks() {
+ $groupActions = new GroupManagement($this->logger);
/** @var IGroupManager|Manager $groupManager */
$groupManager = $this->getContainer()->getServer()->getGroupManager();
@@ -108,8 +124,8 @@ class Application extends App {
$groupManager->listen('\OC\Group', 'postCreate', [$groupActions, 'createGroup']);
}
- protected function sharingHooks(ILogger $logger) {
- $shareActions = new Sharing($logger);
+ protected function sharingHooks() {
+ $shareActions = new Sharing($this->logger);
Util::connectHook(Share::class, 'post_shared', $shareActions, 'shared');
Util::connectHook(Share::class, 'post_unshare', $shareActions, 'unshare');
@@ -119,42 +135,42 @@ class Application extends App {
Util::connectHook(Share::class, 'share_link_access', $shareActions, 'shareAccessed');
}
- protected function authHooks(ILogger $logger) {
- $authActions = new Auth($logger);
+ protected function authHooks() {
+ $authActions = new Auth($this->logger);
Util::connectHook('OC_User', 'pre_login', $authActions, 'loginAttempt');
Util::connectHook('OC_User', 'post_login', $authActions, 'loginSuccessful');
Util::connectHook('OC_User', 'logout', $authActions, 'logout');
}
- protected function appHooks(ILogger $logger) {
+ protected function appHooks() {
$eventDispatcher = $this->getContainer()->getServer()->getEventDispatcher();
- $eventDispatcher->addListener(ManagerEvent::EVENT_APP_ENABLE, function(ManagerEvent $event) use ($logger) {
- $appActions = new AppManagement($logger);
+ $eventDispatcher->addListener(ManagerEvent::EVENT_APP_ENABLE, function(ManagerEvent $event) {
+ $appActions = new AppManagement($this->logger);
$appActions->enableApp($event->getAppID());
});
- $eventDispatcher->addListener(ManagerEvent::EVENT_APP_ENABLE_FOR_GROUPS, function(ManagerEvent $event) use ($logger) {
- $appActions = new AppManagement($logger);
+ $eventDispatcher->addListener(ManagerEvent::EVENT_APP_ENABLE_FOR_GROUPS, function(ManagerEvent $event) {
+ $appActions = new AppManagement($this->logger);
$appActions->enableAppForGroups($event->getAppID(), $event->getGroups());
});
- $eventDispatcher->addListener(ManagerEvent::EVENT_APP_DISABLE, function(ManagerEvent $event) use ($logger) {
- $appActions = new AppManagement($logger);
+ $eventDispatcher->addListener(ManagerEvent::EVENT_APP_DISABLE, function(ManagerEvent $event) {
+ $appActions = new AppManagement($this->logger);
$appActions->disableApp($event->getAppID());
});
}
- protected function consoleHooks(ILogger $logger) {
+ protected function consoleHooks() {
$eventDispatcher = $this->getContainer()->getServer()->getEventDispatcher();
- $eventDispatcher->addListener(ConsoleEvent::EVENT_RUN, function(ConsoleEvent $event) use ($logger) {
- $appActions = new Console($logger);
+ $eventDispatcher->addListener(ConsoleEvent::EVENT_RUN, function(ConsoleEvent $event) {
+ $appActions = new Console($this->logger);
$appActions->runCommand($event->getArguments());
});
}
- protected function fileHooks(ILogger $logger) {
- $fileActions = new Files($logger);
+ protected function fileHooks() {
+ $fileActions = new Files($this->logger);
$eventDispatcher = $this->getContainer()->getServer()->getEventDispatcher();
$eventDispatcher->addListener(
IPreview::EVENT,
@@ -215,26 +231,26 @@ class Application extends App {
);
}
- protected function versionsHooks(ILogger $logger) {
- $versionsActions = new Versions($logger);
+ protected function versionsHooks() {
+ $versionsActions = new Versions($this->logger);
Util::connectHook('\OCP\Versions', 'rollback', $versionsActions, 'rollback');
Util::connectHook('\OCP\Versions', 'delete',$versionsActions, 'delete');
}
- protected function trashbinHooks(ILogger $logger) {
- $trashActions = new Trashbin($logger);
+ protected function trashbinHooks() {
+ $trashActions = new Trashbin($this->logger);
Util::connectHook('\OCP\Trashbin', 'preDelete', $trashActions, 'delete');
Util::connectHook('\OCA\Files_Trashbin\Trashbin', 'post_restore', $trashActions, 'restore');
}
- protected function securityHooks(ILogger $logger) {
+ protected function securityHooks() {
$eventDispatcher = $this->getContainer()->getServer()->getEventDispatcher();
- $eventDispatcher->addListener(IProvider::EVENT_SUCCESS, function(GenericEvent $event) use ($logger) {
- $security = new Security($logger);
+ $eventDispatcher->addListener(IProvider::EVENT_SUCCESS, function(GenericEvent $event) {
+ $security = new Security($this->logger);
$security->twofactorSuccess($event->getSubject(), $event->getArguments());
});
- $eventDispatcher->addListener(IProvider::EVENT_FAILED, function(GenericEvent $event) use ($logger) {
- $security = new Security($logger);
+ $eventDispatcher->addListener(IProvider::EVENT_FAILED, function(GenericEvent $event) {
+ $security = new Security($this->logger);
$security->twofactorFailed($event->getSubject(), $event->getArguments());
});
}
diff --git a/apps/admin_audit/lib/BackgroundJobs/Rotate.php b/apps/admin_audit/lib/BackgroundJobs/Rotate.php
new file mode 100644
index 00000000000..421ee65d643
--- /dev/null
+++ b/apps/admin_audit/lib/BackgroundJobs/Rotate.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * @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 OCA\AdminAudit\BackgroundJobs;
+
+use OC\BackgroundJob\TimedJob;
+use OCP\Log\RotationTrait;
+
+class Rotate extends TimedJob {
+ use RotationTrait;
+
+ public function __construct() {
+ $this->setInterval(60*60*3);
+ }
+
+ protected function run($argument) {
+ $config = \OC::$server->getConfig();
+ $default = $config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/audit.log';
+ $this->filePath = $config->getAppValue('admin_audit', 'logfile', $default);
+
+ if($this->filePath === '') {
+ // default log file, nothing to do
+ return;
+ }
+
+ $this->maxSize = $config->getSystemValue('log_rotate_size', 100 * 1024 * 1024);
+
+ if($this->shouldRotateBySize()) {
+ $this->rotate();
+ }
+ }
+}
diff --git a/apps/dav/lib/Connector/Sabre/Directory.php b/apps/dav/lib/Connector/Sabre/Directory.php
index a7b8ea1755e..aaf5f54ec26 100644
--- a/apps/dav/lib/Connector/Sabre/Directory.php
+++ b/apps/dav/lib/Connector/Sabre/Directory.php
@@ -28,6 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
+
namespace OCA\DAV\Connector\Sabre;
use OC\Files\View;
@@ -147,8 +148,16 @@ class Directory extends \OCA\DAV\Connector\Sabre\Node
$info = new \OC\Files\FileInfo($path, null, null, [], null);
}
$node = new \OCA\DAV\Connector\Sabre\File($this->fileView, $info);
+
+ // only allow 1 process to upload a file at once but still allow reading the file while writing the part file
$node->acquireLock(ILockingProvider::LOCK_SHARED);
- return $node->put($data);
+ $this->fileView->lockFile($path . '.upload.part', ILockingProvider::LOCK_EXCLUSIVE);
+
+ $result = $node->put($data);
+
+ $this->fileView->unlockFile($path . '.upload.part', ILockingProvider::LOCK_EXCLUSIVE);
+ $node->releaseLock(ILockingProvider::LOCK_SHARED);
+ return $result;
} catch (\OCP\Files\StorageNotAvailableException $e) {
throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage(), $e->getCode(), $e);
} catch (InvalidPathException $ex) {
diff --git a/apps/dav/lib/Connector/Sabre/File.php b/apps/dav/lib/Connector/Sabre/File.php
index 45b31c2e11d..bbd6717d94f 100644
--- a/apps/dav/lib/Connector/Sabre/File.php
+++ b/apps/dav/lib/Connector/Sabre/File.php
@@ -51,6 +51,7 @@ use OCP\Files\InvalidContentException;
use OCP\Files\InvalidPathException;
use OCP\Files\LockNotAcquiredException;
use OCP\Files\NotPermittedException;
+use OCP\Files\Storage;
use OCP\Files\StorageNotAvailableException;
use OCP\Lock\ILockingProvider;
use OCP\Lock\LockedException;
@@ -135,8 +136,9 @@ class File extends Node implements IFile {
}
}
+ /** @var Storage $partStorage */
list($partStorage) = $this->fileView->resolvePath($this->path);
- $needsPartFile = $this->needsPartFile($partStorage) && (strlen($this->path) > 1);
+ $needsPartFile = $partStorage->needsPartFile() && (strlen($this->path) > 1);
if ($needsPartFile) {
// mark file as partial while uploading (ignored by the scanner)
@@ -443,8 +445,9 @@ class File extends Node implements IFile {
}
if ($chunk_handler->isComplete()) {
+ /** @var Storage $storage */
list($storage,) = $this->fileView->resolvePath($path);
- $needsPartFile = $this->needsPartFile($storage);
+ $needsPartFile = $storage->needsPartFile();
$partFile = null;
$targetPath = $path . '/' . $info['name'];
@@ -530,21 +533,6 @@ class File extends Node implements IFile {
}
/**
- * Returns whether a part file is needed for the given storage
- * or whether the file can be assembled/uploaded directly on the
- * target storage.
- *
- * @param \OCP\Files\Storage $storage
- * @return bool true if the storage needs part file handling
- */
- private function needsPartFile($storage) {
- // TODO: in the future use ChunkHandler provided by storage
- return !$storage->instanceOfStorage('OCA\Files_Sharing\External\Storage') &&
- !$storage->instanceOfStorage('OC\Files\Storage\OwnCloud') &&
- $storage->needsPartFile();
- }
-
- /**
* Convert the given exception to a SabreException instance
*
* @param \Exception $e
diff --git a/apps/dav/lib/Settings/CalDAVSettings.php b/apps/dav/lib/Settings/CalDAVSettings.php
index a419afa1c55..e4b4ca6452b 100644
--- a/apps/dav/lib/Settings/CalDAVSettings.php
+++ b/apps/dav/lib/Settings/CalDAVSettings.php
@@ -57,7 +57,7 @@ class CalDAVSettings implements ISettings {
* @return string
*/
public function getSection() {
- return 'additional';
+ return 'server';
}
/**
diff --git a/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php
index c1d48a7ce5d..1de9333207f 100644
--- a/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php
@@ -69,7 +69,7 @@ class ExceptionLoggerPluginTest extends TestCase {
});
$this->server = new Server();
- $this->logger = new TestLogger(Log\File::class, $config);
+ $this->logger = new TestLogger(new Log\File(\OC::$SERVERROOT.'/data/nextcloud.log', '', $config), $config);
$this->plugin = new PluginToTest('unit-test', $this->logger);
$this->plugin->initialize($this->server);
}
diff --git a/apps/dav/tests/unit/Settings/CalDAVSettingsTest.php b/apps/dav/tests/unit/Settings/CalDAVSettingsTest.php
index 8ee58107487..36e2aaa9ebb 100644
--- a/apps/dav/tests/unit/Settings/CalDAVSettingsTest.php
+++ b/apps/dav/tests/unit/Settings/CalDAVSettingsTest.php
@@ -49,7 +49,7 @@ class CalDAVSettingsTest extends TestCase {
}
public function testGetSection() {
- $this->assertEquals('additional', $this->settings->getSection());
+ $this->assertEquals('server', $this->settings->getSection());
}
public function testGetPriority() {
diff --git a/apps/federatedfilesharing/l10n/fi.js b/apps/federatedfilesharing/l10n/fi.js
index 9e659981478..6d3b7938c19 100644
--- a/apps/federatedfilesharing/l10n/fi.js
+++ b/apps/federatedfilesharing/l10n/fi.js
@@ -17,6 +17,7 @@ OC.L10N.register(
"Couldn't establish a federated share." : "Ei voinut muodostaa federoitua jakoa.",
"Couldn't establish a federated share, maybe the password was wrong." : "Ei voinut muodostaa federoitua jakoa. Ehkä salasana oli väärin.",
"Federated Share request sent, you will receive an invitation. Check your notifications." : "Federoidun jakamisen pyyntö lähetetty, saat kutsun. Tarkista ilmoitukset.",
+ "Couldn't establish a federated share, it looks like the server to federate with is too old (Nextcloud <= 9)." : "Federoitua jakoa ei voitu muodostaa. Vaikuttaa siltä, että palvelin jonka kanssa federointia yritetään, on versioltaan liian vanha (Nextcloud <= 9).",
"Sharing %s failed, because this item is already shared with %s" : "Kohteen %s jakaminen epäonnistui, koska kohde on jo jaettu käyttäjälle %s",
"Not allowed to create a federated share with the same user" : "Saman käyttäjän kanssa ei ole sallittua luoda federoitua jakoa",
"File is already shared with %s" : "Tiedosto on jo jaettu kohteen %s kanssa",
diff --git a/apps/federatedfilesharing/l10n/fi.json b/apps/federatedfilesharing/l10n/fi.json
index 89259e025d9..5c38402603a 100644
--- a/apps/federatedfilesharing/l10n/fi.json
+++ b/apps/federatedfilesharing/l10n/fi.json
@@ -15,6 +15,7 @@
"Couldn't establish a federated share." : "Ei voinut muodostaa federoitua jakoa.",
"Couldn't establish a federated share, maybe the password was wrong." : "Ei voinut muodostaa federoitua jakoa. Ehkä salasana oli väärin.",
"Federated Share request sent, you will receive an invitation. Check your notifications." : "Federoidun jakamisen pyyntö lähetetty, saat kutsun. Tarkista ilmoitukset.",
+ "Couldn't establish a federated share, it looks like the server to federate with is too old (Nextcloud <= 9)." : "Federoitua jakoa ei voitu muodostaa. Vaikuttaa siltä, että palvelin jonka kanssa federointia yritetään, on versioltaan liian vanha (Nextcloud <= 9).",
"Sharing %s failed, because this item is already shared with %s" : "Kohteen %s jakaminen epäonnistui, koska kohde on jo jaettu käyttäjälle %s",
"Not allowed to create a federated share with the same user" : "Saman käyttäjän kanssa ei ole sallittua luoda federoitua jakoa",
"File is already shared with %s" : "Tiedosto on jo jaettu kohteen %s kanssa",
diff --git a/apps/federatedfilesharing/templates/settings-admin.php b/apps/federatedfilesharing/templates/settings-admin.php
index 8d04169ea89..187d75f21ac 100644
--- a/apps/federatedfilesharing/templates/settings-admin.php
+++ b/apps/federatedfilesharing/templates/settings-admin.php
@@ -6,11 +6,14 @@ script('federatedfilesharing', 'settings-admin');
<?php if($_['internalOnly'] === false): ?>
-<div id="fileSharingSettings" class="followupsection">
- <h3><?php p($l->t('Federated Cloud Sharing'));?></h3>
- <a target="_blank" rel="noreferrer noopener" class="icon-info svg"
- title="<?php p($l->t('Open documentation'));?>"
- href="<?php p(link_to_docs('admin-sharing-federated')); ?>"></a>
+<div id="fileSharingSettings" class="section">
+ <h2>
+ <?php p($l->t('Federated Cloud Sharing'));?>
+ <a target="_blank" rel="noreferrer noopener" class="icon-info svg"
+ title="<?php p($l->t('Open documentation'));?>"
+ href="<?php p(link_to_docs('admin-sharing-federated')); ?>"></a>
+ </h2>
+
<p class="settings-hint"><?php p($l->t('Adjust how people can share between servers.')); ?></p>
<p>
diff --git a/apps/federation/css/settings-admin.css b/apps/federation/css/settings-admin.css
index 3fd5f5aea6d..c4c846bd812 100644
--- a/apps/federation/css/settings-admin.css
+++ b/apps/federation/css/settings-admin.css
@@ -26,3 +26,7 @@
vertical-align: middle;
margin-left: 10px;
}
+
+#ocFederationAddServer #serverUrl {
+ width: 300px;
+}
diff --git a/apps/files/css/files.scss b/apps/files/css/files.scss
index b89332248f7..d2d810c1e6c 100644
--- a/apps/files/css/files.scss
+++ b/apps/files/css/files.scss
@@ -105,9 +105,6 @@
.nav-icon-trashbin {
background-image: url('../img/delete.svg?v=1');
}
-.nav-icon-quota {
- background-image: url('../img/quota.svg?v=1');
-}
#app-navigation .nav-files a.nav-icon-files {
width: auto;
diff --git a/apps/files/lib/Settings/Admin.php b/apps/files/lib/Settings/Admin.php
index 2f4406c150b..11b66dab846 100644
--- a/apps/files/lib/Settings/Admin.php
+++ b/apps/files/lib/Settings/Admin.php
@@ -70,7 +70,7 @@ class Admin implements ISettings {
* @return string the section ID, e.g. 'sharing'
*/
public function getSection() {
- return 'additional';
+ return 'server';
}
/**
diff --git a/apps/files/templates/appnavigation.php b/apps/files/templates/appnavigation.php
index a85e2515a92..c811ace8abe 100644
--- a/apps/files/templates/appnavigation.php
+++ b/apps/files/templates/appnavigation.php
@@ -15,7 +15,7 @@
if ($_['quota'] !== \OCP\Files\FileInfo::SPACE_UNLIMITED) {
?>has-tooltip" title="<?php p($_['usage_relative'] . '%');
} ?>">
- <a href="#" class="nav-icon-quota svg">
+ <a href="#" class="icon-quota svg">
<p id="quotatext"><?php
if ($_['quota'] !== \OCP\Files\FileInfo::SPACE_UNLIMITED) {
p($l->t('%s of %s used', [$_['usage'], $_['total_space']]));
diff --git a/apps/files/tests/Settings/AdminTest.php b/apps/files/tests/Settings/AdminTest.php
index 071cef7d75f..027a37d7b2f 100644
--- a/apps/files/tests/Settings/AdminTest.php
+++ b/apps/files/tests/Settings/AdminTest.php
@@ -75,7 +75,7 @@ class AdminTest extends TestCase {
}
public function testGetSection() {
- $this->assertSame('additional', $this->admin->getSection());
+ $this->assertSame('server', $this->admin->getSection());
}
public function testGetPriority() {
diff --git a/apps/files/tests/js/fileUploadSpec.js b/apps/files/tests/js/fileUploadSpec.js
index 81a0a2df610..6dde2734f1d 100644
--- a/apps/files/tests/js/fileUploadSpec.js
+++ b/apps/files/tests/js/fileUploadSpec.js
@@ -66,7 +66,7 @@ describe('OC.Upload tests', function() {
originalFiles: files,
files: [file],
jqXHR: jqXHR,
- response: sinon.stub.returns(jqXHR),
+ response: sinon.stub().returns(jqXHR),
submit: sinon.stub()
};
if (uploader.fileUploadParam.add.call(
diff --git a/apps/files_external/l10n/de.js b/apps/files_external/l10n/de.js
index 6fafc3e5489..eefbbe8c409 100644
--- a/apps/files_external/l10n/de.js
+++ b/apps/files_external/l10n/de.js
@@ -112,6 +112,7 @@ OC.L10N.register(
"Check for changes" : "Auf Änderungen prüfen",
"Never" : "Nie",
"Once every direct access" : "Einmal bei jedem Direktzugriff",
+ "Read only" : "Schreibgeschützt",
"Folder name" : "Ordnername",
"External storage" : "Externer Speicher",
"Authentication" : "Authentifizierung",
diff --git a/apps/files_external/l10n/de.json b/apps/files_external/l10n/de.json
index 89f089605b9..50c07260636 100644
--- a/apps/files_external/l10n/de.json
+++ b/apps/files_external/l10n/de.json
@@ -110,6 +110,7 @@
"Check for changes" : "Auf Änderungen prüfen",
"Never" : "Nie",
"Once every direct access" : "Einmal bei jedem Direktzugriff",
+ "Read only" : "Schreibgeschützt",
"Folder name" : "Ordnername",
"External storage" : "Externer Speicher",
"Authentication" : "Authentifizierung",
diff --git a/apps/files_external/l10n/de_DE.js b/apps/files_external/l10n/de_DE.js
index ca2d37523b2..13e44ab0cb9 100644
--- a/apps/files_external/l10n/de_DE.js
+++ b/apps/files_external/l10n/de_DE.js
@@ -112,6 +112,7 @@ OC.L10N.register(
"Check for changes" : "Auf Änderungen prüfen",
"Never" : "Nie",
"Once every direct access" : "Einmal bei jedem Direktzugriff",
+ "Read only" : "Schreibgeschützt",
"Folder name" : "Ordnername",
"External storage" : "Externer Speicher",
"Authentication" : "Authentifizierung",
diff --git a/apps/files_external/l10n/de_DE.json b/apps/files_external/l10n/de_DE.json
index 4ab53e25cbc..1f19a325427 100644
--- a/apps/files_external/l10n/de_DE.json
+++ b/apps/files_external/l10n/de_DE.json
@@ -110,6 +110,7 @@
"Check for changes" : "Auf Änderungen prüfen",
"Never" : "Nie",
"Once every direct access" : "Einmal bei jedem Direktzugriff",
+ "Read only" : "Schreibgeschützt",
"Folder name" : "Ordnername",
"External storage" : "Externer Speicher",
"Authentication" : "Authentifizierung",
diff --git a/apps/files_external/l10n/es.js b/apps/files_external/l10n/es.js
index f607c38b6d7..bc2328f274e 100644
--- a/apps/files_external/l10n/es.js
+++ b/apps/files_external/l10n/es.js
@@ -112,6 +112,7 @@ OC.L10N.register(
"Check for changes" : "Comprobar si hay cambios",
"Never" : "Nunca",
"Once every direct access" : "Una vez cada acceso directo",
+ "Read only" : "Solo lectura",
"Folder name" : "Nombre de la carpeta",
"External storage" : "Almacenamiento externo",
"Authentication" : "Autentificación",
diff --git a/apps/files_external/l10n/es.json b/apps/files_external/l10n/es.json
index 90800745fee..d959071bdde 100644
--- a/apps/files_external/l10n/es.json
+++ b/apps/files_external/l10n/es.json
@@ -110,6 +110,7 @@
"Check for changes" : "Comprobar si hay cambios",
"Never" : "Nunca",
"Once every direct access" : "Una vez cada acceso directo",
+ "Read only" : "Solo lectura",
"Folder name" : "Nombre de la carpeta",
"External storage" : "Almacenamiento externo",
"Authentication" : "Autentificación",
diff --git a/apps/files_external/l10n/es_MX.js b/apps/files_external/l10n/es_MX.js
index 3a5084dc55d..aa2f5e6fd7e 100644
--- a/apps/files_external/l10n/es_MX.js
+++ b/apps/files_external/l10n/es_MX.js
@@ -112,6 +112,7 @@ OC.L10N.register(
"Check for changes" : "Verificar si hay cambios",
"Never" : "Nunca",
"Once every direct access" : "Una vez cada acceso directo",
+ "Read only" : "Sólo lectura",
"Folder name" : "Nombre de la carpeta",
"External storage" : "Almacenamiento externo",
"Authentication" : "Autenticación",
diff --git a/apps/files_external/l10n/es_MX.json b/apps/files_external/l10n/es_MX.json
index 084edf9a09b..db983dff3aa 100644
--- a/apps/files_external/l10n/es_MX.json
+++ b/apps/files_external/l10n/es_MX.json
@@ -110,6 +110,7 @@
"Check for changes" : "Verificar si hay cambios",
"Never" : "Nunca",
"Once every direct access" : "Una vez cada acceso directo",
+ "Read only" : "Sólo lectura",
"Folder name" : "Nombre de la carpeta",
"External storage" : "Almacenamiento externo",
"Authentication" : "Autenticación",
diff --git a/apps/files_external/l10n/fi.js b/apps/files_external/l10n/fi.js
index 5b9a2b243b3..c02e671b01d 100644
--- a/apps/files_external/l10n/fi.js
+++ b/apps/files_external/l10n/fi.js
@@ -112,6 +112,7 @@ OC.L10N.register(
"Check for changes" : "Tarkista muutokset",
"Never" : "Ei koskaan",
"Once every direct access" : "Kerran aina suoran käytön yhteydessä",
+ "Read only" : "Vain luku",
"Folder name" : "Kansion nimi",
"External storage" : "Erillinen tallennustila",
"Authentication" : "Tunnistautuminen",
diff --git a/apps/files_external/l10n/fi.json b/apps/files_external/l10n/fi.json
index b2bd0c3539a..e0a7035f105 100644
--- a/apps/files_external/l10n/fi.json
+++ b/apps/files_external/l10n/fi.json
@@ -110,6 +110,7 @@
"Check for changes" : "Tarkista muutokset",
"Never" : "Ei koskaan",
"Once every direct access" : "Kerran aina suoran käytön yhteydessä",
+ "Read only" : "Vain luku",
"Folder name" : "Kansion nimi",
"External storage" : "Erillinen tallennustila",
"Authentication" : "Tunnistautuminen",
diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js
index 7533b976a14..a3b12150d45 100644
--- a/apps/files_external/l10n/fr.js
+++ b/apps/files_external/l10n/fr.js
@@ -112,6 +112,7 @@ OC.L10N.register(
"Check for changes" : "Rechercher les modifications",
"Never" : "Jamais",
"Once every direct access" : "Une fois à chaque accès direct",
+ "Read only" : "Lecture seule",
"Folder name" : "Nom du dossier",
"External storage" : "Stockage externe",
"Authentication" : "Authentification",
diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json
index 73b8bc28c5b..8b0bc077c0e 100644
--- a/apps/files_external/l10n/fr.json
+++ b/apps/files_external/l10n/fr.json
@@ -110,6 +110,7 @@
"Check for changes" : "Rechercher les modifications",
"Never" : "Jamais",
"Once every direct access" : "Une fois à chaque accès direct",
+ "Read only" : "Lecture seule",
"Folder name" : "Nom du dossier",
"External storage" : "Stockage externe",
"Authentication" : "Authentification",
diff --git a/apps/files_external/l10n/it.js b/apps/files_external/l10n/it.js
index 26cf94da6d5..f8ac97f6f68 100644
--- a/apps/files_external/l10n/it.js
+++ b/apps/files_external/l10n/it.js
@@ -112,6 +112,7 @@ OC.L10N.register(
"Check for changes" : "Controlla le modifiche",
"Never" : "Mai",
"Once every direct access" : "Una volta per ogni accesso diretto",
+ "Read only" : "Sola lettura",
"Folder name" : "Nome della cartella",
"External storage" : "Archiviazione esterna",
"Authentication" : "Autenticazione",
diff --git a/apps/files_external/l10n/it.json b/apps/files_external/l10n/it.json
index a8151db2395..6495f32fc8d 100644
--- a/apps/files_external/l10n/it.json
+++ b/apps/files_external/l10n/it.json
@@ -110,6 +110,7 @@
"Check for changes" : "Controlla le modifiche",
"Never" : "Mai",
"Once every direct access" : "Una volta per ogni accesso diretto",
+ "Read only" : "Sola lettura",
"Folder name" : "Nome della cartella",
"External storage" : "Archiviazione esterna",
"Authentication" : "Autenticazione",
diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js
index f1624a0f9ea..a04fc14c8a3 100644
--- a/apps/files_external/l10n/pt_BR.js
+++ b/apps/files_external/l10n/pt_BR.js
@@ -112,6 +112,7 @@ OC.L10N.register(
"Check for changes" : "Verifique se há alterações",
"Never" : "Nunca",
"Once every direct access" : "Uma vez a cada acesso direto",
+ "Read only" : "Somente leitura",
"Folder name" : "Nome da pasta",
"External storage" : "Armazenamento Externo",
"Authentication" : "Autenticação",
diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json
index 80d6ba18e09..bfe10a37539 100644
--- a/apps/files_external/l10n/pt_BR.json
+++ b/apps/files_external/l10n/pt_BR.json
@@ -110,6 +110,7 @@
"Check for changes" : "Verifique se há alterações",
"Never" : "Nunca",
"Once every direct access" : "Uma vez a cada acesso direto",
+ "Read only" : "Somente leitura",
"Folder name" : "Nome da pasta",
"External storage" : "Armazenamento Externo",
"Authentication" : "Autenticação",
diff --git a/apps/files_external/l10n/ru.js b/apps/files_external/l10n/ru.js
index 39e02bdabde..fbb90ba4a89 100644
--- a/apps/files_external/l10n/ru.js
+++ b/apps/files_external/l10n/ru.js
@@ -112,6 +112,7 @@ OC.L10N.register(
"Check for changes" : "Проверять изменения",
"Never" : "Никогда",
"Once every direct access" : "Каждый раз при прямом доступе",
+ "Read only" : "Только чтение",
"Folder name" : "Имя папки",
"External storage" : "Внешнее хранилище",
"Authentication" : "Способ авторизации",
diff --git a/apps/files_external/l10n/ru.json b/apps/files_external/l10n/ru.json
index 387b9087209..ff6df5b9a55 100644
--- a/apps/files_external/l10n/ru.json
+++ b/apps/files_external/l10n/ru.json
@@ -110,6 +110,7 @@
"Check for changes" : "Проверять изменения",
"Never" : "Никогда",
"Once every direct access" : "Каждый раз при прямом доступе",
+ "Read only" : "Только чтение",
"Folder name" : "Имя папки",
"External storage" : "Внешнее хранилище",
"Authentication" : "Способ авторизации",
diff --git a/apps/files_external/l10n/sr.js b/apps/files_external/l10n/sr.js
index c6ad3082af2..d303a83b6b5 100644
--- a/apps/files_external/l10n/sr.js
+++ b/apps/files_external/l10n/sr.js
@@ -112,6 +112,7 @@ OC.L10N.register(
"Check for changes" : "Проверавај за измене",
"Never" : "никад",
"Once every direct access" : "једном при сваком директном приступу",
+ "Read only" : "Само за читање",
"Folder name" : "Назив фасцикле",
"External storage" : "Спољашње складиште",
"Authentication" : "Провера идентитета",
diff --git a/apps/files_external/l10n/sr.json b/apps/files_external/l10n/sr.json
index 3a7795e0ff5..3c779a8b3d6 100644
--- a/apps/files_external/l10n/sr.json
+++ b/apps/files_external/l10n/sr.json
@@ -110,6 +110,7 @@
"Check for changes" : "Проверавај за измене",
"Never" : "никад",
"Once every direct access" : "једном при сваком директном приступу",
+ "Read only" : "Само за читање",
"Folder name" : "Назив фасцикле",
"External storage" : "Спољашње складиште",
"Authentication" : "Провера идентитета",
diff --git a/apps/files_external/l10n/tr.js b/apps/files_external/l10n/tr.js
index 9d854556b97..bcc1c64cc0c 100644
--- a/apps/files_external/l10n/tr.js
+++ b/apps/files_external/l10n/tr.js
@@ -112,6 +112,7 @@ OC.L10N.register(
"Check for changes" : "Değişiklikleri denetle",
"Never" : "Asla",
"Once every direct access" : "Her doğrudan erişimde bir kez",
+ "Read only" : "Salt okunur",
"Folder name" : "Klasör adı",
"External storage" : "Dış depolama",
"Authentication" : "Kimlik Doğrulama",
diff --git a/apps/files_external/l10n/tr.json b/apps/files_external/l10n/tr.json
index 4376d41228c..73ebf0c7759 100644
--- a/apps/files_external/l10n/tr.json
+++ b/apps/files_external/l10n/tr.json
@@ -110,6 +110,7 @@
"Check for changes" : "Değişiklikleri denetle",
"Never" : "Asla",
"Once every direct access" : "Her doğrudan erişimde bir kez",
+ "Read only" : "Salt okunur",
"Folder name" : "Klasör adı",
"External storage" : "Dış depolama",
"Authentication" : "Kimlik Doğrulama",
diff --git a/apps/files_external/lib/Lib/Storage/AmazonS3.php b/apps/files_external/lib/Lib/Storage/AmazonS3.php
index 483f1610bcb..097b196b2d4 100644
--- a/apps/files_external/lib/Lib/Storage/AmazonS3.php
+++ b/apps/files_external/lib/Lib/Storage/AmazonS3.php
@@ -291,15 +291,17 @@ class AmazonS3 extends \OC\Files\Storage\Common {
$files[] = substr(trim($prefix['Prefix'], '/'), strlen($path));
}
}
- foreach ($result['Contents'] as $object) {
- if (isset($object['Key']) && $object['Key'] === $path) {
- // it's the directory itself, skip
- continue;
+ if (is_array($result['Contents'])) {
+ foreach ($result['Contents'] as $object) {
+ if (isset($object['Key']) && $object['Key'] === $path) {
+ // it's the directory itself, skip
+ continue;
+ }
+ $file = basename(
+ isset($object['Key']) ? $object['Key'] : $object['Prefix']
+ );
+ $files[] = $file;
}
- $file = basename(
- isset($object['Key']) ? $object['Key'] : $object['Prefix']
- );
- $files[] = $file;
}
}
diff --git a/apps/files_external/lib/Lib/Storage/OwnCloud.php b/apps/files_external/lib/Lib/Storage/OwnCloud.php
index d56e6b66145..3ee2b70ef22 100644
--- a/apps/files_external/lib/Lib/Storage/OwnCloud.php
+++ b/apps/files_external/lib/Lib/Storage/OwnCloud.php
@@ -73,4 +73,8 @@ class OwnCloud extends \OC\Files\Storage\DAV{
parent::__construct($params);
}
+
+ public function needsPartFile() {
+ return false;
+ }
}
diff --git a/apps/files_sharing/lib/External/Storage.php b/apps/files_sharing/lib/External/Storage.php
index 638f82f7027..a631a029aba 100644
--- a/apps/files_sharing/lib/External/Storage.php
+++ b/apps/files_sharing/lib/External/Storage.php
@@ -366,4 +366,7 @@ class Storage extends DAV implements ISharedStorage {
return $permissions;
}
+ public function needsPartFile() {
+ return false;
+ }
}
diff --git a/apps/files_versions/appinfo/info.xml b/apps/files_versions/appinfo/info.xml
index 8f7e4d7b716..3edce7775fc 100644
--- a/apps/files_versions/appinfo/info.xml
+++ b/apps/files_versions/appinfo/info.xml
@@ -8,7 +8,7 @@
This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user’s directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user doesn’t run out of Quota because of versions.
In addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user’s currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation.
</description>
- <version>1.7.0</version>
+ <version>1.7.1</version>
<licence>agpl</licence>
<author>Frank Karlitschek</author>
<author>Bjoern Schiessle</author>
@@ -16,6 +16,7 @@
<default_enable/>
<types>
<filesystem/>
+ <dav/>
</types>
<documentation>
<user>user-versions</user>
@@ -34,4 +35,10 @@
<command>OCA\Files_Versions\Command\CleanUp</command>
<command>OCA\Files_Versions\Command\ExpireVersions</command>
</commands>
+
+ <sabre>
+ <collections>
+ <collection>OCA\Files_Versions\Sabre\RootCollection</collection>
+ </collections>
+ </sabre>
</info>
diff --git a/apps/files_versions/composer/composer/autoload_classmap.php b/apps/files_versions/composer/composer/autoload_classmap.php
index 05dad7f7c5f..4bb112b4f11 100644
--- a/apps/files_versions/composer/composer/autoload_classmap.php
+++ b/apps/files_versions/composer/composer/autoload_classmap.php
@@ -16,5 +16,11 @@ return array(
'OCA\\Files_Versions\\Events\\CreateVersionEvent' => $baseDir . '/../lib/Events/CreateVersionEvent.php',
'OCA\\Files_Versions\\Expiration' => $baseDir . '/../lib/Expiration.php',
'OCA\\Files_Versions\\Hooks' => $baseDir . '/../lib/Hooks.php',
+ 'OCA\\Files_Versions\\Sabre\\RestoreFolder' => $baseDir . '/../lib/Sabre/RestoreFolder.php',
+ 'OCA\\Files_Versions\\Sabre\\RootCollection' => $baseDir . '/../lib/Sabre/RootCollection.php',
+ 'OCA\\Files_Versions\\Sabre\\VersionCollection' => $baseDir . '/../lib/Sabre/VersionCollection.php',
+ 'OCA\\Files_Versions\\Sabre\\VersionFile' => $baseDir . '/../lib/Sabre/VersionFile.php',
+ 'OCA\\Files_Versions\\Sabre\\VersionHome' => $baseDir . '/../lib/Sabre/VersionHome.php',
+ 'OCA\\Files_Versions\\Sabre\\VersionRoot' => $baseDir . '/../lib/Sabre/VersionRoot.php',
'OCA\\Files_Versions\\Storage' => $baseDir . '/../lib/Storage.php',
);
diff --git a/apps/files_versions/composer/composer/autoload_static.php b/apps/files_versions/composer/composer/autoload_static.php
index 9ac3b049030..29bc592b41c 100644
--- a/apps/files_versions/composer/composer/autoload_static.php
+++ b/apps/files_versions/composer/composer/autoload_static.php
@@ -31,6 +31,12 @@ class ComposerStaticInitFiles_Versions
'OCA\\Files_Versions\\Events\\CreateVersionEvent' => __DIR__ . '/..' . '/../lib/Events/CreateVersionEvent.php',
'OCA\\Files_Versions\\Expiration' => __DIR__ . '/..' . '/../lib/Expiration.php',
'OCA\\Files_Versions\\Hooks' => __DIR__ . '/..' . '/../lib/Hooks.php',
+ 'OCA\\Files_Versions\\Sabre\\RestoreFolder' => __DIR__ . '/..' . '/../lib/Sabre/RestoreFolder.php',
+ 'OCA\\Files_Versions\\Sabre\\RootCollection' => __DIR__ . '/..' . '/../lib/Sabre/RootCollection.php',
+ 'OCA\\Files_Versions\\Sabre\\VersionCollection' => __DIR__ . '/..' . '/../lib/Sabre/VersionCollection.php',
+ 'OCA\\Files_Versions\\Sabre\\VersionFile' => __DIR__ . '/..' . '/../lib/Sabre/VersionFile.php',
+ 'OCA\\Files_Versions\\Sabre\\VersionHome' => __DIR__ . '/..' . '/../lib/Sabre/VersionHome.php',
+ 'OCA\\Files_Versions\\Sabre\\VersionRoot' => __DIR__ . '/..' . '/../lib/Sabre/VersionRoot.php',
'OCA\\Files_Versions\\Storage' => __DIR__ . '/..' . '/../lib/Storage.php',
);
diff --git a/apps/files_versions/lib/AppInfo/Application.php b/apps/files_versions/lib/AppInfo/Application.php
index e09299c8bc8..4431fbf51bf 100644
--- a/apps/files_versions/lib/AppInfo/Application.php
+++ b/apps/files_versions/lib/AppInfo/Application.php
@@ -23,6 +23,7 @@
namespace OCA\Files_Versions\AppInfo;
+use OCA\DAV\Connector\Sabre\Principal;
use OCP\AppFramework\App;
use OCA\Files_Versions\Expiration;
use OCP\AppFramework\Utility\ITimeFactory;
@@ -48,5 +49,17 @@ class Application extends App {
$c->query(ITimeFactory::class)
);
});
+
+ /*
+ * Register $principalBackend for the DAV collection
+ */
+ $container->registerService('principalBackend', function () {
+ return new Principal(
+ \OC::$server->getUserManager(),
+ \OC::$server->getGroupManager(),
+ \OC::$server->getShareManager(),
+ \OC::$server->getUserSession()
+ );
+ });
}
}
diff --git a/apps/files_versions/lib/Sabre/RestoreFolder.php b/apps/files_versions/lib/Sabre/RestoreFolder.php
new file mode 100644
index 00000000000..c398d02692b
--- /dev/null
+++ b/apps/files_versions/lib/Sabre/RestoreFolder.php
@@ -0,0 +1,86 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright 2018, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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 OCA\Files_Versions\Sabre;
+
+use Sabre\DAV\Exception\Forbidden;
+use Sabre\DAV\ICollection;
+use Sabre\DAV\IMoveTarget;
+use Sabre\DAV\INode;
+
+
+class RestoreFolder implements ICollection, IMoveTarget {
+
+ /** @var string */
+ protected $userId;
+
+ public function __construct(string $userId) {
+ $this->userId = $userId;
+ }
+
+ public function createFile($name, $data = null) {
+ throw new Forbidden();
+ }
+
+ public function createDirectory($name) {
+ throw new Forbidden();
+ }
+
+ public function getChild($name) {
+ return null;
+ }
+
+ public function delete() {
+ throw new Forbidden();
+ }
+
+ public function getName() {
+ return 'restore';
+ }
+
+ public function setName($name) {
+ throw new Forbidden();
+ }
+
+ public function getLastModified(): int {
+ return 0;
+ }
+
+ public function getChildren(): array {
+ return [];
+ }
+
+ public function childExists($name): bool {
+ return false;
+ }
+
+ public function moveInto($targetName, $sourcePath, INode $sourceNode): bool {
+ if (!($sourceNode instanceof VersionFile)) {
+ return false;
+ }
+
+ return $sourceNode->rollBack();
+ }
+
+}
diff --git a/apps/files_versions/lib/Sabre/RootCollection.php b/apps/files_versions/lib/Sabre/RootCollection.php
new file mode 100644
index 00000000000..397f1c55891
--- /dev/null
+++ b/apps/files_versions/lib/Sabre/RootCollection.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * @copyright 2018, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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 OCA\Files_Versions\Sabre;
+
+use OCP\Files\IRootFolder;
+use Sabre\DAV\INode;
+use Sabre\DAVACL\AbstractPrincipalCollection;
+use Sabre\DAVACL\PrincipalBackend;
+
+class RootCollection extends AbstractPrincipalCollection {
+
+ /** @var IRootFolder */
+ private $rootFolder;
+
+ public function __construct(PrincipalBackend\BackendInterface $principalBackend,
+ IRootFolder $rootFolder) {
+ parent::__construct($principalBackend, 'principals/users');
+
+ $this->rootFolder = $rootFolder;
+ }
+
+ /**
+ * This method returns a node for a principal.
+ *
+ * The passed array contains principal information, and is guaranteed to
+ * at least contain a uri item. Other properties may or may not be
+ * supplied by the authentication backend.
+ *
+ * @param array $principalInfo
+ * @return INode
+ */
+ public function getChildForPrincipal(array $principalInfo) {
+ list(,$name) = \Sabre\Uri\split($principalInfo['uri']);
+ $user = \OC::$server->getUserSession()->getUser();
+ if (is_null($user) || $name !== $user->getUID()) {
+ throw new \Sabre\DAV\Exception\Forbidden();
+ }
+ return new VersionHome($principalInfo, $this->rootFolder);
+ }
+
+ public function getName() {
+ return 'versions';
+ }
+
+}
diff --git a/apps/files_versions/lib/Sabre/VersionCollection.php b/apps/files_versions/lib/Sabre/VersionCollection.php
new file mode 100644
index 00000000000..481a5f491c3
--- /dev/null
+++ b/apps/files_versions/lib/Sabre/VersionCollection.php
@@ -0,0 +1,102 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright 2018, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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 OCA\Files_Versions\Sabre;
+
+use OCA\Files_Versions\Storage;
+use OCP\Files\File;
+use OCP\Files\Folder;
+use Sabre\DAV\Exception\Forbidden;
+use Sabre\DAV\Exception\NotFound;
+use Sabre\DAV\ICollection;
+
+class VersionCollection implements ICollection {
+ /** @var Folder */
+ private $userFolder;
+
+ /** @var File */
+ private $file;
+
+ /** @var string */
+ private $userId;
+
+ public function __construct(Folder $userFolder, File $file, string $userId) {
+ $this->userFolder = $userFolder;
+ $this->file = $file;
+ $this->userId = $userId;
+ }
+
+ public function createFile($name, $data = null) {
+ throw new Forbidden();
+ }
+
+ public function createDirectory($name) {
+ throw new Forbidden();
+ }
+
+ public function getChild($name) {
+ /** @var VersionFile[] $versions */
+ $versions = $this->getChildren();
+
+ foreach ($versions as $version) {
+ if ($version->getName() === $name) {
+ return $version;
+ }
+ }
+
+ throw new NotFound();
+ }
+
+ public function getChildren(): array {
+ $versions = Storage::getVersions($this->userId, $this->userFolder->getRelativePath($this->file->getPath()));
+
+ return array_map(function (array $data) {
+ return new VersionFile($data, $this->userFolder->getParent());
+ }, $versions);
+ }
+
+ public function childExists($name): bool {
+ try {
+ $this->getChild($name);
+ return true;
+ } catch (NotFound $e) {
+ return false;
+ }
+ }
+
+ public function delete() {
+ throw new Forbidden();
+ }
+
+ public function getName(): string {
+ return (string)$this->file->getId();
+ }
+
+ public function setName($name) {
+ throw new Forbidden();
+ }
+
+ public function getLastModified(): int {
+ return 0;
+ }
+}
diff --git a/apps/files_versions/lib/Sabre/VersionFile.php b/apps/files_versions/lib/Sabre/VersionFile.php
new file mode 100644
index 00000000000..347058448fc
--- /dev/null
+++ b/apps/files_versions/lib/Sabre/VersionFile.php
@@ -0,0 +1,94 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright 2018, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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 OCA\Files_Versions\Sabre;
+
+use OCA\Files_Versions\Storage;
+use OCP\Files\File;
+use OCP\Files\Folder;
+use OCP\Files\NotFoundException;
+use Sabre\DAV\Exception\Forbidden;
+use Sabre\DAV\Exception\NotFound;
+use Sabre\DAV\IFile;
+
+class VersionFile implements IFile {
+ /** @var array */
+ private $data;
+
+ /** @var Folder */
+ private $userRoot;
+
+ public function __construct(array $data, Folder $userRoot) {
+ $this->data = $data;
+ $this->userRoot = $userRoot;
+ }
+
+ public function put($data) {
+ throw new Forbidden();
+ }
+
+ public function get() {
+ try {
+ /** @var Folder $versions */
+ $versions = $this->userRoot->get('files_versions');
+ /** @var File $version */
+ $version = $versions->get($this->data['path'].'.v'.$this->data['version']);
+ } catch (NotFoundException $e) {
+ throw new NotFound();
+ }
+
+ return $version->fopen('rb');
+ }
+
+ public function getContentType(): string {
+ return $this->data['mimetype'];
+ }
+
+ public function getETag(): string {
+ return $this->data['version'];
+ }
+
+ public function getSize(): int {
+ return $this->data['size'];
+ }
+
+ public function delete() {
+ throw new Forbidden();
+ }
+
+ public function getName(): string {
+ return $this->data['version'];
+ }
+
+ public function setName($name) {
+ throw new Forbidden();
+ }
+
+ public function getLastModified(): int {
+ return (int)$this->data['version'];
+ }
+
+ public function rollBack(): bool {
+ return Storage::rollback($this->data['path'], $this->data['version']);
+ }
+}
diff --git a/apps/files_versions/lib/Sabre/VersionHome.php b/apps/files_versions/lib/Sabre/VersionHome.php
new file mode 100644
index 00000000000..7a99d2376d4
--- /dev/null
+++ b/apps/files_versions/lib/Sabre/VersionHome.php
@@ -0,0 +1,90 @@
+<?php
+/**
+ * @copyright 2018, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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 OCA\Files_Versions\Sabre;
+
+use OCP\Files\IRootFolder;
+use Sabre\DAV\Exception\Forbidden;
+use Sabre\DAV\ICollection;
+
+class VersionHome implements ICollection {
+
+ /** @var array */
+ private $principalInfo;
+
+ /** @var IRootFolder */
+ private $rootFolder;
+
+ public function __construct(array $principalInfo, IRootFolder $rootFolder) {
+ $this->principalInfo = $principalInfo;
+ $this->rootFolder = $rootFolder;
+ }
+
+ public function delete() {
+ throw new Forbidden();
+ }
+
+ public function getName(): string {
+ list(,$name) = \Sabre\Uri\split($this->principalInfo['uri']);
+ return $name;
+ }
+
+ public function setName($name) {
+ throw new Forbidden();
+ }
+
+ public function createFile($name, $data = null) {
+ throw new Forbidden();
+ }
+
+ public function createDirectory($name) {
+ throw new Forbidden();
+ }
+
+ public function getChild($name) {
+ list(,$userId) = \Sabre\Uri\split($this->principalInfo['uri']);
+
+ if ($name === 'versions') {
+ return new VersionRoot($userId, $this->rootFolder);
+ }
+ if ($name === 'restore') {
+ return new RestoreFolder($userId);
+ }
+ }
+
+ public function getChildren() {
+ list(,$userId) = \Sabre\Uri\split($this->principalInfo['uri']);
+
+ return [
+ new VersionRoot($userId, $this->rootFolder),
+ new RestoreFolder($userId),
+ ];
+ }
+
+ public function childExists($name) {
+ return $name === 'versions' || $name === 'restore';
+ }
+
+ public function getLastModified() {
+ return 0;
+ }
+}
diff --git a/apps/files_versions/lib/Sabre/VersionRoot.php b/apps/files_versions/lib/Sabre/VersionRoot.php
new file mode 100644
index 00000000000..743b1c6ef1b
--- /dev/null
+++ b/apps/files_versions/lib/Sabre/VersionRoot.php
@@ -0,0 +1,100 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright 2018, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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 OCA\Files_Versions\Sabre;
+
+use OCP\Files\File;
+use OCP\Files\IRootFolder;
+use Sabre\DAV\Exception\Forbidden;
+use Sabre\DAV\Exception\NotFound;
+use Sabre\DAV\ICollection;
+
+class VersionRoot implements ICollection {
+
+ /** @var string */
+ private $userId;
+
+ /** @var IRootFolder */
+ private $rootFolder;
+
+ public function __construct(string $userId, IRootFolder $rootFolder) {
+ $this->userId = $userId;
+ $this->rootFolder = $rootFolder;
+ }
+
+ public function delete() {
+ throw new Forbidden();
+ }
+
+ public function getName(): string {
+ return 'versions';
+ }
+
+ public function setName($name) {
+ throw new Forbidden();
+ }
+
+ public function createFile($name, $data = null) {
+ throw new Forbidden();
+ }
+
+ public function createDirectory($name) {
+ throw new Forbidden();
+ }
+
+ public function getChild($name) {
+ $userFolder = $this->rootFolder->getUserFolder($this->userId);
+
+ $fileId = (int)$name;
+ $nodes = $userFolder->getById($fileId);
+
+ if ($nodes === []) {
+ throw new NotFound();
+ }
+
+ $node = array_pop($nodes);
+
+ if (!$node instanceof File) {
+ throw new NotFound();
+ }
+
+ return new VersionCollection($userFolder, $node, $this->userId);
+ }
+
+ public function getChildren(): array {
+ return [];
+ }
+
+ public function childExists($name): bool {
+ try {
+ $this->getChild($name);
+ return true;
+ } catch (NotFound $e) {
+ return false;
+ }
+ }
+
+ public function getLastModified(): int {
+ return 0;
+ }
+}
diff --git a/apps/oauth2/l10n/zh_CN.js b/apps/oauth2/l10n/zh_CN.js
index a1108d5a4fa..529a9f1f854 100644
--- a/apps/oauth2/l10n/zh_CN.js
+++ b/apps/oauth2/l10n/zh_CN.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"oauth2",
{
+ "OAuth 2.0" : "OAuth 2.0",
"OAuth 2.0 clients" : "OAuth 2.0 客户端",
"OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 认证协议允许外部服务请求访问您的%s",
"Name" : "名称",
diff --git a/apps/oauth2/l10n/zh_CN.json b/apps/oauth2/l10n/zh_CN.json
index b60e2c7c415..b9334e7f9ad 100644
--- a/apps/oauth2/l10n/zh_CN.json
+++ b/apps/oauth2/l10n/zh_CN.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "OAuth 2.0" : "OAuth 2.0",
"OAuth 2.0 clients" : "OAuth 2.0 客户端",
"OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 认证协议允许外部服务请求访问您的%s",
"Name" : "名称",
diff --git a/apps/theming/l10n/es_MX.js b/apps/theming/l10n/es_MX.js
index fe5f2f28f46..bee78be90cc 100644
--- a/apps/theming/l10n/es_MX.js
+++ b/apps/theming/l10n/es_MX.js
@@ -20,6 +20,7 @@ OC.L10N.register(
"A PHP extension stopped the file upload" : "Una extensión de PHP detuvo la carga del archivo",
"No file uploaded" : "No hay archivos cargados",
"Unsupported image type" : "Tipo de imagen no soportado",
+ "You are already using a custom theme. Theming app settings might be overwritten by that." : "Ya te encuentras usando un tema personalizado. La aplicación de Temas puede estar siendo sobreescrita por él.",
"Theming" : "Tematizar",
"Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "El tematizar hace posible personalizar facilmente la manera en que se ve tu instancia y clientes soportados. Esto será visible para todos los usuarios. ",
"Name" : "Nombre",
@@ -33,6 +34,11 @@ OC.L10N.register(
"Login image" : "Imágen de inicio de sesión",
"Upload new login background" : "Cargar nueva imagen de fondo para inicio de sesión",
"Remove background image" : "Eliminar imagen de fondo",
+ "Advanced options" : "Opciones avanzadas",
+ "Header logo" : "Logo del encabezado",
+ "Upload new header logo" : "Cargar un nuevo logotipo del encabezado",
+ "Favicon" : "Favicon",
+ "Upload new favicon" : "Cargar un nuevo favicon",
"Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Instala la extensión Imagemagick de PHP con soporte a imagenes SVG para generar los favicons en automático con base en el logotipo cargado y el color.",
"You are already using a custom theme" : "Ya estás usando un tema personalizado",
"reset to default" : "restaurar a predeterminado",
diff --git a/apps/theming/l10n/es_MX.json b/apps/theming/l10n/es_MX.json
index 2b39ddc99ec..84e7927dda8 100644
--- a/apps/theming/l10n/es_MX.json
+++ b/apps/theming/l10n/es_MX.json
@@ -18,6 +18,7 @@
"A PHP extension stopped the file upload" : "Una extensión de PHP detuvo la carga del archivo",
"No file uploaded" : "No hay archivos cargados",
"Unsupported image type" : "Tipo de imagen no soportado",
+ "You are already using a custom theme. Theming app settings might be overwritten by that." : "Ya te encuentras usando un tema personalizado. La aplicación de Temas puede estar siendo sobreescrita por él.",
"Theming" : "Tematizar",
"Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "El tematizar hace posible personalizar facilmente la manera en que se ve tu instancia y clientes soportados. Esto será visible para todos los usuarios. ",
"Name" : "Nombre",
@@ -31,6 +32,11 @@
"Login image" : "Imágen de inicio de sesión",
"Upload new login background" : "Cargar nueva imagen de fondo para inicio de sesión",
"Remove background image" : "Eliminar imagen de fondo",
+ "Advanced options" : "Opciones avanzadas",
+ "Header logo" : "Logo del encabezado",
+ "Upload new header logo" : "Cargar un nuevo logotipo del encabezado",
+ "Favicon" : "Favicon",
+ "Upload new favicon" : "Cargar un nuevo favicon",
"Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Instala la extensión Imagemagick de PHP con soporte a imagenes SVG para generar los favicons en automático con base en el logotipo cargado y el color.",
"You are already using a custom theme" : "Ya estás usando un tema personalizado",
"reset to default" : "restaurar a predeterminado",
diff --git a/apps/theming/l10n/sr.js b/apps/theming/l10n/sr.js
index 9ba3df16b53..5c33035a32b 100644
--- a/apps/theming/l10n/sr.js
+++ b/apps/theming/l10n/sr.js
@@ -34,6 +34,11 @@ OC.L10N.register(
"Login image" : "Слика на пријави",
"Upload new login background" : "Отпремите нову позадину на пријави",
"Remove background image" : "Уклони позадину",
+ "Advanced options" : "Напредне опције",
+ "Header logo" : "Лого заглавља",
+ "Upload new header logo" : "Отпремите нови лого заглавља",
+ "Favicon" : "Favicon",
+ "Upload new favicon" : "Отпремите нову favicon иконицу",
"Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Инсталирајте Imagemagick PHP екстензију која подржава SVG слике, да аутоматски направи иконе од отпремљеног логоа и боје.",
"You are already using a custom theme" : "Већ користите прилагођену тему",
"reset to default" : "ресетуј на подразумевано",
diff --git a/apps/theming/l10n/sr.json b/apps/theming/l10n/sr.json
index 735302d718c..d762e49d67b 100644
--- a/apps/theming/l10n/sr.json
+++ b/apps/theming/l10n/sr.json
@@ -32,6 +32,11 @@
"Login image" : "Слика на пријави",
"Upload new login background" : "Отпремите нову позадину на пријави",
"Remove background image" : "Уклони позадину",
+ "Advanced options" : "Напредне опције",
+ "Header logo" : "Лого заглавља",
+ "Upload new header logo" : "Отпремите нови лого заглавља",
+ "Favicon" : "Favicon",
+ "Upload new favicon" : "Отпремите нову favicon иконицу",
"Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Инсталирајте Imagemagick PHP екстензију која подржава SVG слике, да аутоматски направи иконе од отпремљеног логоа и боје.",
"You are already using a custom theme" : "Већ користите прилагођену тему",
"reset to default" : "ресетуј на подразумевано",
diff --git a/apps/updatenotification/l10n/es_MX.js b/apps/updatenotification/l10n/es_MX.js
index 5bb1fb5d272..fbe5623e050 100644
--- a/apps/updatenotification/l10n/es_MX.js
+++ b/apps/updatenotification/l10n/es_MX.js
@@ -32,6 +32,7 @@ OC.L10N.register(
"Update for {app} to version %s is available." : "Actualización para {app} a la versión %s está disponible.",
"Update notification" : "Notificación de actualización",
"A new version is available: %s" : "Una nueva versión está disponible: %s",
+ "The version you are running is not maintained anymore. Please make sure to update to a supported version as soon as possible." : "La versión que estas corriendo ya no cuenta con mantenimiento. Por favor asegurate de actualizar a una versión soportada lo antes posible. ",
"Download now" : "Descargar ahora",
"Checked on %s" : "Verificado el %s",
"The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace que las notificaciones dedicadas al servidor sean obsoletas. ",
diff --git a/apps/updatenotification/l10n/es_MX.json b/apps/updatenotification/l10n/es_MX.json
index d71edae7cac..3c70b4aa124 100644
--- a/apps/updatenotification/l10n/es_MX.json
+++ b/apps/updatenotification/l10n/es_MX.json
@@ -30,6 +30,7 @@
"Update for {app} to version %s is available." : "Actualización para {app} a la versión %s está disponible.",
"Update notification" : "Notificación de actualización",
"A new version is available: %s" : "Una nueva versión está disponible: %s",
+ "The version you are running is not maintained anymore. Please make sure to update to a supported version as soon as possible." : "La versión que estas corriendo ya no cuenta con mantenimiento. Por favor asegurate de actualizar a una versión soportada lo antes posible. ",
"Download now" : "Descargar ahora",
"Checked on %s" : "Verificado el %s",
"The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace que las notificaciones dedicadas al servidor sean obsoletas. ",
diff --git a/apps/updatenotification/l10n/fi.js b/apps/updatenotification/l10n/fi.js
index 6c4671a1ea5..7b3b8098573 100644
--- a/apps/updatenotification/l10n/fi.js
+++ b/apps/updatenotification/l10n/fi.js
@@ -22,6 +22,7 @@ OC.L10N.register(
"Update for {app} to version %s is available." : "Sovelluksen {app} päivitys versioon %s on saatavilla.",
"Update notification" : "Päivitysilmoitus",
"A new version is available: %s" : "Uusi versio on saatavilla: %s",
+ "The version you are running is not maintained anymore. Please make sure to update to a supported version as soon as possible." : "Käyttämäsi versio ei ole enää tuettu. Varmista, että päivität tuettuun versioon mahdollisimman pian.",
"Download now" : "Lataa heti",
"Checked on %s" : "Tarkistettu %s",
"The update check is not yet finished. Please refresh the page." : "Päivitystarkistus ei ole vielä valmis. Päivitä sivu."
diff --git a/apps/updatenotification/l10n/fi.json b/apps/updatenotification/l10n/fi.json
index a9a18a8575c..3411ddb6e36 100644
--- a/apps/updatenotification/l10n/fi.json
+++ b/apps/updatenotification/l10n/fi.json
@@ -20,6 +20,7 @@
"Update for {app} to version %s is available." : "Sovelluksen {app} päivitys versioon %s on saatavilla.",
"Update notification" : "Päivitysilmoitus",
"A new version is available: %s" : "Uusi versio on saatavilla: %s",
+ "The version you are running is not maintained anymore. Please make sure to update to a supported version as soon as possible." : "Käyttämäsi versio ei ole enää tuettu. Varmista, että päivität tuettuun versioon mahdollisimman pian.",
"Download now" : "Lataa heti",
"Checked on %s" : "Tarkistettu %s",
"The update check is not yet finished. Please refresh the page." : "Päivitystarkistus ei ole vielä valmis. Päivitä sivu."
diff --git a/apps/updatenotification/lib/Settings/Admin.php b/apps/updatenotification/lib/Settings/Admin.php
index 5213eb905ee..bb12402aa07 100644
--- a/apps/updatenotification/lib/Settings/Admin.php
+++ b/apps/updatenotification/lib/Settings/Admin.php
@@ -130,7 +130,7 @@ class Admin implements ISettings {
* @return string the section ID, e.g. 'sharing'
*/
public function getSection(): string {
- return 'server';
+ return 'overview';
}
/**
@@ -141,6 +141,6 @@ class Admin implements ISettings {
* E.g.: 70
*/
public function getPriority(): int {
- return 1;
+ return 11;
}
}
diff --git a/apps/updatenotification/tests/Settings/AdminTest.php b/apps/updatenotification/tests/Settings/AdminTest.php
index 4e2ac3a53d9..d5915a9c102 100644
--- a/apps/updatenotification/tests/Settings/AdminTest.php
+++ b/apps/updatenotification/tests/Settings/AdminTest.php
@@ -140,10 +140,10 @@ class AdminTest extends TestCase {
public function testGetSection() {
- $this->assertSame('server', $this->admin->getSection());
+ $this->assertSame('overview', $this->admin->getSection());
}
public function testGetPriority() {
- $this->assertSame(1, $this->admin->getPriority());
+ $this->assertSame(11, $this->admin->getPriority());
}
}
diff --git a/apps/user_ldap/l10n/es_MX.js b/apps/user_ldap/l10n/es_MX.js
index 7d3ccdd314a..d8f2003877d 100644
--- a/apps/user_ldap/l10n/es_MX.js
+++ b/apps/user_ldap/l10n/es_MX.js
@@ -184,6 +184,7 @@ OC.L10N.register(
"UUID Attribute for Users:" : "Atributo UUID para Usuarios:",
"UUID Attribute for Groups:" : "Atributo UUID para Grupos:",
"Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP",
+ "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.",
"Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP",
"Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP",
" entries available within the provided Base DN" : "elementos disponibles dentro del DN Base proporcionado",
diff --git a/apps/user_ldap/l10n/es_MX.json b/apps/user_ldap/l10n/es_MX.json
index 6d42d8d082e..86a41686306 100644
--- a/apps/user_ldap/l10n/es_MX.json
+++ b/apps/user_ldap/l10n/es_MX.json
@@ -182,6 +182,7 @@
"UUID Attribute for Users:" : "Atributo UUID para Usuarios:",
"UUID Attribute for Groups:" : "Atributo UUID para Grupos:",
"Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP",
+ "Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los nombres de usuarios son usados para almacenar y asignar metadatos. Para poder identificar y reconocer usuarios con precisión, cada usuario LDAP tendrá un nombre de usuario interno. Esto requiere una correspondencia de nombre de usuario a usuario LDAP. El nombre de usuario creado tiene una correspondencia al UUID del usuario LDAP. Adicionalmente, también se manda a cache el DN para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, los cambios serán encontrados. El nombre de usuario interno se usa intensivamente. Limpiar las correspondencias dejará restos en muhcos logares. ¡Limpiar las correspondencias no es sensitivo a la configuración, afecta a todas las configuraciones LDAP! Nunca limpies las correspondencias en un ambiente de producción, solo hazlo en los ambientes de pruebas o experimentación.",
"Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP",
"Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP",
" entries available within the provided Base DN" : "elementos disponibles dentro del DN Base proporcionado",
diff --git a/apps/workflowengine/js/admin.js b/apps/workflowengine/js/admin.js
index f3e587e0815..66e98205db6 100644
--- a/apps/workflowengine/js/admin.js
+++ b/apps/workflowengine/js/admin.js
@@ -19,376 +19,377 @@
*/
(function() {
- Handlebars.registerHelper('selectItem', function(currentValue, itemValue) {
- if (currentValue === itemValue) {
- return 'selected="selected"';
- }
-
- return "";
- });
-
- Handlebars.registerHelper('getOperators', function(classname) {
- var check = OCA.WorkflowEngine.getCheckByClass(classname);
- if (!_.isUndefined(check)) {
- return check['operators'];
- }
- return [];
- });
-
- OCA.WorkflowEngine = _.extend(OCA.WorkflowEngine || {}, {
- availablePlugins: [],
- availableChecks: [],
-
- getCheckByClass: function(className) {
- var length = OCA.WorkflowEngine.availableChecks.length;
- for (var i = 0; i < length; i++) {
- if (OCA.WorkflowEngine.availableChecks[i]['class'] === className) {
- return OCA.WorkflowEngine.availableChecks[i];
- }
- }
- return undefined;
- }
- });
-
- /**
- * 888b d888 888 888
- * 8888b d8888 888 888
- * 88888b.d88888 888 888
- * 888Y88888P888 .d88b. .d88888 .d88b. 888 .d8888b
- * 888 Y888P 888 d88""88b d88" 888 d8P Y8b 888 88K
- * 888 Y8P 888 888 888 888 888 88888888 888 "Y8888b.
- * 888 " 888 Y88..88P Y88b 888 Y8b. 888 X88
- * 888 888 "Y88P" "Y88888 "Y8888 888 88888P'
- */
-
- /**
- * @class OCA.WorkflowEngine.Operation
- */
- OCA.WorkflowEngine.Operation =
- OC.Backbone.Model.extend({
- defaults: {
- 'class': 'OCA\\WorkflowEngine\\Operation',
- 'name': '',
- 'checks': [],
- 'operation': ''
- }
- });
-
- /**
- * .d8888b. 888 888 888 d8b
- * d88P Y88b 888 888 888 Y8P
- * 888 888 888 888 888
- * 888 .d88b. 888 888 .d88b. .d8888b 888888 888 .d88b. 88888b. .d8888b
- * 888 d88""88b 888 888 d8P Y8b d88P" 888 888 d88""88b 888 "88b 88K
- * 888 888 888 888 888 888 88888888 888 888 888 888 888 888 888 "Y8888b.
- * Y88b d88P Y88..88P 888 888 Y8b. Y88b. Y88b. 888 Y88..88P 888 888 X88
- * "Y8888P" "Y88P" 888 888 "Y8888 "Y8888P "Y888 888 "Y88P" 888 888 88888P'
- */
-
- /**
- * @class OCA.WorkflowEngine.OperationsCollection
- *
- * collection for all configurated operations
- */
- OCA.WorkflowEngine.OperationsCollection =
- OC.Backbone.Collection.extend({
- model: OCA.WorkflowEngine.Operation,
- url: OC.generateUrl('apps/workflowengine/operations')
- });
-
- /**
- * 888 888 d8b
- * 888 888 Y8P
- * 888 888
- * Y88b d88P 888 .d88b. 888 888 888 .d8888b
- * Y88b d88P 888 d8P Y8b 888 888 888 88K
- * Y88o88P 888 88888888 888 888 888 "Y8888b.
- * Y888P 888 Y8b. Y88b 888 d88P X88
- * Y8P 888 "Y8888 "Y8888888P" 88888P'
- */
-
- /**
- * @class OCA.WorkflowEngine.TemplateView
- *
- * a generic template that handles the Handlebars template compile step
- * in a method called "template()"
- */
- OCA.WorkflowEngine.TemplateView =
- OC.Backbone.View.extend({
- _template: null,
- template: function(vars) {
- if (!this._template) {
- this._template = Handlebars.compile($(this.templateId).html());
- }
- return this._template(vars);
- }
- });
-
- /**
- * @class OCA.WorkflowEngine.OperationView
- *
- * this creates the view for a single operation
- */
- OCA.WorkflowEngine.OperationView =
- OCA.WorkflowEngine.TemplateView.extend({
- templateId: '#operation-template',
- events: {
- 'change .check-class': 'checkChanged',
- 'change .check-operator': 'checkChanged',
- 'change .check-value': 'checkChanged',
- 'change .operation-name': 'operationChanged',
- 'change .operation-operation': 'operationChanged',
- 'click .button-reset': 'reset',
- 'click .button-save': 'save',
- 'click .button-add': 'add',
- 'click .button-delete': 'delete',
- 'click .button-delete-check': 'deleteCheck'
- },
- originalModel: null,
- hasChanged: false,
- message: '',
- errorMessage: '',
- saving: false,
- groups: [],
- initialize: function() {
- // this creates a new copy of the object to definitely have a new reference and being able to reset the model
- this.originalModel = JSON.parse(JSON.stringify(this.model));
- this.model.on('change', function() {
- console.log('model changed');
- this.hasChanged = true;
- this.render();
- }, this);
-
- if (this.model.get('id') === undefined) {
- this.hasChanged = true;
- }
- var self = this;
- $.ajax({
- url: OC.linkToOCS('cloud/groups', 2) + 'details',
- dataType: 'json',
- quietMillis: 100,
- }).success(function(response) {
- if (data.ocs.data.groups && data.ocs.data.groups.length > 0) {
-
- data.ocs.data.groups.forEach(function(group) {
- self.groups.push({ id: group.id, displayname: group.displayname });
- })
- self.render();
-
- } else {
- OC.Notification.error(t('workflowengine', 'Group list is empty'), { type: 'error' });
- console.log(data);
- }
- }).error(function(data) {
- OC.Notification.error(t('workflowengine', 'Unable to retrieve the group list'), { type: 'error' });
- console.log(data);
- });
- },
- delete: function() {
- if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
- OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this.delete, this));
- return;
- }
-
- this.model.destroy();
- this.remove();
- },
- reset: function() {
- this.hasChanged = false;
- // silent is need to not trigger the change event which resets the hasChanged attribute
- this.model.set(this.originalModel, { silent: true });
- this.render();
- },
- save: function() {
- if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
- OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this.save, this));
- return;
- }
-
- var success = function(model, response, options) {
- this.saving = false;
- this.originalModel = JSON.parse(JSON.stringify(this.model));
-
- this.message = t('workflowengine', 'Saved');
- this.errorMessage = '';
- this.render();
- };
- var error = function(model, response, options) {
- this.saving = false;
- this.hasChanged = true;
-
- this.message = t('workflowengine', 'Saving failed:');
- this.errorMessage = response.responseText;
- this.render();
- };
- this.hasChanged = false;
- this.saving = true;
- this.render();
- this.model.save(null, { success: success, error: error, context: this });
- },
- add: function() {
- var checks = _.clone(this.model.get('checks')),
- classname = OCA.WorkflowEngine.availableChecks[0]['class'],
- operators = OCA.WorkflowEngine.availableChecks[0]['operators'];
-
- checks.push({
- 'class': classname,
- 'operator': operators[0]['operator'],
- 'value': ''
- });
- this.model.set({ 'checks': checks });
- },
- checkChanged: function(event) {
- var value = event.target.value,
- id = $(event.target.parentElement).data('id'),
- // this creates a new copy of the object to definitely have a new reference
- checks = JSON.parse(JSON.stringify(this.model.get('checks'))),
- key = null;
-
- for (var i = 0; i < event.target.classList.length; i++) {
- var className = event.target.classList[i];
- if (className.substr(0, 'check-'.length) === 'check-') {
- key = className.substr('check-'.length);
- break;
- }
- }
-
- if (key === null) {
- console.warn('checkChanged triggered but element doesn\'t have any "check-" class');
- return;
- }
-
- if (!_.has(checks[id], key)) {
- console.warn('key "' + key + '" is not available in check', check);
- return;
- }
-
- checks[id][key] = value;
- // if the class is changed most likely also the operators have changed
- // with this we set the operator to the first possible operator
- if (key === 'class') {
- var check = OCA.WorkflowEngine.getCheckByClass(value);
- if (!_.isUndefined(check)) {
- checks[id]['operator'] = check['operators'][0]['operator'];
- }
- }
- // model change will trigger render
- this.model.set({ 'checks': checks });
- },
- deleteCheck: function(event) {
- console.log(arguments);
- var id = $(event.target.parentElement).data('id'),
- checks = JSON.parse(JSON.stringify(this.model.get('checks')));
-
- // splice removes 1 element at index `id`
- checks.splice(id, 1);
- // model change will trigger render
- this.model.set({ 'checks': checks });
- },
- operationChanged: function(event) {
- var value = event.target.value,
- key = null;
-
- for (var i = 0; i < event.target.classList.length; i++) {
- var className = event.target.classList[i];
- if (className.substr(0, 'operation-'.length) === 'operation-') {
- key = className.substr('operation-'.length);
- break;
- }
- }
-
- if (key === null) {
- console.warn('operationChanged triggered but element doesn\'t have any "operation-" class');
- return;
- }
-
- if (key !== 'name' && key !== 'operation') {
- console.warn('key "' + key + '" is no valid attribute');
- return;
- }
-
- // model change will trigger render
- this.model.set(key, value);
- },
- render: function() {
- this.$el.html(this.template({
- operation: this.model.toJSON(),
- classes: OCA.WorkflowEngine.availableChecks,
- hasChanged: this.hasChanged,
- message: this.message,
- errorMessage: this.errorMessage,
- saving: this.saving
- }));
-
- var checks = this.model.get('checks');
- _.each(this.$el.find('.check'), function(element) {
- var $element = $(element),
- id = $element.data('id'),
- check = checks[id],
- valueElement = $element.find('.check-value').first();
- var self = this;
-
- _.each(OCA.WorkflowEngine.availablePlugins, function(plugin) {
- if (_.isFunction(plugin.render)) {
- plugin.render(valueElement, check, self.groups);
- }
- });
- }, this);
-
- if (this.message !== '') {
- // hide success messages after some time
- _.delay(function(elements) {
- $(elements).css('opacity', 0);
- }, 7000, this.$el.find('.msg.success'));
- this.message = '';
- }
-
- return this.$el;
- }
- });
-
- /**
- * @class OCA.WorkflowEngine.OperationsView
- *
- * this creates the view for configured operations
- */
- OCA.WorkflowEngine.OperationsView =
- OCA.WorkflowEngine.TemplateView.extend({
- templateId: '#operations-template',
- collection: null,
- $el: null,
- events: {
- 'click .button-add-operation': 'add'
- },
- initialize: function(classname) {
- if (!OCA.WorkflowEngine.availablePlugins.length) {
- OCA.WorkflowEngine.availablePlugins = OC.Plugins.getPlugins('OCA.WorkflowEngine.CheckPlugins');
- _.each(OCA.WorkflowEngine.availablePlugins, function(plugin) {
- if (_.isFunction(plugin.getCheck)) {
- OCA.WorkflowEngine.availableChecks.push(plugin.getCheck(classname));
- }
- });
- }
-
- this.collection.fetch({
- data: {
- 'class': classname
- }
- });
- this.collection.once('sync', this.render, this);
- },
- add: function() {
- var operation = this.collection.create();
- this.renderOperation(operation);
- },
- renderOperation: function(subView) {
- var operationsElement = this.$el.find('.operations');
- operationsElement.append(subView.$el);
- subView.render();
- },
- render: function() {
- this.$el.html(this.template());
- this.collection.each(this.renderOperation, this);
- }
- });
-})(); \ No newline at end of file
+ Handlebars.registerHelper('selectItem', function(currentValue, itemValue) {
+ if (currentValue === itemValue) {
+ return 'selected="selected"';
+ }
+
+ return "";
+ });
+
+ Handlebars.registerHelper('getOperators', function(classname) {
+ var check = OCA.WorkflowEngine.getCheckByClass(classname);
+ if (!_.isUndefined(check)) {
+ return check['operators'];
+ }
+ return [];
+ });
+
+ OCA.WorkflowEngine = _.extend(OCA.WorkflowEngine || {}, {
+ availablePlugins: [],
+ availableChecks: [],
+
+ getCheckByClass: function(className) {
+ var length = OCA.WorkflowEngine.availableChecks.length;
+ for (var i = 0; i < length; i++) {
+ if (OCA.WorkflowEngine.availableChecks[i]['class'] === className) {
+ return OCA.WorkflowEngine.availableChecks[i];
+ }
+ }
+ return undefined;
+ }
+ });
+
+ /**
+ * 888b d888 888 888
+ * 8888b d8888 888 888
+ * 88888b.d88888 888 888
+ * 888Y88888P888 .d88b. .d88888 .d88b. 888 .d8888b
+ * 888 Y888P 888 d88""88b d88" 888 d8P Y8b 888 88K
+ * 888 Y8P 888 888 888 888 888 88888888 888 "Y8888b.
+ * 888 " 888 Y88..88P Y88b 888 Y8b. 888 X88
+ * 888 888 "Y88P" "Y88888 "Y8888 888 88888P'
+ */
+
+ /**
+ * @class OCA.WorkflowEngine.Operation
+ */
+ OCA.WorkflowEngine.Operation =
+ OC.Backbone.Model.extend({
+ defaults: {
+ 'class': 'OCA\\WorkflowEngine\\Operation',
+ 'name': '',
+ 'checks': [],
+ 'operation': ''
+ }
+ });
+
+ /**
+ * .d8888b. 888 888 888 d8b
+ * d88P Y88b 888 888 888 Y8P
+ * 888 888 888 888 888
+ * 888 .d88b. 888 888 .d88b. .d8888b 888888 888 .d88b. 88888b. .d8888b
+ * 888 d88""88b 888 888 d8P Y8b d88P" 888 888 d88""88b 888 "88b 88K
+ * 888 888 888 888 888 888 88888888 888 888 888 888 888 888 888 "Y8888b.
+ * Y88b d88P Y88..88P 888 888 Y8b. Y88b. Y88b. 888 Y88..88P 888 888 X88
+ * "Y8888P" "Y88P" 888 888 "Y8888 "Y8888P "Y888 888 "Y88P" 888 888 88888P'
+ */
+
+ /**
+ * @class OCA.WorkflowEngine.OperationsCollection
+ *
+ * collection for all configurated operations
+ */
+ OCA.WorkflowEngine.OperationsCollection =
+ OC.Backbone.Collection.extend({
+ model: OCA.WorkflowEngine.Operation,
+ url: OC.generateUrl('apps/workflowengine/operations')
+ });
+
+ /**
+ * 888 888 d8b
+ * 888 888 Y8P
+ * 888 888
+ * Y88b d88P 888 .d88b. 888 888 888 .d8888b
+ * Y88b d88P 888 d8P Y8b 888 888 888 88K
+ * Y88o88P 888 88888888 888 888 888 "Y8888b.
+ * Y888P 888 Y8b. Y88b 888 d88P X88
+ * Y8P 888 "Y8888 "Y8888888P" 88888P'
+ */
+
+ /**
+ * @class OCA.WorkflowEngine.TemplateView
+ *
+ * a generic template that handles the Handlebars template compile step
+ * in a method called "template()"
+ */
+ OCA.WorkflowEngine.TemplateView =
+ OC.Backbone.View.extend({
+ _template: null,
+ template: function(vars) {
+ if (!this._template) {
+ this._template = Handlebars.compile($(this.templateId).html());
+ }
+ return this._template(vars);
+ }
+ });
+
+ /**
+ * @class OCA.WorkflowEngine.OperationView
+ *
+ * this creates the view for a single operation
+ */
+ OCA.WorkflowEngine.OperationView =
+ OCA.WorkflowEngine.TemplateView.extend({
+ templateId: '#operation-template',
+ events: {
+ 'change .check-class': 'checkChanged',
+ 'change .check-operator': 'checkChanged',
+ 'change .check-value': 'checkChanged',
+ 'change .operation-name': 'operationChanged',
+ 'change .operation-operation': 'operationChanged',
+ 'click .button-reset': 'reset',
+ 'click .button-save': 'save',
+ 'click .button-add': 'add',
+ 'click .button-delete': 'delete',
+ 'click .button-delete-check': 'deleteCheck'
+ },
+ originalModel: null,
+ hasChanged: false,
+ message: '',
+ errorMessage: '',
+ saving: false,
+ groups: [],
+ initialize: function() {
+ // this creates a new copy of the object to definitely have a new reference and being able to reset the model
+ this.originalModel = JSON.parse(JSON.stringify(this.model));
+ this.model.on('change', function() {
+ console.log('model changed');
+ this.hasChanged = true;
+ this.render();
+ }, this);
+
+ if (this.model.get('id') === undefined) {
+ this.hasChanged = true;
+ }
+ var self = this;
+ $.ajax({
+ url: OC.linkToOCS('cloud/groups', 2) + 'details',
+ dataType: 'json',
+ quietMillis: 100,
+ }).success(function(data) {
+ if (data.ocs.data.groups && data.ocs.data.groups.length > 0) {
+
+ data.ocs.data.groups.forEach(function(group) {
+ self.groups.push({ id: group.id, displayname: group.displayname });
+ });
+ self.render();
+
+ } else {
+ OC.Notification.error(t('workflowengine', 'Group list is empty'), { type: 'error' });
+ console.log(data);
+ }
+ }).error(function(data) {
+ OC.Notification.error(t('workflowengine', 'Unable to retrieve the group list'), { type: 'error' });
+ console.log(data);
+ });
+ },
+ delete: function() {
+ if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
+ OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this.delete, this));
+ return;
+ }
+
+ this.model.destroy();
+ this.remove();
+ },
+ reset: function() {
+ this.hasChanged = false;
+ // silent is need to not trigger the change event which resets the hasChanged attribute
+ this.model.set(this.originalModel, { silent: true });
+ this.render();
+ },
+ save: function() {
+ if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
+ OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this.save, this));
+ return;
+ }
+
+ var success = function(model, response, options) {
+ this.saving = false;
+ this.originalModel = JSON.parse(JSON.stringify(this.model));
+
+ this.message = t('workflowengine', 'Saved');
+ this.errorMessage = '';
+ this.render();
+ };
+ var error = function(model, response, options) {
+ this.saving = false;
+ this.hasChanged = true;
+
+ this.message = t('workflowengine', 'Saving failed:');
+ this.errorMessage = response.responseText;
+ this.render();
+ };
+ this.hasChanged = false;
+ this.saving = true;
+ this.render();
+ this.model.save(null, { success: success, error: error, context: this });
+ },
+ add: function() {
+ var checks = _.clone(this.model.get('checks')),
+ classname = OCA.WorkflowEngine.availableChecks[0]['class'],
+ operators = OCA.WorkflowEngine.availableChecks[0]['operators'];
+
+ checks.push({
+ 'class': classname,
+ 'operator': operators[0]['operator'],
+ 'value': ''
+ });
+ this.model.set({ 'checks': checks });
+ },
+ checkChanged: function(event) {
+ var value = event.target.value,
+ id = $(event.target.parentElement).data('id'),
+ // this creates a new copy of the object to definitely have a new reference
+ checks = JSON.parse(JSON.stringify(this.model.get('checks'))),
+ key = null;
+
+ for (var i = 0; i < event.target.classList.length; i++) {
+ var className = event.target.classList[i];
+ if (className.substr(0, 'check-'.length) === 'check-') {
+ key = className.substr('check-'.length);
+ break;
+ }
+ }
+
+ if (key === null) {
+ console.warn('checkChanged triggered but element doesn\'t have any "check-" class');
+ return;
+ }
+
+ if (!_.has(checks[id], key)) {
+ console.warn('key "' + key + '" is not available in check', check);
+ return;
+ }
+
+ checks[id][key] = value;
+ // if the class is changed most likely also the operators have changed
+ // with this we set the operator to the first possible operator
+ if (key === 'class') {
+ var check = OCA.WorkflowEngine.getCheckByClass(value);
+ if (!_.isUndefined(check)) {
+ checks[id]['operator'] = check['operators'][0]['operator'];
+ checks[id]['value'] = '';
+ }
+ }
+ // model change will trigger render
+ this.model.set({ 'checks': checks });
+ },
+ deleteCheck: function(event) {
+ console.log(arguments);
+ var id = $(event.target.parentElement).data('id'),
+ checks = JSON.parse(JSON.stringify(this.model.get('checks')));
+
+ // splice removes 1 element at index `id`
+ checks.splice(id, 1);
+ // model change will trigger render
+ this.model.set({ 'checks': checks });
+ },
+ operationChanged: function(event) {
+ var value = event.target.value,
+ key = null;
+
+ for (var i = 0; i < event.target.classList.length; i++) {
+ var className = event.target.classList[i];
+ if (className.substr(0, 'operation-'.length) === 'operation-') {
+ key = className.substr('operation-'.length);
+ break;
+ }
+ }
+
+ if (key === null) {
+ console.warn('operationChanged triggered but element doesn\'t have any "operation-" class');
+ return;
+ }
+
+ if (key !== 'name' && key !== 'operation') {
+ console.warn('key "' + key + '" is no valid attribute');
+ return;
+ }
+
+ // model change will trigger render
+ this.model.set(key, value);
+ },
+ render: function() {
+ this.$el.html(this.template({
+ operation: this.model.toJSON(),
+ classes: OCA.WorkflowEngine.availableChecks,
+ hasChanged: this.hasChanged,
+ message: this.message,
+ errorMessage: this.errorMessage,
+ saving: this.saving
+ }));
+
+ var checks = this.model.get('checks');
+ _.each(this.$el.find('.check'), function(element) {
+ var $element = $(element),
+ id = $element.data('id'),
+ check = checks[id],
+ valueElement = $element.find('.check-value').first();
+ var self = this;
+
+ _.each(OCA.WorkflowEngine.availablePlugins, function(plugin) {
+ if (_.isFunction(plugin.render)) {
+ plugin.render(valueElement, check, self.groups);
+ }
+ });
+ }, this);
+
+ if (this.message !== '') {
+ // hide success messages after some time
+ _.delay(function(elements) {
+ $(elements).css('opacity', 0);
+ }, 7000, this.$el.find('.msg.success'));
+ this.message = '';
+ }
+
+ return this.$el;
+ }
+ });
+
+ /**
+ * @class OCA.WorkflowEngine.OperationsView
+ *
+ * this creates the view for configured operations
+ */
+ OCA.WorkflowEngine.OperationsView =
+ OCA.WorkflowEngine.TemplateView.extend({
+ templateId: '#operations-template',
+ collection: null,
+ $el: null,
+ events: {
+ 'click .button-add-operation': 'add'
+ },
+ initialize: function(classname) {
+ if (!OCA.WorkflowEngine.availablePlugins.length) {
+ OCA.WorkflowEngine.availablePlugins = OC.Plugins.getPlugins('OCA.WorkflowEngine.CheckPlugins');
+ _.each(OCA.WorkflowEngine.availablePlugins, function(plugin) {
+ if (_.isFunction(plugin.getCheck)) {
+ OCA.WorkflowEngine.availableChecks.push(plugin.getCheck(classname));
+ }
+ });
+ }
+
+ this.collection.fetch({
+ data: {
+ 'class': classname
+ }
+ });
+ this.collection.once('sync', this.render, this);
+ },
+ add: function() {
+ var operation = this.collection.create();
+ this.renderOperation(operation);
+ },
+ renderOperation: function(subView) {
+ var operationsElement = this.$el.find('.operations');
+ operationsElement.append(subView.$el);
+ subView.render();
+ },
+ render: function() {
+ this.$el.html(this.template());
+ this.collection.each(this.renderOperation, this);
+ }
+ });
+})();
diff --git a/apps/workflowengine/js/filesystemtagsplugin.js b/apps/workflowengine/js/filesystemtagsplugin.js
index dc6f608d85a..e66a35b73b9 100644
--- a/apps/workflowengine/js/filesystemtagsplugin.js
+++ b/apps/workflowengine/js/filesystemtagsplugin.js
@@ -63,7 +63,9 @@
},
formatSelection: function (tagId) {
var tag = OC.SystemTags.collection.get(tagId);
- return OC.SystemTags.getDescriptiveTag(tag);
+ if (!_.isUndefined(tag)) {
+ return OC.SystemTags.getDescriptiveTag(tag);
+ }
},
escapeMarkup: function(m) {
return m;
diff --git a/apps/workflowengine/l10n/de.js b/apps/workflowengine/l10n/de.js
index 62e881e4ef4..dbd27d57688 100644
--- a/apps/workflowengine/l10n/de.js
+++ b/apps/workflowengine/l10n/de.js
@@ -20,7 +20,7 @@ OC.L10N.register(
"is tagged with" : "hat den Tag",
"is not tagged with" : "hat nicht den Tag",
"Select tag…" : "Wähle einen Tag…",
- "Request remote address" : "Entfernte Adresse anfordern",
+ "Request remote address" : "IP Adresse der Anfrage",
"matches IPv4" : "entspricht IPv4",
"does not match IPv4" : "entspricht nicht IPv4",
"matches IPv6" : "entspricht IPv6",
diff --git a/apps/workflowengine/l10n/de.json b/apps/workflowengine/l10n/de.json
index 02ff5ca677c..44082676c9d 100644
--- a/apps/workflowengine/l10n/de.json
+++ b/apps/workflowengine/l10n/de.json
@@ -18,7 +18,7 @@
"is tagged with" : "hat den Tag",
"is not tagged with" : "hat nicht den Tag",
"Select tag…" : "Wähle einen Tag…",
- "Request remote address" : "Entfernte Adresse anfordern",
+ "Request remote address" : "IP Adresse der Anfrage",
"matches IPv4" : "entspricht IPv4",
"does not match IPv4" : "entspricht nicht IPv4",
"matches IPv6" : "entspricht IPv6",
diff --git a/apps/workflowengine/l10n/de_DE.js b/apps/workflowengine/l10n/de_DE.js
index 3389b9f3ccd..7c5d57348dc 100644
--- a/apps/workflowengine/l10n/de_DE.js
+++ b/apps/workflowengine/l10n/de_DE.js
@@ -20,7 +20,7 @@ OC.L10N.register(
"is tagged with" : "hat den Tag",
"is not tagged with" : "hat nicht den Tag",
"Select tag…" : "Wählen Sie einen Tag…",
- "Request remote address" : "Entfernte Adresse anfordern",
+ "Request remote address" : "IP Adresse der Anfrage",
"matches IPv4" : "entspricht IPv4",
"does not match IPv4" : "entspricht nicht IPv4",
"matches IPv6" : "entspricht IPv6",
diff --git a/apps/workflowengine/l10n/de_DE.json b/apps/workflowengine/l10n/de_DE.json
index c04cec6f458..67ad8a30f63 100644
--- a/apps/workflowengine/l10n/de_DE.json
+++ b/apps/workflowengine/l10n/de_DE.json
@@ -18,7 +18,7 @@
"is tagged with" : "hat den Tag",
"is not tagged with" : "hat nicht den Tag",
"Select tag…" : "Wählen Sie einen Tag…",
- "Request remote address" : "Entfernte Adresse anfordern",
+ "Request remote address" : "IP Adresse der Anfrage",
"matches IPv4" : "entspricht IPv4",
"does not match IPv4" : "entspricht nicht IPv4",
"matches IPv6" : "entspricht IPv6",
diff --git a/apps/workflowengine/l10n/es_MX.js b/apps/workflowengine/l10n/es_MX.js
index f5d85b42876..48cfb3adb42 100644
--- a/apps/workflowengine/l10n/es_MX.js
+++ b/apps/workflowengine/l10n/es_MX.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"workflowengine",
{
+ "Group list is empty" : "La lista de grupos esta vacía",
"Unable to retrieve the group list" : "No fue posible recuperar la lista del gurpo",
"Saved" : "Guardado",
"Saving failed:" : "Falla al guardar:",
diff --git a/apps/workflowengine/l10n/es_MX.json b/apps/workflowengine/l10n/es_MX.json
index cfdfdb718ae..7baaa98fffd 100644
--- a/apps/workflowengine/l10n/es_MX.json
+++ b/apps/workflowengine/l10n/es_MX.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Group list is empty" : "La lista de grupos esta vacía",
"Unable to retrieve the group list" : "No fue posible recuperar la lista del gurpo",
"Saved" : "Guardado",
"Saving failed:" : "Falla al guardar:",
diff --git a/apps/workflowengine/l10n/sr.js b/apps/workflowengine/l10n/sr.js
index 130cc0cdaea..9e89a23d3b6 100644
--- a/apps/workflowengine/l10n/sr.js
+++ b/apps/workflowengine/l10n/sr.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"workflowengine",
{
+ "Group list is empty" : "Списак група је празан",
"Unable to retrieve the group list" : "Није могуће дохватити списак група",
"Saved" : "Снимљено",
"Saving failed:" : "Снимање није успело:",
diff --git a/apps/workflowengine/l10n/sr.json b/apps/workflowengine/l10n/sr.json
index 1caf1695ba4..9fdd4bd2cf0 100644
--- a/apps/workflowengine/l10n/sr.json
+++ b/apps/workflowengine/l10n/sr.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Group list is empty" : "Списак група је празан",
"Unable to retrieve the group list" : "Није могуће дохватити списак група",
"Saved" : "Снимљено",
"Saving failed:" : "Снимање није успело:",
diff --git a/apps/workflowengine/l10n/zh_CN.js b/apps/workflowengine/l10n/zh_CN.js
index cf45cb709f9..a8d7e9556b6 100644
--- a/apps/workflowengine/l10n/zh_CN.js
+++ b/apps/workflowengine/l10n/zh_CN.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"workflowengine",
{
+ "Group list is empty" : "小组列表空",
"Unable to retrieve the group list" : "无法获取用户分组列表",
"Saved" : "已保存",
"Saving failed:" : "保存失败:",
diff --git a/apps/workflowengine/l10n/zh_CN.json b/apps/workflowengine/l10n/zh_CN.json
index 7eae6cc3cf8..a94709e423e 100644
--- a/apps/workflowengine/l10n/zh_CN.json
+++ b/apps/workflowengine/l10n/zh_CN.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Group list is empty" : "小组列表空",
"Unable to retrieve the group list" : "无法获取用户分组列表",
"Saved" : "已保存",
"Saving failed:" : "保存失败:",
diff --git a/build/.phan/config.php b/build/.phan/config.php
index 9bd61ee5687..dc914883f01 100644
--- a/build/.phan/config.php
+++ b/build/.phan/config.php
@@ -144,6 +144,12 @@ return [
// to fix in your code base.
'quick_mode' => false,
+ // If true, check to make sure the return type declared
+ // in the doc-block (if any) matches the return type
+ // declared in the method signature. This process is
+ // slow.
+ 'check_docblock_signature_param_type_match' => true,
+
// If enabled, check all methods that override a
// parent method to make sure its signature is
// compatible with the parent's. This check
diff --git a/build/mergejs.php b/build/mergejs.php
index 85820c19795..e747337ef6a 100644
--- a/build/mergejs.php
+++ b/build/mergejs.php
@@ -30,7 +30,10 @@ $vendors = $data['vendor'];
$vendorjs = fopen(__DIR__.'/../core/vendor/core.js', 'w');
foreach($vendors as $vendor) {
- fwrite($vendorjs, file_get_contents(__DIR__.'/../core/vendor/'.$vendor));
+ $content = file_get_contents(__DIR__.'/../core/vendor/'.$vendor);
+ // Remove the sourceMappingURL references from the merged file
+ $content = preg_replace('@//# sourceMappingURL=.*$@', '', $content);
+ fwrite($vendorjs, $content);
fwrite($vendorjs, PHP_EOL);
}
fclose($vendorjs);
diff --git a/core/css/apps.scss b/core/css/apps.scss
index e323195f70f..918dc838412 100644
--- a/core/css/apps.scss
+++ b/core/css/apps.scss
@@ -435,6 +435,17 @@ kbd {
font-size: 9pt;
line-height: 44px;
padding: 0 12px; /* Same padding as all li > a in the app-navigation */
+
+ &.highlighted {
+ padding: 0;
+ text-align: center;
+ span {
+ padding: 2px 5px;
+ border-radius: 10px;
+ background-color: $color-primary;
+ color: $color-primary-text;
+ }
+ }
}
}
diff --git a/core/css/icons.scss b/core/css/icons.scss
index 775decfa3a8..8f2d4748754 100644
--- a/core/css/icons.scss
+++ b/core/css/icons.scss
@@ -300,6 +300,10 @@ img, object, video, button, textarea, input, select, div[contenteditable=true] {
background-image: url('../img/actions/public.svg?v=1');
}
+.icon-quota {
+ background-image: url('../img/actions/quota.svg?v=1');
+}
+
.icon-rename {
background-image: url('../img/actions/rename.svg?v=1');
}
diff --git a/core/css/styles.scss b/core/css/styles.scss
index 0bbd89f075b..736713c3e7a 100644
--- a/core/css/styles.scss
+++ b/core/css/styles.scss
@@ -927,40 +927,6 @@ code {
font-family: 'Lucida Console', 'Lucida Sans Typewriter', 'DejaVu Sans Mono', monospace;
}
-#body-settings #quota {
- cursor: default;
- margin: 30px !important;
- position: relative;
- padding: 0 !important;
- progress {
- height: 36px;
- &::-moz-progress-bar {
- border-radius: 3px 0 0 3px;
- }
- &::-webkit-progress-value {
- border-radius: 3px 0 0 3px;
- }
- }
- div {
- font-weight: normal;
- white-space: nowrap;
- position: absolute;;
- top: 0;
- &.quotatext-bg {
- mix-blend-mode: luminosity;
- }
- &.quotatext-fg {
- color: $color-primary-text;
- overflow: hidden;
- z-index: 50;
- max-width: 100%;
- }
- .quotatext {
- padding: .6em 1em;
- }
- }
-}
-
.pager {
list-style: none;
float: right;
diff --git a/core/css/variables.scss b/core/css/variables.scss
index a60460a3088..4e2c1c396cb 100644
--- a/core/css/variables.scss
+++ b/core/css/variables.scss
@@ -3,7 +3,7 @@ $color-main-background: #ffffff;
$color-primary: #0082c9;
$color-primary-text: #ffffff;
$color-error: #e9322d;
-$color-warning: #ffcc44;
+$color-warning: #eca700;
$color-success: #46ba61;
$color-primary-element: $color-primary;
diff --git a/apps/files/img/quota.svg b/core/img/actions/quota.svg
index 691cb29efce..691cb29efce 100644
--- a/apps/files/img/quota.svg
+++ b/core/img/actions/quota.svg
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index fae6536e480..97b9d91023d 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -847,7 +847,7 @@ var OCdialogs = {
} else if(a.type !== 'dir' && b.type === 'dir') {
return 1;
} else {
- return -(a.mtime - b.mtime);
+ return a.name.localeCompare(b.name, undefined, {numeric: true});
}
});
diff --git a/core/l10n/da.js b/core/l10n/da.js
index 882685fb124..005c28c0d43 100644
--- a/core/l10n/da.js
+++ b/core/l10n/da.js
@@ -266,6 +266,8 @@ OC.L10N.register(
"More apps" : "Flere apps",
"Search" : "Søg",
"Reset search" : "Nulstil søgning",
+ "Contacts" : "Kontakter",
+ "Contacts menu" : "Menuen kontakter",
"Confirm your password" : "Bekræft dit password",
"Server side authentication failed!" : "Server side godkendelse mislykkedes!",
"Please contact your administrator." : "Kontakt venligst din administrator.",
diff --git a/core/l10n/da.json b/core/l10n/da.json
index 620bec0372f..b5863376fc1 100644
--- a/core/l10n/da.json
+++ b/core/l10n/da.json
@@ -264,6 +264,8 @@
"More apps" : "Flere apps",
"Search" : "Søg",
"Reset search" : "Nulstil søgning",
+ "Contacts" : "Kontakter",
+ "Contacts menu" : "Menuen kontakter",
"Confirm your password" : "Bekræft dit password",
"Server side authentication failed!" : "Server side godkendelse mislykkedes!",
"Please contact your administrator." : "Kontakt venligst din administrator.",
diff --git a/core/l10n/es_MX.js b/core/l10n/es_MX.js
index c5206c63843..f5ab7ec1038 100644
--- a/core/l10n/es_MX.js
+++ b/core/l10n/es_MX.js
@@ -266,6 +266,9 @@ OC.L10N.register(
"More apps" : "Más aplicaciones",
"Search" : "Buscar",
"Reset search" : "Reestablecer búsqueda",
+ "Contacts" : "Contactos",
+ "Contacts menu" : "Menú de Contactos",
+ "Settings menu" : "Menú de Configuraciones",
"Confirm your password" : "Confirma tu contraseña",
"Server side authentication failed!" : "¡Falló la autenticación del lado del servidor!",
"Please contact your administrator." : "Por favor contacta al administrador.",
@@ -291,6 +294,7 @@ OC.L10N.register(
"Error while validating your second factor" : "Se presentó un error al validar tu segundo factor",
"Access through untrusted domain" : "Accesa a través de un dominio no de confianza",
"Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Por favor contacta a tu adminsitrador. Si tu eres un administrador, edita la propiedad \"trusted_domains\" en el archivo config/config.php como en el ejemplo config.sample.php.",
+ "Further information how to configure this can be found in the %sdocumentation%s." : "Para más información de cómo configurar esto puedes consultar la %sdocumentación%s.",
"App update required" : "Se requiere una actualización de la aplicación",
"%s will be updated to version %s" : "%s será actualizado a la versión %s",
"These apps will be updated:" : "Las siguientes apllicaciones se actualizarán:",
diff --git a/core/l10n/es_MX.json b/core/l10n/es_MX.json
index b9e1528db24..05764e528b2 100644
--- a/core/l10n/es_MX.json
+++ b/core/l10n/es_MX.json
@@ -264,6 +264,9 @@
"More apps" : "Más aplicaciones",
"Search" : "Buscar",
"Reset search" : "Reestablecer búsqueda",
+ "Contacts" : "Contactos",
+ "Contacts menu" : "Menú de Contactos",
+ "Settings menu" : "Menú de Configuraciones",
"Confirm your password" : "Confirma tu contraseña",
"Server side authentication failed!" : "¡Falló la autenticación del lado del servidor!",
"Please contact your administrator." : "Por favor contacta al administrador.",
@@ -289,6 +292,7 @@
"Error while validating your second factor" : "Se presentó un error al validar tu segundo factor",
"Access through untrusted domain" : "Accesa a través de un dominio no de confianza",
"Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Por favor contacta a tu adminsitrador. Si tu eres un administrador, edita la propiedad \"trusted_domains\" en el archivo config/config.php como en el ejemplo config.sample.php.",
+ "Further information how to configure this can be found in the %sdocumentation%s." : "Para más información de cómo configurar esto puedes consultar la %sdocumentación%s.",
"App update required" : "Se requiere una actualización de la aplicación",
"%s will be updated to version %s" : "%s será actualizado a la versión %s",
"These apps will be updated:" : "Las siguientes apllicaciones se actualizarán:",
diff --git a/core/l10n/fi.js b/core/l10n/fi.js
index bb0cfe51217..9e12cfdb8c5 100644
--- a/core/l10n/fi.js
+++ b/core/l10n/fi.js
@@ -263,6 +263,9 @@ OC.L10N.register(
"More apps" : "Lisää sovelluksia",
"Search" : "Etsi",
"Reset search" : "Tyhjennä haku",
+ "Contacts" : "Yhteystiedot",
+ "Contacts menu" : "Yhteystietovalikko",
+ "Settings menu" : "Asetusvalikko",
"Confirm your password" : "Vahvista salasanasi",
"Server side authentication failed!" : "Palvelimen puoleinen tunnistautuminen epäonnistui!",
"Please contact your administrator." : "Ota yhteys ylläpitäjään.",
@@ -274,6 +277,7 @@ OC.L10N.register(
"We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds." : "Useita virheellisiä kirjautumisyrityksiä havaittiin IP-osoitteestasi. Siksi seuraava yritys sallitaan vasta 30:n sekunnin päästä.",
"Forgot password?" : "Unohditko salasanasi?",
"Back to login" : "Palaa kirjautumiseen",
+ "Connect to your account" : "Yhdistä tiliisi",
"App token" : "Sovellusvaltuutus",
"Grant access" : "Myönnä pääsy",
"Account access" : "Tilin käyttö",
diff --git a/core/l10n/fi.json b/core/l10n/fi.json
index f9cdeb6ff96..3e6daf65f98 100644
--- a/core/l10n/fi.json
+++ b/core/l10n/fi.json
@@ -261,6 +261,9 @@
"More apps" : "Lisää sovelluksia",
"Search" : "Etsi",
"Reset search" : "Tyhjennä haku",
+ "Contacts" : "Yhteystiedot",
+ "Contacts menu" : "Yhteystietovalikko",
+ "Settings menu" : "Asetusvalikko",
"Confirm your password" : "Vahvista salasanasi",
"Server side authentication failed!" : "Palvelimen puoleinen tunnistautuminen epäonnistui!",
"Please contact your administrator." : "Ota yhteys ylläpitäjään.",
@@ -272,6 +275,7 @@
"We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds." : "Useita virheellisiä kirjautumisyrityksiä havaittiin IP-osoitteestasi. Siksi seuraava yritys sallitaan vasta 30:n sekunnin päästä.",
"Forgot password?" : "Unohditko salasanasi?",
"Back to login" : "Palaa kirjautumiseen",
+ "Connect to your account" : "Yhdistä tiliisi",
"App token" : "Sovellusvaltuutus",
"Grant access" : "Myönnä pääsy",
"Account access" : "Tilin käyttö",
diff --git a/core/vendor/core.js b/core/vendor/core.js
index e34b5549e05..228b0b4da1f 100644
--- a/core/vendor/core.js
+++ b/core/vendor/core.js
@@ -2,7 +2,7 @@
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b="length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){
return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ba=/<([\w:]+)/,ca=/<|&#?\w+;/,da=/<(?:script|style|link)/i,ea=/checked\s*(?:[^=]|=\s*.checked.)/i,fa=/^$|\/(?:java|ecma)script/i,ga=/^true\/(.*)/,ha=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ia={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ia.optgroup=ia.option,ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead,ia.th=ia.td;function ja(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function ka(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function la(a){var b=ga.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function ma(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function na(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function oa(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pa(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=oa(h),f=oa(a),d=0,e=f.length;e>d;d++)pa(f[d],g[d]);if(b)if(c)for(f=f||oa(a),g=g||oa(h),d=0,e=f.length;e>d;d++)na(f[d],g[d]);else na(a,h);return g=oa(h,"script"),g.length>0&&ma(g,!i&&oa(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(ca.test(e)){f=f||k.appendChild(b.createElement("div")),g=(ba.exec(e)||["",""])[1].toLowerCase(),h=ia[g]||ia._default,f.innerHTML=h[1]+e.replace(aa,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=oa(k.appendChild(e),"script"),i&&ma(f),c)){j=0;while(e=f[j++])fa.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(oa(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&ma(oa(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(oa(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!da.test(a)&&!ia[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(aa,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(oa(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(oa(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&ea.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(oa(c,"script"),ka),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,oa(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,la),j=0;g>j;j++)h=f[j],fa.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(ha,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qa,ra={};function sa(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function ta(a){var b=l,c=ra[a];return c||(c=sa(a,b),"none"!==c&&c||(qa=(qa||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qa[0].contentDocument,b.write(),b.close(),c=sa(a,b),qa.detach()),ra[a]=c),c}var ua=/^margin/,va=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wa=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xa(a,b,c){var d,e,f,g,h=a.style;return c=c||wa(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),va.test(g)&&ua.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function ya(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var za=/^(none|table(?!-c[ea]).+)/,Aa=new RegExp("^("+Q+")(.*)$","i"),Ba=new RegExp("^([+-])=("+Q+")","i"),Ca={position:"absolute",visibility:"hidden",display:"block"},Da={letterSpacing:"0",fontWeight:"400"},Ea=["Webkit","O","Moz","ms"];function Fa(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Ea.length;while(e--)if(b=Ea[e]+c,b in a)return b;return d}function Ga(a,b,c){var d=Aa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Ha(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ia(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wa(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xa(a,b,f),(0>e||null==e)&&(e=a.style[b]),va.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Ha(a,b,c||(g?"border":"content"),d,f)+"px"}function Ja(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",ta(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xa(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fa(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Ba.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fa(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xa(a,b,d)),"normal"===e&&b in Da&&(e=Da[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?za.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Ca,function(){return Ia(a,b,d)}):Ia(a,b,d):void 0},set:function(a,c,d){var e=d&&wa(a);return Ga(a,c,d?Ha(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=ya(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xa,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ua.test(a)||(n.cssHooks[a+b].set=Ga)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wa(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Ja(this,!0)},hide:function(){return Ja(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Ka(a,b,c,d,e){return new Ka.prototype.init(a,b,c,d,e)}n.Tween=Ka,Ka.prototype={constructor:Ka,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Ka.propHooks[this.prop];return a&&a.get?a.get(this):Ka.propHooks._default.get(this)},run:function(a){var b,c=Ka.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ka.propHooks._default.set(this),this}},Ka.prototype.init.prototype=Ka.prototype,Ka.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Ka.propHooks.scrollTop=Ka.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Ka.prototype.init,n.fx.step={};var La,Ma,Na=/^(?:toggle|show|hide)$/,Oa=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pa=/queueHooks$/,Qa=[Va],Ra={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Oa.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Oa.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sa(){return setTimeout(function(){La=void 0}),La=n.now()}function Ta(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ua(a,b,c){for(var d,e=(Ra[b]||[]).concat(Ra["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Va(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||ta(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Na.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?ta(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ua(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wa(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xa(a,b,c){var d,e,f=0,g=Qa.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=La||Sa(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:La||Sa(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wa(k,j.opts.specialEasing);g>f;f++)if(d=Qa[f].call(j,a,k,j.opts))return d;return n.map(k,Ua,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xa,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Ra[c]=Ra[c]||[],Ra[c].unshift(b)},prefilter:function(a,b){b?Qa.unshift(a):Qa.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xa(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pa.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Ta(b,!0),a,d,e)}}),n.each({slideDown:Ta("show"),slideUp:Ta("hide"),slideToggle:Ta("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(La=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),La=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Ma||(Ma=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Ma),Ma=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Ya,Za,$a=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Za:Ya)),
void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Za={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$a[b]||n.find.attr;$a[b]=function(a,b,d){var e,f;return d||(f=$a[b],$a[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$a[b]=f),e}});var _a=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_a.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ab=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ab," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ab," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ab," ").indexOf(b)>=0)return!0;return!1}});var bb=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cb=n.now(),db=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var eb=/#.*$/,fb=/([?&])_=[^&]*/,gb=/^(.*?):[ \t]*([^\r\n]*)$/gm,hb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ib=/^(?:GET|HEAD)$/,jb=/^\/\//,kb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lb={},mb={},nb="*/".concat("*"),ob=a.location.href,pb=kb.exec(ob.toLowerCase())||[];function qb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function rb(a,b,c,d){var e={},f=a===mb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function sb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function ub(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ob,type:"GET",isLocal:hb.test(pb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sb(sb(a,n.ajaxSettings),b):sb(n.ajaxSettings,a)},ajaxPrefilter:qb(lb),ajaxTransport:qb(mb),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gb.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||ob)+"").replace(eb,"").replace(jb,pb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kb.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pb[1]&&h[2]===pb[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pb[3]||("http:"===pb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rb(lb,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ib.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(db.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fb.test(d)?d.replace(fb,"$1_="+cb++):d+(db.test(d)?"&":"?")+"_="+cb++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+nb+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rb(mb,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tb(k,v,f)),u=ub(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vb=/%20/g,wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&").replace(vb,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bb=0,Cb={},Db={0:200,1223:204},Eb=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cb)Cb[a]()}),k.cors=!!Eb&&"withCredentials"in Eb,k.ajax=Eb=!!Eb,n.ajaxTransport(function(a){var b;return k.cors||Eb&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cb[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Db[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Cb[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fb=[],Gb=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fb.pop()||n.expando+"_"+cb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gb.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gb.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gb,"$1"+e):b.jsonp!==!1&&(b.url+=(db.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Fb.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hb=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hb)return Hb.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ib=a.document.documentElement;function Jb(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jb(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ib;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ib})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jb(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=ya(k.pixelPosition,function(a,c){return c?(c=xa(a,b),va.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Kb=a.jQuery,Lb=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lb),b&&a.jQuery===n&&(a.jQuery=Kb),n},typeof b===U&&(a.jQuery=a.$=n),n});
-//# sourceMappingURL=jquery.min.map
+
/*! jQuery Migrate v1.4.0 | (c) jQuery Foundation and other contributors | jquery.org/license */
"undefined"==typeof jQuery.migrateMute&&(jQuery.migrateMute=!0),function(a,b,c){function d(c){var d=b.console;f[c]||(f[c]=!0,a.migrateWarnings.push(c),d&&d.warn&&!a.migrateMute&&(d.warn("JQMIGRATE: "+c),a.migrateTrace&&d.trace&&d.trace()))}function e(b,c,e,f){if(Object.defineProperty)try{return void Object.defineProperty(b,c,{configurable:!0,enumerable:!0,get:function(){return d(f),e},set:function(a){d(f),e=a}})}catch(g){}a._definePropertyBroken=!0,b[c]=e}a.migrateVersion="1.4.0";var f={};a.migrateWarnings=[],b.console&&b.console.log&&b.console.log("JQMIGRATE: Migrate is installed"+(a.migrateMute?"":" with logging active")+", version "+a.migrateVersion),a.migrateTrace===c&&(a.migrateTrace=!0),a.migrateReset=function(){f={},a.migrateWarnings.length=0},"BackCompat"===document.compatMode&&d("jQuery is not compatible with Quirks Mode");var g=a("<input/>",{size:1}).attr("size")&&a.attrFn,h=a.attr,i=a.attrHooks.value&&a.attrHooks.value.get||function(){return null},j=a.attrHooks.value&&a.attrHooks.value.set||function(){return c},k=/^(?:input|button)$/i,l=/^[238]$/,m=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,n=/^(?:checked|selected)$/i;e(a,"attrFn",g||{},"jQuery.attrFn is deprecated"),a.attr=function(b,e,f,i){var j=e.toLowerCase(),o=b&&b.nodeType;return i&&(h.length<4&&d("jQuery.fn.attr( props, pass ) is deprecated"),b&&!l.test(o)&&(g?e in g:a.isFunction(a.fn[e])))?a(b)[e](f):("type"===e&&f!==c&&k.test(b.nodeName)&&b.parentNode&&d("Can't change the 'type' of an input or button in IE 6/7/8"),!a.attrHooks[j]&&m.test(j)&&(a.attrHooks[j]={get:function(b,d){var e,f=a.prop(b,d);return f===!0||"boolean"!=typeof f&&(e=b.getAttributeNode(d))&&e.nodeValue!==!1?d.toLowerCase():c},set:function(b,c,d){var e;return c===!1?a.removeAttr(b,d):(e=a.propFix[d]||d,e in b&&(b[e]=!0),b.setAttribute(d,d.toLowerCase())),d}},n.test(j)&&d("jQuery.fn.attr('"+j+"') might use property instead of attribute")),h.call(a,b,e,f))},a.attrHooks.value={get:function(a,b){var c=(a.nodeName||"").toLowerCase();return"button"===c?i.apply(this,arguments):("input"!==c&&"option"!==c&&d("jQuery.fn.attr('value') no longer gets properties"),b in a?a.value:null)},set:function(a,b){var c=(a.nodeName||"").toLowerCase();return"button"===c?j.apply(this,arguments):("input"!==c&&"option"!==c&&d("jQuery.fn.attr('value', val) no longer sets properties"),void(a.value=b))}};var o,p,q=a.fn.init,r=a.parseJSON,s=/^\s*</,t=/\[\s*\w+\s*[~|^$*]?=\s*(?![\s'"])[^#\]]*#/,u=/^([^<]*)(<[\w\W]+>)([^>]*)$/;a.fn.init=function(b,e,f){var g,h;return b&&"string"==typeof b&&!a.isPlainObject(e)&&(g=u.exec(a.trim(b)))&&g[0]&&(s.test(b)||d("$(html) HTML strings must start with '<' character"),g[3]&&d("$(html) HTML text after last tag is ignored"),"#"===g[0].charAt(0)&&(d("HTML string cannot start with a '#' character"),a.error("JQMIGRATE: Invalid selector string (XSS)")),e&&e.context&&(e=e.context),a.parseHTML)?q.call(this,a.parseHTML(g[2],e&&e.ownerDocument||e||document,!0),e,f):("#"===b?(d("jQuery( '#' ) is not a valid selector"),b=[]):t.test(b)&&d("Attribute selectors with '#' must be quoted: '"+b+"'"),h=q.apply(this,arguments),b&&b.selector!==c?(h.selector=b.selector,h.context=b.context):(h.selector="string"==typeof b?b:"",b&&(h.context=b.nodeType?b:e||document)),h)},a.fn.init.prototype=a.fn,a.parseJSON=function(a){return a?r.apply(this,arguments):(d("jQuery.parseJSON requires a valid JSON string"),null)},a.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a.browser||(o=a.uaMatch(navigator.userAgent),p={},o.browser&&(p[o.browser]=!0,p.version=o.version),p.chrome?p.webkit=!0:p.webkit&&(p.safari=!0),a.browser=p),e(a,"browser",a.browser,"jQuery.browser is deprecated"),a.boxModel=a.support.boxModel="CSS1Compat"===document.compatMode,e(a,"boxModel",a.boxModel,"jQuery.boxModel is deprecated"),e(a.support,"boxModel",a.support.boxModel,"jQuery.support.boxModel is deprecated"),a.sub=function(){function b(a,c){return new b.fn.init(a,c)}a.extend(!0,b,this),b.superclass=this,b.fn=b.prototype=this(),b.fn.constructor=b,b.sub=this.sub,b.fn.init=function(d,e){var f=a.fn.init.call(this,d,e,c);return f instanceof b?f:b(f)},b.fn.init.prototype=b.fn;var c=b(document);return d("jQuery.sub() is deprecated"),b},a.fn.size=function(){return d("jQuery.fn.size() is deprecated; use the .length property"),this.length};var v=!1;a.swap&&a.each(["height","width","reliableMarginRight"],function(b,c){var d=a.cssHooks[c]&&a.cssHooks[c].get;d&&(a.cssHooks[c].get=function(){var a;return v=!0,a=d.apply(this,arguments),v=!1,a})}),a.swap=function(a,b,c,e){var f,g,h={};v||d("jQuery.swap() is undocumented and deprecated");for(g in b)h[g]=a.style[g],a.style[g]=b[g];f=c.apply(a,e||[]);for(g in b)a.style[g]=h[g];return f},a.ajaxSetup({converters:{"text json":a.parseJSON}});var w=a.fn.data;a.fn.data=function(b){var e,f,g=this[0];return!g||"events"!==b||1!==arguments.length||(e=a.data(g,b),f=a._data(g,b),e!==c&&e!==f||f===c)?w.apply(this,arguments):(d("Use of jQuery.fn.data('events') is deprecated"),f)};var x=/\/(java|ecma)script/i;a.clean||(a.clean=function(b,c,e,f){c=c||document,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,d("jQuery.clean() is deprecated");var g,h,i,j,k=[];if(a.merge(k,a.buildFragment(b,c).childNodes),e)for(i=function(a){return!a.type||x.test(a.type)?f?f.push(a.parentNode?a.parentNode.removeChild(a):a):e.appendChild(a):void 0},g=0;null!=(h=k[g]);g++)a.nodeName(h,"script")&&i(h)||(e.appendChild(h),"undefined"!=typeof h.getElementsByTagName&&(j=a.grep(a.merge([],h.getElementsByTagName("script")),i),k.splice.apply(k,[g+1,0].concat(j)),g+=j.length));return k});var y=a.event.add,z=a.event.remove,A=a.event.trigger,B=a.fn.toggle,C=a.fn.live,D=a.fn.die,E=a.fn.load,F="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",G=new RegExp("\\b(?:"+F+")\\b"),H=/(?:^|\s)hover(\.\S+|)\b/,I=function(b){return"string"!=typeof b||a.event.special.hover?b:(H.test(b)&&d("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),b&&b.replace(H,"mouseenter$1 mouseleave$1"))};a.event.props&&"attrChange"!==a.event.props[0]&&a.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),a.event.dispatch&&e(a.event,"handle",a.event.dispatch,"jQuery.event.handle is undocumented and deprecated"),a.event.add=function(a,b,c,e,f){a!==document&&G.test(b)&&d("AJAX events should be attached to document: "+b),y.call(this,a,I(b||""),c,e,f)},a.event.remove=function(a,b,c,d,e){z.call(this,a,I(b)||"",c,d,e)},a.each(["load","unload","error"],function(b,c){a.fn[c]=function(){var a=Array.prototype.slice.call(arguments,0);return"load"===c&&"string"==typeof a[0]?E.apply(this,a):(d("jQuery.fn."+c+"() is deprecated"),a.splice(0,0,c),arguments.length?this.bind.apply(this,a):(this.triggerHandler.apply(this,a),this))}}),a.fn.toggle=function(b,c){if(!a.isFunction(b)||!a.isFunction(c))return B.apply(this,arguments);d("jQuery.fn.toggle(handler, handler...) is deprecated");var e=arguments,f=b.guid||a.guid++,g=0,h=function(c){var d=(a._data(this,"lastToggle"+b.guid)||0)%g;return a._data(this,"lastToggle"+b.guid,d+1),c.preventDefault(),e[d].apply(this,arguments)||!1};for(h.guid=f;g<e.length;)e[g++].guid=f;return this.click(h)},a.fn.live=function(b,c,e){return d("jQuery.fn.live() is deprecated"),C?C.apply(this,arguments):(a(this.context).on(b,this.selector,c,e),this)},a.fn.die=function(b,c){return d("jQuery.fn.die() is deprecated"),D?D.apply(this,arguments):(a(this.context).off(b,this.selector||"**",c),this)},a.event.trigger=function(a,b,c,e){return c||G.test(a)||d("Global events are undocumented and deprecated"),A.call(this,a,b,c||document,e)},a.each(F.split("|"),function(b,c){a.event.special[c]={setup:function(){var b=this;return b!==document&&(a.event.add(document,c+"."+a.guid,function(){a.event.trigger(c,Array.prototype.slice.call(arguments,1),b,!0)}),a._data(this,c,a.guid++)),!1},teardown:function(){return this!==document&&a.event.remove(document,c+"."+a._data(this,c)),!1}}}),a.event.special.ready={setup:function(){this===document&&d("'ready' event is deprecated")}};var J=a.fn.andSelf||a.fn.addBack,K=a.fn.find;if(a.fn.andSelf=function(){return d("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),J.apply(this,arguments)},a.fn.find=function(a){var b=K.apply(this,arguments);return b.context=this.context,b.selector=this.selector?this.selector+" "+a:a,b},a.Callbacks){var L=a.Deferred,M=[["resolve","done",a.Callbacks("once memory"),a.Callbacks("once memory"),"resolved"],["reject","fail",a.Callbacks("once memory"),a.Callbacks("once memory"),"rejected"],["notify","progress",a.Callbacks("memory"),a.Callbacks("memory")]];a.Deferred=function(b){var c=L(),e=c.promise();return c.pipe=e.pipe=function(){var b=arguments;return d("deferred.pipe() is deprecated"),a.Deferred(function(d){a.each(M,function(f,g){var h=a.isFunction(b[f])&&b[f];c[g[1]](function(){var b=h&&h.apply(this,arguments);b&&a.isFunction(b.promise)?b.promise().done(d.resolve).fail(d.reject).progress(d.notify):d[g[0]+"With"](this===e?d.promise():this,h?[b]:arguments)})}),b=null}).promise()},c.isResolved=function(){return d("deferred.isResolved is deprecated"),"resolved"===c.state()},c.isRejected=function(){return d("deferred.isRejected is deprecated"),"rejected"===c.state()},b&&b.call(c,c),c}}}(jQuery,window);
/*! jQuery UI - v1.10.0 - 2013-01-18
@@ -2095,7 +2095,7 @@ THE SOFTWARE.
48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,139]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],55:[2,55],57:[2,20],61:[2,57],74:[2,81],83:[2,85],87:[2,18],91:[2,89],102:[2,53],105:[2,93],111:[2,19],112:[2,77],117:[2,97],120:[2,63],123:[2,69],124:[2,12],136:[2,75],137:[2,32]},parseError:function(a,b){throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:((null===n||"undefined"==typeof n)&&(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;g<f.length&&(c=this._input.match(this.rules[f[g]]),!c||b&&!(c[0].length>b[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substr(a,b.yyleng-c)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(b.yytext=b.yytext.substr(5,b.yyleng-9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b.__esModule=!0,b["default"]=c},function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(1)["default"];b.__esModule=!0;var j=c(25),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,i=0,j=d.length;j>i;i++){var k=d[i],l=this.accept(k);if(l){var m=e(d,i,c),n=f(d,i,c),o=l.openStandalone&&m,p=l.closeStandalone&&n,q=l.inlineStandalone&&m&&n;l.close&&g(d,i,!0),l.open&&h(d,i,!0),b&&q&&(g(d,i),h(d,i)&&"PartialStatement"===k.type&&(k.indent=/([ \t]+$)/.exec(d[i-1].original)[1])),b&&o&&(g((k.program||k.inverse).body),h(d,i)),b&&p&&(g(d,i),h((k.inverse||k.program).body))}}return a},d.prototype.BlockStatement=d.prototype.DecoratorBlock=d.prototype.PartialBlockStatement=function(a){this.accept(a.program),this.accept(a.inverse);var b=a.program||a.inverse,c=a.program&&a.inverse,d=c,i=c;if(c&&c.chained)for(d=c.body[0].program;i.chained;)i=i.body[i.body.length-1].program;var j={open:a.openStrip.open,close:a.closeStrip.close,openStandalone:f(b.body),closeStandalone:e((d||b).body)};if(a.openStrip.close&&g(b.body,null,!0),c){var k=a.inverseStrip;k.open&&h(b.body,null,!0),k.close&&g(d.body,null,!0),a.closeStrip.open&&h(i.body,null,!0),!this.options.ignoreStandalone&&e(b.body)&&f(d.body)&&(h(b.body),g(d.body))}else a.closeStrip.open&&h(b.body,null,!0);return j},d.prototype.Decorator=d.prototype.MustacheStatement=function(a){return a.strip},d.prototype.PartialStatement=d.prototype.CommentStatement=function(a){var b=a.strip||{};return{inlineStandalone:!0,open:b.open,close:b.close}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(){this.parents=[]}function e(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")}function f(a){e.call(this,a),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")}function g(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")}var h=c(1)["default"];b.__esModule=!0;var i=c(6),j=h(i);d.prototype={constructor:d,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&!d.prototype[c.type])throw new j["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new j["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;c>b;b++)this.acceptKey(a,b),a[b]||(a.splice(b,1),b--,c--)},accept:function(a){if(a){if(!this[a.type])throw new j["default"]("Unknown type: "+a.type,a);this.current&&this.parents.unshift(this.current),this.current=a;var b=this[a.type](a);return this.current=this.parents.shift(),!this.mutating||b?b:b!==!1?a:void 0}},Program:function(a){this.acceptArray(a.body)},MustacheStatement:e,Decorator:e,BlockStatement:f,DecoratorBlock:f,PartialStatement:g,PartialBlockStatement:function(a){g.call(this,a),this.acceptKey(a,"program")},ContentStatement:function(){},CommentStatement:function(){},SubExpression:e,PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},UndefinedLiteral:function(){},NullLiteral:function(){},Hash:function(a){this.acceptArray(a.pairs)},HashPair:function(a){this.acceptRequired(a,"value")}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if(b=b.path?b.path.original:b,a.path.original!==b){var c={loc:a.path.loc};throw new q["default"](a.path.original+" doesn't match "+b,c)}}function e(a,b){this.source=a,this.start={line:b.first_line,column:b.first_column},this.end={line:b.last_line,column:b.last_column}}function f(a){return/^\[.*\]$/.test(a)?a.substr(1,a.length-2):a}function g(a,b){return{open:"~"===a.charAt(2),close:"~"===b.charAt(b.length-3)}}function h(a){return a.replace(/^\{\{~?\!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function i(a,b,c){c=this.locInfo(c);for(var d=a?"@":"",e=[],f=0,g="",h=0,i=b.length;i>h;h++){var j=b[h].part,k=b[h].original!==j;if(d+=(b[h].separator||"")+j,k||".."!==j&&"."!==j&&"this"!==j)e.push(j);else{if(e.length>0)throw new q["default"]("Invalid path: "+d,{loc:c});".."===j&&(f++,g+="../")}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new q["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}var o=c(1)["default"];b.__esModule=!0,b.SourceLocation=e,b.id=f,b.stripFlags=g,b.stripComment=h,b.preparePath=i,b.prepareMustache=j,b.prepareRawBlock=k,b.prepareBlock=l,b.prepareProgram=m,b.preparePartialBlock=n;var p=c(6),q=o(p)},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()),f._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(l.isArray(a)&&l.isArray(b)&&a.length===b.length){for(var c=0;c<a.length;c++)if(!g(a[c],b[c]))return!1;return!0}}function h(a){if(!a.path.parts){var b=a.path;a.path={type:"PathExpression",data:!1,depth:0,parts:[b.original+""],original:b.original+"",loc:b.loc}}}var i=c(1)["default"];b.__esModule=!0,b.Compiler=d,b.precompile=e,b.compile=f;var j=c(6),k=i(j),l=c(5),m=c(21),n=i(m),o=[].slice;d.prototype={compiler:d,equals:function(a){var b=this.opcodes.length;if(a.opcodes.length!==b)return!1;for(var c=0;b>c;c++){var d=this.opcodes[c],e=a.opcodes[c];if(d.opcode!==e.opcode||!g(d.args,e.args))return!1}b=this.children.length;for(var c=0;b>c;c++)if(!this.children[c].equals(a.children[c]))return!1;return!0},guid:0,compile:function(a,b){this.sourceNode=[],this.opcodes=[],this.children=[],this.options=b,this.stringParams=b.stringParams,this.trackIds=b.trackIds,b.blockParams=b.blockParams||[];var c=b.knownHelpers;if(b.knownHelpers={helperMissing:!0,blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0,lookup:!0},c)for(var d in c)d in c&&(b.knownHelpers[d]=c[d]);return this.accept(a)},compileProgram:function(a){var b=new this.compiler,c=b.compile(a,this.options),d=this.guid++;return this.usePartial=this.usePartial||c.usePartial,this.children[d]=c,this.useDepths=this.useDepths||c.useDepths,d},accept:function(a){if(!this[a.type])throw new k["default"]("Unknown type: "+a.type,a);this.sourceNode.unshift(a);var b=this[a.type](a);return this.sourceNode.shift(),b},Program:function(a){this.options.blockParams.unshift(a.blockParams);for(var b=a.body,c=b.length,d=0;c>d;d++)this.accept(b[d]);return this.options.blockParams.shift(),this.isSimple=1===c,this.blockParams=a.blockParams?a.blockParams.length:0,this},BlockStatement:function(a){h(a);var b=a.program,c=a.inverse;b=b&&this.compileProgram(b),c=c&&this.compileProgram(c);var d=this.classifySexpr(a);"helper"===d?this.helperSexpr(a,b,c):"simple"===d?(this.simpleSexpr(a),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("blockValue",a.path.original)):(this.ambiguousSexpr(a,b,c),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},DecoratorBlock:function(a){var b=a.program&&this.compileProgram(a.program),c=this.setupFullMustacheParams(a,b,void 0),d=a.path;this.useDecorators=!0,this.opcode("registerDecorator",c.length,d.original)},PartialStatement:function(a){this.usePartial=!0;var b=a.program;b&&(b=this.compileProgram(a.program));var c=a.params;if(c.length>1)throw new k["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new k["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,n["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=n["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");d>c;c++)this.pushParam(b[c].value);for(;c--;)this.opcode("assignToHash",b[c].key);this.opcode("popHash")},opcode:function(a){this.opcodes.push({opcode:a,args:o.call(arguments,1),loc:this.sourceNode[0].loc})},addDepth:function(a){a&&(this.useDepths=!0)},classifySexpr:function(a){var b=n["default"].helpers.simpleId(a.path),c=b&&!!this.blockParamIndex(a.path.parts[0]),d=!c&&n["default"].helpers.helperExpression(a),e=!c&&(d||b);if(e&&!d){var f=a.path.parts[0],g=this.options;g.knownHelpers[f]?d=!0:g.knownHelpersOnly&&(e=!1)}return d?"helper":e?"ambiguous":"simple"},pushParams:function(a){for(var b=0,c=a.length;c>b;b++)this.pushParam(a[b])},pushParam:function(a){var b=null!=a.value?a.value:a.original||"";if(this.stringParams)b.replace&&(b=b.replace(/^(\.?\.\/)*/g,"").replace(/\//g,".")),a.depth&&this.addDepth(a.depth),this.opcode("getContext",a.depth||0),this.opcode("pushStringParam",b,a.type),"SubExpression"===a.type&&this.accept(a);else{if(this.trackIds){var c=void 0;if(!a.parts||n["default"].helpers.scopedId(a)||a.depth||(c=this.blockParamIndex(a.parts[0])),c){var d=a.parts.slice(1).join(".");this.opcode("pushId","BlockParam",c,d)}else b=a.original||b,b.replace&&(b=b.replace(/^this(?:\.|$)/,"").replace(/^\.\//,"").replace(/^\.$/,"")),this.opcode("pushId",a.type,b)}this.accept(a)}},setupFullMustacheParams:function(a,b,c,d){var e=a.params;return this.pushParams(e),this.opcode("pushProgram",b),this.opcode("pushProgram",c),a.hash?this.accept(a.hash):this.opcode("emptyHash",d),e},blockParamIndex:function(a){for(var b=0,c=this.options.blockParams.length;c>b;b++){var d=this.options.blockParams[b],e=d&&l.indexOf(d,a);if(d&&e>=0)return[b,e]}}}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;g>f;f++)e=b.nameLookup(e,c[f],d);return a?[b.aliasable("container.strict"),"(",e,", ",b.quotedString(c[f]),")"]:e}var g=c(1)["default"];b.__esModule=!0;var h=c(4),i=c(6),j=g(i),k=c(5),l=c(29),m=g(l);e.prototype={nameLookup:function(a,b){return e.isValidJavaScriptVariableName(b)?[a,".",b]:[a,"[",JSON.stringify(b),"]"]},depthedLookup:function(a){return[this.aliasable("container.lookup"),'(depths, "',a,'")']},compilerInfo:function(){var a=h.COMPILER_REVISION,b=h.REVISION_CHANGES[a];return[a,b]},appendToBuffer:function(a,b,c){return k.isArray(a)||(a=[a]),a=this.source.wrap(a,b),this.environment.isSimple?["return ",a,";"]:c?["buffer += ",a,";"]:(a.appendToBuffer=!0,a)},initializeBuffer:function(){return this.quotedString("")},compile:function(a,b,c,d){this.environment=a,this.options=b,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!d,this.name=this.environment.name,this.isChild=!!c,this.context=c||{decorators:[],programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.blockParams=[],this.compileChildren(a,b),this.useDepths=this.useDepths||a.useDepths||a.useDecorators||this.options.compat,this.useBlockParams=this.useBlockParams||a.useBlockParams;var e=a.opcodes,f=void 0,g=void 0,h=void 0,i=void 0;for(h=0,i=e.length;i>h;h++)f=e[h],this.source.currentLocation=f.loc,g=g||f.loc,this[f.opcode].apply(this,f.args);if(this.source.currentLocation=g,this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new j["default"]("Compile completed with content left on stack");this.decorators.isEmpty()?this.decorators=void 0:(this.useDecorators=!0,this.decorators.prepend("var decorators = container.decorators;\n"),this.decorators.push("return fn;"),d?this.decorators=Function.apply(this,["fn","props","container","depth0","data","blockParams","depths",this.decorators.merge()]):(this.decorators.prepend("function(fn, props, container, depth0, data, blockParams, depths) {\n"),this.decorators.push("}\n"),this.decorators=this.decorators.merge()));var k=this.createFunctionContext(d);if(this.isChild)return k;var l={compiler:this.compilerInfo(),main:k};this.decorators&&(l.main_d=this.decorators,l.useDecorators=!0);var m=this.context,n=m.programs,o=m.decorators;for(h=0,i=n.length;i>h;h++)n[h]&&(l[h]=n[h],o[h]&&(l[h+"_d"]=o[h],l.useDecorators=!0));return this.environment.usePartial&&(l.usePartial=!0),this.options.data&&(l.useData=!0),this.useDepths&&(l.useDepths=!0),this.useBlockParams&&(l.useBlockParams=!0),this.options.compat&&(l.compat=!0),d?l.compilerOptions=this.options:(l.compiler=JSON.stringify(l.compiler),this.source.currentLocation={start:{line:1,column:0}},l=this.objectLiteral(l),b.srcName?(l=l.toStringWithSourceMap({file:b.destName}),l.map=l.map&&l.map.toString()):l=l.toString()),l},preamble:function(){this.lastContext=0,this.source=new m["default"](this.options.srcName),this.decorators=new m["default"](this.options.srcName)},createFunctionContext:function(a){var b="",c=this.stackVars.concat(this.registers.list);c.length>0&&(b+=", "+c.join(", "));var d=0;for(var e in this.aliases){var f=this.aliases[e];this.aliases.hasOwnProperty(e)&&f.children&&f.referenceCount>1&&(b+=", alias"+ ++d+"="+e,f.children[0]="alias"+d)}var g=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&g.push("blockParams"),this.useDepths&&g.push("depths");var h=this.mergeSource(b);return a?(g.push(h),Function.apply(this,g)):this.source.wrap(["function(",g.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},blockValue:function(a){var b=this.aliasable("helpers.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("helpers.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var g=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict&&e,this,b,a));for(var h=b.length;h>c;c++)this.replaceStack(function(e){var f=g.nameLookup(e,b[c],a);return d?[" && ",f]:[" != null ? ",f," : ",e]})},resolvePossibleLambda:function(){this.push([this.aliasable("container.lambda"),"(",this.popStack(),", ",this.contextName(0),")"])},pushStringParam:function(a,b){this.pushContext(),this.pushString(b),"SubExpression"!==b&&("string"==typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(a){this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}")),this.pushStackLiteral(a?"undefined":"{}")},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:[],types:[],contexts:[],ids:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push(this.objectLiteral(a.ids)),this.stringParams&&(this.push(this.objectLiteral(a.contexts)),this.push(this.objectLiteral(a.types))),this.push(this.objectLiteral(a.values))},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){null!=a?this.pushStackLiteral(this.programExpression(a)):this.pushStackLiteral(null)},registerDecorator:function(a,b){var c=this.nameLookup("decorators",b,"decorator"),d=this.setupHelperArgs(b,a);this.decorators.push(["fn = ",this.decorators.functionCall(c,"",["fn","props","container",d])," || fn;"])},invokeHelper:function(a,b,c){var d=this.popStack(),e=this.setupHelper(a,b),f=c?[e.name," || "]:"",g=["("].concat(f,d);this.options.strict||g.push(" || ",this.aliasable("helpers.helperMissing")),g.push(")"),this.push(this.source.functionCall(g,"call",e.callParams))},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(this.source.functionCall(c.name,"call",c.callParams))},invokeAmbiguous:function(a,b){this.useRegister("helper");var c=this.popStack();this.emptyHash();var d=this.setupHelper(0,a,b),e=this.lastHelper=this.nameLookup("helpers",a,"helper"),f=["(","(helper = ",e," || ",c,")"];this.options.strict||(f[0]="(helper = ",f.push(" != null ? helper : ",this.aliasable("helpers.helperMissing"))),this.push(["(",f,d.paramsInit?["),(",d.paramsInit]:[],"),","(typeof helper === ",this.aliasable('"function"')," ? ",this.source.functionCall("helper","call",d.callParams)," : helper))"])},invokePartial:function(a,b,c){var d=[],e=this.setupParams(b,1,d);a&&(b=this.popStack(),delete e.name),c&&(e.indent=JSON.stringify(c)),e.helpers="helpers",e.partials="partials",e.decorators="container.decorators",a?d.unshift(b):d.unshift(this.nameLookup("partials",b,"partial")),this.options.compat&&(e.depths="depths"),e=this.objectLiteral(e),
d.push(e),this.push(this.source.functionCall("container.invokePartial","",d))},assignToHash:function(a){var b=this.popStack(),c=void 0,d=void 0,e=void 0;this.trackIds&&(e=this.popStack()),this.stringParams&&(d=this.popStack(),c=this.popStack());var f=this.hash;c&&(f.contexts[a]=c),d&&(f.types[a]=d),e&&(f.ids[a]=e),f.values[a]=b},pushId:function(a,b,c){"BlockParam"===a?this.pushStackLiteral("blockParams["+b[0]+"].path["+b[1]+"]"+(c?" + "+JSON.stringify("."+c):"")):"PathExpression"===a?this.pushString(b):"SubExpression"===a?this.pushStackLiteral("true"):this.pushStackLiteral("null")},compiler:e,compileChildren:function(a,b){for(var c=a.children,d=void 0,e=void 0,f=0,g=c.length;g>f;f++){d=c[f],e=new this.compiler;var h=this.matchExistingProgram(d);null==h?(this.context.programs.push(""),h=this.context.programs.length,d.index=h,d.name="program"+h,this.context.programs[h]=e.compile(d,b,this.context,!this.precompile),this.context.decorators[h]=e.decorators,this.context.environments[h]=d,this.useDepths=this.useDepths||e.useDepths,this.useBlockParams=this.useBlockParams||e.useBlockParams):(d.index=h,d.name="program"+h,this.useDepths=this.useDepths||d.useDepths,this.useBlockParams=this.useBlockParams||d.useBlockParams)}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;c>b;b++){var d=this.context.environments[b];if(d&&d.equals(a))return b}},programExpression:function(a){var b=this.environment.children[a],c=[b.index,"data",b.blockParams];return(this.useBlockParams||this.useDepths)&&c.push("blockParams"),this.useDepths&&c.push("depths"),"container.program("+c.join(", ")+")"},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},push:function(a){return a instanceof d||(a=this.source.wrap(a)),this.inlineStack.push(a),a},pushStackLiteral:function(a){this.push(new d(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent),this.pendingLocation)),this.pendingContent=void 0),a&&this.source.push(a)},replaceStack:function(a){var b=["("],c=void 0,e=void 0,f=void 0;if(!this.isInline())throw new j["default"]("replaceStack on non-inline");var g=this.popStack(!0);if(g instanceof d)c=[g.value],b=["(",c],f=!0;else{e=!0;var h=this.incrStack();b=["((",this.push(h)," = ",g,")"],c=this.topStack()}var i=a.call(this,c);f||this.popStack(),e&&this.stackSlot--,this.push(b.concat(i,")"))},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;c>b;b++){var e=a[b];if(e instanceof d)this.compileStack.push(e);else{var f=this.incrStack();this.pushSource([f," = ",e,";"]),this.compileStack.push(f)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),c=(b?this.inlineStack:this.compileStack).pop();if(!a&&c instanceof d)return c.value;if(!b){if(!this.stackSlot)throw new j["default"]("Invalid stack pop");this.stackSlot--}return c},topStack:function(){var a=this.isInline()?this.inlineStack:this.compileStack,b=a[a.length-1];return b instanceof d?b.value:b},contextName:function(a){return this.useDepths&&a?"depths["+a+"]":"depth"+a},quotedString:function(a){return this.source.quotedString(a)},objectLiteral:function(a){return this.source.objectLiteral(a)},aliasable:function(a){var b=this.aliases[a];return b?(b.referenceCount++,b):(b=this.aliases[a]=this.source.wrap(a),b.aliasable=!0,b.referenceCount=1,b)},setupHelper:function(a,b,c){var d=[],e=this.setupHelperArgs(b,a,d,c),f=this.nameLookup("helpers",b,"helper"),g=this.aliasable(this.contextName(0)+" != null ? "+this.contextName(0)+" : {}");return{params:d,paramsInit:e,name:f,callParams:[g].concat(d)}},setupParams:function(a,b,c){var d={},e=[],f=[],g=[],h=!c,i=void 0;h&&(c=[]),d.name=this.quotedString(a),d.hash=this.popStack(),this.trackIds&&(d.hashIds=this.popStack()),this.stringParams&&(d.hashTypes=this.popStack(),d.hashContexts=this.popStack());var j=this.popStack(),k=this.popStack();(k||j)&&(d.fn=k||"container.noop",d.inverse=j||"container.noop");for(var l=b;l--;)i=this.popStack(),c[l]=i,this.trackIds&&(g[l]=this.popStack()),this.stringParams&&(f[l]=this.popStack(),e[l]=this.popStack());return h&&(d.args=this.source.generateArray(c)),this.trackIds&&(d.ids=this.source.generateArray(g)),this.stringParams&&(d.types=this.source.generateArray(f),d.contexts=this.source.generateArray(e)),this.options.data&&(d.data="data"),this.useBlockParams&&(d.blockParams="blockParams"),d},setupHelperArgs:function(a,b,c,d){var e=this.setupParams(a,b,c);return e=this.objectLiteral(e),d?(this.useRegister("options"),c.push("options"),["options=",e]):c?(c.push(e),""):e}},function(){for(var a="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "),b=e.RESERVED_WORDS={},c=0,d=a.length;d>c;c++)b[a[c]]=!0}(),e.isValidJavaScriptVariableName=function(a){return!e.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)},b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b,c){if(f.isArray(a)){for(var d=[],e=0,g=a.length;g>e;e++)d.push(b.wrap(a[e],c));return d}return"boolean"==typeof a||"number"==typeof a?a+"":a}function e(a){this.srcFile=a,this.source=[]}b.__esModule=!0;var f=c(5),g=void 0;try{}catch(h){}g||(g=function(a,b,c,d){this.src="",d&&this.add(d)},g.prototype={add:function(a){f.isArray(a)&&(a=a.join("")),this.src+=a},prepend:function(a){f.isArray(a)&&(a=a.join("")),this.src=a+this.src},toStringWithSourceMap:function(){return{code:this.toString()}},toString:function(){return this.src}}),e.prototype={isEmpty:function(){return!this.source.length},prepend:function(a,b){this.source.unshift(this.wrap(a,b))},push:function(a,b){this.source.push(this.wrap(a,b))},merge:function(){var a=this.empty();return this.each(function(b){a.add([" ",b,"\n"])}),a},each:function(a){for(var b=0,c=this.source.length;c>b;b++)a(this.source[b])},empty:function(){var a=this.currentLocation||{start:{}};return new g(a.start.line,a.start.column,this.srcFile)},wrap:function(a){var b=arguments.length<=1||void 0===arguments[1]?this.currentLocation||{start:{}}:arguments[1];return a instanceof g?a:(a=d(a,this,b),new g(b.start.line,b.start.column,this.srcFile,a))},functionCall:function(a,b,c){return c=this.generateList(c),this.wrap([a,b?"."+b+"(":"(",c,")"])},quotedString:function(a){return'"'+(a+"").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(a){var b=[];for(var c in a)if(a.hasOwnProperty(c)){var e=d(a[c],this);"undefined"!==e&&b.push([this.quotedString(c),":",e])}var f=this.generateList(b);return f.prepend("{"),f.add("}"),f},generateList:function(a){for(var b=this.empty(),c=0,e=a.length;e>c;c++)c&&b.add(","),b.add(d(a[c],this));return b},generateArray:function(a){var b=this.generateList(a);return b.prepend("["),b.add("]"),b}},b["default"]=e,a.exports=b["default"]}])});
!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t),e=(n>>16)+(t>>16)+(r>>16);return e<<16|65535&r}function r(n,t){return n<<t|n>>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<<r%32,n[(r+64>>>9<<4)+14]=r;var e,i,a,h,d,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e<n.length;e+=16)i=l,a=g,h=v,d=m,l=o(l,g,v,m,n[e],7,-680876936),m=o(m,l,g,v,n[e+1],12,-389564586),v=o(v,m,l,g,n[e+2],17,606105819),g=o(g,v,m,l,n[e+3],22,-1044525330),l=o(l,g,v,m,n[e+4],7,-176418897),m=o(m,l,g,v,n[e+5],12,1200080426),v=o(v,m,l,g,n[e+6],17,-1473231341),g=o(g,v,m,l,n[e+7],22,-45705983),l=o(l,g,v,m,n[e+8],7,1770035416),m=o(m,l,g,v,n[e+9],12,-1958414417),v=o(v,m,l,g,n[e+10],17,-42063),g=o(g,v,m,l,n[e+11],22,-1990404162),l=o(l,g,v,m,n[e+12],7,1804603682),m=o(m,l,g,v,n[e+13],12,-40341101),v=o(v,m,l,g,n[e+14],17,-1502002290),g=o(g,v,m,l,n[e+15],22,1236535329),l=u(l,g,v,m,n[e+1],5,-165796510),m=u(m,l,g,v,n[e+6],9,-1069501632),v=u(v,m,l,g,n[e+11],14,643717713),g=u(g,v,m,l,n[e],20,-373897302),l=u(l,g,v,m,n[e+5],5,-701558691),m=u(m,l,g,v,n[e+10],9,38016083),v=u(v,m,l,g,n[e+15],14,-660478335),g=u(g,v,m,l,n[e+4],20,-405537848),l=u(l,g,v,m,n[e+9],5,568446438),m=u(m,l,g,v,n[e+14],9,-1019803690),v=u(v,m,l,g,n[e+3],14,-187363961),g=u(g,v,m,l,n[e+8],20,1163531501),l=u(l,g,v,m,n[e+13],5,-1444681467),m=u(m,l,g,v,n[e+2],9,-51403784),v=u(v,m,l,g,n[e+7],14,1735328473),g=u(g,v,m,l,n[e+12],20,-1926607734),l=c(l,g,v,m,n[e+5],4,-378558),m=c(m,l,g,v,n[e+8],11,-2022574463),v=c(v,m,l,g,n[e+11],16,1839030562),g=c(g,v,m,l,n[e+14],23,-35309556),l=c(l,g,v,m,n[e+1],4,-1530992060),m=c(m,l,g,v,n[e+4],11,1272893353),v=c(v,m,l,g,n[e+7],16,-155497632),g=c(g,v,m,l,n[e+10],23,-1094730640),l=c(l,g,v,m,n[e+13],4,681279174),m=c(m,l,g,v,n[e],11,-358537222),v=c(v,m,l,g,n[e+3],16,-722521979),g=c(g,v,m,l,n[e+6],23,76029189),l=c(l,g,v,m,n[e+9],4,-640364487),m=c(m,l,g,v,n[e+12],11,-421815835),v=c(v,m,l,g,n[e+15],16,530742520),g=c(g,v,m,l,n[e+2],23,-995338651),l=f(l,g,v,m,n[e],6,-198630844),m=f(m,l,g,v,n[e+7],10,1126891415),v=f(v,m,l,g,n[e+14],15,-1416354905),g=f(g,v,m,l,n[e+5],21,-57434055),l=f(l,g,v,m,n[e+12],6,1700485571),m=f(m,l,g,v,n[e+3],10,-1894986606),v=f(v,m,l,g,n[e+10],15,-1051523),g=f(g,v,m,l,n[e+1],21,-2054922799),l=f(l,g,v,m,n[e+8],6,1873313359),m=f(m,l,g,v,n[e+15],10,-30611744),v=f(v,m,l,g,n[e+6],15,-1560198380),g=f(g,v,m,l,n[e+13],21,1309151649),l=f(l,g,v,m,n[e+4],6,-145523070),m=f(m,l,g,v,n[e+11],10,-1120210379),v=f(v,m,l,g,n[e+2],15,718787259),g=f(g,v,m,l,n[e+9],21,-343485551),l=t(l,i),g=t(g,a),v=t(v,h),m=t(m,d);return[l,g,v,m]}function a(n){var t,r="",e=32*n.length;for(t=0;t<e;t+=8)r+=String.fromCharCode(n[t>>5]>>>t%32&255);return r}function h(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var e=8*n.length;for(t=0;t<e;t+=8)r[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return r}function d(n){return a(i(h(n),8*n.length))}function l(n,t){var r,e,o=h(n),u=[],c=[];for(u[15]=c[15]=void 0,o.length>16&&(o=i(o,8*n.length)),r=0;r<16;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(h(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="0123456789abcdef",o="";for(r=0;r<n.length;r+=1)t=n.charCodeAt(r),o+=e.charAt(t>>>4&15)+e.charAt(15&t);return o}function v(n){return unescape(encodeURIComponent(n))}function m(n){return d(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this);
-//# sourceMappingURL=md5.min.js.map
+
/* ========================================================================
* Bootstrap: tooltip.js v3.3.6
* http://getbootstrap.com/javascript/#tooltip
@@ -5956,7 +5956,7 @@ dav.Client.prototype = {
*/
!function(e,t){if("function"==typeof define&&define.amd)define(["exports","module"],t);else if("undefined"!=typeof exports&&"undefined"!=typeof module)t(exports,module);else{var n={exports:{}};t(n.exports,n),e.autosize=n.exports}}(this,function(e,t){"use strict";function n(e){function t(){var t=window.getComputedStyle(e,null);"vertical"===t.resize?e.style.resize="none":"both"===t.resize&&(e.style.resize="horizontal"),s="content-box"===t.boxSizing?-(parseFloat(t.paddingTop)+parseFloat(t.paddingBottom)):parseFloat(t.borderTopWidth)+parseFloat(t.borderBottomWidth),isNaN(s)&&(s=0),l()}function n(t){var n=e.style.width;e.style.width="0px",e.offsetWidth,e.style.width=n,e.style.overflowY=t}function o(e){for(var t=[];e&&e.parentNode&&e.parentNode instanceof Element;)e.parentNode.scrollTop&&t.push({node:e.parentNode,scrollTop:e.parentNode.scrollTop}),e=e.parentNode;return t}function r(){var t=e.style.height,n=o(e),r=document.documentElement&&document.documentElement.scrollTop;e.style.height="";var i=e.scrollHeight+s;return 0===e.scrollHeight?void(e.style.height=t):(e.style.height=i+"px",u=e.clientWidth,n.forEach(function(e){e.node.scrollTop=e.scrollTop}),void(r&&(document.documentElement.scrollTop=r)))}function l(){r();var t=Math.round(parseFloat(e.style.height)),o=window.getComputedStyle(e,null),i="content-box"===o.boxSizing?Math.round(parseFloat(o.height)):e.offsetHeight;if(i!==t?"hidden"===o.overflowY&&(n("scroll"),r(),i="content-box"===o.boxSizing?Math.round(parseFloat(window.getComputedStyle(e,null).height)):e.offsetHeight):"hidden"!==o.overflowY&&(n("hidden"),r(),i="content-box"===o.boxSizing?Math.round(parseFloat(window.getComputedStyle(e,null).height)):e.offsetHeight),a!==i){a=i;var l=d("autosize:resized");try{e.dispatchEvent(l)}catch(e){}}}if(e&&e.nodeName&&"TEXTAREA"===e.nodeName&&!i.has(e)){var s=null,u=e.clientWidth,a=null,c=function(){e.clientWidth!==u&&l()},p=function(t){window.removeEventListener("resize",c,!1),e.removeEventListener("input",l,!1),e.removeEventListener("keyup",l,!1),e.removeEventListener("autosize:destroy",p,!1),e.removeEventListener("autosize:update",l,!1),Object.keys(t).forEach(function(n){e.style[n]=t[n]}),i.delete(e)}.bind(e,{height:e.style.height,resize:e.style.resize,overflowY:e.style.overflowY,overflowX:e.style.overflowX,wordWrap:e.style.wordWrap});e.addEventListener("autosize:destroy",p,!1),"onpropertychange"in e&&"oninput"in e&&e.addEventListener("keyup",l,!1),window.addEventListener("resize",c,!1),e.addEventListener("input",l,!1),e.addEventListener("autosize:update",l,!1),e.style.overflowX="hidden",e.style.wordWrap="break-word",i.set(e,{destroy:p,update:l}),t()}}function o(e){var t=i.get(e);t&&t.destroy()}function r(e){var t=i.get(e);t&&t.update()}var i="function"==typeof Map?new Map:function(){var e=[],t=[];return{has:function(t){return e.indexOf(t)>-1},get:function(n){return t[e.indexOf(n)]},set:function(n,o){e.indexOf(n)===-1&&(e.push(n),t.push(o))},delete:function(n){var o=e.indexOf(n);o>-1&&(e.splice(o,1),t.splice(o,1))}}}(),d=function(e){return new Event(e,{bubbles:!0})};try{new Event("test")}catch(e){d=function(e){var t=document.createEvent("Event");return t.initEvent(e,!0,!1),t}}var l=null;"undefined"==typeof window||"function"!=typeof window.getComputedStyle?(l=function(e){return e},l.destroy=function(e){return e},l.update=function(e){return e}):(l=function(e,t){return e&&Array.prototype.forEach.call(e.length?e:[e],function(e){return n(e,t)}),e},l.destroy=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],o),e},l.update=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],r),e}),t.exports=l});
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.DOMPurify=t()}(this,function(){"use strict";function e(e,t){for(var n=t.length;n--;)"string"==typeof t[n]&&(t[n]=t[n].toLowerCase()),e[t[n]]=!0;return e}function t(e){var t={},n=void 0;for(n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}function o(){return Function("return this")()}function r(){var h=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o(),g=function(e){return r(e)};if(g.version="1.0.0",g.removed=[],!h||!h.document||9!==h.document.nodeType)return g.isSupported=!1,g;var y=h.document,v=!1,b=!1,T=h.document,A=h.DocumentFragment,x=h.HTMLTemplateElement,S=h.Node,k=h.NodeFilter,E=h.NamedNodeMap,w=void 0===E?h.NamedNodeMap||h.MozNamedAttrMap:E,O=h.Text,M=h.Comment,N=h.DOMParser,L=h.XMLHttpRequest,D=void 0===L?h.XMLHttpRequest:L,_=h.encodeURI,R=void 0===_?h.encodeURI:_;if("function"==typeof x){var C=T.createElement("template");C.content&&C.content.ownerDocument&&(T=C.content.ownerDocument)}var F=T,z=F.implementation,H=F.createNodeIterator,I=F.getElementsByTagName,j=F.createDocumentFragment,U=y.importNode,q={};g.isSupported=z&&void 0!==z.createHTMLDocument&&9!==T.documentMode;var W=null,B=e({},[].concat(n(i),n(a),n(l),n(s),n(c))),G=null,P=e({},[].concat(n(d),n(u),n(m),n(f))),V=null,X=null,Y=!0,K=!0,$=!1,J=!1,Q=!1,Z=/\{\{[\s\S]*|[\s\S]*\}\}/gm,ee=/<%[\s\S]*|[\s\S]*%>/gm,te=!1,ne=!1,oe=!1,re=!1,ie=!1,ae=!1,le=!0,se=!0,ce={},de=e({},["audio","head","math","script","style","template","svg","video"]),ue=e({},["audio","video","img","source","image"]),me=e({},["alt","class","for","id","label","name","pattern","placeholder","summary","title","value","style","xmlns"]),fe=null,pe=T.createElement("form"),he=function(o){"object"!==(void 0===o?"undefined":p(o))&&(o={}),W="ALLOWED_TAGS"in o?e({},o.ALLOWED_TAGS):B,G="ALLOWED_ATTR"in o?e({},o.ALLOWED_ATTR):P,V="FORBID_TAGS"in o?e({},o.FORBID_TAGS):{},X="FORBID_ATTR"in o?e({},o.FORBID_ATTR):{},ce="USE_PROFILES"in o&&o.USE_PROFILES,Y=!1!==o.ALLOW_ARIA_ATTR,K=!1!==o.ALLOW_DATA_ATTR,$=o.ALLOW_UNKNOWN_PROTOCOLS||!1,J=o.SAFE_FOR_JQUERY||!1,Q=o.SAFE_FOR_TEMPLATES||!1,te=o.WHOLE_DOCUMENT||!1,re=o.RETURN_DOM||!1,ie=o.RETURN_DOM_FRAGMENT||!1,ae=o.RETURN_DOM_IMPORT||!1,oe=o.FORCE_BODY||!1,le=!1!==o.SANITIZE_DOM,se=!1!==o.KEEP_CONTENT,Q&&(K=!1),ie&&(re=!0),ce&&(W=e({},[].concat(n(c))),G=[],!0===ce.html&&(e(W,i),e(G,d)),!0===ce.svg&&(e(W,a),e(G,u),e(G,f)),!0===ce.svgFilters&&(e(W,l),e(G,u),e(G,f)),!0===ce.mathMl&&(e(W,s),e(G,m),e(G,f))),o.ADD_TAGS&&(W===B&&(W=t(W)),e(W,o.ADD_TAGS)),o.ADD_ATTR&&(G===P&&(G=t(G)),e(G,o.ADD_ATTR)),o.ADD_URI_SAFE_ATTR&&e(me,o.ADD_URI_SAFE_ATTR),se&&(W["#text"]=!0),Object&&"freeze"in Object&&Object.freeze(o),fe=o},ge=function(e){g.removed.push({element:e});try{e.parentNode.removeChild(e)}catch(t){e.outerHTML=""}},ye=function(e,t){g.removed.push({attribute:t.getAttributeNode(e),from:t}),t.removeAttribute(e)},ve=function(e){var t=void 0,n=void 0;if(oe&&(e="<remove></remove>"+e),b){try{e=R(e)}catch(e){}var o=new D;o.responseType="document",o.open("GET","data:text/html;charset=utf-8,"+e,!1),o.send(null),t=o.response}if(v)try{t=(new N).parseFromString(e,"text/html")}catch(e){}return t&&t.documentElement||((n=(t=z.createHTMLDocument("")).body).parentNode.removeChild(n.parentNode.firstElementChild),n.outerHTML=e),I.call(t,te?"html":"body")[0]};g.isSupported&&function(){var e=ve('<svg><g onload="this.parentNode.remove()"></g></svg>');e.querySelector("svg")||(b=!0);try{(e=ve('<svg><p><style><img src="</style><img src=x onerror=alert(1)//">')).querySelector("svg img")&&(v=!0)}catch(e){}}();var be=function(e){return H.call(e.ownerDocument||e,e,k.SHOW_ELEMENT|k.SHOW_COMMENT|k.SHOW_TEXT,function(){return k.FILTER_ACCEPT},!1)},Te=function(e){return!(e instanceof O||e instanceof M)&&!("string"==typeof e.nodeName&&"string"==typeof e.textContent&&"function"==typeof e.removeChild&&e.attributes instanceof w&&"function"==typeof e.removeAttribute&&"function"==typeof e.setAttribute)},Ae=function(e){return"object"===(void 0===S?"undefined":p(S))?e instanceof S:e&&"object"===(void 0===e?"undefined":p(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},xe=function(e,t,n){q[e]&&q[e].forEach(function(e){e.call(g,t,n,fe)})},Se=function(e){var t=void 0;if(xe("beforeSanitizeElements",e,null),Te(e))return ge(e),!0;var n=e.nodeName.toLowerCase();if(xe("uponSanitizeElement",e,{tagName:n,allowedTags:W}),!W[n]||V[n]){if(se&&!de[n]&&"function"==typeof e.insertAdjacentHTML)try{e.insertAdjacentHTML("AfterEnd",e.innerHTML)}catch(e){}return ge(e),!0}return!J||e.firstElementChild||e.content&&e.content.firstElementChild||!/</g.test(e.textContent)||(g.removed.push({element:e.cloneNode()}),e.innerHTML=e.textContent.replace(/</g,"&lt;")),Q&&3===e.nodeType&&(t=(t=(t=e.textContent).replace(Z," ")).replace(ee," "),e.textContent!==t&&(g.removed.push({element:e.cloneNode()}),e.textContent=t)),xe("afterSanitizeElements",e,null),!1},ke=/^data-[\-\w.\u00B7-\uFFFF]/,Ee=/^aria-[\-\w]+$/,we=/^(?:(?:(?:f|ht)tps?|mailto|tel):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,Oe=/^(?:\w+script|data):/i,Me=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,Ne=function(e){var t=void 0,n=void 0,o=void 0,r=void 0,i=void 0,a=void 0,l=void 0;if(xe("beforeSanitizeAttributes",e,null),a=e.attributes){var s={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:G};for(l=a.length;l--;){if(t=a[l],n=t.name,o=t.value.trim(),r=n.toLowerCase(),s.attrName=r,s.attrValue=o,s.keepAttr=!0,xe("uponSanitizeAttribute",e,s),o=s.attrValue,"name"===r&&"IMG"===e.nodeName&&a.id)i=a.id,a=Array.prototype.slice.apply(a),ye("id",e),ye(n,e),a.indexOf(i)>l&&e.setAttribute("id",i.value);else{if("INPUT"===e.nodeName&&"type"===r&&"file"===o&&(G[r]||!X[r]))continue;"id"===n&&e.setAttribute(n,""),ye(n,e)}if(s.keepAttr&&(!le||"id"!==r&&"name"!==r||!(o in h||o in T||o in pe))){if(Q&&(o=(o=o.replace(Z," ")).replace(ee," ")),K&&ke.test(r));else if(Y&&Ee.test(r));else{if(!G[r]||X[r])continue;if(me[r]);else if(we.test(o.replace(Me,"")));else if("src"!==r&&"xlink:href"!==r||0!==o.indexOf("data:")||!ue[e.nodeName.toLowerCase()]){if($&&!Oe.test(o.replace(Me,"")));else if(o)continue}else;}try{e.setAttribute(n,o),g.removed.pop()}catch(e){}}}xe("afterSanitizeAttributes",e,null)}},Le=function e(t){var n=void 0,o=be(t);for(xe("beforeSanitizeShadowDOM",t,null);n=o.nextNode();)xe("uponSanitizeShadowNode",n,null),Se(n)||(n.content instanceof A&&e(n.content),Ne(n));xe("afterSanitizeShadowDOM",t,null)};return g.sanitize=function(e,t){var n=void 0,o=void 0,r=void 0,i=void 0,a=void 0;if(e||(e="\x3c!--\x3e"),"string"!=typeof e&&!Ae(e)){if("function"!=typeof e.toString)throw new TypeError("toString is not a function");e=e.toString()}if(!g.isSupported){if("object"===p(h.toStaticHTML)||"function"==typeof h.toStaticHTML){if("string"==typeof e)return h.toStaticHTML(e);if(Ae(e))return h.toStaticHTML(e.outerHTML)}return e}if(ne||he(t),g.removed=[],e instanceof S)1===(o=(n=ve("\x3c!--\x3e")).ownerDocument.importNode(e,!0)).nodeType&&"BODY"===o.nodeName?n=o:n.appendChild(o);else{if(!re&&!te&&-1===e.indexOf("<"))return e;if(!(n=ve(e)))return re?null:""}oe&&ge(n.firstChild);for(var l=be(n);r=l.nextNode();)3===r.nodeType&&r===i||Se(r)||(r.content instanceof A&&Le(r.content),Ne(r),i=r);if(re){if(ie)for(a=j.call(n.ownerDocument);n.firstChild;)a.appendChild(n.firstChild);else a=n;return ae&&(a=U.call(y,a,!0)),a}return te?n.outerHTML:n.innerHTML},g.setConfig=function(e){he(e),ne=!0},g.clearConfig=function(){fe=null,ne=!1},g.addHook=function(e,t){"function"==typeof t&&(q[e]=q[e]||[],q[e].push(t))},g.removeHook=function(e){q[e]&&q[e].pop()},g.removeHooks=function(e){q[e]&&(q[e]=[])},g.removeAllHooks=function(){q={}},g}var i=["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"],a=["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","audio","canvas","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","video","view","vkern"],l=["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence"],s=["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmuliscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mpspace","msqrt","mystyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"],c=["#text"],d=["accept","action","align","alt","autocomplete","background","bgcolor","border","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","coords","datetime","default","dir","disabled","download","enctype","face","for","headers","height","hidden","high","href","hreflang","id","ismap","label","lang","list","loop","low","max","maxlength","media","method","min","multiple","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","span","srclang","start","src","step","style","summary","tabindex","title","type","usemap","valign","value","width","xmlns"],u=["accent-height","accumulate","additivive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","tabindex","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"],m=["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"],f=["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"],p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};return r()});
-//# sourceMappingURL=purify.min.js.map
+
/*! Snap.js v2.0.0-rc1 */
(function(win, doc) {
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index 19cb583cc93..bf223204e2b 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -239,6 +239,10 @@ return array(
'OCP\\Lock\\ILockingProvider' => $baseDir . '/lib/public/Lock/ILockingProvider.php',
'OCP\\Lock\\LockedException' => $baseDir . '/lib/public/Lock/LockedException.php',
'OCP\\Lockdown\\ILockdownManager' => $baseDir . '/lib/public/Lockdown/ILockdownManager.php',
+ 'OCP\\Log\\IFileBased' => $baseDir . '/lib/public/Log/IFileBased.php',
+ 'OCP\\Log\\ILogFactory' => $baseDir . '/lib/public/Log/ILogFactory.php',
+ 'OCP\\Log\\IWriter' => $baseDir . '/lib/public/Log/IWriter.php',
+ 'OCP\\Log\\RotationTrait' => $baseDir . '/lib/public/Log/RotationTrait.php',
'OCP\\Mail\\IAttachment' => $baseDir . '/lib/public/Mail/IAttachment.php',
'OCP\\Mail\\IEMailTemplate' => $baseDir . '/lib/public/Mail/IEMailTemplate.php',
'OCP\\Mail\\IMailer' => $baseDir . '/lib/public/Mail/IMailer.php',
@@ -750,6 +754,7 @@ return array(
'OC\\Log\\Errorlog' => $baseDir . '/lib/private/Log/Errorlog.php',
'OC\\Log\\ExceptionSerializer' => $baseDir . '/lib/private/Log/ExceptionSerializer.php',
'OC\\Log\\File' => $baseDir . '/lib/private/Log/File.php',
+ 'OC\\Log\\LogFactory' => $baseDir . '/lib/private/Log/LogFactory.php',
'OC\\Log\\Rotate' => $baseDir . '/lib/private/Log/Rotate.php',
'OC\\Log\\Syslog' => $baseDir . '/lib/private/Log/Syslog.php',
'OC\\Mail\\Attachment' => $baseDir . '/lib/private/Mail/Attachment.php',
@@ -887,8 +892,9 @@ return array(
'OC\\Settings\\Activity\\SecurityProvider' => $baseDir . '/settings/Activity/SecurityProvider.php',
'OC\\Settings\\Activity\\SecuritySetting' => $baseDir . '/settings/Activity/SecuritySetting.php',
'OC\\Settings\\Activity\\Setting' => $baseDir . '/settings/Activity/Setting.php',
- 'OC\\Settings\\Admin\\Additional' => $baseDir . '/lib/private/Settings/Admin/Additional.php',
'OC\\Settings\\Admin\\Encryption' => $baseDir . '/lib/private/Settings/Admin/Encryption.php',
+ 'OC\\Settings\\Admin\\Mail' => $baseDir . '/lib/private/Settings/Admin/Mail.php',
+ 'OC\\Settings\\Admin\\Overview' => $baseDir . '/lib/private/Settings/Admin/Overview.php',
'OC\\Settings\\Admin\\Server' => $baseDir . '/lib/private/Settings/Admin/Server.php',
'OC\\Settings\\Admin\\ServerDevNotice' => $baseDir . '/lib/private/Settings/Admin/ServerDevNotice.php',
'OC\\Settings\\Admin\\Sharing' => $baseDir . '/lib/private/Settings/Admin/Sharing.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index a913b0498b9..cb723ef70ee 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -269,6 +269,10 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\Lock\\ILockingProvider' => __DIR__ . '/../../..' . '/lib/public/Lock/ILockingProvider.php',
'OCP\\Lock\\LockedException' => __DIR__ . '/../../..' . '/lib/public/Lock/LockedException.php',
'OCP\\Lockdown\\ILockdownManager' => __DIR__ . '/../../..' . '/lib/public/Lockdown/ILockdownManager.php',
+ 'OCP\\Log\\IFileBased' => __DIR__ . '/../../..' . '/lib/public/Log/IFileBased.php',
+ 'OCP\\Log\\ILogFactory' => __DIR__ . '/../../..' . '/lib/public/Log/ILogFactory.php',
+ 'OCP\\Log\\IWriter' => __DIR__ . '/../../..' . '/lib/public/Log/IWriter.php',
+ 'OCP\\Log\\RotationTrait' => __DIR__ . '/../../..' . '/lib/public/Log/RotationTrait.php',
'OCP\\Mail\\IAttachment' => __DIR__ . '/../../..' . '/lib/public/Mail/IAttachment.php',
'OCP\\Mail\\IEMailTemplate' => __DIR__ . '/../../..' . '/lib/public/Mail/IEMailTemplate.php',
'OCP\\Mail\\IMailer' => __DIR__ . '/../../..' . '/lib/public/Mail/IMailer.php',
@@ -780,6 +784,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Log\\Errorlog' => __DIR__ . '/../../..' . '/lib/private/Log/Errorlog.php',
'OC\\Log\\ExceptionSerializer' => __DIR__ . '/../../..' . '/lib/private/Log/ExceptionSerializer.php',
'OC\\Log\\File' => __DIR__ . '/../../..' . '/lib/private/Log/File.php',
+ 'OC\\Log\\LogFactory' => __DIR__ . '/../../..' . '/lib/private/Log/LogFactory.php',
'OC\\Log\\Rotate' => __DIR__ . '/../../..' . '/lib/private/Log/Rotate.php',
'OC\\Log\\Syslog' => __DIR__ . '/../../..' . '/lib/private/Log/Syslog.php',
'OC\\Mail\\Attachment' => __DIR__ . '/../../..' . '/lib/private/Mail/Attachment.php',
@@ -917,8 +922,9 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Settings\\Activity\\SecurityProvider' => __DIR__ . '/../../..' . '/settings/Activity/SecurityProvider.php',
'OC\\Settings\\Activity\\SecuritySetting' => __DIR__ . '/../../..' . '/settings/Activity/SecuritySetting.php',
'OC\\Settings\\Activity\\Setting' => __DIR__ . '/../../..' . '/settings/Activity/Setting.php',
- 'OC\\Settings\\Admin\\Additional' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Additional.php',
'OC\\Settings\\Admin\\Encryption' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Encryption.php',
+ 'OC\\Settings\\Admin\\Mail' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Mail.php',
+ 'OC\\Settings\\Admin\\Overview' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Overview.php',
'OC\\Settings\\Admin\\Server' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Server.php',
'OC\\Settings\\Admin\\ServerDevNotice' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/ServerDevNotice.php',
'OC\\Settings\\Admin\\Sharing' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Sharing.php',
diff --git a/lib/private/Files/Storage/Common.php b/lib/private/Files/Storage/Common.php
index 0d0f1da2594..b6c82f3a1df 100644
--- a/lib/private/Files/Storage/Common.php
+++ b/lib/private/Files/Storage/Common.php
@@ -776,9 +776,7 @@ abstract class Common implements Storage, ILockingStorage {
try {
$provider->changeLock('files/' . md5($this->getId() . '::' . trim($path, '/')), $type);
} catch (LockedException $e) {
- if ($logger) {
- $logger->logException($e);
- }
+ \OC::$server->getLogger()->logException($e);
throw $e;
}
}
diff --git a/lib/private/Files/Storage/Wrapper/Quota.php b/lib/private/Files/Storage/Wrapper/Quota.php
index 22338f9c3cc..a7d5f3101fe 100644
--- a/lib/private/Files/Storage/Wrapper/Quota.php
+++ b/lib/private/Files/Storage/Wrapper/Quota.php
@@ -46,7 +46,7 @@ class Quota extends Wrapper {
* @param array $parameters
*/
public function __construct($parameters) {
- $this->storage = $parameters['storage'];
+ parent::__construct($parameters);
$this->quota = $parameters['quota'];
$this->sizeRoot = isset($parameters['root']) ? $parameters['root'] : '';
}
@@ -83,7 +83,7 @@ class Quota extends Wrapper {
* @return int
*/
public function free_space($path) {
- if ($this->quota < 0) {
+ if ($this->quota < 0 || strpos($path, 'cache') === 0) {
return $this->storage->free_space($path);
} else {
$used = $this->getSize($this->sizeRoot);
@@ -111,7 +111,7 @@ class Quota extends Wrapper {
* @return bool
*/
public function file_put_contents($path, $data) {
- $free = $this->free_space('');
+ $free = $this->free_space($path);
if ($free < 0 or strlen($data) < $free) {
return $this->storage->file_put_contents($path, $data);
} else {
@@ -127,7 +127,7 @@ class Quota extends Wrapper {
* @return bool
*/
public function copy($source, $target) {
- $free = $this->free_space('');
+ $free = $this->free_space($target);
if ($free < 0 or $this->getSize($source) < $free) {
return $this->storage->copy($source, $target);
} else {
@@ -147,7 +147,7 @@ class Quota extends Wrapper {
// don't apply quota for part files
if (!$this->isPartFile($path)) {
- $free = $this->free_space('');
+ $free = $this->free_space($path);
if ($source && $free >= 0 && $mode !== 'r' && $mode !== 'rb') {
// only apply quota for files, not metadata, trash or others
if (strpos(ltrim($path, '/'), 'files/') === 0) {
@@ -178,7 +178,7 @@ class Quota extends Wrapper {
* @return bool
*/
public function copyFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath) {
- $free = $this->free_space('');
+ $free = $this->free_space($targetInternalPath);
if ($free < 0 or $this->getSize($sourceInternalPath, $sourceStorage) < $free) {
return $this->storage->copyFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath);
} else {
@@ -193,11 +193,19 @@ class Quota extends Wrapper {
* @return bool
*/
public function moveFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath) {
- $free = $this->free_space('');
+ $free = $this->free_space($targetInternalPath);
if ($free < 0 or $this->getSize($sourceInternalPath, $sourceStorage) < $free) {
return $this->storage->moveFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath);
} else {
return false;
}
}
+
+ public function mkdir($path) {
+ if ($this->quota === 0.0) {
+ return false;
+ }
+
+ return parent::mkdir($path);
+ }
}
diff --git a/lib/private/Files/Stream/Encryption.php b/lib/private/Files/Stream/Encryption.php
index 05be5a5b286..65d379c0289 100644
--- a/lib/private/Files/Stream/Encryption.php
+++ b/lib/private/Files/Stream/Encryption.php
@@ -195,10 +195,10 @@ class Encryption extends Wrapper {
protected static function wrapSource($source, $context, $protocol, $class, $mode = 'r+') {
try {
stream_wrapper_register($protocol, $class);
- if (@rewinddir($source) === false) {
- $wrapped = fopen($protocol . '://', $mode, false, $context);
- } else {
+ if (self::isDirectoryHandle($source)) {
$wrapped = opendir($protocol . '://', $context);
+ } else {
+ $wrapped = fopen($protocol . '://', $mode, false, $context);
}
} catch (\BadMethodCallException $e) {
stream_wrapper_unregister($protocol);
diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php
index a149cdf0af5..bfc831af41c 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -1316,15 +1316,13 @@ class View {
try {
// if the file is not in the cache or needs to be updated, trigger the scanner and reload the data
if (!$data || $data['size'] === -1) {
- $this->lockFile($relativePath, ILockingProvider::LOCK_SHARED);
if (!$storage->file_exists($internalPath)) {
- $this->unlockFile($relativePath, ILockingProvider::LOCK_SHARED);
return false;
}
+ // don't need to get a lock here since the scanner does it's own locking
$scanner = $storage->getScanner($internalPath);
$scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW);
$data = $cache->get($internalPath);
- $this->unlockFile($relativePath, ILockingProvider::LOCK_SHARED);
} else if (!Cache\Scanner::isPartialFile($internalPath) && $watcher->needsUpdate($internalPath, $data)) {
$this->lockFile($relativePath, ILockingProvider::LOCK_SHARED);
$watcher->update($internalPath, $data);
@@ -1361,6 +1359,7 @@ class View {
$mount = Filesystem::getMountManager()->find($path);
if (!$mount) {
+ \OC::$server->getLogger()->warning('Mountpoint not found for path: ' . $path);
return false;
}
$storage = $mount->getStorage();
@@ -1369,6 +1368,7 @@ class View {
$data = $this->getCacheEntry($storage, $internalPath, $relativePath);
if (!$data instanceof ICacheEntry) {
+ \OC::$server->getLogger()->debug('No cache entry found for ' . $path . ' (storage: ' . $storage->getId() . ', internalPath: ' . $internalPath . ')');
return false;
}
@@ -1392,6 +1392,8 @@ class View {
}
return $info;
+ } else {
+ \OC::$server->getLogger()->warning('Storage not valid for mountpoint: ' . $mount->getMountPoint());
}
return false;
diff --git a/lib/private/Lock/MemcacheLockingProvider.php b/lib/private/Lock/MemcacheLockingProvider.php
index 70ad972b46d..55a82b22781 100644
--- a/lib/private/Lock/MemcacheLockingProvider.php
+++ b/lib/private/Lock/MemcacheLockingProvider.php
@@ -72,12 +72,12 @@ class MemcacheLockingProvider extends AbstractLockingProvider {
public function acquireLock(string $path, int $type) {
if ($type === self::LOCK_SHARED) {
if (!$this->memcache->inc($path)) {
- throw new LockedException($path);
+ throw new LockedException($path, null, $this->getExistingLockForException($path));
}
} else {
$this->memcache->add($path, 0);
if (!$this->memcache->cas($path, 0, 'exclusive')) {
- throw new LockedException($path);
+ throw new LockedException($path, null, $this->getExistingLockForException($path));
}
}
$this->setTTL($path);
@@ -115,15 +115,26 @@ class MemcacheLockingProvider extends AbstractLockingProvider {
public function changeLock(string $path, int $targetType) {
if ($targetType === self::LOCK_SHARED) {
if (!$this->memcache->cas($path, 'exclusive', 1)) {
- throw new LockedException($path);
+ throw new LockedException($path, null, $this->getExistingLockForException($path));
}
} else if ($targetType === self::LOCK_EXCLUSIVE) {
// we can only change a shared lock to an exclusive if there's only a single owner of the shared lock
if (!$this->memcache->cas($path, 1, 'exclusive')) {
- throw new LockedException($path);
+ throw new LockedException($path, null, $this->getExistingLockForException($path));
}
}
$this->setTTL($path);
$this->markChange($path, $targetType);
}
+
+ private function getExistingLockForException($path) {
+ $existing = $this->memcache->get($path);
+ if (!$existing) {
+ return 'none';
+ } else if ($existing === 'exclusive') {
+ return $existing;
+ } else {
+ return $existing . ' shared locks';
+ }
+ }
}
diff --git a/lib/private/Log.php b/lib/private/Log.php
index ffe8c665c6f..69705c49e87 100644
--- a/lib/private/Log.php
+++ b/lib/private/Log.php
@@ -38,7 +38,8 @@ namespace OC;
use InterfaSys\LogNormalizer\Normalizer;
use OC\Log\ExceptionSerializer;
-use OC\Log\File;
+use OCP\Log\IFileBased;
+use OCP\Log\IWriter;
use OCP\ILogger;
use OCP\Support\CrashReport\IRegistry;
use OCP\Util;
@@ -54,7 +55,7 @@ use OCP\Util;
*/
class Log implements ILogger {
- /** @var string */
+ /** @var IWriter */
private $logger;
/** @var SystemConfig */
@@ -70,27 +71,19 @@ class Log implements ILogger {
private $crashReporters;
/**
- * @param string $logger The logger that should be used
+ * @param IWriter $logger The logger that should be used
* @param SystemConfig $config the system config object
* @param Normalizer|null $normalizer
* @param IRegistry|null $registry
*/
- public function __construct($logger = null, SystemConfig $config = null, $normalizer = null, IRegistry $registry = null) {
+ public function __construct(IWriter $logger, SystemConfig $config = null, $normalizer = null, IRegistry $registry = null) {
// FIXME: Add this for backwards compatibility, should be fixed at some point probably
if ($config === null) {
$config = \OC::$server->getSystemConfig();
}
$this->config = $config;
-
- // FIXME: Add this for backwards compatibility, should be fixed at some point probably
- if ($logger === null) {
- $logType = $this->config->getValue('log_type', 'file');
- $this->logger = static::getLogClass($logType);
- call_user_func([$this->logger, 'init']);
- } else {
- $this->logger = $logger;
- }
+ $this->logger = $logger;
if ($normalizer === null) {
$this->normalizer = new Normalizer();
} else {
@@ -302,7 +295,7 @@ class Log implements ILogger {
array_walk($context, [$this->normalizer, 'format']);
if ($level >= $minLevel) {
- if ($this->logger !== File::class) {
+ if (!$this->logger instanceof IFileBased) {
$data = json_encode($data, JSON_PARTIAL_OUTPUT_ON_ERROR);
}
$this->writeLog($app, $data, $level);
@@ -320,28 +313,13 @@ class Log implements ILogger {
* @param int $level
*/
protected function writeLog(string $app, $entry, int $level) {
- call_user_func([$this->logger, 'write'], $app, $entry, $level);
+ $this->logger->write($app, $entry, $level);
}
- /**
- * @param string $logType
- * @return string
- * @internal
- */
- public static function getLogClass(string $logType): string {
- switch (strtolower($logType)) {
- case 'errorlog':
- return \OC\Log\Errorlog::class;
- case 'syslog':
- return \OC\Log\Syslog::class;
- case 'file':
- return \OC\Log\File::class;
-
- // Backwards compatibility for old and fallback for unknown log types
- case 'owncloud':
- case 'nextcloud':
- default:
- return \OC\Log\File::class;
+ public function getLogPath():string {
+ if($this->logger instanceof IFileBased) {
+ return $this->logger->getLogFilePath();
}
+ throw new \RuntimeException('Log implementation has no path');
}
}
diff --git a/lib/private/Log/Errorlog.php b/lib/private/Log/Errorlog.php
index 37498c36aba..9dc8b2cc49c 100644
--- a/lib/private/Log/Errorlog.php
+++ b/lib/private/Log/Errorlog.php
@@ -25,14 +25,9 @@
namespace OC\Log;
-class Errorlog {
+use OCP\Log\IWriter;
-
- /**
- * Init class data
- */
- public static function init() {
- }
+class Errorlog implements IWriter {
/**
* write a message in the log
@@ -40,7 +35,7 @@ class Errorlog {
* @param string $message
* @param int $level
*/
- public static function write($app, $message, $level) {
+ public function write(string $app, $message, int $level) {
error_log('[owncloud]['.$app.']['.$level.'] '.$message);
}
}
diff --git a/lib/private/Log/File.php b/lib/private/Log/File.php
index 755c4729c7a..597cb54e402 100644
--- a/lib/private/Log/File.php
+++ b/lib/private/Log/File.php
@@ -36,7 +36,9 @@
*/
namespace OC\Log;
-
+use OC\SystemConfig;
+use OCP\Log\IFileBased;
+use OCP\Log\IWriter;
use OCP\ILogger;
/**
@@ -45,30 +47,26 @@ use OCP\ILogger;
* Log is saved at data/nextcloud.log (on default)
*/
-class File {
- static protected $logFile;
-
- /**
- * Init class data
- */
- public static function init() {
- $systemConfig = \OC::$server->getSystemConfig();
- $defaultLogFile = $systemConfig->getValue("datadirectory", \OC::$SERVERROOT.'/data').'/nextcloud.log';
- self::$logFile = $systemConfig->getValue("logfile", $defaultLogFile);
+class File implements IWriter, IFileBased {
+ /** @var string */
+ protected $logFile;
+ /** @var SystemConfig */
+ private $config;
- /**
- * Fall back to default log file if specified logfile does not exist
- * and can not be created.
- */
- if (!file_exists(self::$logFile)) {
- if(!is_writable(dirname(self::$logFile))) {
- self::$logFile = $defaultLogFile;
- } else {
- if(!touch(self::$logFile)) {
- self::$logFile = $defaultLogFile;
- }
+ public function __construct(string $path, string $fallbackPath = '', SystemConfig $config) {
+ $this->logFile = $path;
+ if (!file_exists($this->logFile)) {
+ if(
+ (
+ !is_writable(dirname($this->logFile))
+ || !touch($this->logFile)
+ )
+ && $fallbackPath !== ''
+ ) {
+ $this->logFile = $fallbackPath;
}
}
+ $this->config = $config;
}
/**
@@ -77,12 +75,10 @@ class File {
* @param string|array $message
* @param int $level
*/
- public static function write($app, $message, $level) {
- $config = \OC::$server->getSystemConfig();
-
+ public function write(string $app, $message, int $level) {
// default to ISO8601
- $format = $config->getValue('logdateformat', \DateTime::ATOM);
- $logTimeZone = $config->getValue('logtimezone', 'UTC');
+ $format = $this->config->getValue('logdateformat', \DateTime::ATOM);
+ $logTimeZone = $this->config->getValue('logtimezone', 'UTC');
try {
$timezone = new \DateTimeZone($logTimeZone);
} catch (\Exception $e) {
@@ -102,7 +98,7 @@ class File {
$time = $time->format($format);
$url = ($request->getRequestUri() !== '') ? $request->getRequestUri() : '--';
$method = is_string($request->getMethod()) ? $request->getMethod() : '--';
- if($config->getValue('installed', false)) {
+ if($this->config->getValue('installed', false)) {
$user = \OC_User::getUser() ? \OC_User::getUser() : '--';
} else {
$user = '--';
@@ -111,7 +107,7 @@ class File {
if ($userAgent === '') {
$userAgent = '--';
}
- $version = $config->getValue('version', '');
+ $version = $this->config->getValue('version', '');
$entry = compact(
'reqId',
'level',
@@ -137,9 +133,9 @@ class File {
}
}
$entry = json_encode($entry, JSON_PARTIAL_OUTPUT_ON_ERROR);
- $handle = @fopen(self::$logFile, 'a');
- if ((fileperms(self::$logFile) & 0777) != 0640) {
- @chmod(self::$logFile, 0640);
+ $handle = @fopen($this->logFile, 'a');
+ if ((fileperms($this->logFile) & 0777) != 0640) {
+ @chmod($this->logFile, 0640);
}
if ($handle) {
fwrite($handle, $entry."\n");
@@ -159,11 +155,10 @@ class File {
* @param int $offset
* @return array
*/
- public static function getEntries($limit=50, $offset=0) {
- self::init();
- $minLevel = \OC::$server->getSystemConfig()->getValue("loglevel", ILogger::WARN);
+ public function getEntries(int $limit=50, int $offset=0):array {
+ $minLevel = $this->config->getValue("loglevel", ILogger::WARN);
$entries = array();
- $handle = @fopen(self::$logFile, 'rb');
+ $handle = @fopen($this->logFile, 'rb');
if ($handle) {
fseek($handle, 0, SEEK_END);
$pos = ftell($handle);
@@ -205,7 +200,7 @@ class File {
/**
* @return string
*/
- public static function getLogFilePath() {
- return self::$logFile;
+ public function getLogFilePath():string {
+ return $this->logFile;
}
}
diff --git a/lib/private/Log/LogFactory.php b/lib/private/Log/LogFactory.php
new file mode 100644
index 00000000000..9b9d12abfa8
--- /dev/null
+++ b/lib/private/Log/LogFactory.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * @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\Log;
+
+use OC\Log;
+use OC\SystemConfig;
+use OCP\ILogger;
+use OCP\IServerContainer;
+use OCP\Log\ILogFactory;
+use OCP\Log\IWriter;
+
+class LogFactory implements ILogFactory {
+ /** @var IServerContainer */
+ private $c;
+ /** @var SystemConfig */
+ private $systemConfig;
+
+ public function __construct(IServerContainer $c, SystemConfig $systemConfig) {
+ $this->c = $c;
+ $this->systemConfig = $systemConfig;
+ }
+
+ /**
+ * @throws \OCP\AppFramework\QueryException
+ */
+ public function get(string $type):IWriter {
+ switch (strtolower($type)) {
+ case 'errorlog':
+ return new Errorlog();
+ case 'syslog':
+ return $this->c->resolve(Syslog::class);
+ case 'file':
+ return $this->buildLogFile();
+
+ // Backwards compatibility for old and fallback for unknown log types
+ case 'owncloud':
+ case 'nextcloud':
+ default:
+ return $this->buildLogFile();
+ }
+ }
+
+ public function getCustomLogger(string $path):ILogger {
+ $log = $this->buildLogFile($path);
+ return new Log($log, $this->systemConfig);
+ }
+
+ protected function buildLogFile(string $logFile = ''):File {
+ $defaultLogFile = $this->systemConfig->getValue('datadirectory', \OC::$SERVERROOT.'/data').'/nextcloud.log';
+ if($logFile === '') {
+ $logFile = $this->systemConfig->getValue('logfile', $defaultLogFile);
+ }
+ $fallback = $defaultLogFile !== $logFile ? $defaultLogFile : '';
+
+ return new File($logFile, $fallback, $this->systemConfig);
+ }
+}
diff --git a/lib/private/Log/Rotate.php b/lib/private/Log/Rotate.php
index 48b96c98a8d..cc41c804ad3 100644
--- a/lib/private/Log/Rotate.php
+++ b/lib/private/Log/Rotate.php
@@ -24,7 +24,7 @@
*/
namespace OC\Log;
-use OCP\ILogger;
+use OCP\Log\RotationTrait;
/**
* This rotates the current logfile to a new name, this way the total log usage
@@ -33,23 +33,17 @@ use OCP\ILogger;
* location and manage that with your own tools.
*/
class Rotate extends \OC\BackgroundJob\Job {
- private $max_log_size;
+ use RotationTrait;
+
public function run($dummy) {
$systemConfig = \OC::$server->getSystemConfig();
- $logFile = $systemConfig->getValue('logfile', $systemConfig->getValue('datadirectory', \OC::$SERVERROOT . '/data') . '/nextcloud.log');
- $this->max_log_size = \OC::$server->getConfig()->getSystemValue('log_rotate_size', 100 * 1024 * 1024);
- if ($this->max_log_size) {
- $filesize = @filesize($logFile);
- if ($filesize >= $this->max_log_size) {
- $this->rotate($logFile);
- }
- }
- }
+ $this->filePath = $systemConfig->getValue('logfile', $systemConfig->getValue('datadirectory', \OC::$SERVERROOT . '/data') . '/nextcloud.log');
- protected function rotate($logfile) {
- $rotatedLogfile = $logfile.'.1';
- rename($logfile, $rotatedLogfile);
- $msg = 'Log file "'.$logfile.'" was over '.$this->max_log_size.' bytes, moved to "'.$rotatedLogfile.'"';
- \OCP\Util::writeLog(Rotate::class, $msg, ILogger::WARN);
+ $this->maxSize = \OC::$server->getConfig()->getSystemValue('log_rotate_size', 100 * 1024 * 1024);
+ if($this->shouldRotateBySize()) {
+ $rotatedFile = $this->rotate();
+ $msg = 'Log file "'.$this->filePath.'" was over '.$this->maxSize.' bytes, moved to "'.$rotatedFile.'"';
+ \OC::$server->getLogger()->warning($msg, ['app' => Rotate::class]);
+ }
}
}
diff --git a/lib/private/Log/Syslog.php b/lib/private/Log/Syslog.php
index 7b3d931ef31..90a20026f0e 100644
--- a/lib/private/Log/Syslog.php
+++ b/lib/private/Log/Syslog.php
@@ -26,23 +26,24 @@
namespace OC\Log;
use OCP\ILogger;
+use OCP\IConfig;
+use OCP\Log\IWriter;
-class Syslog {
- static protected $levels = array(
+class Syslog implements IWriter {
+ protected $levels = [
ILogger::DEBUG => LOG_DEBUG,
ILogger::INFO => LOG_INFO,
ILogger::WARN => LOG_WARNING,
ILogger::ERROR => LOG_ERR,
ILogger::FATAL => LOG_CRIT,
- );
+ ];
- /**
- * Init class data
- */
- public static function init() {
- openlog(\OC::$server->getSystemConfig()->getValue("syslog_tag", "ownCloud"), LOG_PID | LOG_CONS, LOG_USER);
- // Close at shutdown
- register_shutdown_function('closelog');
+ public function __construct(IConfig $config) {
+ openlog($config->getSystemValue('syslog_tag', 'ownCloud'), LOG_PID | LOG_CONS, LOG_USER);
+ }
+
+ public function __destruct() {
+ closelog();
}
/**
@@ -51,8 +52,8 @@ class Syslog {
* @param string $message
* @param int $level
*/
- public static function write($app, $message, $level) {
- $syslog_level = self::$levels[$level];
+ public function write(string $app, $message, int $level) {
+ $syslog_level = $this->levels[$level];
syslog($syslog_level, '{'.$app.'} '.$message);
}
}
diff --git a/lib/private/Server.php b/lib/private/Server.php
index 3786486c2b2..a879c65bb9b 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -87,6 +87,7 @@ use OC\Lock\DBLockingProvider;
use OC\Lock\MemcacheLockingProvider;
use OC\Lock\NoopLockingProvider;
use OC\Lockdown\LockdownManager;
+use OC\Log\LogFactory;
use OC\Mail\Mailer;
use OC\Memcache\ArrayCache;
use OC\Memcache\Factory;
@@ -134,6 +135,7 @@ use OCP\ITempManager;
use OCP\Contacts\ContactsMenu\IActionFactory;
use OCP\IUser;
use OCP\Lock\ILockingProvider;
+use OCP\Log\ILogFactory;
use OCP\Remote\Api\IApiFactory;
use OCP\Remote\IInstanceFactory;
use OCP\RichObjectStrings\IValidator;
@@ -546,15 +548,18 @@ class Server extends ServerContainer implements IServerContainer {
$this->registerService(\OCP\ILogger::class, function (Server $c) {
$logType = $c->query('AllConfig')->getSystemValue('log_type', 'file');
- $logger = Log::getLogClass($logType);
- call_user_func(array($logger, 'init'));
- $config = $this->getSystemConfig();
+ $factory = new LogFactory($c, $this->getSystemConfig());
+ $logger = $factory->get($logType);
$registry = $c->query(\OCP\Support\CrashReport\IRegistry::class);
- return new Log($logger, $config, null, $registry);
+ return new Log($logger, $this->getSystemConfig(), null, $registry);
});
$this->registerAlias('Logger', \OCP\ILogger::class);
+ $this->registerService(ILogFactory::class, function (Server $c) {
+ return new LogFactory($c, $this->getSystemConfig());
+ });
+
$this->registerService(\OCP\BackgroundJob\IJobList::class, function (Server $c) {
$config = $c->getConfig();
return new \OC\BackgroundJob\JobList(
@@ -1529,6 +1534,14 @@ class Server extends ServerContainer implements IServerContainer {
}
/**
+ * @return ILogFactory
+ * @throws \OCP\AppFramework\QueryException
+ */
+ public function getLogFactory() {
+ return $this->query(ILogFactory::class);
+ }
+
+ /**
* Returns a router for generating and matching urls
*
* @return \OCP\Route\IRouter
diff --git a/lib/private/Settings/Admin/Additional.php b/lib/private/Settings/Admin/Mail.php
index 36258573047..74a94a4c7a0 100644
--- a/lib/private/Settings/Admin/Additional.php
+++ b/lib/private/Settings/Admin/Mail.php
@@ -29,7 +29,7 @@ use OCP\AppFramework\Http\TemplateResponse;
use OCP\IConfig;
use OCP\Settings\ISettings;
-class Additional implements ISettings {
+class Mail implements ISettings {
/** @var IConfig */
private $config;
@@ -70,7 +70,7 @@ class Additional implements ISettings {
* @return string the section ID, e.g. 'sharing'
*/
public function getSection() {
- return 'additional';
+ return 'server';
}
/**
@@ -81,6 +81,6 @@ class Additional implements ISettings {
* E.g.: 70
*/
public function getPriority() {
- return 0;
+ return 10;
}
}
diff --git a/lib/private/Settings/Admin/Overview.php b/lib/private/Settings/Admin/Overview.php
new file mode 100644
index 00000000000..6e186dc6f98
--- /dev/null
+++ b/lib/private/Settings/Admin/Overview.php
@@ -0,0 +1,154 @@
+<?php
+/**
+ * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
+ *
+ * @author Julius Härtl <jus@bitgrid.net>
+ *
+ * @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\Settings\Admin;
+
+use Doctrine\DBAL\Connection;
+use Doctrine\DBAL\DBALException;
+use Doctrine\DBAL\Platforms\SqlitePlatform;
+use OC\Lock\DBLockingProvider;
+use OC\Lock\NoopLockingProvider;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\IConfig;
+use OCP\IDBConnection;
+use OCP\IL10N;
+use OCP\IRequest;
+use OCP\Lock\ILockingProvider;
+use OCP\Settings\ISettings;
+
+class Overview implements ISettings {
+ /** @var IDBConnection|Connection */
+ private $db;
+ /** @var IRequest */
+ private $request;
+ /** @var IConfig */
+ private $config;
+ /** @var ILockingProvider */
+ private $lockingProvider;
+ /** @var IL10N */
+ private $l;
+
+ /**
+ * @param IDBConnection $db
+ * @param IRequest $request
+ * @param IConfig $config
+ * @param ILockingProvider $lockingProvider
+ * @param IL10N $l
+ */
+ public function __construct(IDBConnection $db,
+ IRequest $request,
+ IConfig $config,
+ ILockingProvider $lockingProvider,
+ IL10N $l) {
+ $this->db = $db;
+ $this->request = $request;
+ $this->config = $config;
+ $this->lockingProvider = $lockingProvider;
+ $this->l = $l;
+ }
+
+ /**
+ * @return TemplateResponse
+ */
+ public function getForm() {
+ try {
+ if ($this->db->getDatabasePlatform() instanceof SqlitePlatform) {
+ $invalidTransactionIsolationLevel = false;
+ } else {
+ $invalidTransactionIsolationLevel = $this->db->getTransactionIsolation() !== Connection::TRANSACTION_READ_COMMITTED;
+ }
+ } catch (DBALException $e) {
+ // ignore
+ $invalidTransactionIsolationLevel = false;
+ }
+
+ $envPath = getenv('PATH');
+
+ // warn if outdated version of a memcache module is used
+ $caches = [
+ 'apcu' => ['name' => $this->l->t('APCu'), 'version' => '4.0.6'],
+ 'redis' => ['name' => $this->l->t('Redis'), 'version' => '2.2.5'],
+ ];
+ $outdatedCaches = [];
+ foreach ($caches as $php_module => $data) {
+ $isOutdated = extension_loaded($php_module) && version_compare(phpversion($php_module), $data['version'], '<');
+ if ($isOutdated) {
+ $outdatedCaches[$php_module] = $data;
+ }
+ }
+
+ if ($this->lockingProvider instanceof NoopLockingProvider) {
+ $fileLockingType = 'none';
+ } else if ($this->lockingProvider instanceof DBLockingProvider) {
+ $fileLockingType = 'db';
+ } else {
+ $fileLockingType = 'cache';
+ }
+
+ $suggestedOverwriteCliUrl = '';
+ if ($this->config->getSystemValue('overwrite.cli.url', '') === '') {
+ $suggestedOverwriteCliUrl = $this->request->getServerProtocol() . '://' . $this->request->getInsecureServerHost() . \OC::$WEBROOT;
+ if (!$this->config->getSystemValue('config_is_read_only', false)) {
+ // Set the overwrite URL when it was not set yet.
+ $this->config->setSystemValue('overwrite.cli.url', $suggestedOverwriteCliUrl);
+ $suggestedOverwriteCliUrl = '';
+ }
+ }
+
+ $parameters = [
+ // Diagnosis
+ 'readOnlyConfigEnabled' => \OC_Helper::isReadOnlyConfigEnabled(),
+ 'isLocaleWorking' => \OC_Util::isSetLocaleWorking(),
+ 'isAnnotationsWorking' => \OC_Util::isAnnotationsWorking(),
+ 'checkForWorkingWellKnownSetup' => $this->config->getSystemValue('check_for_working_wellknown_setup', true),
+ 'has_fileinfo' => \OC_Util::fileInfoLoaded(),
+ 'invalidTransactionIsolationLevel' => $invalidTransactionIsolationLevel,
+ 'getenvServerNotWorking' => empty($envPath),
+ 'OutdatedCacheWarning' => $outdatedCaches,
+ 'fileLockingType' => $fileLockingType,
+ 'suggestedOverwriteCliUrl' => $suggestedOverwriteCliUrl,
+ 'lastcron' => $this->config->getAppValue('core', 'lastcron', false),
+ 'cronErrors' => $this->config->getAppValue('core', 'cronErrors'),
+ ];
+
+ return new TemplateResponse('settings', 'settings/admin/overview', $parameters, '');
+ }
+
+ /**
+ * @return string the section ID, e.g. 'sharing'
+ */
+ public function getSection() {
+ return 'overview';
+ }
+
+ /**
+ * @return int whether the form should be rather on the top or bottom of
+ * the admin section. The forms are arranged in ascending order of the
+ * priority values. It is required to return a value between 0 and 100.
+ *
+ * E.g.: 70
+ */
+ public function getPriority() {
+ return 10;
+ }
+}
diff --git a/lib/private/Settings/Admin/Server.php b/lib/private/Settings/Admin/Server.php
index 0b9c042e4f2..1ebea8a4dcd 100644
--- a/lib/private/Settings/Admin/Server.php
+++ b/lib/private/Settings/Admin/Server.php
@@ -74,63 +74,7 @@ class Server implements ISettings {
* @return TemplateResponse
*/
public function getForm() {
- try {
- if ($this->db->getDatabasePlatform() instanceof SqlitePlatform) {
- $invalidTransactionIsolationLevel = false;
- } else {
- $invalidTransactionIsolationLevel = $this->db->getTransactionIsolation() !== Connection::TRANSACTION_READ_COMMITTED;
- }
- } catch (DBALException $e) {
- // ignore
- $invalidTransactionIsolationLevel = false;
- }
-
- $envPath = getenv('PATH');
-
- // warn if outdated version of a memcache module is used
- $caches = [
- 'apcu' => ['name' => $this->l->t('APCu'), 'version' => '4.0.6'],
- 'redis' => ['name' => $this->l->t('Redis'), 'version' => '2.2.5'],
- ];
- $outdatedCaches = [];
- foreach ($caches as $php_module => $data) {
- $isOutdated = extension_loaded($php_module) && version_compare(phpversion($php_module), $data['version'], '<');
- if ($isOutdated) {
- $outdatedCaches[$php_module] = $data;
- }
- }
-
- if ($this->lockingProvider instanceof NoopLockingProvider) {
- $fileLockingType = 'none';
- } else if ($this->lockingProvider instanceof DBLockingProvider) {
- $fileLockingType = 'db';
- } else {
- $fileLockingType = 'cache';
- }
-
- $suggestedOverwriteCliUrl = '';
- if ($this->config->getSystemValue('overwrite.cli.url', '') === '') {
- $suggestedOverwriteCliUrl = $this->request->getServerProtocol() . '://' . $this->request->getInsecureServerHost() . \OC::$WEBROOT;
- if (!$this->config->getSystemValue('config_is_read_only', false)) {
- // Set the overwrite URL when it was not set yet.
- $this->config->setSystemValue('overwrite.cli.url', $suggestedOverwriteCliUrl);
- $suggestedOverwriteCliUrl = '';
- }
- }
-
$parameters = [
- // Diagnosis
- 'readOnlyConfigEnabled' => \OC_Helper::isReadOnlyConfigEnabled(),
- 'isLocaleWorking' => \OC_Util::isSetLocaleWorking(),
- 'isAnnotationsWorking' => \OC_Util::isAnnotationsWorking(),
- 'checkForWorkingWellKnownSetup' => $this->config->getSystemValue('check_for_working_wellknown_setup', true),
- 'has_fileinfo' => \OC_Util::fileInfoLoaded(),
- 'invalidTransactionIsolationLevel' => $invalidTransactionIsolationLevel,
- 'getenvServerNotWorking' => empty($envPath),
- 'OutdatedCacheWarning' => $outdatedCaches,
- 'fileLockingType' => $fileLockingType,
- 'suggestedOverwriteCliUrl' => $suggestedOverwriteCliUrl,
-
// Background jobs
'backgroundjobs_mode' => $this->config->getAppValue('core', 'backgroundjobs_mode', 'ajax'),
'lastcron' => $this->config->getAppValue('core', 'lastcron', false),
diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php
index 49f699223f6..becc670c6f9 100644
--- a/lib/private/Settings/Manager.php
+++ b/lib/private/Settings/Manager.php
@@ -226,7 +226,8 @@ class Manager implements IManager {
public function getAdminSections(): array {
// built-in sections
$sections = [
- 0 => [new Section('server', $this->l->t('Basic settings'), 0, $this->url->imagePath('settings', 'admin.svg'))],
+ 0 => [new Section('overview', $this->l->t('Overview'), 0, $this->url->imagePath('settings', 'admin.svg'))],
+ 1 => [new Section('server', $this->l->t('Basic settings'), 0, $this->url->imagePath('core', 'actions/settings-dark.svg'))],
5 => [new Section('sharing', $this->l->t('Sharing'), 0, $this->url->imagePath('core', 'actions/share.svg'))],
10 => [new Section('security', $this->l->t('Security'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
45 => [new Section('encryption', $this->l->t('Encryption'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
@@ -257,11 +258,18 @@ class Manager implements IManager {
private function getBuiltInAdminSettings($section): array {
$forms = [];
+ if ($section === 'overview') {
+ /** @var ISettings $form */
+ $form = new Admin\Overview($this->dbc, $this->request, $this->config, $this->lockingProvider, $this->l);
+ $forms[$form->getPriority()] = [$form];
+ $form = new Admin\ServerDevNotice();
+ $forms[$form->getPriority()] = [$form];
+ }
if ($section === 'server') {
/** @var ISettings $form */
$form = new Admin\Server($this->dbc, $this->request, $this->config, $this->lockingProvider, $this->l);
$forms[$form->getPriority()] = [$form];
- $form = new Admin\ServerDevNotice();
+ $form = new Admin\Mail($this->config);
$forms[$form->getPriority()] = [$form];
}
if ($section === 'encryption') {
@@ -274,11 +282,6 @@ class Manager implements IManager {
$form = new Admin\Sharing($this->config, $this->l);
$forms[$form->getPriority()] = [$form];
}
- if ($section === 'additional') {
- /** @var ISettings $form */
- $form = new Admin\Additional($this->config);
- $forms[$form->getPriority()] = [$form];
- }
if ($section === 'tips-tricks') {
/** @var ISettings $form */
$form = new Admin\TipsTricks($this->config);
diff --git a/lib/private/Template/SCSSCacher.php b/lib/private/Template/SCSSCacher.php
index 6fb9d11953b..6e25e1fa5de 100644
--- a/lib/private/Template/SCSSCacher.php
+++ b/lib/private/Template/SCSSCacher.php
@@ -273,7 +273,11 @@ class SCSSCacher {
$appDirectory = $this->appData->getDirectoryListing();
foreach ($appDirectory as $folder) {
foreach ($folder->getDirectoryListing() as $file) {
- $file->delete();
+ try {
+ $file->delete();
+ } catch(NotPermittedException $e) {
+ $this->logger->logException($e, ['message' => 'SCSSCacher: unable to delete file: ' . $file->getName()]);
+ }
}
}
}
diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php
index 7931eecc502..70f1b16e3c6 100644
--- a/lib/private/legacy/app.php
+++ b/lib/private/legacy/app.php
@@ -464,7 +464,7 @@ class OC_App {
} else {
$versionToLoad = [];
foreach ($possibleApps as $possibleApp) {
- $version = self::getAppVersionByPath($possibleApp['path']);
+ $version = self::getAppVersionByPath($possibleApp['path'] . '/' . $appId);
if (empty($versionToLoad) || version_compare($version, $versionToLoad['version'], '>')) {
$versionToLoad = array(
'dir' => $possibleApp,
diff --git a/lib/public/IServerContainer.php b/lib/public/IServerContainer.php
index 19c9578ee23..c38aaf9f2cb 100644
--- a/lib/public/IServerContainer.php
+++ b/lib/public/IServerContainer.php
@@ -44,6 +44,7 @@
// use OCP namespace for all classes that are considered public.
// This means that they should be used by apps instead of the internal ownCloud classes
namespace OCP;
+use OCP\Log\ILogFactory;
use OCP\Security\IContentSecurityPolicyManager;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
@@ -315,6 +316,14 @@ interface IServerContainer extends IContainer {
public function getLogger();
/**
+ * returns a log factory instance
+ *
+ * @return ILogFactory
+ * @since 14.0.0
+ */
+ public function getLogFactory();
+
+ /**
* Returns a router for generating and matching urls
*
* @return \OCP\Route\IRouter
diff --git a/lib/public/Lock/LockedException.php b/lib/public/Lock/LockedException.php
index 1378f437c3a..b4038f8dd55 100644
--- a/lib/public/Lock/LockedException.php
+++ b/lib/public/Lock/LockedException.php
@@ -46,11 +46,15 @@ class LockedException extends \Exception {
*
* @param string $path locked path
* @param \Exception|null $previous previous exception for cascading
- *
+ * @param string $existingLock since 14.0.0
* @since 8.1.0
*/
- public function __construct(string $path, \Exception $previous = null) {
- parent::__construct('"' . $path . '" is locked', 0, $previous);
+ public function __construct(string $path, \Exception $previous = null, string $existingLock = null) {
+ $message = '"' . $path . '" is locked';
+ if ($existingLock) {
+ $message .= ', existing lock on file: ' . $existingLock;
+ }
+ parent::__construct($message, 0, $previous);
$this->path = $path;
}
diff --git a/lib/public/Log/IFileBased.php b/lib/public/Log/IFileBased.php
new file mode 100644
index 00000000000..c0eef472975
--- /dev/null
+++ b/lib/public/Log/IFileBased.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * @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 OCP\Log;
+
+/**
+ * Interface IFileBased
+ *
+ * @package OCP\Log
+ *
+ * @since 14.0.0
+ */
+interface IFileBased {
+ /**
+ * @since 14.0.0
+ */
+ public function getLogFilePath():string;
+
+ /**
+ * @since 14.0.0
+ */
+ public function getEntries(int $limit=50, int $offset=0): array;
+}
diff --git a/lib/public/Log/ILogFactory.php b/lib/public/Log/ILogFactory.php
new file mode 100644
index 00000000000..d8e1ab4ee76
--- /dev/null
+++ b/lib/public/Log/ILogFactory.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * @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 OCP\Log;
+
+use OCP\ILogger;
+
+/**
+ * Interface ILogFactory
+ *
+ * @package OCP\Log
+ * @since 14.0.0
+ */
+interface ILogFactory {
+ /**
+ * @param string $type - one of: file, errorlog, syslog
+ * @return IWriter
+ * @since 14.0.0
+ */
+ public function get(string $type): IWriter;
+
+ /**
+ * @param string $path
+ * @return ILogger
+ * @since 14.0.0
+ */
+ public function getCustomLogger(string $path): ILogger;
+}
diff --git a/lib/public/Log/IWriter.php b/lib/public/Log/IWriter.php
new file mode 100644
index 00000000000..c9b906bf4a3
--- /dev/null
+++ b/lib/public/Log/IWriter.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * @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 OCP\Log;
+
+/**
+ * Interface IWriter
+ *
+ * @package OCP\Log
+ * @since 14.0.0
+ */
+interface IWriter {
+ /**
+ * @since 14.0.0
+ */
+ public function write(string $app, $message, int $level);
+}
diff --git a/lib/public/Log/RotationTrait.php b/lib/public/Log/RotationTrait.php
new file mode 100644
index 00000000000..df42bfeff1f
--- /dev/null
+++ b/lib/public/Log/RotationTrait.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * @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 OCP\Log;
+
+/**
+ * Trait RotationTrait
+ *
+ * @package OCP\Log
+ *
+ * @since 14.0.0
+ */
+trait RotationTrait {
+
+ /**
+ * @var string
+ * @since 14.0.0
+ */
+ protected $filePath;
+
+ /**
+ * @var int
+ * @since 14.0.0
+ */
+ protected $maxSize;
+
+ /**
+ * @return string the resulting new filepath
+ * @since 14.0.0
+ */
+ protected function rotate():string {
+ $rotatedFile = $this->filePath.'.1';
+ rename($this->filePath, $rotatedFile);
+ return $rotatedFile;
+ }
+
+ /**
+ * @return bool
+ * @since 14.0.0
+ */
+ protected function shouldRotateBySize():bool {
+ if ((int)$this->maxSize > 0) {
+ $filesize = @filesize($this->filePath);
+ if ($filesize >= (int)$this->maxSize) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/settings/Controller/CommonSettingsTrait.php b/settings/Controller/CommonSettingsTrait.php
index 3d314d9ed53..10fc0d84bbd 100644
--- a/settings/Controller/CommonSettingsTrait.php
+++ b/settings/Controller/CommonSettingsTrait.php
@@ -66,7 +66,7 @@ trait CommonSettingsTrait {
} else if($type === 'personal') {
$settings = $this->settingsManager->getPersonalSettings($section->getID());
}
- if (empty($settings)) {
+ if (empty($settings) && !($section->getID() === 'additional' && count(\OC_App::getForms('admin')) > 0)) {
continue;
}
diff --git a/settings/Controller/LogSettingsController.php b/settings/Controller/LogSettingsController.php
index 6405ff9ec73..ef195edce63 100644
--- a/settings/Controller/LogSettingsController.php
+++ b/settings/Controller/LogSettingsController.php
@@ -26,8 +26,11 @@
namespace OC\Settings\Controller;
+use OC\Log;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\StreamResponse;
+use OCP\ILogger;
+use OCP\IRequest;
/**
* Class LogSettingsController
@@ -35,6 +38,15 @@ use OCP\AppFramework\Http\StreamResponse;
* @package OC\Settings\Controller
*/
class LogSettingsController extends Controller {
+
+ /** @var ILogger */
+ private $log;
+
+ public function __construct(string $appName, IRequest $request, ILogger $logger) {
+ parent::__construct($appName, $request);
+ $this->log = $logger;
+ }
+
/**
* download logfile
*
@@ -43,7 +55,10 @@ class LogSettingsController extends Controller {
* @return StreamResponse
*/
public function download() {
- $resp = new StreamResponse(\OC\Log\File::getLogFilePath());
+ if(!$this->log instanceof Log) {
+ throw new \UnexpectedValueException('Log file not available');
+ }
+ $resp = new StreamResponse($this->log->getLogPath());
$resp->addHeader('Content-Type', 'application/octet-stream');
$resp->addHeader('Content-Disposition', 'attachment; filename="nextcloud.log"');
return $resp;
diff --git a/settings/css/settings.scss b/settings/css/settings.scss
index a040ee6195a..97767ce2f22 100644
--- a/settings/css/settings.scss
+++ b/settings/css/settings.scss
@@ -38,10 +38,6 @@ input {
.avatardiv {
margin: 10px auto;
}
- .federationScopeMenu {
- /* popover magic fix */
- margin-right: calc(-50% - 7px);
- }
.warning {
width: 100%;
}
@@ -52,9 +48,6 @@ input {
#displayavatar {
text-align: center;
- p {
- text-align: left;
- }
}
#uploadavatarbutton, #selectavatar, #removeavatar {
@@ -113,22 +106,6 @@ input {
grid-template-rows: 1fr 2fr 1fr;
}
-
-.icon-federation-menu {
- padding-left: 16px;
- background-size: 16px;
- background-position: left 8px;
- opacity: .3;
- margin-left: 10px;
- cursor: pointer;
-
- .icon-triangle-s {
- display: inline-block;
- vertical-align: middle;
- cursor: pointer;
- }
-}
-
.personal-show-container {
width: 100%;
}
@@ -153,6 +130,11 @@ input {
width: 100%;
}
}
+#personal-settings {
+ .section {
+ border: 0;
+ }
+}
#personal-settings {
display: grid;
@@ -162,6 +144,16 @@ input {
.section {
padding: 10px 10px;
}
+
+ .personal-info {
+ margin-right: 10%;
+ margin-bottom: 20px;
+ }
+ .personal-info[class^='icon-'], .personal-info[class*=' icon-'] {
+ background-position: 0px 2px;
+ padding-left: 30px;
+ opacity: 0.7;
+ }
}
@@ -234,7 +226,7 @@ input {
margin-bottom: 12px;
display: inline-flex;
flex-wrap: nowrap;
- justify-content: space-between;
+ justify-content: flex-start;
width: 100%;
> label {
white-space: nowrap;
@@ -272,6 +264,26 @@ input {
}
}
+
+#body-settings #quota {
+ cursor: default;
+ position: relative;
+ progress {
+ height: 6px;
+ &::-moz-progress-bar {
+ border-radius: 3px 0 0 3px;
+ }
+ &::-webkit-progress-value {
+ border-radius: 3px 0 0 3px;
+ }
+ }
+ div {
+ font-weight: normal;
+ white-space: nowrap;
+ }
+}
+
+
/* verify accounts */
/* only show pointer cursor when popup will be there */
.verification-dialog {
@@ -289,29 +301,37 @@ input {
}
}
-.federationScopeMenu {
- top: 44px;
- margin-right: calc(-50% + 30px); /* half - the triangle icon width - borders */
- &.bubble::after {
- right: 50%;
- transform: translate(50%, 0);
- }
- &.popovermenu {
- a.menuitem, label.menuitem {
- font-size: 12.8px;
- line-height: 1.6em;
+.federation-menu {
+ position: relative;
+ cursor: pointer;
+ margin-left: 10px;
+ .icon-federation-menu {
+ padding-left: 16px;
+ background-size: 16px;
+ background-position: left center;
+ opacity: .3;
+ cursor: inherit;
+ .icon-triangle-s {
+ display: inline-block;
+ vertical-align: middle;
+ cursor: inherit;
}
- .menuitem {
- font-size: 12.8px;
- line-height: 1.6em;
- .menuitem-text-detail {
- opacity: .75;
- }
- &.active {
- box-shadow: inset 2px 0 $color-primary;
-
- .menuitem-text {
- font-weight: 600;
+ }
+ .federationScopeMenu {
+ top: 44px;
+ &.popovermenu {
+ .menuitem {
+ // override h2 heading font size
+ font-size: 12.8px;
+ line-height: 1.6em;
+ .menuitem-text-detail {
+ opacity: .75;
+ }
+ &.active {
+ box-shadow: inset 2px 0 $color-primary;
+ .menuitem-text {
+ font-weight: 600;
+ }
}
}
}
@@ -877,11 +897,21 @@ span.version {
}
.section {
- h2.app-name {
- display: block;
- margin: 8px 0;
- }
margin-bottom: 0;
+ /* use 2nd child since app-navigation-toggle is the first */
+ &:not(:nth-child(2)) {
+ border-top: 1px solid $color-border;
+ }
+
+ /* correctly display help icons next to headings */
+ h2 {
+ margin-bottom: 22px;
+ .icon-info {
+ padding: 6px 20px;
+ vertical-align: text-bottom;
+ display: inline-block;
+ }
+ }
}
.personal-settings-setting-box .section {
@@ -1026,6 +1056,10 @@ span.version {
&.apps-experimental {
flex-basis: 90%;
}
+ h2.app-name {
+ display: block;
+ margin: 8px 0;
+ }
}
.app-description {
p {
@@ -1064,6 +1098,7 @@ span.version {
position: absolute;
padding-left: 6px;
padding-top: 15px;
+
.enable {
position: relative;
top: -1px;
@@ -1101,6 +1136,7 @@ table.grid td.date {
#security-warning li {
list-style: initial;
margin: 10px 0;
+ list-style-position: inside;
}
#security-warning-state span {
@@ -1167,7 +1203,8 @@ table.grid td.date {
width: 300px;
text-align: right;
}
- select:nth-child(2) {
+ select:nth-child(2),
+ input {
width: 143px;
}
}
@@ -1260,13 +1297,16 @@ doesnotexist:-o-prefocus, .strengthify-wrapper {
height: 50px;
background-position: left center;
}
- .errors, .warnings {
- color: #ce3702;
+ .errors, .errors a {
+ color: $color-error;
+ }
+ .warnings, .warnings a {
+ color: $color-warning;
}
}
#security-warning > ul {
- color: #ce3702;
+ color: $color-error;
}
#admin-tips li {
diff --git a/settings/img/help.svg b/settings/img/help.svg
index 02d44921d4c..e2d23fb62fb 100644
--- a/settings/img/help.svg
+++ b/settings/img/help.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewbox="0 0 16 16" width="16" height="16"><path d="M5 7.474c.155.382.325.69.644.246.407-.268 1.76-1.427 1.662-.342-.368 2.017-.834 4.017-1.17 6.04-.393 1.114.634 2.067 1.637 1.31 1.078-.502 1.99-1.287 2.927-2.01-.144-.323-.25-.79-.596-.347-.468.24-1.47 1.318-1.696.472.315-2.18.975-4.295 1.365-6.462.397-1.005-.364-2.223-1.4-1.363C7.117 5.634 6.083 6.6 5 7.474zM9.46.005C8.15-.017 7.553 2.147 8.815 2.68c1.023.378 2.077-.714 1.79-1.75-.098-.542-.598-.97-1.147-.93z"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M6.508 10.106v-.642q0-.833.356-1.449.356-.616 1.302-1.31.91-.65 1.197-1.059.295-.408.295-.91 0-.565-.416-.86-.417-.295-1.163-.295-1.302 0-2.968.85l-.945-1.9Q6.1 1.447 8.27 1.447q1.787 0 2.837.859 1.059.859 1.059 2.29 0 .955-.434 1.649-.434.694-1.649 1.562-.833.616-1.058.937-.217.32-.217.842v.52zm-.277 2.968q0-.73.39-1.102.39-.373 1.137-.373.72 0 1.11.381.4.382.4 1.094 0 .685-.4 1.084-.399.39-1.11.39-.729 0-1.128-.381-.4-.39-.4-1.093z"/></svg>
diff --git a/settings/js/federationscopemenu.js b/settings/js/federationscopemenu.js
index 4b1813f90e9..db8b8ff33f7 100644
--- a/settings/js/federationscopemenu.js
+++ b/settings/js/federationscopemenu.js
@@ -37,7 +37,7 @@
*/
var FederationScopeMenu = OC.Backbone.View.extend({
tagName: 'div',
- className: 'federationScopeMenu popovermenu bubble hidden menu',
+ className: 'federationScopeMenu popovermenu bubble menu menu-center',
field: undefined,
_scopes: undefined,
@@ -129,10 +129,6 @@
break;
}
- var $el = $(context.target);
- var offsetIcon = $el.offset();
- var offsetHeading = $el.closest('h2').offset();
-
this.render();
this.$el.removeClass('hidden');
diff --git a/settings/js/federationsettingsview.js b/settings/js/federationsettingsview.js
index b9722520f6d..d20d7bb78b6 100644
--- a/settings/js/federationsettingsview.js
+++ b/settings/js/federationsettingsview.js
@@ -62,14 +62,13 @@
render: function() {
var self = this;
_.each(this._inputFields, function(field) {
- var $heading = self.$('#' + field + 'form h2');
- var $icon = self.$('#' + field + 'form h2 > span');
+ var $icon = self.$('#' + field + 'form h2 > .federation-menu');
var scopeMenu = new OC.Settings.FederationScopeMenu({field: field});
self.listenTo(scopeMenu, 'select:scope', function(scope) {
self._onScopeChanged(field, scope);
});
- $heading.append(scopeMenu.$el);
+ $icon.append(scopeMenu.$el);
$icon.on('click', _.bind(scopeMenu.show, scopeMenu));
// Restore initial state
@@ -190,7 +189,7 @@
},
_setFieldScopeIcon: function(field, scope) {
- var $icon = this.$('#' + field + 'form > h2 > span');
+ var $icon = this.$('#' + field + 'form > h2 .icon-federation-menu');
$icon.removeClass('icon-password');
$icon.removeClass('icon-contacts-dark');
diff --git a/settings/l10n/af.js b/settings/l10n/af.js
index 9fa4a101b33..8eca63cd48d 100644
--- a/settings/l10n/af.js
+++ b/settings/l10n/af.js
@@ -39,8 +39,6 @@ OC.L10N.register(
"Forum" : "Forum",
"days" : "dae",
"Tips & tricks" : "Wenke & truuks",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "U gebruik <strong>%s</strong> van <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "U gebruik <strong>%s</strong> van <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profielprent",
"Upload new" : "Laai nuwe op",
"Select from Files" : "Kies uit Lêers",
@@ -49,6 +47,7 @@ OC.L10N.register(
"Cancel" : "Kanselleer",
"Choose as profile picture" : "Kies as profielprent",
"You are member of the following groups:" : "U is ’n lid van die volgende groepe:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "U gebruik <strong>%s</strong> van <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Volle naam",
"Email" : "E-pos",
"Your email address" : "U e-posadres",
@@ -85,6 +84,7 @@ OC.L10N.register(
"set new password" : "stel nuwe wagwoord",
"change email address" : "verander e-posadres",
"Default" : "Verstek",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "U gebruik <strong>%s</strong> van <strong>%s</strong>",
"Show email address" : "Toon e-posadres",
"Send email to new user" : "Stuur e-pos aan nuwe gebruiker",
"Create" : "Skep"
diff --git a/settings/l10n/af.json b/settings/l10n/af.json
index 5d612f21478..f35d9a7bea3 100644
--- a/settings/l10n/af.json
+++ b/settings/l10n/af.json
@@ -37,8 +37,6 @@
"Forum" : "Forum",
"days" : "dae",
"Tips & tricks" : "Wenke & truuks",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "U gebruik <strong>%s</strong> van <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "U gebruik <strong>%s</strong> van <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profielprent",
"Upload new" : "Laai nuwe op",
"Select from Files" : "Kies uit Lêers",
@@ -47,6 +45,7 @@
"Cancel" : "Kanselleer",
"Choose as profile picture" : "Kies as profielprent",
"You are member of the following groups:" : "U is ’n lid van die volgende groepe:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "U gebruik <strong>%s</strong> van <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Volle naam",
"Email" : "E-pos",
"Your email address" : "U e-posadres",
@@ -83,6 +82,7 @@
"set new password" : "stel nuwe wagwoord",
"change email address" : "verander e-posadres",
"Default" : "Verstek",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "U gebruik <strong>%s</strong> van <strong>%s</strong>",
"Show email address" : "Toon e-posadres",
"Send email to new user" : "Stuur e-pos aan nuwe gebruiker",
"Create" : "Skep"
diff --git a/settings/l10n/ast.js b/settings/l10n/ast.js
index 8ee78453538..f7c9089ea69 100644
--- a/settings/l10n/ast.js
+++ b/settings/l10n/ast.js
@@ -253,8 +253,6 @@ OC.L10N.register(
"Improving the config.php" : "Ameyorando'l config.php",
"Theming" : "Aspeutu",
"Hardening and security guidance" : "Guía de fortalecimientu y seguranza",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Tas usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Tas usando <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Semeya de perfil",
"Upload new" : "Xubir otra",
"Remove image" : "Desaniciar imaxe",
@@ -262,6 +260,7 @@ OC.L10N.register(
"Picture provided by original account" : "Semeya fornida pola cuenta orixinal",
"Cancel" : "Encaboxar",
"You are member of the following groups:" : "Yes miembru de los grupos de darréu:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Tas usando <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Nome completu",
"No display name set" : "Nun s'afitó'l nome p'amosar",
"Email" : "Corréu-e",
@@ -320,6 +319,7 @@ OC.L10N.register(
"Add trusted domain" : "Amestar dominiu d'enfotu",
"A valid password must be provided" : "Tien d'apurrise una contraseña válida",
"A valid email must be provided" : "Ha apurrise un corréu válidu",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Tas usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Amosar direición de corréu",
"Send email to new user" : "Unviar corréu al usuariu nuevu",
"Create" : "Crear"
diff --git a/settings/l10n/ast.json b/settings/l10n/ast.json
index 9b049aa919f..1947d866d65 100644
--- a/settings/l10n/ast.json
+++ b/settings/l10n/ast.json
@@ -251,8 +251,6 @@
"Improving the config.php" : "Ameyorando'l config.php",
"Theming" : "Aspeutu",
"Hardening and security guidance" : "Guía de fortalecimientu y seguranza",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Tas usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Tas usando <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Semeya de perfil",
"Upload new" : "Xubir otra",
"Remove image" : "Desaniciar imaxe",
@@ -260,6 +258,7 @@
"Picture provided by original account" : "Semeya fornida pola cuenta orixinal",
"Cancel" : "Encaboxar",
"You are member of the following groups:" : "Yes miembru de los grupos de darréu:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Tas usando <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Nome completu",
"No display name set" : "Nun s'afitó'l nome p'amosar",
"Email" : "Corréu-e",
@@ -318,6 +317,7 @@
"Add trusted domain" : "Amestar dominiu d'enfotu",
"A valid password must be provided" : "Tien d'apurrise una contraseña válida",
"A valid email must be provided" : "Ha apurrise un corréu válidu",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Tas usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Amosar direición de corréu",
"Send email to new user" : "Unviar corréu al usuariu nuevu",
"Create" : "Crear"
diff --git a/settings/l10n/bg.js b/settings/l10n/bg.js
index ae5e5624f08..786a13a3752 100644
--- a/settings/l10n/bg.js
+++ b/settings/l10n/bg.js
@@ -141,7 +141,6 @@ OC.L10N.register(
"Performance tuning" : "Настройване на производителност",
"Improving the config.php" : "Подобряване на config.php",
"Theming" : "Промяна на облика",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Ползвате <strong>%s</strong> от <strong>%s</strong>",
"Profile picture" : "Аватар",
"Upload new" : "Качи нов",
"Remove image" : "Премахни изображението",
@@ -192,6 +191,7 @@ OC.L10N.register(
"Add trusted domain" : "Добавяне на сигурен домейн",
"A valid password must be provided" : "Трябва да бъде зададена валидна парола",
"A valid email must be provided" : "Трябва да бъде зададена валидна електронна поща",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Ползвате <strong>%s</strong> от <strong>%s</strong>",
"Show email address" : "Покажи адреса на електронната поща",
"Send email to new user" : "Изпращай писмо към нов потребител",
"Create" : "Създаване"
diff --git a/settings/l10n/bg.json b/settings/l10n/bg.json
index 2016357015c..fdf4768dcd0 100644
--- a/settings/l10n/bg.json
+++ b/settings/l10n/bg.json
@@ -139,7 +139,6 @@
"Performance tuning" : "Настройване на производителност",
"Improving the config.php" : "Подобряване на config.php",
"Theming" : "Промяна на облика",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Ползвате <strong>%s</strong> от <strong>%s</strong>",
"Profile picture" : "Аватар",
"Upload new" : "Качи нов",
"Remove image" : "Премахни изображението",
@@ -190,6 +189,7 @@
"Add trusted domain" : "Добавяне на сигурен домейн",
"A valid password must be provided" : "Трябва да бъде зададена валидна парола",
"A valid email must be provided" : "Трябва да бъде зададена валидна електронна поща",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Ползвате <strong>%s</strong> от <strong>%s</strong>",
"Show email address" : "Покажи адреса на електронната поща",
"Send email to new user" : "Изпращай писмо към нов потребител",
"Create" : "Създаване"
diff --git a/settings/l10n/ca.js b/settings/l10n/ca.js
index da1d8214c45..7e2bbb8e77d 100644
--- a/settings/l10n/ca.js
+++ b/settings/l10n/ca.js
@@ -259,8 +259,6 @@ OC.L10N.register(
"Improving the config.php" : "Millorant el config.php",
"Theming" : "Tematització",
"Hardening and security guidance" : "Guia de protecció i seguretat",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estàs fent servir <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estàs fent servir <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Puja'n una de nova",
"Select from Files" : "Seleccioneu d'Arxius",
@@ -270,6 +268,7 @@ OC.L10N.register(
"Cancel" : "Cancel·la",
"Choose as profile picture" : "Elegeix una imatge de perfil",
"You are member of the following groups:" : "Vostè és membre dels següents grups:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estàs fent servir <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Nom complet",
"No display name set" : "No s'ha establert cap nom para mostrar",
"Email" : "Correu electrònic",
@@ -330,6 +329,7 @@ OC.L10N.register(
"Add trusted domain" : "Afegir domini de confiança",
"A valid password must be provided" : "Heu de facilitar una contrasenya vàlida",
"A valid email must be provided" : "S'ha de subministrar una adreça de correu electrònic vàlida",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estàs fent servir <strong>%s</strong> de <strong>%s</strong>",
"Android app" : "Aplicació d'Android",
"Follow us on Google+!" : "Segueix-nos a Google+!",
"Show email address" : "Mostrar l'adreça de correu electrònic",
diff --git a/settings/l10n/ca.json b/settings/l10n/ca.json
index dd51db3d6b8..e7cbb33d364 100644
--- a/settings/l10n/ca.json
+++ b/settings/l10n/ca.json
@@ -257,8 +257,6 @@
"Improving the config.php" : "Millorant el config.php",
"Theming" : "Tematització",
"Hardening and security guidance" : "Guia de protecció i seguretat",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estàs fent servir <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estàs fent servir <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Puja'n una de nova",
"Select from Files" : "Seleccioneu d'Arxius",
@@ -268,6 +266,7 @@
"Cancel" : "Cancel·la",
"Choose as profile picture" : "Elegeix una imatge de perfil",
"You are member of the following groups:" : "Vostè és membre dels següents grups:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estàs fent servir <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Nom complet",
"No display name set" : "No s'ha establert cap nom para mostrar",
"Email" : "Correu electrònic",
@@ -328,6 +327,7 @@
"Add trusted domain" : "Afegir domini de confiança",
"A valid password must be provided" : "Heu de facilitar una contrasenya vàlida",
"A valid email must be provided" : "S'ha de subministrar una adreça de correu electrònic vàlida",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estàs fent servir <strong>%s</strong> de <strong>%s</strong>",
"Android app" : "Aplicació d'Android",
"Follow us on Google+!" : "Segueix-nos a Google+!",
"Show email address" : "Mostrar l'adreça de correu electrònic",
diff --git a/settings/l10n/cs.js b/settings/l10n/cs.js
index 5ebde4e36c4..7375f3dce9a 100644
--- a/settings/l10n/cs.js
+++ b/settings/l10n/cs.js
@@ -300,8 +300,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Průvodce vylepšením bezpečnosti",
"Personal" : "Osobní",
"Administration" : "Administrace",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Používáte <strong>%s</strong> z <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Používáte <strong>%s</strong> z <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profilový obrázek",
"Upload new" : "Nahrát nový",
"Select from Files" : "Vybrat ze Souborů",
@@ -311,6 +309,7 @@ OC.L10N.register(
"Cancel" : "Zrušit",
"Choose as profile picture" : "Vybrat jako profilový obrázek",
"You are member of the following groups:" : "Patříte do následujících skupin:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Používáte <strong>%s</strong> z <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Celé jméno",
"No display name set" : "Jméno pro zobrazení nenastaveno",
"Email" : "E-mail",
@@ -378,6 +377,7 @@ OC.L10N.register(
"Add trusted domain" : "Přidat důvěryhodnou doménu",
"A valid password must be provided" : "Musíte zadat platné heslo",
"A valid email must be provided" : "Musíte zadat platný e-mail",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Používáte <strong>%s</strong> z <strong>%s</strong>",
"Android app" : "Aplikace pro Android",
"iOS app" : "Aplikace pro iOS",
"App passwords" : "Hesla aplikace",
diff --git a/settings/l10n/cs.json b/settings/l10n/cs.json
index 6a38ebb98ba..7df7c5a2af4 100644
--- a/settings/l10n/cs.json
+++ b/settings/l10n/cs.json
@@ -298,8 +298,6 @@
"Hardening and security guidance" : "Průvodce vylepšením bezpečnosti",
"Personal" : "Osobní",
"Administration" : "Administrace",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Používáte <strong>%s</strong> z <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Používáte <strong>%s</strong> z <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profilový obrázek",
"Upload new" : "Nahrát nový",
"Select from Files" : "Vybrat ze Souborů",
@@ -309,6 +307,7 @@
"Cancel" : "Zrušit",
"Choose as profile picture" : "Vybrat jako profilový obrázek",
"You are member of the following groups:" : "Patříte do následujících skupin:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Používáte <strong>%s</strong> z <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Celé jméno",
"No display name set" : "Jméno pro zobrazení nenastaveno",
"Email" : "E-mail",
@@ -376,6 +375,7 @@
"Add trusted domain" : "Přidat důvěryhodnou doménu",
"A valid password must be provided" : "Musíte zadat platné heslo",
"A valid email must be provided" : "Musíte zadat platný e-mail",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Používáte <strong>%s</strong> z <strong>%s</strong>",
"Android app" : "Aplikace pro Android",
"iOS app" : "Aplikace pro iOS",
"App passwords" : "Hesla aplikace",
diff --git a/settings/l10n/da.js b/settings/l10n/da.js
index d3cfc0856c5..85f9843e7bf 100644
--- a/settings/l10n/da.js
+++ b/settings/l10n/da.js
@@ -236,8 +236,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Modstanddygtighed og sikkerheds vejledning",
"Personal" : "Personligt",
"Administration" : "Administration",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruger <strong>%s</strong> af <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du bruger <strong>%s</strong> af <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profilbillede",
"Upload new" : "Upload nyt",
"Select from Files" : "Vælg fra filer",
@@ -247,6 +245,7 @@ OC.L10N.register(
"Cancel" : "Annuller",
"Choose as profile picture" : "Vælg et profilbillede",
"You are member of the following groups:" : "Du er medlem af følgende grupper:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du bruger <strong>%s</strong> af <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Fulde navn",
"No display name set" : "Der er ikke angivet skærmnavn",
"Email" : "E-mail",
@@ -306,6 +305,7 @@ OC.L10N.register(
"Add trusted domain" : "Tilføj et domæne som du har tillid til",
"A valid password must be provided" : "En gyldig adgangskode skal angives",
"A valid email must be provided" : "Der skal angives en gyldig e-mail",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruger <strong>%s</strong> af <strong>%s</strong>",
"Show email address" : "Vis e-mailadresse",
"Send email to new user" : "Send e-mail til ny bruger",
"Create" : "Ny"
diff --git a/settings/l10n/da.json b/settings/l10n/da.json
index fb4a55cc9c6..e71c2d759d7 100644
--- a/settings/l10n/da.json
+++ b/settings/l10n/da.json
@@ -234,8 +234,6 @@
"Hardening and security guidance" : "Modstanddygtighed og sikkerheds vejledning",
"Personal" : "Personligt",
"Administration" : "Administration",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruger <strong>%s</strong> af <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du bruger <strong>%s</strong> af <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profilbillede",
"Upload new" : "Upload nyt",
"Select from Files" : "Vælg fra filer",
@@ -245,6 +243,7 @@
"Cancel" : "Annuller",
"Choose as profile picture" : "Vælg et profilbillede",
"You are member of the following groups:" : "Du er medlem af følgende grupper:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du bruger <strong>%s</strong> af <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Fulde navn",
"No display name set" : "Der er ikke angivet skærmnavn",
"Email" : "E-mail",
@@ -304,6 +303,7 @@
"Add trusted domain" : "Tilføj et domæne som du har tillid til",
"A valid password must be provided" : "En gyldig adgangskode skal angives",
"A valid email must be provided" : "Der skal angives en gyldig e-mail",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruger <strong>%s</strong> af <strong>%s</strong>",
"Show email address" : "Vis e-mailadresse",
"Send email to new user" : "Send e-mail til ny bruger",
"Create" : "Ny"
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index a14f26f8eb3..f5e5c8b3abc 100644
--- a/settings/l10n/de.js
+++ b/settings/l10n/de.js
@@ -308,8 +308,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Systemhärtung und Sicherheitsempfehlungen",
"Personal" : "Persönlich",
"Administration" : "Verwaltung",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du benutzt <strong>%s</strong> von <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du benutzt <strong>%s</strong> von <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profilbild",
"Upload new" : "Neues hochladen",
"Select from Files" : "Aus Dateien wählen",
@@ -318,7 +316,10 @@ OC.L10N.register(
"Picture provided by original account" : "Bild von Original-Konto zur Verfügung gestellt",
"Cancel" : "Abbrechen",
"Choose as profile picture" : "Als Profilbild auswählen",
+ "Details" : "Details",
"You are member of the following groups:" : "Du bist Mitglied folgender Gruppen:",
+ "You are using <strong>%s</strong>" : "Sie benutzen <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du benutzt <strong>%s</strong> von <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Vollständiger Name",
"No display name set" : "Kein Anzeigename angegeben",
"Email" : "E-Mail",
@@ -410,6 +411,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Um dies auszuführen, wird die PHP-Posix Erweiterung benötigt. Weitere Informationen in der {linkstart}PHP-Dokumentation{linkend}.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Um zu einer anderen Datenbank zu migrieren, benutze bitte die Kommandozeile: 'occ db:convert-type', oder schauen in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du benutzt <strong>%s</strong> von <strong>%s</strong>",
"Get the apps to sync your files" : "Lade die Apps zur Synchronisierung Deiner Daten herunter",
"Desktop client" : "Desktop-Client",
"Android app" : "Android-App",
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index 132e71372b7..43bdf740066 100644
--- a/settings/l10n/de.json
+++ b/settings/l10n/de.json
@@ -306,8 +306,6 @@
"Hardening and security guidance" : "Systemhärtung und Sicherheitsempfehlungen",
"Personal" : "Persönlich",
"Administration" : "Verwaltung",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du benutzt <strong>%s</strong> von <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du benutzt <strong>%s</strong> von <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profilbild",
"Upload new" : "Neues hochladen",
"Select from Files" : "Aus Dateien wählen",
@@ -316,7 +314,10 @@
"Picture provided by original account" : "Bild von Original-Konto zur Verfügung gestellt",
"Cancel" : "Abbrechen",
"Choose as profile picture" : "Als Profilbild auswählen",
+ "Details" : "Details",
"You are member of the following groups:" : "Du bist Mitglied folgender Gruppen:",
+ "You are using <strong>%s</strong>" : "Sie benutzen <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du benutzt <strong>%s</strong> von <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Vollständiger Name",
"No display name set" : "Kein Anzeigename angegeben",
"Email" : "E-Mail",
@@ -408,6 +409,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Um dies auszuführen, wird die PHP-Posix Erweiterung benötigt. Weitere Informationen in der {linkstart}PHP-Dokumentation{linkend}.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Um zu einer anderen Datenbank zu migrieren, benutze bitte die Kommandozeile: 'occ db:convert-type', oder schauen in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du benutzt <strong>%s</strong> von <strong>%s</strong>",
"Get the apps to sync your files" : "Lade die Apps zur Synchronisierung Deiner Daten herunter",
"Desktop client" : "Desktop-Client",
"Android app" : "Android-App",
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index 1ad4d0eeb64..6e1818a5f90 100644
--- a/settings/l10n/de_DE.js
+++ b/settings/l10n/de_DE.js
@@ -308,8 +308,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Systemhärtung und Sicherheitsempfehlungen",
"Personal" : "Persönlich",
"Administration" : "Verwaltung",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Sie verwenden <strong>%s</strong> der verfügbaren <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Sie verwenden <strong>%s</strong> von <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profilbild",
"Upload new" : "Neues hochladen",
"Select from Files" : "Aus Dateien wählen",
@@ -318,7 +316,10 @@ OC.L10N.register(
"Picture provided by original account" : "Bild von Original-Konto zur Verfügung gestellt",
"Cancel" : "Abbrechen",
"Choose as profile picture" : "Als Profilbild auswählen",
+ "Details" : "Details",
"You are member of the following groups:" : "Sie sind Mitglied folgender Gruppen:",
+ "You are using <strong>%s</strong>" : "Sie benutzen <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Sie verwenden <strong>%s</strong> von <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Vollständiger Name",
"No display name set" : "Kein Anzeigename angegeben",
"Email" : "E-Mail",
@@ -410,6 +411,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Um dies auszuführen, benötigen Sie die PHP-Posix Erweiterung. Weitere Informationen in der {linkstart}PHP-Dokumentation{linkend}.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Um zu einer anderen Datenbank zu migrieren, benutzen Sie bitte die Kommandozeile: 'occ db:convert-type', oder schauen in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Sie verwenden <strong>%s</strong> der verfügbaren <strong>%s</strong>",
"Get the apps to sync your files" : "Laden Sie die Apps zur Synchronisierung Ihrer Daten herunter",
"Desktop client" : "Desktop-Client",
"Android app" : "Android-App",
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index a75e6074f3e..15234b1dcc6 100644
--- a/settings/l10n/de_DE.json
+++ b/settings/l10n/de_DE.json
@@ -306,8 +306,6 @@
"Hardening and security guidance" : "Systemhärtung und Sicherheitsempfehlungen",
"Personal" : "Persönlich",
"Administration" : "Verwaltung",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Sie verwenden <strong>%s</strong> der verfügbaren <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Sie verwenden <strong>%s</strong> von <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profilbild",
"Upload new" : "Neues hochladen",
"Select from Files" : "Aus Dateien wählen",
@@ -316,7 +314,10 @@
"Picture provided by original account" : "Bild von Original-Konto zur Verfügung gestellt",
"Cancel" : "Abbrechen",
"Choose as profile picture" : "Als Profilbild auswählen",
+ "Details" : "Details",
"You are member of the following groups:" : "Sie sind Mitglied folgender Gruppen:",
+ "You are using <strong>%s</strong>" : "Sie benutzen <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Sie verwenden <strong>%s</strong> von <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Vollständiger Name",
"No display name set" : "Kein Anzeigename angegeben",
"Email" : "E-Mail",
@@ -408,6 +409,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Um dies auszuführen, benötigen Sie die PHP-Posix Erweiterung. Weitere Informationen in der {linkstart}PHP-Dokumentation{linkend}.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Um zu einer anderen Datenbank zu migrieren, benutzen Sie bitte die Kommandozeile: 'occ db:convert-type', oder schauen in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Sie verwenden <strong>%s</strong> der verfügbaren <strong>%s</strong>",
"Get the apps to sync your files" : "Laden Sie die Apps zur Synchronisierung Ihrer Daten herunter",
"Desktop client" : "Desktop-Client",
"Android app" : "Android-App",
diff --git a/settings/l10n/el.js b/settings/l10n/el.js
index dbd8f865939..ce42fab9487 100644
--- a/settings/l10n/el.js
+++ b/settings/l10n/el.js
@@ -258,6 +258,7 @@ OC.L10N.register(
"Restrict users to only share with users in their groups" : "Να επιτρέπεται σε χρήστες ο διαμοιρασμός μόνο με χρήστες που ανήκουν στις ομάδες τους",
"Exclude groups from sharing" : "Εξαίρεση ομάδων από τον διαμοιρασμό",
"These groups will still be able to receive shares, but not to initiate them." : "Αυτές οι ομάδες θα συνεχίσουν να λαμβάνουν διαμοιρασμούς, αλλά δεν θα είναι δυνατό να τους δημιουργήσουν.",
+ "Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Να επιτρέπεται η χρήση αυτόματης συμπλήρωσης του ονόματος χρήστη στο πεδίο διαμοιρασμού. Αν η ρύθμιση αυτή είναι απενεργοποιημένη θα πρέπει να εισαχθεί το πλήρες όνομα χρήστη ή το email του. ",
"This text will be shown on the public link upload page when the file list is hidden." : "Αυτό το κείμενο θα ",
"Tips & tricks" : "Συμβουλές & τεχνάσματα",
"How to do backups" : "Πώς να κάνετε αντίγραφα ασφαλείας",
@@ -266,8 +267,6 @@ OC.L10N.register(
"Theming" : "Θέματα",
"Check the security of your Nextcloud over our security scan" : "Ελέγξτε την ασφάλεια του Nextcloud σας μέσω της σάρωσης ασφαλείας",
"Hardening and security guidance" : "Οδηγίες ασφάλειας και θωράκισης",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Χρησιμοποιείτε <strong>%s</strong> από <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Χρησιμοποιείτε <strong>%s</strong> του <strong>%s</strong>(<strong>%s%%</strong>)",
"Profile picture" : "Φωτογραφία προφίλ",
"Upload new" : "Μεταφόρτωση νέου",
"Select from Files" : "Επιλογή από τα Αρχεία",
@@ -277,6 +276,7 @@ OC.L10N.register(
"Cancel" : "Άκυρο",
"Choose as profile picture" : "Επιλέξτε εικόνα προφίλ",
"You are member of the following groups:" : "Είστε μέλος των ακόλουθων ομάδων:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Χρησιμοποιείτε <strong>%s</strong> του <strong>%s</strong>(<strong>%s%%</strong>)",
"Full name" : "Πλήρες όνομα",
"No display name set" : "Δεν ορίστηκε όνομα",
"Email" : "Ηλεκτρονικό ταχυδρομείο",
@@ -347,6 +347,7 @@ OC.L10N.register(
"__language_name__" : "Ελληνικά",
"Personal info" : "Προσωπικές Πληροφορίες",
"Sync clients" : "Συγχρονισμός πελατών",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Χρησιμοποιείτε <strong>%s</strong> από <strong>%s</strong>",
"Desktop client" : "Πελάτης σταθερού υπολογιστή",
"Android app" : "Εφαρμογή Android",
"iOS app" : "Εφαρμογή iOS",
diff --git a/settings/l10n/el.json b/settings/l10n/el.json
index 30c4fb7829e..a4ae75b1cbe 100644
--- a/settings/l10n/el.json
+++ b/settings/l10n/el.json
@@ -256,6 +256,7 @@
"Restrict users to only share with users in their groups" : "Να επιτρέπεται σε χρήστες ο διαμοιρασμός μόνο με χρήστες που ανήκουν στις ομάδες τους",
"Exclude groups from sharing" : "Εξαίρεση ομάδων από τον διαμοιρασμό",
"These groups will still be able to receive shares, but not to initiate them." : "Αυτές οι ομάδες θα συνεχίσουν να λαμβάνουν διαμοιρασμούς, αλλά δεν θα είναι δυνατό να τους δημιουργήσουν.",
+ "Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Να επιτρέπεται η χρήση αυτόματης συμπλήρωσης του ονόματος χρήστη στο πεδίο διαμοιρασμού. Αν η ρύθμιση αυτή είναι απενεργοποιημένη θα πρέπει να εισαχθεί το πλήρες όνομα χρήστη ή το email του. ",
"This text will be shown on the public link upload page when the file list is hidden." : "Αυτό το κείμενο θα ",
"Tips & tricks" : "Συμβουλές & τεχνάσματα",
"How to do backups" : "Πώς να κάνετε αντίγραφα ασφαλείας",
@@ -264,8 +265,6 @@
"Theming" : "Θέματα",
"Check the security of your Nextcloud over our security scan" : "Ελέγξτε την ασφάλεια του Nextcloud σας μέσω της σάρωσης ασφαλείας",
"Hardening and security guidance" : "Οδηγίες ασφάλειας και θωράκισης",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Χρησιμοποιείτε <strong>%s</strong> από <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Χρησιμοποιείτε <strong>%s</strong> του <strong>%s</strong>(<strong>%s%%</strong>)",
"Profile picture" : "Φωτογραφία προφίλ",
"Upload new" : "Μεταφόρτωση νέου",
"Select from Files" : "Επιλογή από τα Αρχεία",
@@ -275,6 +274,7 @@
"Cancel" : "Άκυρο",
"Choose as profile picture" : "Επιλέξτε εικόνα προφίλ",
"You are member of the following groups:" : "Είστε μέλος των ακόλουθων ομάδων:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Χρησιμοποιείτε <strong>%s</strong> του <strong>%s</strong>(<strong>%s%%</strong>)",
"Full name" : "Πλήρες όνομα",
"No display name set" : "Δεν ορίστηκε όνομα",
"Email" : "Ηλεκτρονικό ταχυδρομείο",
@@ -345,6 +345,7 @@
"__language_name__" : "Ελληνικά",
"Personal info" : "Προσωπικές Πληροφορίες",
"Sync clients" : "Συγχρονισμός πελατών",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Χρησιμοποιείτε <strong>%s</strong> από <strong>%s</strong>",
"Desktop client" : "Πελάτης σταθερού υπολογιστή",
"Android app" : "Εφαρμογή Android",
"iOS app" : "Εφαρμογή iOS",
diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js
index 1a153a1cfa5..9d8018ccc05 100644
--- a/settings/l10n/en_GB.js
+++ b/settings/l10n/en_GB.js
@@ -307,8 +307,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Hardening and security guidance",
"Personal" : "Personal",
"Administration" : "Administration",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "You are using <strong>%s</strong> of <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profile picture",
"Upload new" : "Upload new",
"Select from Files" : "Select from Files",
@@ -318,6 +316,7 @@ OC.L10N.register(
"Cancel" : "Cancel",
"Choose as profile picture" : "Choose as profile picture",
"You are member of the following groups:" : "You are member of the following groups:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Full name",
"No display name set" : "No display name set",
"Email" : "Email",
@@ -409,6 +408,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php is registered at a webcron service to call cron.php every 15 minutes over http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "You are using <strong>%s</strong> of <strong>%s</strong>",
"Get the apps to sync your files" : "Get the apps to sync your files",
"Desktop client" : "Desktop client",
"Android app" : "Android app",
diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json
index ad0b0d99049..1c8c945db1c 100644
--- a/settings/l10n/en_GB.json
+++ b/settings/l10n/en_GB.json
@@ -305,8 +305,6 @@
"Hardening and security guidance" : "Hardening and security guidance",
"Personal" : "Personal",
"Administration" : "Administration",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "You are using <strong>%s</strong> of <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profile picture",
"Upload new" : "Upload new",
"Select from Files" : "Select from Files",
@@ -316,6 +314,7 @@
"Cancel" : "Cancel",
"Choose as profile picture" : "Choose as profile picture",
"You are member of the following groups:" : "You are member of the following groups:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Full name",
"No display name set" : "No display name set",
"Email" : "Email",
@@ -407,6 +406,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php is registered at a webcron service to call cron.php every 15 minutes over http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "You are using <strong>%s</strong> of <strong>%s</strong>",
"Get the apps to sync your files" : "Get the apps to sync your files",
"Desktop client" : "Desktop client",
"Android app" : "Android app",
diff --git a/settings/l10n/es.js b/settings/l10n/es.js
index da3d19f3607..108deb1b51f 100644
--- a/settings/l10n/es.js
+++ b/settings/l10n/es.js
@@ -308,8 +308,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Guía de protección y seguridad",
"Personal" : "Perfil",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estas usando <strong>%s</strong> de <strong>%s</strong> ",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Está usando <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Subir otra",
"Select from Files" : "Seleccionar desde Archivos",
@@ -319,6 +317,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como imagen de perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Está usando <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido ningún nombre para mostrar",
"Email" : "Correo electrónico",
@@ -410,6 +409,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado en un servicio webcron para llamar a cron.php cada 15 minutos sobre http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Para ejecutar esto, necesitas la extesión PHP posix. Ver la {linkstart}documentación de PHP{linkend} para más detalles.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar a otra base de datos, usa la herramienta de línea de comandos: ''occ db:convert-type', o mira la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estas usando <strong>%s</strong> de <strong>%s</strong> ",
"Get the apps to sync your files" : "Consigue las apps para sincronizar tus archivos.",
"Desktop client" : "Cliente de escritorio",
"Android app" : "App Android",
diff --git a/settings/l10n/es.json b/settings/l10n/es.json
index 1fc9c3f8f8a..ff18bec75d0 100644
--- a/settings/l10n/es.json
+++ b/settings/l10n/es.json
@@ -306,8 +306,6 @@
"Hardening and security guidance" : "Guía de protección y seguridad",
"Personal" : "Perfil",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estas usando <strong>%s</strong> de <strong>%s</strong> ",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Está usando <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Subir otra",
"Select from Files" : "Seleccionar desde Archivos",
@@ -317,6 +315,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como imagen de perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Está usando <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido ningún nombre para mostrar",
"Email" : "Correo electrónico",
@@ -408,6 +407,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado en un servicio webcron para llamar a cron.php cada 15 minutos sobre http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Para ejecutar esto, necesitas la extesión PHP posix. Ver la {linkstart}documentación de PHP{linkend} para más detalles.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar a otra base de datos, usa la herramienta de línea de comandos: ''occ db:convert-type', o mira la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estas usando <strong>%s</strong> de <strong>%s</strong> ",
"Get the apps to sync your files" : "Consigue las apps para sincronizar tus archivos.",
"Desktop client" : "Cliente de escritorio",
"Android app" : "App Android",
diff --git a/settings/l10n/es_419.js b/settings/l10n/es_419.js
index c5df2e661c9..9f0cd0c2fc9 100644
--- a/settings/l10n/es_419.js
+++ b/settings/l10n/es_419.js
@@ -298,8 +298,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -309,6 +307,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -375,6 +374,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_419.json b/settings/l10n/es_419.json
index d50fed34529..9db9aa036be 100644
--- a/settings/l10n/es_419.json
+++ b/settings/l10n/es_419.json
@@ -296,8 +296,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -307,6 +305,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -373,6 +372,7 @@
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_AR.js b/settings/l10n/es_AR.js
index 81015216b79..0d19d610d86 100644
--- a/settings/l10n/es_AR.js
+++ b/settings/l10n/es_AR.js
@@ -274,8 +274,6 @@ OC.L10N.register(
"Theming" : "Tematizar",
"Check the security of your Nextcloud over our security scan" : "Verifique la seguridad de su Nextcloud con nuestro escaneo de seguridad",
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Usted está usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Usted está usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -285,6 +283,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Usted es un miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Usted está usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -346,6 +345,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Usted está usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_AR.json b/settings/l10n/es_AR.json
index e2c5eceba3a..fabe1bf4235 100644
--- a/settings/l10n/es_AR.json
+++ b/settings/l10n/es_AR.json
@@ -272,8 +272,6 @@
"Theming" : "Tematizar",
"Check the security of your Nextcloud over our security scan" : "Verifique la seguridad de su Nextcloud con nuestro escaneo de seguridad",
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Usted está usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Usted está usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -283,6 +281,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Usted es un miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Usted está usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -344,6 +343,7 @@
"Add trusted domain" : "Agregar dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Usted está usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_CL.js b/settings/l10n/es_CL.js
index 6d0dfb4427a..d9de6d16366 100644
--- a/settings/l10n/es_CL.js
+++ b/settings/l10n/es_CL.js
@@ -298,8 +298,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -309,6 +307,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -375,6 +374,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_CL.json b/settings/l10n/es_CL.json
index 5c302568a2c..6433f17ffe8 100644
--- a/settings/l10n/es_CL.json
+++ b/settings/l10n/es_CL.json
@@ -296,8 +296,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -307,6 +305,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -373,6 +372,7 @@
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_CO.js b/settings/l10n/es_CO.js
index 6d0dfb4427a..d9de6d16366 100644
--- a/settings/l10n/es_CO.js
+++ b/settings/l10n/es_CO.js
@@ -298,8 +298,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -309,6 +307,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -375,6 +374,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_CO.json b/settings/l10n/es_CO.json
index 5c302568a2c..6433f17ffe8 100644
--- a/settings/l10n/es_CO.json
+++ b/settings/l10n/es_CO.json
@@ -296,8 +296,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -307,6 +305,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -373,6 +372,7 @@
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_CR.js b/settings/l10n/es_CR.js
index 6d0dfb4427a..d9de6d16366 100644
--- a/settings/l10n/es_CR.js
+++ b/settings/l10n/es_CR.js
@@ -298,8 +298,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -309,6 +307,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -375,6 +374,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_CR.json b/settings/l10n/es_CR.json
index 5c302568a2c..6433f17ffe8 100644
--- a/settings/l10n/es_CR.json
+++ b/settings/l10n/es_CR.json
@@ -296,8 +296,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -307,6 +305,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -373,6 +372,7 @@
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_DO.js b/settings/l10n/es_DO.js
index 6d0dfb4427a..d9de6d16366 100644
--- a/settings/l10n/es_DO.js
+++ b/settings/l10n/es_DO.js
@@ -298,8 +298,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -309,6 +307,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -375,6 +374,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_DO.json b/settings/l10n/es_DO.json
index 5c302568a2c..6433f17ffe8 100644
--- a/settings/l10n/es_DO.json
+++ b/settings/l10n/es_DO.json
@@ -296,8 +296,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -307,6 +305,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -373,6 +372,7 @@
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_EC.js b/settings/l10n/es_EC.js
index 6d0dfb4427a..d9de6d16366 100644
--- a/settings/l10n/es_EC.js
+++ b/settings/l10n/es_EC.js
@@ -298,8 +298,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -309,6 +307,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -375,6 +374,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_EC.json b/settings/l10n/es_EC.json
index 5c302568a2c..6433f17ffe8 100644
--- a/settings/l10n/es_EC.json
+++ b/settings/l10n/es_EC.json
@@ -296,8 +296,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -307,6 +305,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -373,6 +372,7 @@
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_GT.js b/settings/l10n/es_GT.js
index 6d0dfb4427a..d9de6d16366 100644
--- a/settings/l10n/es_GT.js
+++ b/settings/l10n/es_GT.js
@@ -298,8 +298,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -309,6 +307,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -375,6 +374,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_GT.json b/settings/l10n/es_GT.json
index 5c302568a2c..6433f17ffe8 100644
--- a/settings/l10n/es_GT.json
+++ b/settings/l10n/es_GT.json
@@ -296,8 +296,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -307,6 +305,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -373,6 +372,7 @@
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_HN.js b/settings/l10n/es_HN.js
index 6d0dfb4427a..d9de6d16366 100644
--- a/settings/l10n/es_HN.js
+++ b/settings/l10n/es_HN.js
@@ -298,8 +298,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -309,6 +307,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -375,6 +374,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_HN.json b/settings/l10n/es_HN.json
index 5c302568a2c..6433f17ffe8 100644
--- a/settings/l10n/es_HN.json
+++ b/settings/l10n/es_HN.json
@@ -296,8 +296,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -307,6 +305,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -373,6 +372,7 @@
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_MX.js b/settings/l10n/es_MX.js
index bede844d7f0..24c5ee424cb 100644
--- a/settings/l10n/es_MX.js
+++ b/settings/l10n/es_MX.js
@@ -158,6 +158,7 @@ OC.L10N.register(
"Good password" : "Buena contraseña",
"Strong password" : "Contraseña fuerte",
"Groups" : "Grupos",
+ "Group list is empty" : "La lista de Grupo está vacía",
"Unable to retrieve the group list" : "No fue posible recuperar la lista del grupo",
"Unable to delete {objName}" : "No fue posible borrar {objName}",
"Error creating group: {message}" : "Se presentó un error al crear el grupo: {message}",
@@ -307,8 +308,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -317,7 +316,10 @@ OC.L10N.register(
"Picture provided by original account" : "Imagen proporcionada por la cuenta original ",
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
+ "Details" : "Detalles",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong>" : "Estás usando<strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -409,6 +411,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado en el servicio webcron para llamar a cron.php cada 15 minutos a través de http. ",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Para correr esto necesitas la extensión posix de PHP. Por favor consulta la {linkstart}documentación de PHP{linkend} para más detalles. ",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar a otra base de datos, usa la herramienta de la línea de comando 'occ db:convert-type', o consulta la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación ↗</a>. ",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Get the apps to sync your files" : "Obten las aplicaciones para sincronizar tus archivos",
"Desktop client" : "Cliente de escritorio",
"Android app" : "Aplicación Android",
diff --git a/settings/l10n/es_MX.json b/settings/l10n/es_MX.json
index 0a0d205b33e..6c519437225 100644
--- a/settings/l10n/es_MX.json
+++ b/settings/l10n/es_MX.json
@@ -156,6 +156,7 @@
"Good password" : "Buena contraseña",
"Strong password" : "Contraseña fuerte",
"Groups" : "Grupos",
+ "Group list is empty" : "La lista de Grupo está vacía",
"Unable to retrieve the group list" : "No fue posible recuperar la lista del grupo",
"Unable to delete {objName}" : "No fue posible borrar {objName}",
"Error creating group: {message}" : "Se presentó un error al crear el grupo: {message}",
@@ -305,8 +306,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -315,7 +314,10 @@
"Picture provided by original account" : "Imagen proporcionada por la cuenta original ",
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
+ "Details" : "Detalles",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong>" : "Estás usando<strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -407,6 +409,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado en el servicio webcron para llamar a cron.php cada 15 minutos a través de http. ",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Para correr esto necesitas la extensión posix de PHP. Por favor consulta la {linkstart}documentación de PHP{linkend} para más detalles. ",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar a otra base de datos, usa la herramienta de la línea de comando 'occ db:convert-type', o consulta la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación ↗</a>. ",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Get the apps to sync your files" : "Obten las aplicaciones para sincronizar tus archivos",
"Desktop client" : "Cliente de escritorio",
"Android app" : "Aplicación Android",
diff --git a/settings/l10n/es_NI.js b/settings/l10n/es_NI.js
index 6d0dfb4427a..d9de6d16366 100644
--- a/settings/l10n/es_NI.js
+++ b/settings/l10n/es_NI.js
@@ -298,8 +298,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -309,6 +307,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -375,6 +374,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_NI.json b/settings/l10n/es_NI.json
index 5c302568a2c..6433f17ffe8 100644
--- a/settings/l10n/es_NI.json
+++ b/settings/l10n/es_NI.json
@@ -296,8 +296,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -307,6 +305,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -373,6 +372,7 @@
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_PA.js b/settings/l10n/es_PA.js
index 6d0dfb4427a..d9de6d16366 100644
--- a/settings/l10n/es_PA.js
+++ b/settings/l10n/es_PA.js
@@ -298,8 +298,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -309,6 +307,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -375,6 +374,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_PA.json b/settings/l10n/es_PA.json
index 5c302568a2c..6433f17ffe8 100644
--- a/settings/l10n/es_PA.json
+++ b/settings/l10n/es_PA.json
@@ -296,8 +296,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -307,6 +305,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -373,6 +372,7 @@
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_PE.js b/settings/l10n/es_PE.js
index 6d0dfb4427a..d9de6d16366 100644
--- a/settings/l10n/es_PE.js
+++ b/settings/l10n/es_PE.js
@@ -298,8 +298,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -309,6 +307,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -375,6 +374,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_PE.json b/settings/l10n/es_PE.json
index 5c302568a2c..6433f17ffe8 100644
--- a/settings/l10n/es_PE.json
+++ b/settings/l10n/es_PE.json
@@ -296,8 +296,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -307,6 +305,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -373,6 +372,7 @@
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_PR.js b/settings/l10n/es_PR.js
index 6d0dfb4427a..d9de6d16366 100644
--- a/settings/l10n/es_PR.js
+++ b/settings/l10n/es_PR.js
@@ -298,8 +298,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -309,6 +307,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -375,6 +374,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_PR.json b/settings/l10n/es_PR.json
index 5c302568a2c..6433f17ffe8 100644
--- a/settings/l10n/es_PR.json
+++ b/settings/l10n/es_PR.json
@@ -296,8 +296,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -307,6 +305,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -373,6 +372,7 @@
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_PY.js b/settings/l10n/es_PY.js
index 6d0dfb4427a..d9de6d16366 100644
--- a/settings/l10n/es_PY.js
+++ b/settings/l10n/es_PY.js
@@ -298,8 +298,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -309,6 +307,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -375,6 +374,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_PY.json b/settings/l10n/es_PY.json
index 5c302568a2c..6433f17ffe8 100644
--- a/settings/l10n/es_PY.json
+++ b/settings/l10n/es_PY.json
@@ -296,8 +296,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -307,6 +305,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -373,6 +372,7 @@
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_SV.js b/settings/l10n/es_SV.js
index 6d0dfb4427a..d9de6d16366 100644
--- a/settings/l10n/es_SV.js
+++ b/settings/l10n/es_SV.js
@@ -298,8 +298,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -309,6 +307,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -375,6 +374,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_SV.json b/settings/l10n/es_SV.json
index 5c302568a2c..6433f17ffe8 100644
--- a/settings/l10n/es_SV.json
+++ b/settings/l10n/es_SV.json
@@ -296,8 +296,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -307,6 +305,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -373,6 +372,7 @@
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_UY.js b/settings/l10n/es_UY.js
index 6d0dfb4427a..d9de6d16366 100644
--- a/settings/l10n/es_UY.js
+++ b/settings/l10n/es_UY.js
@@ -298,8 +298,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -309,6 +307,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -375,6 +374,7 @@ OC.L10N.register(
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/es_UY.json b/settings/l10n/es_UY.json
index 5c302568a2c..6433f17ffe8 100644
--- a/settings/l10n/es_UY.json
+++ b/settings/l10n/es_UY.json
@@ -296,8 +296,6 @@
"Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
"Personal" : "Personal",
"Administration" : "Administración",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Cargar nuevo",
"Select from Files" : "Seleccionar desde Archivos",
@@ -307,6 +305,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como foto del perfil",
"You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Full name" : "Nombre completo",
"No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
@@ -373,6 +372,7 @@
"Add trusted domain" : "Agregar un dominio de confianza",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Mostrar dirección de correo electrónico",
"Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
"Create" : "Crear"
diff --git a/settings/l10n/eu.js b/settings/l10n/eu.js
index b48399f34a1..9b6c0a7f736 100644
--- a/settings/l10n/eu.js
+++ b/settings/l10n/eu.js
@@ -283,8 +283,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Gogortze eta segurtasun gida",
"Personal" : "Pertsonala",
"Administration" : "Administrazioa",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Zuk <strong>%s</strong> erabiltzen ari zara <strong>%s</strong>-tik",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "<strong>%s</strong> erabiltzen ari zara,<strong>%s</strong>-koa (<strong>%s %%</strong>)",
"Profile picture" : "Zure irudia",
"Upload new" : "Igo berria",
"Select from Files" : "Aukeratu fitxategien artean",
@@ -294,6 +292,7 @@ OC.L10N.register(
"Cancel" : "Ezeztatu",
"Choose as profile picture" : "Aukeratu profil irudi gisa",
"You are member of the following groups:" : "Zuk honako talde kide zara:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "<strong>%s</strong> erabiltzen ari zara,<strong>%s</strong>-koa (<strong>%s %%</strong>)",
"Full name" : "Izen osoa",
"No display name set" : "Ez da bistaratze izena ezarri",
"Email" : "E-posta",
@@ -357,6 +356,7 @@ OC.L10N.register(
"Add trusted domain" : "Gehitu domeinu fidagarria",
"A valid password must be provided" : "Baliozko pasahitza eman behar da",
"A valid email must be provided" : "Baliozko posta elektronikoa eman behar da",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Zuk <strong>%s</strong> erabiltzen ari zara <strong>%s</strong>-tik",
"Show email address" : "Bistaratu eposta helbidea",
"Send email to new user" : "Bidali eposta erabiltzaile berriari",
"Create" : "Sortu"
diff --git a/settings/l10n/eu.json b/settings/l10n/eu.json
index 4f5fec59463..9c9b4743f4e 100644
--- a/settings/l10n/eu.json
+++ b/settings/l10n/eu.json
@@ -281,8 +281,6 @@
"Hardening and security guidance" : "Gogortze eta segurtasun gida",
"Personal" : "Pertsonala",
"Administration" : "Administrazioa",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Zuk <strong>%s</strong> erabiltzen ari zara <strong>%s</strong>-tik",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "<strong>%s</strong> erabiltzen ari zara,<strong>%s</strong>-koa (<strong>%s %%</strong>)",
"Profile picture" : "Zure irudia",
"Upload new" : "Igo berria",
"Select from Files" : "Aukeratu fitxategien artean",
@@ -292,6 +290,7 @@
"Cancel" : "Ezeztatu",
"Choose as profile picture" : "Aukeratu profil irudi gisa",
"You are member of the following groups:" : "Zuk honako talde kide zara:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "<strong>%s</strong> erabiltzen ari zara,<strong>%s</strong>-koa (<strong>%s %%</strong>)",
"Full name" : "Izen osoa",
"No display name set" : "Ez da bistaratze izena ezarri",
"Email" : "E-posta",
@@ -355,6 +354,7 @@
"Add trusted domain" : "Gehitu domeinu fidagarria",
"A valid password must be provided" : "Baliozko pasahitza eman behar da",
"A valid email must be provided" : "Baliozko posta elektronikoa eman behar da",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Zuk <strong>%s</strong> erabiltzen ari zara <strong>%s</strong>-tik",
"Show email address" : "Bistaratu eposta helbidea",
"Send email to new user" : "Bidali eposta erabiltzaile berriari",
"Create" : "Sortu"
diff --git a/settings/l10n/fi.js b/settings/l10n/fi.js
index 5573eb9e57e..3ff7c472c13 100644
--- a/settings/l10n/fi.js
+++ b/settings/l10n/fi.js
@@ -152,6 +152,8 @@ OC.L10N.register(
"Good password" : "Hyvä salasana",
"Strong password" : "Vahva salasana",
"Groups" : "Ryhmät",
+ "Group list is empty" : "Ryhmälista on tyhjä",
+ "Unable to retrieve the group list" : "Ryhmälistaa ei voitu noutaa",
"Unable to delete {objName}" : "Kohteen {objName} poistaminen epäonnistui",
"Error creating group: {message}" : "Virhe ryhmää luotaessa: {message}",
"A valid group name must be provided" : "Anna kelvollinen ryhmän nimi",
@@ -242,6 +244,7 @@ OC.L10N.register(
"The PHP module 'fileinfo' is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "PHP-moduuli 'fileinfo' puuttuu. Suosittelemme kyseisen moduulin ottamista käyttöön, jotta MIME-tyyppien havaitseminen toimii parhaalla mahdollisella tavalla.",
"System locale can not be set to a one which supports UTF-8." : "Järjestelmän maa-asetusta ei voi asettaa UTF-8:aa tukevaksi.",
"This means that there might be problems with certain characters in filenames." : "Tämä tarkoittaa, että jotkin merkit saattavat aiheuttaa ongelmia tiedostojen nimissä.",
+ "It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "Cron-työtä ei voitu suorittaa komentorivin kautta. Havaittiin seuraavat tekniset virheet:",
"All checks passed." : "Läpäistiin kaikki tarkistukset.",
"Background jobs" : "Taustatyöt",
"Last job ran %s." : "Viimeisin työ suoritettu %s.",
@@ -283,8 +286,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Turvaamis- ja tietoturvaopas",
"Personal" : "Henkilökohtainen",
"Administration" : "Ylläpito",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Käytössäsi on <strong>%s</strong>/<strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Käytössäsi on <strong>%s</strong>/<strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profiilikuva",
"Upload new" : "Lähetä uusi",
"Select from Files" : "Valitse tiedostosovelluksesta",
@@ -293,7 +294,10 @@ OC.L10N.register(
"Picture provided by original account" : "Kuvan tarjoaa alkuperäinen tili",
"Cancel" : "Peru",
"Choose as profile picture" : "Valitse profiilikuvaksi",
+ "Details" : "Yksityiskohdat",
"You are member of the following groups:" : "Olet jäsenenä seuraavissa ryhmissä:",
+ "You are using <strong>%s</strong>" : "Käytössäsi on <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Käytössäsi on <strong>%s</strong>/<strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Koko nimi",
"No display name set" : "Näyttönimeä ei ole asetettu",
"Email" : "Sähköpostiosoite",
@@ -369,12 +373,15 @@ OC.L10N.register(
"Personal info" : "Henkilökohtaiset tiedot",
"Sync clients" : "Synkronointiasiakkaat",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with MIME type detection." : "PHP-moduuli 'fileinfo' puuttuu. Suosittelemme sen ottamista käyttöön, jotta MIME-tyypit on mahdollista havaita parhain tuloksin.",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Cron-työtä ei voitu suorittaa komentorivin kautta. Havaittiin seuraavat tekniset virheet:",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Siirtyäksesi toiseen tietokantaan, käytä komentorivityökalua: 'occ db:convert-type', tai lue <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentaatio ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Käytössäsi on <strong>%s</strong>/<strong>%s</strong>",
"Get the apps to sync your files" : "Laita sovellukset synkronoimaan tiedostosi",
"Desktop client" : "Työpöytäsovellus",
"Android app" : "Android-sovellus",
"iOS app" : "iOS-sovellus",
"If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Jos haluat tukea projektia, {contributeopen}liity mukaan kehitystoimintaan{linkclose} tai {contributeopen}levitä sanaa{linkclose}!",
+ "Show First Run Wizard again" : "Näytä ensimmäisen käyttökerran avustaja uudelleen",
"Web, desktop, mobile clients and app specific passwords that currently have access to your account." : "Verkko-, työpöytä-, mobiilisovellukset ja sovellusten yksittäiset salasanat, joilla on käyttöoikeus tiliisi.",
"App passwords" : "Sovellussalasanat",
"Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Täällä voit luoda yksittäisiä salasanoja sovelluksille, jolloin sinun ei tarvitse antaa varsinaista salasanaa niille. Voit kumota yksittäisten sovellusten salasanoja.",
diff --git a/settings/l10n/fi.json b/settings/l10n/fi.json
index b662fc85fd7..db0d6b4d777 100644
--- a/settings/l10n/fi.json
+++ b/settings/l10n/fi.json
@@ -150,6 +150,8 @@
"Good password" : "Hyvä salasana",
"Strong password" : "Vahva salasana",
"Groups" : "Ryhmät",
+ "Group list is empty" : "Ryhmälista on tyhjä",
+ "Unable to retrieve the group list" : "Ryhmälistaa ei voitu noutaa",
"Unable to delete {objName}" : "Kohteen {objName} poistaminen epäonnistui",
"Error creating group: {message}" : "Virhe ryhmää luotaessa: {message}",
"A valid group name must be provided" : "Anna kelvollinen ryhmän nimi",
@@ -240,6 +242,7 @@
"The PHP module 'fileinfo' is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "PHP-moduuli 'fileinfo' puuttuu. Suosittelemme kyseisen moduulin ottamista käyttöön, jotta MIME-tyyppien havaitseminen toimii parhaalla mahdollisella tavalla.",
"System locale can not be set to a one which supports UTF-8." : "Järjestelmän maa-asetusta ei voi asettaa UTF-8:aa tukevaksi.",
"This means that there might be problems with certain characters in filenames." : "Tämä tarkoittaa, että jotkin merkit saattavat aiheuttaa ongelmia tiedostojen nimissä.",
+ "It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "Cron-työtä ei voitu suorittaa komentorivin kautta. Havaittiin seuraavat tekniset virheet:",
"All checks passed." : "Läpäistiin kaikki tarkistukset.",
"Background jobs" : "Taustatyöt",
"Last job ran %s." : "Viimeisin työ suoritettu %s.",
@@ -281,8 +284,6 @@
"Hardening and security guidance" : "Turvaamis- ja tietoturvaopas",
"Personal" : "Henkilökohtainen",
"Administration" : "Ylläpito",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Käytössäsi on <strong>%s</strong>/<strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Käytössäsi on <strong>%s</strong>/<strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profiilikuva",
"Upload new" : "Lähetä uusi",
"Select from Files" : "Valitse tiedostosovelluksesta",
@@ -291,7 +292,10 @@
"Picture provided by original account" : "Kuvan tarjoaa alkuperäinen tili",
"Cancel" : "Peru",
"Choose as profile picture" : "Valitse profiilikuvaksi",
+ "Details" : "Yksityiskohdat",
"You are member of the following groups:" : "Olet jäsenenä seuraavissa ryhmissä:",
+ "You are using <strong>%s</strong>" : "Käytössäsi on <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Käytössäsi on <strong>%s</strong>/<strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Koko nimi",
"No display name set" : "Näyttönimeä ei ole asetettu",
"Email" : "Sähköpostiosoite",
@@ -367,12 +371,15 @@
"Personal info" : "Henkilökohtaiset tiedot",
"Sync clients" : "Synkronointiasiakkaat",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with MIME type detection." : "PHP-moduuli 'fileinfo' puuttuu. Suosittelemme sen ottamista käyttöön, jotta MIME-tyypit on mahdollista havaita parhain tuloksin.",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Cron-työtä ei voitu suorittaa komentorivin kautta. Havaittiin seuraavat tekniset virheet:",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Siirtyäksesi toiseen tietokantaan, käytä komentorivityökalua: 'occ db:convert-type', tai lue <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentaatio ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Käytössäsi on <strong>%s</strong>/<strong>%s</strong>",
"Get the apps to sync your files" : "Laita sovellukset synkronoimaan tiedostosi",
"Desktop client" : "Työpöytäsovellus",
"Android app" : "Android-sovellus",
"iOS app" : "iOS-sovellus",
"If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Jos haluat tukea projektia, {contributeopen}liity mukaan kehitystoimintaan{linkclose} tai {contributeopen}levitä sanaa{linkclose}!",
+ "Show First Run Wizard again" : "Näytä ensimmäisen käyttökerran avustaja uudelleen",
"Web, desktop, mobile clients and app specific passwords that currently have access to your account." : "Verkko-, työpöytä-, mobiilisovellukset ja sovellusten yksittäiset salasanat, joilla on käyttöoikeus tiliisi.",
"App passwords" : "Sovellussalasanat",
"Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Täällä voit luoda yksittäisiä salasanoja sovelluksille, jolloin sinun ei tarvitse antaa varsinaista salasanaa niille. Voit kumota yksittäisten sovellusten salasanoja.",
diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js
index 9651b98ca69..96b755bebec 100644
--- a/settings/l10n/fr.js
+++ b/settings/l10n/fr.js
@@ -308,8 +308,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Guide pour le renforcement et la sécurité",
"Personal" : "Personnel",
"Administration" : "Administration",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Vous utilisez <strong>%s</strong> sur <strong>%s<strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Vous utilisez <strong>%s</strong> sur <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Photo de profil",
"Upload new" : "Nouvelle depuis votre ordinateur",
"Select from Files" : "Sélectionner depuis les Fichiers",
@@ -319,6 +317,7 @@ OC.L10N.register(
"Cancel" : "Annuler",
"Choose as profile picture" : "Définir comme image de profil",
"You are member of the following groups:" : "Vous êtes membre des groupes suivants :",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Vous utilisez <strong>%s</strong> sur <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Nom complet",
"No display name set" : "Aucun nom d'affichage configuré",
"Email" : "Adresse e-mail",
@@ -410,6 +409,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php est enregistré à un service webcron pour exécuter cron.php toutes les 15 minutes par HTTP.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Pour l'exécuter, vous devez avoir l'extension PHP posix. Regarder la {linkstart}documentation PHP{linkend} pour plus de détails.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Pour migrer vers un autre type de base de données, utilisez la ligne de commande : 'occ db:convert-type' ou consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Vous utilisez <strong>%s</strong> sur <strong>%s<strong>",
"Get the apps to sync your files" : "Obtenez les applications pour synchroniser vos fichiers",
"Desktop client" : "Client de bureau",
"Android app" : "Application Android",
diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json
index 01a29694417..3e33e5a3904 100644
--- a/settings/l10n/fr.json
+++ b/settings/l10n/fr.json
@@ -306,8 +306,6 @@
"Hardening and security guidance" : "Guide pour le renforcement et la sécurité",
"Personal" : "Personnel",
"Administration" : "Administration",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Vous utilisez <strong>%s</strong> sur <strong>%s<strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Vous utilisez <strong>%s</strong> sur <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Photo de profil",
"Upload new" : "Nouvelle depuis votre ordinateur",
"Select from Files" : "Sélectionner depuis les Fichiers",
@@ -317,6 +315,7 @@
"Cancel" : "Annuler",
"Choose as profile picture" : "Définir comme image de profil",
"You are member of the following groups:" : "Vous êtes membre des groupes suivants :",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Vous utilisez <strong>%s</strong> sur <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Nom complet",
"No display name set" : "Aucun nom d'affichage configuré",
"Email" : "Adresse e-mail",
@@ -408,6 +407,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php est enregistré à un service webcron pour exécuter cron.php toutes les 15 minutes par HTTP.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Pour l'exécuter, vous devez avoir l'extension PHP posix. Regarder la {linkstart}documentation PHP{linkend} pour plus de détails.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Pour migrer vers un autre type de base de données, utilisez la ligne de commande : 'occ db:convert-type' ou consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Vous utilisez <strong>%s</strong> sur <strong>%s<strong>",
"Get the apps to sync your files" : "Obtenez les applications pour synchroniser vos fichiers",
"Desktop client" : "Client de bureau",
"Android app" : "Application Android",
diff --git a/settings/l10n/he.js b/settings/l10n/he.js
index 4dfe474c6e6..732dd753f71 100644
--- a/settings/l10n/he.js
+++ b/settings/l10n/he.js
@@ -168,7 +168,6 @@ OC.L10N.register(
"Improving the config.php" : "שיפור קובץ config.php",
"Theming" : "ערכת נושא",
"Hardening and security guidance" : "הדרכת הקשחה ואבטחה",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "הנך משתמש ב- <strong>%s</strong> מתוך <strong>%s</strong>",
"Profile picture" : "תמונת פרופיל",
"Upload new" : "העלאת חדש",
"Select from Files" : "בחירה מתוך קבצים",
@@ -213,6 +212,7 @@ OC.L10N.register(
"Add trusted domain" : "הוספת שם מתחם מהימן",
"A valid password must be provided" : "יש לספק סיסמא תקנית",
"A valid email must be provided" : "יש לספק כתובת דואר אלקטרוני תקנית",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "הנך משתמש ב- <strong>%s</strong> מתוך <strong>%s</strong>",
"Show email address" : "הצגת כתובת דואר אלקטרוני",
"Send email to new user" : "שליחת דואר אלקטרוני למשתמש חדש",
"Create" : "יצירה"
diff --git a/settings/l10n/he.json b/settings/l10n/he.json
index dc8ed4b3380..ee4389fbfb8 100644
--- a/settings/l10n/he.json
+++ b/settings/l10n/he.json
@@ -166,7 +166,6 @@
"Improving the config.php" : "שיפור קובץ config.php",
"Theming" : "ערכת נושא",
"Hardening and security guidance" : "הדרכת הקשחה ואבטחה",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "הנך משתמש ב- <strong>%s</strong> מתוך <strong>%s</strong>",
"Profile picture" : "תמונת פרופיל",
"Upload new" : "העלאת חדש",
"Select from Files" : "בחירה מתוך קבצים",
@@ -211,6 +210,7 @@
"Add trusted domain" : "הוספת שם מתחם מהימן",
"A valid password must be provided" : "יש לספק סיסמא תקנית",
"A valid email must be provided" : "יש לספק כתובת דואר אלקטרוני תקנית",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "הנך משתמש ב- <strong>%s</strong> מתוך <strong>%s</strong>",
"Show email address" : "הצגת כתובת דואר אלקטרוני",
"Send email to new user" : "שליחת דואר אלקטרוני למשתמש חדש",
"Create" : "יצירה"
diff --git a/settings/l10n/hu.js b/settings/l10n/hu.js
index bd3b846a36b..112b88b245f 100644
--- a/settings/l10n/hu.js
+++ b/settings/l10n/hu.js
@@ -307,8 +307,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Megerősítési és biztonsági útmutató",
"Personal" : "Személyes",
"Administration" : "Adminisztrátor",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Jelenleg használt: <strong>%s</strong>, maximálisan elérhető: <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Jelenleg használt: <strong>%s</strong>, ebből: <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profilkép",
"Upload new" : "Új feltöltése",
"Select from Files" : "Kiválasztás fájlokból",
@@ -318,6 +316,7 @@ OC.L10N.register(
"Cancel" : "Mégsem",
"Choose as profile picture" : "Kiválasztás profil képként",
"You are member of the following groups:" : "Tagja vagy a következő csoport(ok)nak:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Jelenleg használt: <strong>%s</strong>, ebből: <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Teljes név",
"No display name set" : "Nincs megjelenítési név beállítva",
"Email" : "E-mail",
@@ -409,6 +408,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "A cron.php webcron szolgáltatásként van regisztrálva, hogy 15 percenként egyszer lefuttassa a cron.php-t.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Ennek a futtatásához szükség van a PHP posix kiterjesztésre. További információkért nézd meg a {linkstart}PHP dokumentációt{linkend}.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Más adatbázisról való áttéréshez használja a parancssort: 'occ db:convert-type', vagy keresse fel a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentációt ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Jelenleg használt: <strong>%s</strong>, maximálisan elérhető: <strong>%s</strong>",
"Get the apps to sync your files" : "Alkalmazások a fájljaid szinkronizálásához",
"Desktop client" : "Asztali kliens",
"Android app" : "Android alkalmazás",
diff --git a/settings/l10n/hu.json b/settings/l10n/hu.json
index b54afcdde2b..0cbeedf75a1 100644
--- a/settings/l10n/hu.json
+++ b/settings/l10n/hu.json
@@ -305,8 +305,6 @@
"Hardening and security guidance" : "Megerősítési és biztonsági útmutató",
"Personal" : "Személyes",
"Administration" : "Adminisztrátor",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Jelenleg használt: <strong>%s</strong>, maximálisan elérhető: <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Jelenleg használt: <strong>%s</strong>, ebből: <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profilkép",
"Upload new" : "Új feltöltése",
"Select from Files" : "Kiválasztás fájlokból",
@@ -316,6 +314,7 @@
"Cancel" : "Mégsem",
"Choose as profile picture" : "Kiválasztás profil képként",
"You are member of the following groups:" : "Tagja vagy a következő csoport(ok)nak:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Jelenleg használt: <strong>%s</strong>, ebből: <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Teljes név",
"No display name set" : "Nincs megjelenítési név beállítva",
"Email" : "E-mail",
@@ -407,6 +406,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "A cron.php webcron szolgáltatásként van regisztrálva, hogy 15 percenként egyszer lefuttassa a cron.php-t.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Ennek a futtatásához szükség van a PHP posix kiterjesztésre. További információkért nézd meg a {linkstart}PHP dokumentációt{linkend}.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Más adatbázisról való áttéréshez használja a parancssort: 'occ db:convert-type', vagy keresse fel a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentációt ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Jelenleg használt: <strong>%s</strong>, maximálisan elérhető: <strong>%s</strong>",
"Get the apps to sync your files" : "Alkalmazások a fájljaid szinkronizálásához",
"Desktop client" : "Asztali kliens",
"Android app" : "Android alkalmazás",
diff --git a/settings/l10n/ia.js b/settings/l10n/ia.js
index 710d64b7e15..28a28282c9b 100644
--- a/settings/l10n/ia.js
+++ b/settings/l10n/ia.js
@@ -161,7 +161,6 @@ OC.L10N.register(
"How to do backups" : "Como facer retrocopias",
"Improving the config.php" : "Meliorante config.php",
"Theming" : "Personalisante themas",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Tu usa <strong>%s</strong> de <strong>%s</strong>",
"Profile picture" : "Pictura de profilo",
"Upload new" : "Incargar nove",
"Select from Files" : "Selectionar de Files",
@@ -211,6 +210,7 @@ OC.L10N.register(
"Add trusted domain" : "Adder dominio fiduciari",
"A valid password must be provided" : "Un contrasigno valide debe esser providite",
"A valid email must be provided" : "Un adresse de e-posta valide debe esser providite",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Tu usa <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Monstrar adresse de e-posta",
"Send email to new user" : "Inviar message de e-posta a nove usator",
"Create" : "Crear"
diff --git a/settings/l10n/ia.json b/settings/l10n/ia.json
index c6cbf6699b0..ee4d944cb69 100644
--- a/settings/l10n/ia.json
+++ b/settings/l10n/ia.json
@@ -159,7 +159,6 @@
"How to do backups" : "Como facer retrocopias",
"Improving the config.php" : "Meliorante config.php",
"Theming" : "Personalisante themas",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Tu usa <strong>%s</strong> de <strong>%s</strong>",
"Profile picture" : "Pictura de profilo",
"Upload new" : "Incargar nove",
"Select from Files" : "Selectionar de Files",
@@ -209,6 +208,7 @@
"Add trusted domain" : "Adder dominio fiduciari",
"A valid password must be provided" : "Un contrasigno valide debe esser providite",
"A valid email must be provided" : "Un adresse de e-posta valide debe esser providite",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Tu usa <strong>%s</strong> de <strong>%s</strong>",
"Show email address" : "Monstrar adresse de e-posta",
"Send email to new user" : "Inviar message de e-posta a nove usator",
"Create" : "Crear"
diff --git a/settings/l10n/id.js b/settings/l10n/id.js
index 313c3ea4810..8f3b46c7876 100644
--- a/settings/l10n/id.js
+++ b/settings/l10n/id.js
@@ -208,7 +208,6 @@ OC.L10N.register(
"Improving the config.php" : "Memperbaiki config.php",
"Theming" : "Tema",
"Hardening and security guidance" : "Panduan Keselamatan dan Keamanan",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Anda sedang menggunakan <strong>%s</strong> dari <strong>%s</strong>",
"Profile picture" : "Foto profil",
"Upload new" : "Unggah baru",
"Select from Files" : "Pilih dari berkas",
@@ -264,6 +263,7 @@ OC.L10N.register(
"Add trusted domain" : "Tambah domain terpercaya",
"A valid password must be provided" : "Harus memberikan kata sandi yang benar",
"A valid email must be provided" : "Surel yang benar harus diberikan",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Anda sedang menggunakan <strong>%s</strong> dari <strong>%s</strong>",
"Show email address" : "Tampilkan alamat surel",
"Send email to new user" : "Kirim surel kepada pengguna baru",
"Create" : "Buat"
diff --git a/settings/l10n/id.json b/settings/l10n/id.json
index 0559677cdad..5978ae2db93 100644
--- a/settings/l10n/id.json
+++ b/settings/l10n/id.json
@@ -206,7 +206,6 @@
"Improving the config.php" : "Memperbaiki config.php",
"Theming" : "Tema",
"Hardening and security guidance" : "Panduan Keselamatan dan Keamanan",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Anda sedang menggunakan <strong>%s</strong> dari <strong>%s</strong>",
"Profile picture" : "Foto profil",
"Upload new" : "Unggah baru",
"Select from Files" : "Pilih dari berkas",
@@ -262,6 +261,7 @@
"Add trusted domain" : "Tambah domain terpercaya",
"A valid password must be provided" : "Harus memberikan kata sandi yang benar",
"A valid email must be provided" : "Surel yang benar harus diberikan",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Anda sedang menggunakan <strong>%s</strong> dari <strong>%s</strong>",
"Show email address" : "Tampilkan alamat surel",
"Send email to new user" : "Kirim surel kepada pengguna baru",
"Create" : "Buat"
diff --git a/settings/l10n/is.js b/settings/l10n/is.js
index 46cbd2764b0..88e89395ec7 100644
--- a/settings/l10n/is.js
+++ b/settings/l10n/is.js
@@ -307,8 +307,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Brynjun og öryggisleiðbeiningar",
"Personal" : "Einka",
"Administration" : "Stjórnun",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Þú notar <strong>%s</strong> af <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "You are using <strong>%s</strong> af <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Einkennismynd",
"Upload new" : "Senda inn nýtt",
"Select from Files" : "Veldu skrár",
@@ -318,6 +316,7 @@ OC.L10N.register(
"Cancel" : "Hætta við",
"Choose as profile picture" : "Veldu sem einkennismynd",
"You are member of the following groups:" : "Þú ert meðlimur eftirfarandi hópa:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "You are using <strong>%s</strong> af <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Fullt nafn",
"No display name set" : "Ekkert birtingarnafn sett",
"Email" : "Netfang",
@@ -409,6 +408,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php er skráð á webcron-þjónustu til að kalla á cron.php á 15 mínútna fresti yfir http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Til að keyra þetta þarftu að hafa PHP posix viðvótina (extension). Skoðaðu {linkstart}PHP hjálparskjölin{linkend} fyrir nánari útlistun.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Til að yfirfæra í annan gagnagrunn skaltu nota skipanalínutólið: 'occ db:convert-type', eða lesa <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">hjálparskjölin ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Þú notar <strong>%s</strong> af <strong>%s</strong>",
"Get the apps to sync your files" : "Náðu í forrit til að samstilla skrárnar þínar",
"Desktop client" : "Skjáborðsforrit",
"Android app" : "Android-forrit",
diff --git a/settings/l10n/is.json b/settings/l10n/is.json
index 7068488ef1e..6042fb8f9e3 100644
--- a/settings/l10n/is.json
+++ b/settings/l10n/is.json
@@ -305,8 +305,6 @@
"Hardening and security guidance" : "Brynjun og öryggisleiðbeiningar",
"Personal" : "Einka",
"Administration" : "Stjórnun",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Þú notar <strong>%s</strong> af <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "You are using <strong>%s</strong> af <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Einkennismynd",
"Upload new" : "Senda inn nýtt",
"Select from Files" : "Veldu skrár",
@@ -316,6 +314,7 @@
"Cancel" : "Hætta við",
"Choose as profile picture" : "Veldu sem einkennismynd",
"You are member of the following groups:" : "Þú ert meðlimur eftirfarandi hópa:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "You are using <strong>%s</strong> af <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Fullt nafn",
"No display name set" : "Ekkert birtingarnafn sett",
"Email" : "Netfang",
@@ -407,6 +406,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php er skráð á webcron-þjónustu til að kalla á cron.php á 15 mínútna fresti yfir http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Til að keyra þetta þarftu að hafa PHP posix viðvótina (extension). Skoðaðu {linkstart}PHP hjálparskjölin{linkend} fyrir nánari útlistun.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Til að yfirfæra í annan gagnagrunn skaltu nota skipanalínutólið: 'occ db:convert-type', eða lesa <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">hjálparskjölin ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Þú notar <strong>%s</strong> af <strong>%s</strong>",
"Get the apps to sync your files" : "Náðu í forrit til að samstilla skrárnar þínar",
"Desktop client" : "Skjáborðsforrit",
"Android app" : "Android-forrit",
diff --git a/settings/l10n/it.js b/settings/l10n/it.js
index ac42b854db4..8bbbd09442a 100644
--- a/settings/l10n/it.js
+++ b/settings/l10n/it.js
@@ -308,8 +308,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Guida alla messa in sicurezza",
"Personal" : "Personale",
"Administration" : "Amministrazione",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Stai utilizzando <strong>%s</strong> di <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Stai utilizzando <strong>%s</strong> di <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Immagine del profilo",
"Upload new" : "Carica nuova",
"Select from Files" : "Seleziona da file",
@@ -318,7 +316,10 @@ OC.L10N.register(
"Picture provided by original account" : "Immagine fornita dall'account originale",
"Cancel" : "Annulla",
"Choose as profile picture" : "Scegli come immagine del profilo",
+ "Details" : "Dettagli",
"You are member of the following groups:" : "Sei membro dei seguenti gruppi:",
+ "You are using <strong>%s</strong>" : "Stai utilizzando <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Stai utilizzando <strong>%s</strong> di <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Nome completo",
"No display name set" : "Nome visualizzato non impostato",
"Email" : "Posta elettronica",
@@ -410,6 +411,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php è registrato su un servizio webcron per invocare cron.php ogni 15 minuti su http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Per eseguirlo, hai bisogno dell'estensione posix di PHP. Vedi la {linkstart}documentazione di PHP{linkend} per ulteriori dettagli.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Per migrare a un altro database, usa lo strumento da riga di comando: 'occ db:convert-type', o leggi la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Stai utilizzando <strong>%s</strong> di <strong>%s</strong>",
"Get the apps to sync your files" : "Scarica le applicazioni per sincronizzare i tuoi file",
"Desktop client" : "Client desktop",
"Android app" : "Applicazione Android",
diff --git a/settings/l10n/it.json b/settings/l10n/it.json
index 63ad67f81b1..179f6677fd9 100644
--- a/settings/l10n/it.json
+++ b/settings/l10n/it.json
@@ -306,8 +306,6 @@
"Hardening and security guidance" : "Guida alla messa in sicurezza",
"Personal" : "Personale",
"Administration" : "Amministrazione",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Stai utilizzando <strong>%s</strong> di <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Stai utilizzando <strong>%s</strong> di <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Immagine del profilo",
"Upload new" : "Carica nuova",
"Select from Files" : "Seleziona da file",
@@ -316,7 +314,10 @@
"Picture provided by original account" : "Immagine fornita dall'account originale",
"Cancel" : "Annulla",
"Choose as profile picture" : "Scegli come immagine del profilo",
+ "Details" : "Dettagli",
"You are member of the following groups:" : "Sei membro dei seguenti gruppi:",
+ "You are using <strong>%s</strong>" : "Stai utilizzando <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Stai utilizzando <strong>%s</strong> di <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Nome completo",
"No display name set" : "Nome visualizzato non impostato",
"Email" : "Posta elettronica",
@@ -408,6 +409,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php è registrato su un servizio webcron per invocare cron.php ogni 15 minuti su http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Per eseguirlo, hai bisogno dell'estensione posix di PHP. Vedi la {linkstart}documentazione di PHP{linkend} per ulteriori dettagli.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Per migrare a un altro database, usa lo strumento da riga di comando: 'occ db:convert-type', o leggi la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Stai utilizzando <strong>%s</strong> di <strong>%s</strong>",
"Get the apps to sync your files" : "Scarica le applicazioni per sincronizzare i tuoi file",
"Desktop client" : "Client desktop",
"Android app" : "Applicazione Android",
diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js
index 21cd4c2463f..bb62b92f17b 100644
--- a/settings/l10n/ja.js
+++ b/settings/l10n/ja.js
@@ -282,8 +282,6 @@ OC.L10N.register(
"Theming" : "テーマ",
"Check the security of your Nextcloud over our security scan" : "私たちのセキュリティスキャンで、お使いの Nextcloud のセキュリティをチェックしてください",
"Hardening and security guidance" : "堅牢化とセキュリティガイダンス",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "<strong>%s</strong> / <strong>%s</strong> が現在使用中です",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "<strong>%s</strong> / <strong>%s</strong> (<strong>%s %%</strong>) 使用中",
"Profile picture" : "プロフィール画像",
"Upload new" : "新たにアップロード",
"Select from Files" : "ファイルから選択",
@@ -293,6 +291,7 @@ OC.L10N.register(
"Cancel" : "キャンセル",
"Choose as profile picture" : "プロファイル画像として選択",
"You are member of the following groups:" : "以下のグループのメンバーです:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "<strong>%s</strong> / <strong>%s</strong> (<strong>%s %%</strong>) 使用中",
"Full name" : "氏名",
"No display name set" : "表示名が未設定",
"Email" : "メール",
@@ -358,6 +357,7 @@ OC.L10N.register(
"Add trusted domain" : "信頼するドメイン名に追加",
"A valid password must be provided" : "有効なパスワードを指定する必要があります",
"A valid email must be provided" : "有効なメールアドレスを指定する必要があります",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "<strong>%s</strong> / <strong>%s</strong> が現在使用中です",
"Show email address" : "メールアドレスを表示",
"Send email to new user" : "新規ユーザーにメールを送信",
"Create" : "作成"
diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json
index badc2ec360e..a01df9c708a 100644
--- a/settings/l10n/ja.json
+++ b/settings/l10n/ja.json
@@ -280,8 +280,6 @@
"Theming" : "テーマ",
"Check the security of your Nextcloud over our security scan" : "私たちのセキュリティスキャンで、お使いの Nextcloud のセキュリティをチェックしてください",
"Hardening and security guidance" : "堅牢化とセキュリティガイダンス",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "<strong>%s</strong> / <strong>%s</strong> が現在使用中です",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "<strong>%s</strong> / <strong>%s</strong> (<strong>%s %%</strong>) 使用中",
"Profile picture" : "プロフィール画像",
"Upload new" : "新たにアップロード",
"Select from Files" : "ファイルから選択",
@@ -291,6 +289,7 @@
"Cancel" : "キャンセル",
"Choose as profile picture" : "プロファイル画像として選択",
"You are member of the following groups:" : "以下のグループのメンバーです:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "<strong>%s</strong> / <strong>%s</strong> (<strong>%s %%</strong>) 使用中",
"Full name" : "氏名",
"No display name set" : "表示名が未設定",
"Email" : "メール",
@@ -356,6 +355,7 @@
"Add trusted domain" : "信頼するドメイン名に追加",
"A valid password must be provided" : "有効なパスワードを指定する必要があります",
"A valid email must be provided" : "有効なメールアドレスを指定する必要があります",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "<strong>%s</strong> / <strong>%s</strong> が現在使用中です",
"Show email address" : "メールアドレスを表示",
"Send email to new user" : "新規ユーザーにメールを送信",
"Create" : "作成"
diff --git a/settings/l10n/ka_GE.js b/settings/l10n/ka_GE.js
index 2eb4fbf5197..a8d19e48ee1 100644
--- a/settings/l10n/ka_GE.js
+++ b/settings/l10n/ka_GE.js
@@ -304,8 +304,6 @@ OC.L10N.register(
"Hardening and security guidance" : "განმტკიცებისა და უსაფრთხოების სახელმძღვანელო",
"Personal" : "პირადი",
"Administration" : "ადმინისტრაცია",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "თქვენ იყენებთ <strong>%s</strong> სულ <strong>%s</strong>-დან",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "თქვენ იყენებთ <strong>%s</strong> სულ <strong>%s</strong>-დან (<strong>%s%%</strong>)",
"Profile picture" : "პროფილის სურათი",
"Upload new" : "ახალი ატვირთვა",
"Select from Files" : "აირჩიეთ ფაილებიდან",
@@ -315,6 +313,7 @@ OC.L10N.register(
"Cancel" : "უარყოფა",
"Choose as profile picture" : "აირჩიეთ პროფილის სურათად",
"You are member of the following groups:" : "თქვენ ხართ შემდეგი ჯგუფების წევრი:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "თქვენ იყენებთ <strong>%s</strong> სულ <strong>%s</strong>-დან (<strong>%s%%</strong>)",
"Full name" : "სრული სახელი",
"No display name set" : "დისპლეი სახელი არაა დაყენებული",
"Email" : "ელ-ფოსტა",
@@ -406,6 +405,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php რეგისტრირებულია ვებკრონის სერვისით, 15 წუთში ერთხელ გაიშვას http მეშვეობით.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "ამის გასაშვებად საჭიროა გქონდეთ PHP posix გაფართოება. მეტი დეტალებისთვის იხილეთ {linkstart}PHP დოკუმენტაცია{linkend}. ",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "სხვა მონაცემთა ბაზის მიგრაციისთვის გამოიყენეთ command line ხელსაწყო: 'occ db:convert-type', ან იხილეთ <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">დოუმენტაცია ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "თქვენ იყენებთ <strong>%s</strong> სულ <strong>%s</strong>-დან",
"Get the apps to sync your files" : "აპლიკაცია ფაილების სინქრონიზაციისთვის",
"Desktop client" : "დესკტოპ კლიენტი",
"Android app" : "Android აპლიკაცია",
diff --git a/settings/l10n/ka_GE.json b/settings/l10n/ka_GE.json
index bd0e5201f43..e75e4963447 100644
--- a/settings/l10n/ka_GE.json
+++ b/settings/l10n/ka_GE.json
@@ -302,8 +302,6 @@
"Hardening and security guidance" : "განმტკიცებისა და უსაფრთხოების სახელმძღვანელო",
"Personal" : "პირადი",
"Administration" : "ადმინისტრაცია",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "თქვენ იყენებთ <strong>%s</strong> სულ <strong>%s</strong>-დან",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "თქვენ იყენებთ <strong>%s</strong> სულ <strong>%s</strong>-დან (<strong>%s%%</strong>)",
"Profile picture" : "პროფილის სურათი",
"Upload new" : "ახალი ატვირთვა",
"Select from Files" : "აირჩიეთ ფაილებიდან",
@@ -313,6 +311,7 @@
"Cancel" : "უარყოფა",
"Choose as profile picture" : "აირჩიეთ პროფილის სურათად",
"You are member of the following groups:" : "თქვენ ხართ შემდეგი ჯგუფების წევრი:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "თქვენ იყენებთ <strong>%s</strong> სულ <strong>%s</strong>-დან (<strong>%s%%</strong>)",
"Full name" : "სრული სახელი",
"No display name set" : "დისპლეი სახელი არაა დაყენებული",
"Email" : "ელ-ფოსტა",
@@ -404,6 +403,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php რეგისტრირებულია ვებკრონის სერვისით, 15 წუთში ერთხელ გაიშვას http მეშვეობით.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "ამის გასაშვებად საჭიროა გქონდეთ PHP posix გაფართოება. მეტი დეტალებისთვის იხილეთ {linkstart}PHP დოკუმენტაცია{linkend}. ",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "სხვა მონაცემთა ბაზის მიგრაციისთვის გამოიყენეთ command line ხელსაწყო: 'occ db:convert-type', ან იხილეთ <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">დოუმენტაცია ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "თქვენ იყენებთ <strong>%s</strong> სულ <strong>%s</strong>-დან",
"Get the apps to sync your files" : "აპლიკაცია ფაილების სინქრონიზაციისთვის",
"Desktop client" : "დესკტოპ კლიენტი",
"Android app" : "Android აპლიკაცია",
diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js
index c6b3befb3c1..eb3408272c8 100644
--- a/settings/l10n/ko.js
+++ b/settings/l10n/ko.js
@@ -302,8 +302,6 @@ OC.L10N.register(
"Hardening and security guidance" : "보안 강화 지침",
"Personal" : "개인",
"Administration" : "관리",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "현재 <strong>%s</strong>/<strong>%s</strong>을(를) 사용하고 있습니다",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "현재 <strong>%s</strong>/<strong>%s</strong>(<strong>%s%%</strong>)를 사용하고 있습니다",
"Profile picture" : "프로필 사진",
"Upload new" : "새로 업로드",
"Select from Files" : "파일에서 선택",
@@ -313,6 +311,7 @@ OC.L10N.register(
"Cancel" : "취소",
"Choose as profile picture" : "프로필 사진으로 선택",
"You are member of the following groups:" : "다음 그룹의 구성원입니다:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "현재 <strong>%s</strong>/<strong>%s</strong>(<strong>%s%%</strong>)를 사용하고 있습니다",
"Full name" : "전체 이름",
"No display name set" : "표시 이름이 설정되지 않음",
"Email" : "이메일",
@@ -402,6 +401,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "15분마다 HTTP를 통해 cron.php를 실행하는 webcron 서비스에 cron.php가 등록되었습니다.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "실행하려면 PHP POSIX 확장이 필요합니다. 자세한 내용은 {linkstart}PHP 사용 설명서{linkend}를 참고하십시오.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "다른 데이터베이스로 마이그레이션하려면 'occ db:convert-type' 명령행 도구를 사용하거나 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">사용 설명서 ↗</a>를 참고하십시오.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "현재 <strong>%s</strong>/<strong>%s</strong>을(를) 사용하고 있습니다",
"Get the apps to sync your files" : "파일 동기화 앱 가져오기",
"Desktop client" : "데스크톱 클라이언트",
"Android app" : "Android 앱",
diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json
index 57d2a75fcef..a7c3038a250 100644
--- a/settings/l10n/ko.json
+++ b/settings/l10n/ko.json
@@ -300,8 +300,6 @@
"Hardening and security guidance" : "보안 강화 지침",
"Personal" : "개인",
"Administration" : "관리",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "현재 <strong>%s</strong>/<strong>%s</strong>을(를) 사용하고 있습니다",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "현재 <strong>%s</strong>/<strong>%s</strong>(<strong>%s%%</strong>)를 사용하고 있습니다",
"Profile picture" : "프로필 사진",
"Upload new" : "새로 업로드",
"Select from Files" : "파일에서 선택",
@@ -311,6 +309,7 @@
"Cancel" : "취소",
"Choose as profile picture" : "프로필 사진으로 선택",
"You are member of the following groups:" : "다음 그룹의 구성원입니다:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "현재 <strong>%s</strong>/<strong>%s</strong>(<strong>%s%%</strong>)를 사용하고 있습니다",
"Full name" : "전체 이름",
"No display name set" : "표시 이름이 설정되지 않음",
"Email" : "이메일",
@@ -400,6 +399,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "15분마다 HTTP를 통해 cron.php를 실행하는 webcron 서비스에 cron.php가 등록되었습니다.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "실행하려면 PHP POSIX 확장이 필요합니다. 자세한 내용은 {linkstart}PHP 사용 설명서{linkend}를 참고하십시오.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "다른 데이터베이스로 마이그레이션하려면 'occ db:convert-type' 명령행 도구를 사용하거나 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">사용 설명서 ↗</a>를 참고하십시오.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "현재 <strong>%s</strong>/<strong>%s</strong>을(를) 사용하고 있습니다",
"Get the apps to sync your files" : "파일 동기화 앱 가져오기",
"Desktop client" : "데스크톱 클라이언트",
"Android app" : "Android 앱",
diff --git a/settings/l10n/lt_LT.js b/settings/l10n/lt_LT.js
index 8641b28b815..cc716e5d372 100644
--- a/settings/l10n/lt_LT.js
+++ b/settings/l10n/lt_LT.js
@@ -160,7 +160,6 @@ OC.L10N.register(
"Tips & tricks" : "Patarimai ir gudrybės",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">documentation ↗</a>." : "Norėdami persikelti į kitą duomenų bazę, naudokite komandų eilutės įrankį: \"occ db:convert-type\" arba žiūrėkite <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">dokumentaciją ↗</a>.",
"How to do backups" : "Kaip daryti atsargines kopijas",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Jūs naudojate <strong>%s</strong> iš <strong>%s</strong>",
"Profile picture" : "Profilio paveikslas",
"Upload new" : "Įkelti naują",
"Remove image" : "Šalinti paveikslą",
@@ -211,6 +210,7 @@ OC.L10N.register(
"__language_name__" : "Lietuvių",
"Personal info" : "Asmeninė informacija",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Norėdami persikelti į kitą duomenų bazę, naudokite komandų eilutės įrankį: \"occ db:convert-type\" arba žiūrėkite <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentaciją ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Jūs naudojate <strong>%s</strong> iš <strong>%s</strong>",
"Show First Run Wizard again" : "Dar kartą rodyti pirmojo paleidimo vediklį",
"Follow us on Google+!" : "Sekite mus Google+!",
"Follow us on Twitter!" : "Sekite mus Twitter!",
diff --git a/settings/l10n/lt_LT.json b/settings/l10n/lt_LT.json
index 56f9f194a15..c1bf495da28 100644
--- a/settings/l10n/lt_LT.json
+++ b/settings/l10n/lt_LT.json
@@ -158,7 +158,6 @@
"Tips & tricks" : "Patarimai ir gudrybės",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">documentation ↗</a>." : "Norėdami persikelti į kitą duomenų bazę, naudokite komandų eilutės įrankį: \"occ db:convert-type\" arba žiūrėkite <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">dokumentaciją ↗</a>.",
"How to do backups" : "Kaip daryti atsargines kopijas",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Jūs naudojate <strong>%s</strong> iš <strong>%s</strong>",
"Profile picture" : "Profilio paveikslas",
"Upload new" : "Įkelti naują",
"Remove image" : "Šalinti paveikslą",
@@ -209,6 +208,7 @@
"__language_name__" : "Lietuvių",
"Personal info" : "Asmeninė informacija",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Norėdami persikelti į kitą duomenų bazę, naudokite komandų eilutės įrankį: \"occ db:convert-type\" arba žiūrėkite <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentaciją ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Jūs naudojate <strong>%s</strong> iš <strong>%s</strong>",
"Show First Run Wizard again" : "Dar kartą rodyti pirmojo paleidimo vediklį",
"Follow us on Google+!" : "Sekite mus Google+!",
"Follow us on Twitter!" : "Sekite mus Twitter!",
diff --git a/settings/l10n/lv.js b/settings/l10n/lv.js
index 7f499d65d24..db3996cd778 100644
--- a/settings/l10n/lv.js
+++ b/settings/l10n/lv.js
@@ -178,7 +178,6 @@ OC.L10N.register(
"Improving the config.php" : "Uzlabot config.php",
"Theming" : "Dizains",
"Hardening and security guidance" : "Aizsardzības un drošības norādījumi",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Jūs izmantojiet <strong>%s</strong> no <strong>%s</strong>",
"Profile picture" : "Profila attēls",
"Upload new" : "Ielādēt jaunu",
"Select from Files" : "Izvēlēties no faila",
@@ -237,6 +236,7 @@ OC.L10N.register(
"Add trusted domain" : "Pievienot uzticamu domēnu",
"A valid password must be provided" : "Jānorāda derīga parole",
"A valid email must be provided" : "Jānorāda derīga e-pasta adrese",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Jūs izmantojiet <strong>%s</strong> no <strong>%s</strong>",
"Show email address" : "Rādīt e-pasta adreses",
"Send email to new user" : "Sūtīt e-pastu jaunajam lietotājam",
"Create" : "Izveidot"
diff --git a/settings/l10n/lv.json b/settings/l10n/lv.json
index 06f6c0f5370..43e27d11683 100644
--- a/settings/l10n/lv.json
+++ b/settings/l10n/lv.json
@@ -176,7 +176,6 @@
"Improving the config.php" : "Uzlabot config.php",
"Theming" : "Dizains",
"Hardening and security guidance" : "Aizsardzības un drošības norādījumi",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Jūs izmantojiet <strong>%s</strong> no <strong>%s</strong>",
"Profile picture" : "Profila attēls",
"Upload new" : "Ielādēt jaunu",
"Select from Files" : "Izvēlēties no faila",
@@ -235,6 +234,7 @@
"Add trusted domain" : "Pievienot uzticamu domēnu",
"A valid password must be provided" : "Jānorāda derīga parole",
"A valid email must be provided" : "Jānorāda derīga e-pasta adrese",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Jūs izmantojiet <strong>%s</strong> no <strong>%s</strong>",
"Show email address" : "Rādīt e-pasta adreses",
"Send email to new user" : "Sūtīt e-pastu jaunajam lietotājam",
"Create" : "Izveidot"
diff --git a/settings/l10n/nb.js b/settings/l10n/nb.js
index c1ecee88b43..fe160bd1da4 100644
--- a/settings/l10n/nb.js
+++ b/settings/l10n/nb.js
@@ -306,8 +306,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Herding og sikkerhetsveiledning",
"Personal" : "Personlig",
"Administration" : "Administrasjon",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruker <strong>%s</strong> av <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du bruker <strong>%s</strong> av <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profilbilde",
"Upload new" : "Last opp nytt",
"Select from Files" : "Velg fra filer",
@@ -317,6 +315,7 @@ OC.L10N.register(
"Cancel" : "Avbryt",
"Choose as profile picture" : "Velg som profilbilde",
"You are member of the following groups:" : "Du er medlem av følgende grupper:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du bruker <strong>%s</strong> av <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Fullt navn",
"No display name set" : "Visningsnavn ikke satt",
"Email" : "E-post",
@@ -408,6 +407,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php er registert i en webcron- tjeneste for å kalle på cron.php hvert 15. minutt over http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "For å kjøre denne trenger du «PHP posix extension». Se {linkstart}PHP dokumentasjonen{linkend} for flere detaljer.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db:convert-type', eller les i <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasjonen ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruker <strong>%s</strong> av <strong>%s</strong>",
"Get the apps to sync your files" : "Hent programmer som synkroniserer filene dine",
"Desktop client" : "Skrivebordsklient",
"Android app" : "Android-program",
diff --git a/settings/l10n/nb.json b/settings/l10n/nb.json
index e4ebf0b30e9..f27a7ced985 100644
--- a/settings/l10n/nb.json
+++ b/settings/l10n/nb.json
@@ -304,8 +304,6 @@
"Hardening and security guidance" : "Herding og sikkerhetsveiledning",
"Personal" : "Personlig",
"Administration" : "Administrasjon",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruker <strong>%s</strong> av <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du bruker <strong>%s</strong> av <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profilbilde",
"Upload new" : "Last opp nytt",
"Select from Files" : "Velg fra filer",
@@ -315,6 +313,7 @@
"Cancel" : "Avbryt",
"Choose as profile picture" : "Velg som profilbilde",
"You are member of the following groups:" : "Du er medlem av følgende grupper:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du bruker <strong>%s</strong> av <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Fullt navn",
"No display name set" : "Visningsnavn ikke satt",
"Email" : "E-post",
@@ -406,6 +405,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php er registert i en webcron- tjeneste for å kalle på cron.php hvert 15. minutt over http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "For å kjøre denne trenger du «PHP posix extension». Se {linkstart}PHP dokumentasjonen{linkend} for flere detaljer.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db:convert-type', eller les i <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasjonen ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruker <strong>%s</strong> av <strong>%s</strong>",
"Get the apps to sync your files" : "Hent programmer som synkroniserer filene dine",
"Desktop client" : "Skrivebordsklient",
"Android app" : "Android-program",
diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js
index 3320930dcf8..ef89dda49d2 100644
--- a/settings/l10n/nl.js
+++ b/settings/l10n/nl.js
@@ -307,8 +307,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Hardening en security advies",
"Personal" : "Persoonlijk",
"Administration" : "Beheer",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Je gebruikt <strong>%s</strong> van <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Je gebruikt <strong>%s</strong> van <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profielafbeelding",
"Upload new" : "Upload een nieuwe",
"Select from Files" : "Kies uit bestanden",
@@ -318,6 +316,7 @@ OC.L10N.register(
"Cancel" : "Annuleren",
"Choose as profile picture" : "Kies als profielafbeelding",
"You are member of the following groups:" : "Je bent lid van de volgende groepen:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Je gebruikt <strong>%s</strong> van <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Volledige naam",
"No display name set" : "Nog geen weergavenaam ingesteld",
"Email" : "E-mailadres",
@@ -409,6 +408,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php is geregisteerd bij een webcron service om elke 15 minuten cron.php over http aan te roepen.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Om dit te draaien, is de PHP posix extensie vereist. Bekijk {linkstart}PHP documentatie{linkend} voor meer informatie.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Om te migreren naar een andere database moet u de commandoregel tool gebruiken: 'occ db:convert-type'; zie de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentatie ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Je gebruikt <strong>%s</strong> van <strong>%s</strong>",
"Get the apps to sync your files" : "Download de apps om bestanden te synchroniseren",
"Desktop client" : "Desktop client",
"Android app" : "Android app",
diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json
index 5e20aac96f0..77c67ce6eab 100644
--- a/settings/l10n/nl.json
+++ b/settings/l10n/nl.json
@@ -305,8 +305,6 @@
"Hardening and security guidance" : "Hardening en security advies",
"Personal" : "Persoonlijk",
"Administration" : "Beheer",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Je gebruikt <strong>%s</strong> van <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Je gebruikt <strong>%s</strong> van <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profielafbeelding",
"Upload new" : "Upload een nieuwe",
"Select from Files" : "Kies uit bestanden",
@@ -316,6 +314,7 @@
"Cancel" : "Annuleren",
"Choose as profile picture" : "Kies als profielafbeelding",
"You are member of the following groups:" : "Je bent lid van de volgende groepen:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Je gebruikt <strong>%s</strong> van <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Volledige naam",
"No display name set" : "Nog geen weergavenaam ingesteld",
"Email" : "E-mailadres",
@@ -407,6 +406,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php is geregisteerd bij een webcron service om elke 15 minuten cron.php over http aan te roepen.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Om dit te draaien, is de PHP posix extensie vereist. Bekijk {linkstart}PHP documentatie{linkend} voor meer informatie.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Om te migreren naar een andere database moet u de commandoregel tool gebruiken: 'occ db:convert-type'; zie de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentatie ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Je gebruikt <strong>%s</strong> van <strong>%s</strong>",
"Get the apps to sync your files" : "Download de apps om bestanden te synchroniseren",
"Desktop client" : "Desktop client",
"Android app" : "Android app",
diff --git a/settings/l10n/pl.js b/settings/l10n/pl.js
index d5d2b028996..83139cfbb3f 100644
--- a/settings/l10n/pl.js
+++ b/settings/l10n/pl.js
@@ -308,8 +308,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Kierowanie i wzmacnianie bezpieczeństwa",
"Personal" : "Osobiste",
"Administration" : "Administracja",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Używasz <strong>%s</strong> z <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Używasz <strong>%s</strong> z <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Zdjęcie profilowe",
"Upload new" : "Wczytaj nowe",
"Select from Files" : "Wybierz z Plików",
@@ -319,6 +317,7 @@ OC.L10N.register(
"Cancel" : "Anuluj",
"Choose as profile picture" : "Wybierz zdjęcie profilowe",
"You are member of the following groups:" : "Należysz do następujących grup:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Używasz <strong>%s</strong> z <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Pełna nazwa",
"No display name set" : "Brak nazwa wyświetlanej",
"Email" : "E-mail",
@@ -410,6 +409,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "Wywołanie cron.php jest ustawione jako usługa webcron co 15 minut przez protokół HTTP.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Aby to uruchomić potrzebujesz rozszerzenia posix do PHP. Po więcej informacji sprawdź {linkstart}dokumentację PHP{linkend}.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Aby zmigrować do innej bazy danych użyj narzędzia z terminala: \"occ db:convert-type\" albo sprawdź <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentację ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Używasz <strong>%s</strong> z <strong>%s</strong>",
"Get the apps to sync your files" : "Pobierz aplikacje aby zsynchronizować swoje pliki",
"Desktop client" : "Klient na komputer",
"Android app" : "Aplikacja Android",
diff --git a/settings/l10n/pl.json b/settings/l10n/pl.json
index 96abc548de4..77e44177433 100644
--- a/settings/l10n/pl.json
+++ b/settings/l10n/pl.json
@@ -306,8 +306,6 @@
"Hardening and security guidance" : "Kierowanie i wzmacnianie bezpieczeństwa",
"Personal" : "Osobiste",
"Administration" : "Administracja",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Używasz <strong>%s</strong> z <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Używasz <strong>%s</strong> z <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Zdjęcie profilowe",
"Upload new" : "Wczytaj nowe",
"Select from Files" : "Wybierz z Plików",
@@ -317,6 +315,7 @@
"Cancel" : "Anuluj",
"Choose as profile picture" : "Wybierz zdjęcie profilowe",
"You are member of the following groups:" : "Należysz do następujących grup:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Używasz <strong>%s</strong> z <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Pełna nazwa",
"No display name set" : "Brak nazwa wyświetlanej",
"Email" : "E-mail",
@@ -408,6 +407,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "Wywołanie cron.php jest ustawione jako usługa webcron co 15 minut przez protokół HTTP.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Aby to uruchomić potrzebujesz rozszerzenia posix do PHP. Po więcej informacji sprawdź {linkstart}dokumentację PHP{linkend}.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Aby zmigrować do innej bazy danych użyj narzędzia z terminala: \"occ db:convert-type\" albo sprawdź <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentację ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Używasz <strong>%s</strong> z <strong>%s</strong>",
"Get the apps to sync your files" : "Pobierz aplikacje aby zsynchronizować swoje pliki",
"Desktop client" : "Klient na komputer",
"Android app" : "Aplikacja Android",
diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js
index 062b4f2d448..64da5c974a2 100644
--- a/settings/l10n/pt_BR.js
+++ b/settings/l10n/pt_BR.js
@@ -308,8 +308,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Orientações de proteção e segurança",
"Personal" : "Pessoal",
"Administration" : "Administração",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Você está usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Você está usando <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Imagem para o perfil",
"Upload new" : "Enviar novo",
"Select from Files" : "Selecionar de Arquivos",
@@ -318,7 +316,10 @@ OC.L10N.register(
"Picture provided by original account" : "Imagem fornecida pela conta original",
"Cancel" : "Cancelar",
"Choose as profile picture" : "Escolha como imagem de perfil",
+ "Details" : "Detalhes",
"You are member of the following groups:" : "Você é membro dos seguintes grupos:",
+ "You are using <strong>%s</strong>" : "Você está usando <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Você está usando <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Nome completo",
"No display name set" : "Nenhum nome de exibição definido",
"Email" : "Email",
@@ -410,6 +411,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado como um serviço webcron para rodar cron.php a cada 15 minutos em http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Para executar isso, você precisa da extensão posix do PHP. Veja a {linkstart}Documentação do PHP{linkend} para mais detalhes.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar para outro banco de dados, use a ferramenta de linha de comando: 'occ db: convert-type' ou veja a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Você está usando <strong>%s</strong> de <strong>%s</strong>",
"Get the apps to sync your files" : "Obtenha os aplicativos para sincronizar seus arquivos",
"Desktop client" : "Cliente Desktop",
"Android app" : "Aplicativo Android",
diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json
index 355eb0f5d63..b166d5dd7e5 100644
--- a/settings/l10n/pt_BR.json
+++ b/settings/l10n/pt_BR.json
@@ -306,8 +306,6 @@
"Hardening and security guidance" : "Orientações de proteção e segurança",
"Personal" : "Pessoal",
"Administration" : "Administração",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Você está usando <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Você está usando <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Imagem para o perfil",
"Upload new" : "Enviar novo",
"Select from Files" : "Selecionar de Arquivos",
@@ -316,7 +314,10 @@
"Picture provided by original account" : "Imagem fornecida pela conta original",
"Cancel" : "Cancelar",
"Choose as profile picture" : "Escolha como imagem de perfil",
+ "Details" : "Detalhes",
"You are member of the following groups:" : "Você é membro dos seguintes grupos:",
+ "You are using <strong>%s</strong>" : "Você está usando <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Você está usando <strong>%s</strong> de <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Nome completo",
"No display name set" : "Nenhum nome de exibição definido",
"Email" : "Email",
@@ -408,6 +409,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado como um serviço webcron para rodar cron.php a cada 15 minutos em http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Para executar isso, você precisa da extensão posix do PHP. Veja a {linkstart}Documentação do PHP{linkend} para mais detalhes.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar para outro banco de dados, use a ferramenta de linha de comando: 'occ db: convert-type' ou veja a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Você está usando <strong>%s</strong> de <strong>%s</strong>",
"Get the apps to sync your files" : "Obtenha os aplicativos para sincronizar seus arquivos",
"Desktop client" : "Cliente Desktop",
"Android app" : "Aplicativo Android",
diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js
index 173e3ad5bdc..67d55f28ec0 100644
--- a/settings/l10n/pt_PT.js
+++ b/settings/l10n/pt_PT.js
@@ -289,8 +289,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Orientações de proteção e segurança",
"Personal" : "Pessoal",
"Administration" : "Administração",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Está a usar <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Está a usar <strong>%s</strong> de <strong>%s</strong> (<strong>%s%%</strong>)",
"Profile picture" : "Foto do perfil",
"Upload new" : "Carregar novo",
"Select from Files" : "Seleccione dos Ficheiros",
@@ -300,6 +298,7 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Escolher como fotografia de perfil",
"You are member of the following groups:" : "Você é membro dos seguintes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Está a usar <strong>%s</strong> de <strong>%s</strong> (<strong>%s%%</strong>)",
"Full name" : "Nome completo",
"No display name set" : "Nenhum nome display estabelecido",
"Email" : "Email",
@@ -381,6 +380,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registada num serviço webcron para chamar cron-php a cada 15 minutos através de http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Para esta execução é necessária a extensão PHP posix. Veja {iniciodaligação}documentação PHP{fimdaligação} para mais detalhes.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar para outra base de dados use a ferramenta da linha de comandos: 'occ db:convert-type', ou veja a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Está a usar <strong>%s</strong> de <strong>%s</strong>",
"Get the apps to sync your files" : "Tenha as aplicações a sincronizar os seus ficheiros",
"Desktop client" : "Cliente desktop",
"Android app" : "Aplicação Android",
diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json
index 9d9980f0e1c..7bfd1c121d8 100644
--- a/settings/l10n/pt_PT.json
+++ b/settings/l10n/pt_PT.json
@@ -287,8 +287,6 @@
"Hardening and security guidance" : "Orientações de proteção e segurança",
"Personal" : "Pessoal",
"Administration" : "Administração",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Está a usar <strong>%s</strong> de <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Está a usar <strong>%s</strong> de <strong>%s</strong> (<strong>%s%%</strong>)",
"Profile picture" : "Foto do perfil",
"Upload new" : "Carregar novo",
"Select from Files" : "Seleccione dos Ficheiros",
@@ -298,6 +296,7 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Escolher como fotografia de perfil",
"You are member of the following groups:" : "Você é membro dos seguintes grupos:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Está a usar <strong>%s</strong> de <strong>%s</strong> (<strong>%s%%</strong>)",
"Full name" : "Nome completo",
"No display name set" : "Nenhum nome display estabelecido",
"Email" : "Email",
@@ -379,6 +378,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registada num serviço webcron para chamar cron-php a cada 15 minutos através de http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Para esta execução é necessária a extensão PHP posix. Veja {iniciodaligação}documentação PHP{fimdaligação} para mais detalhes.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar para outra base de dados use a ferramenta da linha de comandos: 'occ db:convert-type', ou veja a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Está a usar <strong>%s</strong> de <strong>%s</strong>",
"Get the apps to sync your files" : "Tenha as aplicações a sincronizar os seus ficheiros",
"Desktop client" : "Cliente desktop",
"Android app" : "Aplicação Android",
diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js
index 3772a837c1d..5a279f241b8 100644
--- a/settings/l10n/ru.js
+++ b/settings/l10n/ru.js
@@ -308,8 +308,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Руководство по безопасности и защите",
"Personal" : "Личное",
"Administration" : "Администрирование",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Вы используете <strong>%s</strong> из <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Вы используете <strong>%s</strong> из <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Аватар",
"Upload new" : "Загрузить новый",
"Select from Files" : "Выбрать из Файлов",
@@ -319,6 +317,7 @@ OC.L10N.register(
"Cancel" : "Отмена",
"Choose as profile picture" : "Выбрать в качестве картинки профиля",
"You are member of the following groups:" : "Вы являетесь членом следующих групп:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Вы используете <strong>%s</strong> из <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Полное имя",
"No display name set" : "Отображаемое имя не указано",
"Email" : "Email",
@@ -410,6 +409,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "«cron.php» зарегистрирован в службе webcron и будет вызываться каждые 15 минут по HTTP.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Для запуска требуется расширение POSIX для PHP. Дополнительные сведения содержатся в {linkstart}документации по PHP{linkend}.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Для перехода на другую базу данных используйте команду: «occ db:convert-type» или обратитесь к <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации ↗</a>. ",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Вы используете <strong>%s</strong> из <strong>%s</strong>",
"Get the apps to sync your files" : "Скачать приложения для синхронизации",
"Desktop client" : "Клиент для ПК",
"Android app" : "Приложение для Android",
diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json
index 339f000fd3e..d16f42998b9 100644
--- a/settings/l10n/ru.json
+++ b/settings/l10n/ru.json
@@ -306,8 +306,6 @@
"Hardening and security guidance" : "Руководство по безопасности и защите",
"Personal" : "Личное",
"Administration" : "Администрирование",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Вы используете <strong>%s</strong> из <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Вы используете <strong>%s</strong> из <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Аватар",
"Upload new" : "Загрузить новый",
"Select from Files" : "Выбрать из Файлов",
@@ -317,6 +315,7 @@
"Cancel" : "Отмена",
"Choose as profile picture" : "Выбрать в качестве картинки профиля",
"You are member of the following groups:" : "Вы являетесь членом следующих групп:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Вы используете <strong>%s</strong> из <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Полное имя",
"No display name set" : "Отображаемое имя не указано",
"Email" : "Email",
@@ -408,6 +407,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "«cron.php» зарегистрирован в службе webcron и будет вызываться каждые 15 минут по HTTP.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Для запуска требуется расширение POSIX для PHP. Дополнительные сведения содержатся в {linkstart}документации по PHP{linkend}.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Для перехода на другую базу данных используйте команду: «occ db:convert-type» или обратитесь к <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации ↗</a>. ",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Вы используете <strong>%s</strong> из <strong>%s</strong>",
"Get the apps to sync your files" : "Скачать приложения для синхронизации",
"Desktop client" : "Клиент для ПК",
"Android app" : "Приложение для Android",
diff --git a/settings/l10n/sk.js b/settings/l10n/sk.js
index bac8c923232..f1db57004b2 100644
--- a/settings/l10n/sk.js
+++ b/settings/l10n/sk.js
@@ -292,8 +292,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Sprievodca vylepšením bezpečnosti",
"Personal" : "Osobné",
"Administration" : "Administrácia",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Využívate <strong>%s</strong> z <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Využívate <strong>%s</strong> z <strong>%s</strong>(<strong>%s%%</strong>)",
"Profile picture" : "Avatar",
"Upload new" : "Nahrať nový",
"Select from Files" : "Vybrať zo súborov",
@@ -303,6 +301,7 @@ OC.L10N.register(
"Cancel" : "Zrušiť",
"Choose as profile picture" : "Použiť ako obrázok avatara",
"You are member of the following groups:" : "Ste členom nasledovných skupín:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Využívate <strong>%s</strong> z <strong>%s</strong>(<strong>%s%%</strong>)",
"Full name" : "Meno a priezvisko",
"No display name set" : "Zobrazované meno nie je nastavené",
"Email" : "Email",
@@ -377,6 +376,7 @@ OC.L10N.register(
"It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "Z hľadiska bezpečnosti a výkonu Vašej inštalácie je dôležité, že všetko je správne nastavené. Robíme automatickú kontrolu, ktorá Vám s tým pomáha. Pre ďalšie informácie nahliadnite do sekcie Tipy a triky a do dokumentácie.",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP nie je správne nastavené pre zobrazovanie systémových premenných. Príkaz getenv(\"PATH\") vracia iba prázdnu odpoveď.",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php je zaregistrovaná v službe WebCron a zavolá cron.php každých 15 minút cez http.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Využívate <strong>%s</strong> z <strong>%s</strong>",
"Desktop client" : "Desktopový klient",
"Android app" : "Android aplikácia",
"iOS app" : "iOS aplikácia",
diff --git a/settings/l10n/sk.json b/settings/l10n/sk.json
index 214525280e4..3011cbf656b 100644
--- a/settings/l10n/sk.json
+++ b/settings/l10n/sk.json
@@ -290,8 +290,6 @@
"Hardening and security guidance" : "Sprievodca vylepšením bezpečnosti",
"Personal" : "Osobné",
"Administration" : "Administrácia",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Využívate <strong>%s</strong> z <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Využívate <strong>%s</strong> z <strong>%s</strong>(<strong>%s%%</strong>)",
"Profile picture" : "Avatar",
"Upload new" : "Nahrať nový",
"Select from Files" : "Vybrať zo súborov",
@@ -301,6 +299,7 @@
"Cancel" : "Zrušiť",
"Choose as profile picture" : "Použiť ako obrázok avatara",
"You are member of the following groups:" : "Ste členom nasledovných skupín:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Využívate <strong>%s</strong> z <strong>%s</strong>(<strong>%s%%</strong>)",
"Full name" : "Meno a priezvisko",
"No display name set" : "Zobrazované meno nie je nastavené",
"Email" : "Email",
@@ -375,6 +374,7 @@
"It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "Z hľadiska bezpečnosti a výkonu Vašej inštalácie je dôležité, že všetko je správne nastavené. Robíme automatickú kontrolu, ktorá Vám s tým pomáha. Pre ďalšie informácie nahliadnite do sekcie Tipy a triky a do dokumentácie.",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP nie je správne nastavené pre zobrazovanie systémových premenných. Príkaz getenv(\"PATH\") vracia iba prázdnu odpoveď.",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php je zaregistrovaná v službe WebCron a zavolá cron.php každých 15 minút cez http.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Využívate <strong>%s</strong> z <strong>%s</strong>",
"Desktop client" : "Desktopový klient",
"Android app" : "Android aplikácia",
"iOS app" : "iOS aplikácia",
diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js
index 90dd1897c71..5d54aca081d 100644
--- a/settings/l10n/sl.js
+++ b/settings/l10n/sl.js
@@ -150,7 +150,6 @@ OC.L10N.register(
"Improving the config.php" : "Izboljšave v config.php",
"Theming" : "Teme",
"Hardening and security guidance" : "Varnost in varnostni napotki",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Uporabljate <strong>%s</strong> od <strong>%s</strong>",
"Profile picture" : "Slika profila",
"Upload new" : "Pošlji novo",
"Select from Files" : "Izbor iz datotek",
@@ -195,6 +194,7 @@ OC.L10N.register(
"Add trusted domain" : "Dodaj varno domeno",
"A valid password must be provided" : "Navedeno mora biti veljavno geslo",
"A valid email must be provided" : "Naveden mora biti veljaven naslov elektronske pošte.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Uporabljate <strong>%s</strong> od <strong>%s</strong>",
"Show email address" : "Pokaži naslov elektronske pošte",
"Send email to new user" : "Pošlji sporočilo novemu uporabniku",
"Create" : "Ustvari"
diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json
index 4ab0ec1c677..1bec3c73c3f 100644
--- a/settings/l10n/sl.json
+++ b/settings/l10n/sl.json
@@ -148,7 +148,6 @@
"Improving the config.php" : "Izboljšave v config.php",
"Theming" : "Teme",
"Hardening and security guidance" : "Varnost in varnostni napotki",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Uporabljate <strong>%s</strong> od <strong>%s</strong>",
"Profile picture" : "Slika profila",
"Upload new" : "Pošlji novo",
"Select from Files" : "Izbor iz datotek",
@@ -193,6 +192,7 @@
"Add trusted domain" : "Dodaj varno domeno",
"A valid password must be provided" : "Navedeno mora biti veljavno geslo",
"A valid email must be provided" : "Naveden mora biti veljaven naslov elektronske pošte.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Uporabljate <strong>%s</strong> od <strong>%s</strong>",
"Show email address" : "Pokaži naslov elektronske pošte",
"Send email to new user" : "Pošlji sporočilo novemu uporabniku",
"Create" : "Ustvari"
diff --git a/settings/l10n/sq.js b/settings/l10n/sq.js
index cd8b90d30ec..5a05d8c1da2 100644
--- a/settings/l10n/sq.js
+++ b/settings/l10n/sq.js
@@ -288,8 +288,6 @@ OC.L10N.register(
"Theming" : "Ndryshim teme grafike",
"Check the security of your Nextcloud over our security scan" : "Kontrolloni sigurinë e Nextcloud tuaj mbi skanimin tonë të sigurisë",
"Hardening and security guidance" : "Udhëzime për forcim dhe siguri",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Po përdorni <strong>%s</strong> nga <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Ju po përdorni <strong>%s</strong> të <strong>%s</strong> (<strong>%s%%</strong>)",
"Profile picture" : "Foto profili",
"Upload new" : "Ngarko të re",
"Select from Files" : "Përzgjidhni prej Kartelash",
@@ -299,6 +297,7 @@ OC.L10N.register(
"Cancel" : "Anuloje",
"Choose as profile picture" : "Zgjidhni një foto profili",
"You are member of the following groups:" : "Jeni anëtar i grupeve vijuese:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Ju po përdorni <strong>%s</strong> të <strong>%s</strong> (<strong>%s%%</strong>)",
"Full name" : "Emër i plotë",
"No display name set" : "S’është caktuar emër për në ekran",
"Email" : "Email",
@@ -366,6 +365,7 @@ OC.L10N.register(
"A valid password must be provided" : "Duhet dhënë një fjalëkalim i vlefshëm",
"A valid email must be provided" : "Duhet dhënë një email i vlefshëm",
"__language_name__" : "Shqip",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Po përdorni <strong>%s</strong> nga <strong>%s</strong>",
"Show email address" : "Shfaq adresë email",
"Send email to new user" : "Dërgo email përdoruesi të ri",
"Create" : "Krijoje"
diff --git a/settings/l10n/sq.json b/settings/l10n/sq.json
index 4a50158d136..12c25097a1f 100644
--- a/settings/l10n/sq.json
+++ b/settings/l10n/sq.json
@@ -286,8 +286,6 @@
"Theming" : "Ndryshim teme grafike",
"Check the security of your Nextcloud over our security scan" : "Kontrolloni sigurinë e Nextcloud tuaj mbi skanimin tonë të sigurisë",
"Hardening and security guidance" : "Udhëzime për forcim dhe siguri",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Po përdorni <strong>%s</strong> nga <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Ju po përdorni <strong>%s</strong> të <strong>%s</strong> (<strong>%s%%</strong>)",
"Profile picture" : "Foto profili",
"Upload new" : "Ngarko të re",
"Select from Files" : "Përzgjidhni prej Kartelash",
@@ -297,6 +295,7 @@
"Cancel" : "Anuloje",
"Choose as profile picture" : "Zgjidhni një foto profili",
"You are member of the following groups:" : "Jeni anëtar i grupeve vijuese:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Ju po përdorni <strong>%s</strong> të <strong>%s</strong> (<strong>%s%%</strong>)",
"Full name" : "Emër i plotë",
"No display name set" : "S’është caktuar emër për në ekran",
"Email" : "Email",
@@ -364,6 +363,7 @@
"A valid password must be provided" : "Duhet dhënë një fjalëkalim i vlefshëm",
"A valid email must be provided" : "Duhet dhënë një email i vlefshëm",
"__language_name__" : "Shqip",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Po përdorni <strong>%s</strong> nga <strong>%s</strong>",
"Show email address" : "Shfaq adresë email",
"Send email to new user" : "Dërgo email përdoruesi të ri",
"Create" : "Krijoje"
diff --git a/settings/l10n/sr.js b/settings/l10n/sr.js
index 8661adbd52b..3ce98ab4c4f 100644
--- a/settings/l10n/sr.js
+++ b/settings/l10n/sr.js
@@ -308,8 +308,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Ојачавање система и безбедносне препоруке",
"Personal" : "Лично",
"Administration" : "Администрација",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Користите <strong>%s</strong> од <strong>%s</strong>.",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Користите <strong>%s</strong> од <strong>%s</strong> (<strong>%s%%</strong>)",
"Profile picture" : "Слика профила",
"Upload new" : "Отпреми нову",
"Select from Files" : "Изабери из фајлова",
@@ -318,7 +316,10 @@ OC.L10N.register(
"Picture provided by original account" : "Слика оригиналног налога",
"Cancel" : "Одустани",
"Choose as profile picture" : "Одаберите слику профила",
+ "Details" : "Детаљи",
"You are member of the following groups:" : "Члан сте следећих група:",
+ "You are using <strong>%s</strong>" : "Користите <strong>%s</strong>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Користите <strong>%s</strong> од <strong>%s</strong> (<strong>%s%%</strong>)",
"Full name" : "Пуно име",
"No display name set" : "Није постављено име за приказ",
"Email" : "Е-пошта",
@@ -410,6 +411,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php је регистрован код вебкрон сервиса за позивање cron.php сваких 15 минута преко протокола http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Да бисте ово покренули, потребна је PHP posix екстензија. Погледајте {linkstart}PHP документацију{linkend} за више детаља.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "За пресељење на другу базу података, користите алат командне линије: 'occ db:convert-type', или погледајте <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документацију ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Користите <strong>%s</strong> од <strong>%s</strong>.",
"Get the apps to sync your files" : "Преузмите апликације за синхронизацију фајлова",
"Desktop client" : "Клијент за рачунар",
"Android app" : "Андроид апликација",
diff --git a/settings/l10n/sr.json b/settings/l10n/sr.json
index 04064dfdf1b..166df245c6a 100644
--- a/settings/l10n/sr.json
+++ b/settings/l10n/sr.json
@@ -306,8 +306,6 @@
"Hardening and security guidance" : "Ојачавање система и безбедносне препоруке",
"Personal" : "Лично",
"Administration" : "Администрација",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Користите <strong>%s</strong> од <strong>%s</strong>.",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Користите <strong>%s</strong> од <strong>%s</strong> (<strong>%s%%</strong>)",
"Profile picture" : "Слика профила",
"Upload new" : "Отпреми нову",
"Select from Files" : "Изабери из фајлова",
@@ -316,7 +314,10 @@
"Picture provided by original account" : "Слика оригиналног налога",
"Cancel" : "Одустани",
"Choose as profile picture" : "Одаберите слику профила",
+ "Details" : "Детаљи",
"You are member of the following groups:" : "Члан сте следећих група:",
+ "You are using <strong>%s</strong>" : "Користите <strong>%s</strong>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Користите <strong>%s</strong> од <strong>%s</strong> (<strong>%s%%</strong>)",
"Full name" : "Пуно име",
"No display name set" : "Није постављено име за приказ",
"Email" : "Е-пошта",
@@ -408,6 +409,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php је регистрован код вебкрон сервиса за позивање cron.php сваких 15 минута преко протокола http.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Да бисте ово покренули, потребна је PHP posix екстензија. Погледајте {linkstart}PHP документацију{linkend} за више детаља.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "За пресељење на другу базу података, користите алат командне линије: 'occ db:convert-type', или погледајте <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документацију ↗</a>.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Користите <strong>%s</strong> од <strong>%s</strong>.",
"Get the apps to sync your files" : "Преузмите апликације за синхронизацију фајлова",
"Desktop client" : "Клијент за рачунар",
"Android app" : "Андроид апликација",
diff --git a/settings/l10n/sv.js b/settings/l10n/sv.js
index ac77a9c31da..2a00360c45a 100644
--- a/settings/l10n/sv.js
+++ b/settings/l10n/sv.js
@@ -295,8 +295,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Säkerhetsriktlinjer",
"Personal" : "Privat",
"Administration" : "Administration",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du använder <strong>%s</strong> av <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du använder <strong>%s</strong> av <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profilbild",
"Upload new" : "Ladda upp ny",
"Select from Files" : "Välj från Filer",
@@ -306,6 +304,7 @@ OC.L10N.register(
"Cancel" : "Avbryt",
"Choose as profile picture" : "Välj som profilbild",
"You are member of the following groups:" : "Du är medlem i följande grupper:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du använder <strong>%s</strong> av <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Namn",
"No display name set" : "Inget visningsnamn angivet",
"Email" : "E-post",
@@ -373,6 +372,7 @@ OC.L10N.register(
"A valid password must be provided" : "Ett giltigt lösenord måste anges",
"A valid email must be provided" : "En giltig e-postadress måste anges",
"__language_name__" : "Svenska",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du använder <strong>%s</strong> av <strong>%s</strong>",
"Show email address" : "Visa e-postadress",
"Send email to new user" : "Skicka e-post till ny användare",
"Create" : "Skapa"
diff --git a/settings/l10n/sv.json b/settings/l10n/sv.json
index ec2b9440c4d..6406c74dfad 100644
--- a/settings/l10n/sv.json
+++ b/settings/l10n/sv.json
@@ -293,8 +293,6 @@
"Hardening and security guidance" : "Säkerhetsriktlinjer",
"Personal" : "Privat",
"Administration" : "Administration",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du använder <strong>%s</strong> av <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du använder <strong>%s</strong> av <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profilbild",
"Upload new" : "Ladda upp ny",
"Select from Files" : "Välj från Filer",
@@ -304,6 +302,7 @@
"Cancel" : "Avbryt",
"Choose as profile picture" : "Välj som profilbild",
"You are member of the following groups:" : "Du är medlem i följande grupper:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du använder <strong>%s</strong> av <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Namn",
"No display name set" : "Inget visningsnamn angivet",
"Email" : "E-post",
@@ -371,6 +370,7 @@
"A valid password must be provided" : "Ett giltigt lösenord måste anges",
"A valid email must be provided" : "En giltig e-postadress måste anges",
"__language_name__" : "Svenska",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du använder <strong>%s</strong> av <strong>%s</strong>",
"Show email address" : "Visa e-postadress",
"Send email to new user" : "Skicka e-post till ny användare",
"Create" : "Skapa"
diff --git a/settings/l10n/th.js b/settings/l10n/th.js
index b4db2231d31..e441e1967e9 100644
--- a/settings/l10n/th.js
+++ b/settings/l10n/th.js
@@ -147,7 +147,6 @@ OC.L10N.register(
"Improving the config.php" : "ปรับปรุงไฟล์ config.php",
"Theming" : "ชุดรูปแบบ",
"Hardening and security guidance" : "คำแนะนำการรักษาความปลอดภัย",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "คุณกำลังใช้พื้นที่ <strong>%s</strong> จากทั้งหมด <strong>%s</strong>",
"Profile picture" : "รูปภาพโปรไฟล์",
"Upload new" : "อัพโหลดใหม่",
"Select from Files" : "เลือกจากไฟล์",
@@ -190,6 +189,7 @@ OC.L10N.register(
"Add trusted domain" : "เพิ่มโดเมนที่เชื่อถือได้",
"A valid password must be provided" : "จะต้องระบุรหัสผ่านที่ถูกต้อง",
"A valid email must be provided" : "จะต้องระบุอีเมลที่ถูกต้อง",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "คุณกำลังใช้พื้นที่ <strong>%s</strong> จากทั้งหมด <strong>%s</strong>",
"Show email address" : "แสดงที่อยู่อีเมล",
"Send email to new user" : "ส่งอีเมลไปยังผู้ใช้ใหม่",
"Create" : "สร้าง"
diff --git a/settings/l10n/th.json b/settings/l10n/th.json
index e49f388fa83..8f9201f800e 100644
--- a/settings/l10n/th.json
+++ b/settings/l10n/th.json
@@ -145,7 +145,6 @@
"Improving the config.php" : "ปรับปรุงไฟล์ config.php",
"Theming" : "ชุดรูปแบบ",
"Hardening and security guidance" : "คำแนะนำการรักษาความปลอดภัย",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "คุณกำลังใช้พื้นที่ <strong>%s</strong> จากทั้งหมด <strong>%s</strong>",
"Profile picture" : "รูปภาพโปรไฟล์",
"Upload new" : "อัพโหลดใหม่",
"Select from Files" : "เลือกจากไฟล์",
@@ -188,6 +187,7 @@
"Add trusted domain" : "เพิ่มโดเมนที่เชื่อถือได้",
"A valid password must be provided" : "จะต้องระบุรหัสผ่านที่ถูกต้อง",
"A valid email must be provided" : "จะต้องระบุอีเมลที่ถูกต้อง",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "คุณกำลังใช้พื้นที่ <strong>%s</strong> จากทั้งหมด <strong>%s</strong>",
"Show email address" : "แสดงที่อยู่อีเมล",
"Send email to new user" : "ส่งอีเมลไปยังผู้ใช้ใหม่",
"Create" : "สร้าง"
diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js
index 2dd43bed6a2..4556a77197a 100644
--- a/settings/l10n/tr.js
+++ b/settings/l10n/tr.js
@@ -308,8 +308,6 @@ OC.L10N.register(
"Hardening and security guidance" : "Sağlamlaştırma ve güvenlik rehberliği",
"Personal" : "Kişisel",
"Administration" : "Yönetim",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Kullandığınız alan: <strong>%s</strong>. Kullanabileceğiniz alan: <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Kullandığınız: <strong>%s</strong> Kullanabileceğiniz: <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profil görseli",
"Upload new" : "Yeni yükle",
"Select from Files" : "Dosyalardan seç",
@@ -319,6 +317,7 @@ OC.L10N.register(
"Cancel" : "İptal",
"Choose as profile picture" : "Profil görseli olarak seç",
"You are member of the following groups:" : "Şu gruplara üyesiniz:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Kullandığınız: <strong>%s</strong> Kullanabileceğiniz: <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Tam ad",
"No display name set" : "Görüntülenecek ad belirtilmemiş",
"Email" : "E-posta",
@@ -410,6 +409,7 @@ OC.L10N.register(
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php, http üzerinden 15 dakikada bir yürütülmesi için webcron hizmetine kaydedildi.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Bunu çalıştıraiblmek için PHP posix eklentisi gereklidir. Ayrıntılı bilgi almak için {linkstart}PHP belgelerine{linkend} bakın.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Başka bir veritabanına geçmek için komut satırı aracını kullanın: 'occ db:convert-type' ya da <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">belgelere ↗</a> bakın.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Kullandığınız alan: <strong>%s</strong>. Kullanabileceğiniz alan: <strong>%s</strong>",
"Get the apps to sync your files" : "Dosyalarınızı eşitlemek için uygulamaları indirin",
"Desktop client" : "Masaüstü istemcisi",
"Android app" : "Android uygulaması",
diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json
index 408578176a7..fb3531b11f2 100644
--- a/settings/l10n/tr.json
+++ b/settings/l10n/tr.json
@@ -306,8 +306,6 @@
"Hardening and security guidance" : "Sağlamlaştırma ve güvenlik rehberliği",
"Personal" : "Kişisel",
"Administration" : "Yönetim",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Kullandığınız alan: <strong>%s</strong>. Kullanabileceğiniz alan: <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Kullandığınız: <strong>%s</strong> Kullanabileceğiniz: <strong>%s</strong> (<strong>%s %%</strong>)",
"Profile picture" : "Profil görseli",
"Upload new" : "Yeni yükle",
"Select from Files" : "Dosyalardan seç",
@@ -317,6 +315,7 @@
"Cancel" : "İptal",
"Choose as profile picture" : "Profil görseli olarak seç",
"You are member of the following groups:" : "Şu gruplara üyesiniz:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Kullandığınız: <strong>%s</strong> Kullanabileceğiniz: <strong>%s</strong> (<strong>%s %%</strong>)",
"Full name" : "Tam ad",
"No display name set" : "Görüntülenecek ad belirtilmemiş",
"Email" : "E-posta",
@@ -408,6 +407,7 @@
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php, http üzerinden 15 dakikada bir yürütülmesi için webcron hizmetine kaydedildi.",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Bunu çalıştıraiblmek için PHP posix eklentisi gereklidir. Ayrıntılı bilgi almak için {linkstart}PHP belgelerine{linkend} bakın.",
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Başka bir veritabanına geçmek için komut satırı aracını kullanın: 'occ db:convert-type' ya da <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">belgelere ↗</a> bakın.",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Kullandığınız alan: <strong>%s</strong>. Kullanabileceğiniz alan: <strong>%s</strong>",
"Get the apps to sync your files" : "Dosyalarınızı eşitlemek için uygulamaları indirin",
"Desktop client" : "Masaüstü istemcisi",
"Android app" : "Android uygulaması",
diff --git a/settings/l10n/uk.js b/settings/l10n/uk.js
index b62c139f4a1..3020d27c3dc 100644
--- a/settings/l10n/uk.js
+++ b/settings/l10n/uk.js
@@ -135,7 +135,6 @@ OC.L10N.register(
"Improving the config.php" : "Покращення config.php",
"Theming" : "Оформлення",
"Hardening and security guidance" : "Інструктування з безпеки та захисту",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Ви використовуєте <strong>%s</strong> з <strong>%s</strong>",
"Profile picture" : "Зображення облікового запису",
"Upload new" : "Завантажити нове",
"Remove image" : "Видалити зображення",
@@ -178,6 +177,7 @@ OC.L10N.register(
"Add trusted domain" : "Додати довірений домен",
"A valid password must be provided" : "Потрібно задати вірний пароль",
"A valid email must be provided" : "Вкажіть дійсний email",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Ви використовуєте <strong>%s</strong> з <strong>%s</strong>",
"Show email address" : "Показати адресу електронної пошти",
"Send email to new user" : "Надіслати email новому користувачу",
"Create" : "Створити"
diff --git a/settings/l10n/uk.json b/settings/l10n/uk.json
index 9439b074fc4..6cfdba930fb 100644
--- a/settings/l10n/uk.json
+++ b/settings/l10n/uk.json
@@ -133,7 +133,6 @@
"Improving the config.php" : "Покращення config.php",
"Theming" : "Оформлення",
"Hardening and security guidance" : "Інструктування з безпеки та захисту",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "Ви використовуєте <strong>%s</strong> з <strong>%s</strong>",
"Profile picture" : "Зображення облікового запису",
"Upload new" : "Завантажити нове",
"Remove image" : "Видалити зображення",
@@ -176,6 +175,7 @@
"Add trusted domain" : "Додати довірений домен",
"A valid password must be provided" : "Потрібно задати вірний пароль",
"A valid email must be provided" : "Вкажіть дійсний email",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Ви використовуєте <strong>%s</strong> з <strong>%s</strong>",
"Show email address" : "Показати адресу електронної пошти",
"Send email to new user" : "Надіслати email новому користувачу",
"Create" : "Створити"
diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js
index e6efafd0e0b..924301043cc 100644
--- a/settings/l10n/zh_CN.js
+++ b/settings/l10n/zh_CN.js
@@ -297,8 +297,6 @@ OC.L10N.register(
"Hardening and security guidance" : "强化和安全指南",
"Personal" : "个人",
"Administration" : "管理",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "您正在使用 <strong>%s</strong> 的 <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "你使用了<strong>%s</strong>的<strong>%s</strong>(<strong>%s %%</strong>)",
"Profile picture" : "账户头像",
"Upload new" : "上传",
"Select from Files" : "选择文件",
@@ -308,6 +306,7 @@ OC.L10N.register(
"Cancel" : "取消",
"Choose as profile picture" : "选择个人头像",
"You are member of the following groups:" : "您是以下组的成员:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "你使用了<strong>%s</strong>的<strong>%s</strong>(<strong>%s %%</strong>)",
"Full name" : "全名",
"No display name set" : "不显示名称设置",
"Email" : "电子邮件",
@@ -380,6 +379,7 @@ OC.L10N.register(
"Verifying" : "正在验证",
"Personal info" : "个人信息",
"Sync clients" : "同步客户端",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "您正在使用 <strong>%s</strong> 的 <strong>%s</strong>",
"Get the apps to sync your files" : "安装应用进行文件同步",
"Desktop client" : "桌面客户端",
"Android app" : "安卓应用",
diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json
index 676b4810276..ec5f17e78b4 100644
--- a/settings/l10n/zh_CN.json
+++ b/settings/l10n/zh_CN.json
@@ -295,8 +295,6 @@
"Hardening and security guidance" : "强化和安全指南",
"Personal" : "个人",
"Administration" : "管理",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "您正在使用 <strong>%s</strong> 的 <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "你使用了<strong>%s</strong>的<strong>%s</strong>(<strong>%s %%</strong>)",
"Profile picture" : "账户头像",
"Upload new" : "上传",
"Select from Files" : "选择文件",
@@ -306,6 +304,7 @@
"Cancel" : "取消",
"Choose as profile picture" : "选择个人头像",
"You are member of the following groups:" : "您是以下组的成员:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "你使用了<strong>%s</strong>的<strong>%s</strong>(<strong>%s %%</strong>)",
"Full name" : "全名",
"No display name set" : "不显示名称设置",
"Email" : "电子邮件",
@@ -378,6 +377,7 @@
"Verifying" : "正在验证",
"Personal info" : "个人信息",
"Sync clients" : "同步客户端",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "您正在使用 <strong>%s</strong> 的 <strong>%s</strong>",
"Get the apps to sync your files" : "安装应用进行文件同步",
"Desktop client" : "桌面客户端",
"Android app" : "安卓应用",
diff --git a/settings/l10n/zh_TW.js b/settings/l10n/zh_TW.js
index 66c61944b10..5a020f7f432 100644
--- a/settings/l10n/zh_TW.js
+++ b/settings/l10n/zh_TW.js
@@ -286,8 +286,6 @@ OC.L10N.register(
"Hardening and security guidance" : "增強安全指南",
"Personal" : "個人",
"Administration" : "管理",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "您正在使用 <strong>%s</strong> ,共有 <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "您正在使用 <strong>%s</strong> ,共有 <strong>%s</strong>(<strong>%s %%</strong>)",
"Profile picture" : "大頭貼照",
"Upload new" : "上傳新的",
"Select from Files" : "從雲端檔案選擇",
@@ -297,6 +295,7 @@ OC.L10N.register(
"Cancel" : "取消",
"Choose as profile picture" : "設定為大頭貼照",
"You are member of the following groups:" : "您的帳號屬於這些群組:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "您正在使用 <strong>%s</strong> ,共有 <strong>%s</strong>(<strong>%s %%</strong>)",
"Full name" : "全名",
"No display name set" : "未設定顯示名稱",
"Email" : "信箱",
@@ -361,6 +360,7 @@ OC.L10N.register(
"A valid password must be provided" : "一定要提供一個有效的密碼",
"A valid email must be provided" : "必須提供一個有效的電子郵件地址",
"__language_name__" : "正體中文(臺灣)",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "您正在使用 <strong>%s</strong> ,共有 <strong>%s</strong>",
"Show email address" : "顯示電子郵件信箱",
"Send email to new user" : "寄送郵件給新用戶",
"Create" : "建立"
diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json
index 9b834f95780..0638b380402 100644
--- a/settings/l10n/zh_TW.json
+++ b/settings/l10n/zh_TW.json
@@ -284,8 +284,6 @@
"Hardening and security guidance" : "增強安全指南",
"Personal" : "個人",
"Administration" : "管理",
- "You are using <strong>%s</strong> of <strong>%s</strong>" : "您正在使用 <strong>%s</strong> ,共有 <strong>%s</strong>",
- "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "您正在使用 <strong>%s</strong> ,共有 <strong>%s</strong>(<strong>%s %%</strong>)",
"Profile picture" : "大頭貼照",
"Upload new" : "上傳新的",
"Select from Files" : "從雲端檔案選擇",
@@ -295,6 +293,7 @@
"Cancel" : "取消",
"Choose as profile picture" : "設定為大頭貼照",
"You are member of the following groups:" : "您的帳號屬於這些群組:",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "您正在使用 <strong>%s</strong> ,共有 <strong>%s</strong>(<strong>%s %%</strong>)",
"Full name" : "全名",
"No display name set" : "未設定顯示名稱",
"Email" : "信箱",
@@ -359,6 +358,7 @@
"A valid password must be provided" : "一定要提供一個有效的密碼",
"A valid email must be provided" : "必須提供一個有效的電子郵件地址",
"__language_name__" : "正體中文(臺灣)",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "您正在使用 <strong>%s</strong> ,共有 <strong>%s</strong>",
"Show email address" : "顯示電子郵件信箱",
"Send email to new user" : "寄送郵件給新用戶",
"Create" : "建立"
diff --git a/settings/templates/settings/admin/overview.php b/settings/templates/settings/admin/overview.php
new file mode 100644
index 00000000000..2bddd1f9c3e
--- /dev/null
+++ b/settings/templates/settings/admin/overview.php
@@ -0,0 +1,172 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 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/>.
+ *
+ */
+
+/** @var \OCP\IL10N $l */
+/** @var array $_ */
+
+?>
+
+<div id="security-warning" class="section">
+ <h2><?php p($l->t('Security & setup warnings'));?></h2>
+ <p class="settings-hint"><?php p($l->t('It\'s important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Tricks section and the documentation for more information.'));?></p>
+ <ul>
+ <?php
+ // is php setup properly to query system environment variables like getenv('PATH')
+ if ($_['getenvServerNotWorking']) {
+ ?>
+ <li>
+ <?php p($l->t('PHP does not seem to be setup properly to query system environment variables. The test with getenv("PATH") only returns an empty response.')); ?><br>
+ <?php print_unescaped($l->t('Please check the <a target="_blank" rel="noreferrer noopener" href="%s">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm.', link_to_docs('admin-php-fpm'))); ?>
+ </li>
+ <?php
+ }
+
+ // is read only config enabled
+ if ($_['readOnlyConfigEnabled']) {
+ ?>
+ <li>
+ <?php p($l->t('The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update.')); ?>
+ </li>
+ <?php
+ }
+
+ // Are doc blocks accessible?
+ if (!$_['isAnnotationsWorking']) {
+ ?>
+ <li>
+ <?php p($l->t('PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible.')); ?><br>
+ <?php p($l->t('This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator.')); ?>
+ </li>
+ <?php
+ }
+
+ // Is the Transaction isolation level READ_COMMITTED?
+ if ($_['invalidTransactionIsolationLevel']) {
+ ?>
+ <li>
+ <?php p($l->t('Your database does not run with "READ COMMITTED" transaction isolation level. This can cause problems when multiple actions are executed in parallel.')); ?>
+ </li>
+ <?php
+ }
+
+ // Warning if memcache is outdated
+ foreach ($_['OutdatedCacheWarning'] as $php_module => $data) {
+ ?>
+ <li>
+ <?php p($l->t('%1$s below version %2$s is installed, for stability and performance reasons it is recommended to update to a newer %1$s version.', $data)); ?>
+ </li>
+ <?php
+ }
+
+ // if module fileinfo available?
+ if (!$_['has_fileinfo']) {
+ ?>
+ <li>
+ <?php p($l->t('The PHP module \'fileinfo\' is missing. It is strongly recommended to enable this module to get the best results with MIME type detection.')); ?>
+ </li>
+ <?php
+ }
+
+ // locking configured optimally?
+ if ($_['fileLockingType'] === 'none') {
+ ?>
+ <li>
+ <?php print_unescaped($l->t('Transactional file locking is disabled, this might lead to issues with race conditions. Enable \'filelocking.enabled\' in config.php to avoid these problems. See the <a target="_blank" rel="noreferrer noopener" href="%s">documentation ↗</a> for more information.', link_to_docs('admin-transactional-locking'))); ?>
+ </li>
+ <?php
+ }
+
+ // is locale working ?
+ if (!$_['isLocaleWorking']) {
+ ?>
+ <li>
+ <?php
+ $locales = 'en_US.UTF-8/fr_FR.UTF-8/es_ES.UTF-8/de_DE.UTF-8/ru_RU.UTF-8/pt_BR.UTF-8/it_IT.UTF-8/ja_JP.UTF-8/zh_CN.UTF-8';
+ p($l->t('System locale can not be set to a one which supports UTF-8.'));
+ ?>
+ <br>
+ <?php
+ p($l->t('This means that there might be problems with certain characters in filenames.'));
+ ?>
+ <br>
+ <?php
+ p($l->t('It is strongly proposed to install the required packages on your system to support one of the following locales: %s.', [$locales]));
+ ?>
+ </li>
+ <?php
+ }
+
+ if ($_['suggestedOverwriteCliUrl']) {
+ ?>
+ <li>
+ <?php p($l->t('If your installation is not installed at the root of the domain and uses system Cron, there can be issues with the URL generation. To avoid these problems, please set the "overwrite.cli.url" option in your config.php file to the webroot path of your installation (Suggested: "%s")', $_['suggestedOverwriteCliUrl'])); ?>
+ </li>
+ <?php
+ }
+
+ if ($_['cronErrors']) {
+ ?>
+ <li>
+ <?php p($l->t('It was not possible to execute the cron job via CLI. The following technical errors have appeared:')); ?>
+ <br>
+ <ol>
+ <?php foreach(json_decode($_['cronErrors']) as $error) { if(isset($error->error)) {?>
+ <li><?php p($error->error) ?> <?php p($error->hint) ?></li>
+ <?php }} ?>
+ </ol>
+ </li>
+ <?php
+ }
+ ?>
+ <?php if ($_['lastcron'] !== false):
+ $relative_time = relative_modified_date($_['lastcron']);
+ $formatter = \OC::$server->getDateTimeFormatter();
+ $absolute_time = $formatter->formatDateTime($_['lastcron'], 'long', 'long');
+ if (time() - $_['lastcron'] > 3600): ?>
+ <li class="crondate" title="<?php p($absolute_time);?>">
+ <?php p($l->t("Last background job execution ran %s. Something seems wrong.", [$relative_time]));?>
+ <a href="<?php p(\OC::$server->getURLGenerator()->linkToRoute('settings.AdminSettings.index', ['section' => 'server'])); ?>#backgroundjobs"><?php p($l->t('Check the background job settings')); ?></a>
+ </li>
+ <?php endif; ?>
+ <?php endif; ?>
+ </ul>
+
+ <div id="postsetupchecks" data-check-wellknown="<?php if($_['checkForWorkingWellKnownSetup']) { p('true'); } else { p('false'); } ?>">
+ <div class="loading"></div>
+ <ul class="errors hidden"></ul>
+ <ul class="warnings hidden"></ul>
+ <ul class="info hidden"></ul>
+ <p class="hint hidden">
+ <?php print_unescaped($l->t('Please double check the <a target="_blank" rel="noreferrer noopener" href="%s">installation guides ↗</a>, and check for any errors or warnings in the <a href="%s">log</a>.', [link_to_docs('admin-install'), \OC::$server->getURLGenerator()->linkToRoute('settings.AdminSettings.index', ['section' => 'logging'])] )); ?>
+ </p>
+ </div>
+ <div id="security-warning-state">
+ <span class="hidden icon-checkmark"><?php p($l->t('All checks passed.'));?></span>
+ </div>
+</div>
+
+<div class="section">
+ <!-- should be the last part, so Updater can follow if enabled (it has no heading therefore). -->
+ <h2><?php p($l->t('Version'));?></h2>
+ <p><strong><a href="<?php print_unescaped($theme->getBaseUrl()); ?>" rel="noreferrer noopener" target="_blank"><?php p($theme->getTitle()); ?></a> <?php p(OC_Util::getHumanVersion()) ?></strong></p>
+</div>
diff --git a/settings/templates/settings/admin/server.php b/settings/templates/settings/admin/server.php
index d467577f610..8dc00e26e56 100644
--- a/settings/templates/settings/admin/server.php
+++ b/settings/templates/settings/admin/server.php
@@ -26,134 +26,6 @@
?>
-<div id="security-warning" class="section">
- <h2><?php p($l->t('Security & setup warnings'));?></h2>
- <p class="settings-hint"><?php p($l->t('It\'s important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Tricks section and the documentation for more information.'));?></p>
- <ul>
- <?php
- // is php setup properly to query system environment variables like getenv('PATH')
- if ($_['getenvServerNotWorking']) {
- ?>
- <li>
- <?php p($l->t('PHP does not seem to be setup properly to query system environment variables. The test with getenv("PATH") only returns an empty response.')); ?><br>
- <?php print_unescaped($l->t('Please check the <a target="_blank" rel="noreferrer noopener" href="%s">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm.', link_to_docs('admin-php-fpm'))); ?>
- </li>
- <?php
- }
-
- // is read only config enabled
- if ($_['readOnlyConfigEnabled']) {
- ?>
- <li>
- <?php p($l->t('The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update.')); ?>
- </li>
- <?php
- }
-
- // Are doc blocks accessible?
- if (!$_['isAnnotationsWorking']) {
- ?>
- <li>
- <?php p($l->t('PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible.')); ?><br>
- <?php p($l->t('This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator.')); ?>
- </li>
- <?php
- }
-
- // Is the Transaction isolation level READ_COMMITTED?
- if ($_['invalidTransactionIsolationLevel']) {
- ?>
- <li>
- <?php p($l->t('Your database does not run with "READ COMMITTED" transaction isolation level. This can cause problems when multiple actions are executed in parallel.')); ?>
- </li>
- <?php
- }
-
- // Warning if memcache is outdated
- foreach ($_['OutdatedCacheWarning'] as $php_module => $data) {
- ?>
- <li>
- <?php p($l->t('%1$s below version %2$s is installed, for stability and performance reasons it is recommended to update to a newer %1$s version.', $data)); ?>
- </li>
- <?php
- }
-
- // if module fileinfo available?
- if (!$_['has_fileinfo']) {
- ?>
- <li>
- <?php p($l->t('The PHP module \'fileinfo\' is missing. It is strongly recommended to enable this module to get the best results with MIME type detection.')); ?>
- </li>
- <?php
- }
-
- // locking configured optimally?
- if ($_['fileLockingType'] === 'none') {
- ?>
- <li>
- <?php print_unescaped($l->t('Transactional file locking is disabled, this might lead to issues with race conditions. Enable \'filelocking.enabled\' in config.php to avoid these problems. See the <a target="_blank" rel="noreferrer noopener" href="%s">documentation ↗</a> for more information.', link_to_docs('admin-transactional-locking'))); ?>
- </li>
- <?php
- }
-
- // is locale working ?
- if (!$_['isLocaleWorking']) {
- ?>
- <li>
- <?php
- $locales = 'en_US.UTF-8/fr_FR.UTF-8/es_ES.UTF-8/de_DE.UTF-8/ru_RU.UTF-8/pt_BR.UTF-8/it_IT.UTF-8/ja_JP.UTF-8/zh_CN.UTF-8';
- p($l->t('System locale can not be set to a one which supports UTF-8.'));
- ?>
- <br>
- <?php
- p($l->t('This means that there might be problems with certain characters in filenames.'));
- ?>
- <br>
- <?php
- p($l->t('It is strongly proposed to install the required packages on your system to support one of the following locales: %s.', [$locales]));
- ?>
- </li>
- <?php
- }
-
- if ($_['suggestedOverwriteCliUrl']) {
- ?>
- <li>
- <?php p($l->t('If your installation is not installed at the root of the domain and uses system Cron, there can be issues with the URL generation. To avoid these problems, please set the "overwrite.cli.url" option in your config.php file to the webroot path of your installation (Suggested: "%s")', $_['suggestedOverwriteCliUrl'])); ?>
- </li>
- <?php
- }
-
- if ($_['cronErrors']) {
- ?>
- <li>
- <?php p($l->t('It was not possible to execute the cron job via CLI. The following technical errors have appeared:')); ?>
- <br>
- <ol>
- <?php foreach(json_decode($_['cronErrors']) as $error) { if(isset($error->error)) {?>
- <li><?php p($error->error) ?> <?php p($error->hint) ?></li>
- <?php }} ?>
- </ol>
- </li>
- <?php
- }
- ?>
- </ul>
-
- <div id="postsetupchecks" data-check-wellknown="<?php if($_['checkForWorkingWellKnownSetup']) { p('true'); } else { p('false'); } ?>">
- <div class="loading"></div>
- <ul class="errors hidden"></ul>
- <ul class="warnings hidden"></ul>
- <ul class="info hidden"></ul>
- <p class="hint hidden">
- <?php print_unescaped($l->t('Please double check the <a target="_blank" rel="noreferrer noopener" href="%s">installation guides ↗</a>, and check for any errors or warnings in the <a href="%s">log</a>.', [link_to_docs('admin-install'), \OC::$server->getURLGenerator()->linkToRoute('settings.AdminSettings.index', ['section' => 'logging'])] )); ?>
- </p>
- </div>
- <div id="security-warning-state">
- <span class="hidden icon-checkmark"><?php p($l->t('All checks passed.'));?></span>
- </div>
-</div>
-
<div class="section" id="backgroundjobs">
<h2 class="inlineblock"><?php p($l->t('Background jobs'));?></h2>
<p class="cronlog inlineblock">
@@ -220,10 +92,4 @@
} ?></em>
</p>
-</div>
-
-<div class="section">
- <!-- should be the last part, so Updater can follow if enabled (it has no heading therefore). -->
- <h2><?php p($l->t('Version'));?></h2>
- <p><strong><a href="<?php print_unescaped($theme->getBaseUrl()); ?>" rel="noreferrer noopener" target="_blank"><?php p($theme->getTitle()); ?></a> <?php p(OC_Util::getHumanVersion()) ?></strong></p>
-</div>
+</div> \ No newline at end of file
diff --git a/settings/templates/settings/personal/personal.info.php b/settings/templates/settings/personal/personal.info.php
index 24f89076275..b40f4b6720f 100644
--- a/settings/templates/settings/personal/personal.info.php
+++ b/settings/templates/settings/personal/personal.info.php
@@ -37,42 +37,17 @@ vendor_style('jcrop/css/jquery.Jcrop');
?>
-<div id="quota" class="section">
- <progress value="<?php p($_['usage_relative']); ?>" max="100"
- <?php if($_['usage_relative'] > 80): ?> class="warn" <?php endif; ?>></progress>
-
- <div style="width:<?php p($_['usage_relative']);?>%" class="quotatext-fg">
- <p class="quotatext">
- <?php if ($_['quota'] === \OCP\Files\FileInfo::SPACE_UNLIMITED): ?>
- <?php print_unescaped($l->t('You are using <strong>%s</strong> of <strong>%s</strong>',
- [$_['usage'], $_['total_space']]));?>
- <?php else: ?>
- <?php print_unescaped($l->t('You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)',
- [$_['usage'], $_['total_space'], $_['usage_relative']]));?>
- <?php endif ?>
- </p>
- </div>
- <div class="quotatext-bg">
- <p class="quotatext">
- <?php if ($_['quota'] === \OCP\Files\FileInfo::SPACE_UNLIMITED): ?>
- <?php print_unescaped($l->t('You are using <strong>%s</strong> of <strong>%s</strong>',
- [$_['usage'], $_['total_space']]));?>
- <?php else: ?>
- <?php print_unescaped($l->t('You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)',
- [$_['usage'], $_['total_space'], $_['usage_relative']]));?>
- <?php endif ?>
- </p>
- </div>
-</div>
-
<div id="personal-settings">
<div id="personal-settings-avatar-container" class="personal-settings-container">
<div>
<form id="avatarform" class="section" method="post" action="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.postAvatar')); ?>">
<h2>
- <label><?php p($l->t('Profile picture')); ?></label><span class="icon-federation-menu icon-password">
- <span class="icon-triangle-s"></span>
- </span>
+ <label><?php p($l->t('Profile picture')); ?></label>
+ <div class="federation-menu">
+ <span class="icon-federation-menu icon-password">
+ <span class="icon-triangle-s"></span>
+ </span>
+ </div>
</h2>
<div id="displayavatar">
<div class="avatardiv"></div>
@@ -100,14 +75,28 @@ vendor_style('jcrop/css/jquery.Jcrop');
<?php } ?>
</form>
</div>
- <div class="personal-settings-setting-box personal-settings-group-box">
- <div id="groups" class="section">
- <h2><?php p($l->t('Groups')); ?></h2>
- <p><?php p($l->t('You are member of the following groups:')); ?></p>
+ <div class="personal-settings-setting-box personal-settings-group-box section">
+ <h2><?php p($l->t('Details')); ?></h2>
+ <div id="groups" class="personal-info icon-user">
+ <p class="icon-groups"><?php p($l->t('You are member of the following groups:')); ?></p>
<p id="groups-groups">
<strong><?php p(implode(', ', $_['groups'])); ?></strong>
</p>
</div>
+ <div id="quota" class="personal-info icon-quota">
+ <div class="quotatext-bg">
+ <p class="quotatext">
+ <?php if ($_['quota'] === \OCP\Files\FileInfo::SPACE_UNLIMITED): ?>
+ <?php print_unescaped($l->t('You are using <strong>%s</strong>',
+ [$_['usage']]));?>
+ <?php else: ?>
+ <?php print_unescaped($l->t('You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)',
+ [$_['usage'], $_['total_space'], $_['usage_relative']]));?>
+ <?php endif ?>
+ </p>
+ </div>
+ <progress value="<?php p($_['usage_relative']); ?>" max="100"<?php if($_['usage_relative'] > 80): ?> class="warn" <?php endif; ?>></progress>
+ </div>
</div>
</div>
@@ -116,9 +105,11 @@ vendor_style('jcrop/css/jquery.Jcrop');
<form id="displaynameform" class="section">
<h2>
<label for="displayname"><?php p($l->t('Full name')); ?></label>
- <span class="icon-federation-menu icon-password">
- <span class="icon-triangle-s"></span>
- </span>
+ <div class="federation-menu">
+ <span class="icon-federation-menu icon-password">
+ <span class="icon-triangle-s"></span>
+ </span>
+ </div>
</h2>
<input type="text" id="displayname" name="displayname"
<?php if(!$_['displayNameChangeSupported']) { print_unescaped('class="hidden"'); } ?>
@@ -138,9 +129,11 @@ vendor_style('jcrop/css/jquery.Jcrop');
<form id="emailform" class="section">
<h2>
<label for="email"><?php p($l->t('Email')); ?></label>
- <span class="icon-federation-menu icon-password">
- <span class="icon-triangle-s"></span>
- </span>
+ <div class="federation-menu">
+ <span class="icon-federation-menu icon-password">
+ <span class="icon-triangle-s"></span>
+ </span>
+ </div>
</h2>
<div class="verify <?php if ($_['email'] === '' || $_['emailScope'] !== 'public') p('hidden'); ?>">
<img id="verify-email" title="<?php p($_['emailMessage']); ?>" data-status="<?php p($_['emailVerification']) ?>" src="
@@ -179,9 +172,11 @@ vendor_style('jcrop/css/jquery.Jcrop');
<form id="phoneform" class="section">
<h2>
<label for="phone"><?php p($l->t('Phone number')); ?></label>
- <span class="icon-federation-menu icon-password">
- <span class="icon-triangle-s"></span>
- </span>
+ <div class="federation-menu">
+ <span class="icon-federation-menu icon-password">
+ <span class="icon-triangle-s"></span>
+ </span>
+ </div>
</h2>
<input type="tel" id="phone" name="phone" <?php if(!$_['lookupServerUploadEnabled']) print_unescaped('disabled="1"'); ?>
value="<?php p($_['phone']) ?>"
@@ -199,9 +194,11 @@ vendor_style('jcrop/css/jquery.Jcrop');
<form id="addressform" class="section">
<h2>
<label for="address"><?php p($l->t('Address')); ?></label>
- <span class="icon-federation-menu icon-password">
- <span class="icon-triangle-s"></span>
- </span>
+ <div class="federation-menu">
+ <span class="icon-federation-menu icon-password">
+ <span class="icon-triangle-s"></span>
+ </span>
+ </div>
</h2>
<input type="text" id="address" name="address" <?php if(!$_['lookupServerUploadEnabled']) print_unescaped('disabled="1"'); ?>
placeholder="<?php p($l->t('Your postal address')); ?>"
@@ -219,9 +216,11 @@ vendor_style('jcrop/css/jquery.Jcrop');
<form id="websiteform" class="section">
<h2>
<label for="website"><?php p($l->t('Website')); ?></label>
- <span class="icon-federation-menu icon-password">
- <span class="icon-triangle-s"></span>
- </span>
+ <div class="federation-menu">
+ <span class="icon-federation-menu icon-password">
+ <span class="icon-triangle-s"></span>
+ </span>
+ </div>
</h2>
<?php if($_['lookupServerUploadEnabled']) { ?>
<div class="verify <?php if ($_['website'] === '' || $_['websiteScope'] !== 'public') p('hidden'); ?>">
@@ -266,9 +265,11 @@ vendor_style('jcrop/css/jquery.Jcrop');
<form id="twitterform" class="section">
<h2>
<label for="twitter"><?php p($l->t('Twitter')); ?></label>
- <span class="icon-federation-menu icon-password">
- <span class="icon-triangle-s"></span>
- </span>
+ <div class="federation-menu">
+ <span class="icon-federation-menu icon-password">
+ <span class="icon-triangle-s"></span>
+ </span>
+ </div>
</h2>
<?php if($_['lookupServerUploadEnabled']) { ?>
<div class="verify <?php if ($_['twitter'] === '' || $_['twitterScope'] !== 'public') p('hidden'); ?>">
diff --git a/settings/templates/settings/personal/security.php b/settings/templates/settings/personal/security.php
index cf52315ff04..9b0d9b6e8d0 100644
--- a/settings/templates/settings/personal/security.php
+++ b/settings/templates/settings/personal/security.php
@@ -32,7 +32,7 @@ script('settings', [
<div id="security" class="section">
- <h2><?php p($l->t('Security'));?></h2>
+ <h2><?php p($l->t('Devices & sessions'));?></h2>
<p class="settings-hint hidden-when-empty"><?php p($l->t('Web, desktop and mobile clients currently logged in to your account.'));?></p>
<table class="icon-loading">
<thead class="token-list-header">
diff --git a/tests/lib/Files/Storage/Wrapper/QuotaTest.php b/tests/lib/Files/Storage/Wrapper/QuotaTest.php
index b796e767a7b..546ab69ef6b 100644
--- a/tests/lib/Files/Storage/Wrapper/QuotaTest.php
+++ b/tests/lib/Files/Storage/Wrapper/QuotaTest.php
@@ -208,4 +208,9 @@ class QuotaTest extends \Test\Files\Storage\Storage {
$this->assertTrue($this->instance->instanceOfStorage('\OC\Files\Storage\Wrapper\Wrapper'));
$this->assertTrue($this->instance->instanceOfStorage('\OC\Files\Storage\Wrapper\Quota'));
}
+
+ public function testNoMkdirQuotaZero() {
+ $instance = $this->getLimitedStorage(0.0);
+ $this->assertFalse($instance->mkdir('foobar'));
+ }
}
diff --git a/tests/lib/Log/FileTest.php b/tests/lib/Log/FileTest.php
index 53b5c62e81a..d5e550a7e8d 100644
--- a/tests/lib/Log/FileTest.php
+++ b/tests/lib/Log/FileTest.php
@@ -31,28 +31,31 @@ class FileTest extends TestCase
private $restore_logfile;
private $restore_logdateformat;
+ /** @var File */
+ protected $logFile;
+
protected function setUp() {
parent::setUp();
- $config = \OC::$server->getConfig();
- $this->restore_logfile = $config->getSystemValue("logfile");
- $this->restore_logdateformat = $config->getSystemValue('logdateformat');
+ $config = \OC::$server->getSystemConfig();
+ $this->restore_logfile = $config->getValue("logfile");
+ $this->restore_logdateformat = $config->getValue('logdateformat');
- $config->setSystemValue("logfile", $config->getSystemValue('datadirectory') . "/logtest");
- File::init();
+ $config->setValue("logfile", $config->getValue('datadirectory') . "/logtest.log");
+ $this->logFile = new File($config->getValue('datadirectory') . '/logtest.log', '', $config);
}
protected function tearDown() {
- $config = \OC::$server->getConfig();
+ $config = \OC::$server->getSystemConfig();
if (isset($this->restore_logfile)) {
- $config->getSystemValue("logfile", $this->restore_logfile);
+ $config->getValue("logfile", $this->restore_logfile);
} else {
- $config->deleteSystemValue("logfile");
+ $config->deleteValue("logfile");
}
if (isset($this->restore_logdateformat)) {
- $config->getSystemValue("logdateformat", $this->restore_logdateformat);
+ $config->getValue("logdateformat", $this->restore_logdateformat);
} else {
- $config->deleteSystemValue("logdateformat");
- }
- File::init();
+ $config->deleteValue("logdateformat");
+ }
+ $this->logFile = new File($this->restore_logfile, '', $config);
parent::tearDown();
}
@@ -63,7 +66,7 @@ class FileTest extends TestCase
# set format & write log line
$config->setSystemValue('logdateformat', 'u');
- File::write('test', 'message', ILogger::ERROR);
+ $this->logFile->write('test', 'message', ILogger::ERROR);
# read log line
$handle = @fopen($config->getSystemValue('logfile'), 'r');
diff --git a/tests/lib/Log/LogFactoryTest.php b/tests/lib/Log/LogFactoryTest.php
new file mode 100644
index 00000000000..08139f54df4
--- /dev/null
+++ b/tests/lib/Log/LogFactoryTest.php
@@ -0,0 +1,144 @@
+<?php
+/**
+ * @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 Test\Log;
+use OC\Log\Errorlog;
+use OC\Log\File;
+use OC\Log\LogFactory;
+use OC\Log\Syslog;
+use OC\SystemConfig;
+use OCP\IConfig;
+use OCP\IServerContainer;
+use Test\TestCase;
+
+/**
+ * Class LogFactoryTest
+ *
+ * @package Test\Log
+ */
+class LogFactoryTest extends TestCase {
+ /** @var IServerContainer|\PHPUnit_Framework_MockObject_MockObject */
+ protected $c;
+
+ /** @var LogFactory */
+ protected $factory;
+
+ /** @var SystemConfig|\PHPUnit_Framework_MockObject_MockObject */
+ protected $systemConfig;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->c = $this->createMock(IServerContainer::class);
+ $this->systemConfig = $this->createMock(SystemConfig::class);
+
+ $this->factory = new LogFactory($this->c, $this->systemConfig);
+ }
+
+ public function fileTypeProvider(): array {
+ return [
+ [
+ 'file'
+ ],
+ [
+ 'nextcloud'
+ ],
+ [
+ 'owncloud'
+ ],
+ [
+ 'krzxkyr_default'
+ ]
+ ];
+ }
+
+ /**
+ * @param string $type
+ * @dataProvider fileTypeProvider
+ * @throws \OCP\AppFramework\QueryException
+ */
+ public function testFile(string $type) {
+ $datadir = \OC::$SERVERROOT.'/data';
+ $defaultLog = $datadir . '/nextcloud.log';
+
+ $this->systemConfig->expects($this->exactly(2))
+ ->method('getValue')
+ ->withConsecutive(['datadirectory', $datadir], ['logfile', $defaultLog])
+ ->willReturnOnConsecutiveCalls($datadir, $defaultLog);
+
+ $log = $this->factory->get($type);
+ $this->assertInstanceOf(File::class, $log);
+ }
+
+ public function logFilePathProvider():array {
+ return [
+ [
+ '/dev/null',
+ '/dev/null'
+ ],
+ [
+ '/xdev/youshallfallback',
+ \OC::$SERVERROOT.'/data/nextcloud.log'
+ ]
+ ];
+ }
+
+ /**
+ * @dataProvider logFilePathProvider
+ * @throws \OCP\AppFramework\QueryException
+ */
+ public function testFileCustomPath($path, $expected) {
+ $datadir = \OC::$SERVERROOT.'/data';
+ $defaultLog = $datadir . '/nextcloud.log';
+
+ $this->systemConfig->expects($this->exactly(2))
+ ->method('getValue')
+ ->withConsecutive(['datadirectory', $datadir], ['logfile', $defaultLog])
+ ->willReturnOnConsecutiveCalls($datadir, $path);
+
+ $log = $this->factory->get('file');
+ $this->assertInstanceOf(File::class, $log);
+ $this->assertSame($expected, $log->getLogFilePath());
+ }
+
+ /**
+ * @throws \OCP\AppFramework\QueryException
+ */
+ public function testErrorLog() {
+ $log = $this->factory->get('errorlog');
+ $this->assertInstanceOf(Errorlog::class, $log);
+ }
+
+ /**
+ * @throws \OCP\AppFramework\QueryException
+ */
+ public function testSystemLog() {
+ $this->c->expects($this->once())
+ ->method('resolve')
+ ->with(Syslog::class)
+ ->willReturn($this->createMock(Syslog::class));
+
+ $log = $this->factory->get('syslog');
+ $this->assertInstanceOf(Syslog::class, $log);
+ }
+}
diff --git a/tests/lib/LoggerTest.php b/tests/lib/LoggerTest.php
index 6b9c9af8639..83cb87b8733 100644
--- a/tests/lib/LoggerTest.php
+++ b/tests/lib/LoggerTest.php
@@ -10,8 +10,9 @@ namespace Test;
use OC\Log;
use OCP\ILogger;
+use OCP\Log\IWriter;
-class LoggerTest extends TestCase {
+class LoggerTest extends TestCase implements IWriter {
/** @var \OC\SystemConfig|\PHPUnit_Framework_MockObject_MockObject */
private $config;
@@ -23,15 +24,15 @@ class LoggerTest extends TestCase {
private $logger;
/** @var array */
- static private $logs = array();
+ private $logs = [];
protected function setUp() {
parent::setUp();
- self::$logs = array();
+ $this->logs = [];
$this->config = $this->createMock(\OC\SystemConfig::class);
$this->registry = $this->createMock(\OCP\Support\CrashReport\IRegistry::class);
- $this->logger = new Log('Test\LoggerTest', $this->config, null, $this->registry);
+ $this->logger = new Log($this, $this->config, null, $this->registry);
}
public function testInterpolation() {
@@ -63,11 +64,11 @@ class LoggerTest extends TestCase {
}
private function getLogs() {
- return self::$logs;
+ return $this->logs;
}
- public static function write($app, $message, $level) {
- self::$logs[]= "$level $message";
+ public function write(string $app, $message, int $level) {
+ $this->logs[]= "$level $message";
}
public function userAndPasswordData() {
@@ -202,23 +203,4 @@ class LoggerTest extends TestCase {
$this->assertContains('*** sensitive parameters replaced ***', $logLine);
}
}
-
- public function dataGetLogClass() {
- return [
- ['file', \OC\Log\File::class],
- ['errorlog', \OC\Log\Errorlog::class],
- ['syslog', \OC\Log\Syslog::class],
-
- ['owncloud', \OC\Log\File::class],
- ['nextcloud', \OC\Log\File::class],
- ['foobar', \OC\Log\File::class],
- ];
- }
-
- /**
- * @dataProvider dataGetLogClass
- */
- public function testGetLogClass($type, $class) {
- $this->assertEquals($class, Log::getLogClass($type));
- }
}
diff --git a/tests/lib/Settings/Admin/AdditionalTest.php b/tests/lib/Settings/Admin/MailTest.php
index 4a254da060b..04c0e7fa92e 100644
--- a/tests/lib/Settings/Admin/AdditionalTest.php
+++ b/tests/lib/Settings/Admin/MailTest.php
@@ -24,11 +24,12 @@
namespace Test\Settings\Admin;
use OC\Settings\Admin\Additional;
+use OC\Settings\Admin\Mail;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IConfig;
use Test\TestCase;
-class AdditionalTest extends TestCase {
+class MailTest extends TestCase {
/** @var Additional */
private $admin;
/** @var IConfig */
@@ -38,7 +39,7 @@ class AdditionalTest extends TestCase {
parent::setUp();
$this->config = $this->getMockBuilder(IConfig::class)->getMock();
- $this->admin = new Additional(
+ $this->admin = new Mail(
$this->config
);
}
@@ -118,10 +119,10 @@ class AdditionalTest extends TestCase {
}
public function testGetSection() {
- $this->assertSame('additional', $this->admin->getSection());
+ $this->assertSame('server', $this->admin->getSection());
}
public function testGetPriority() {
- $this->assertSame(0, $this->admin->getPriority());
+ $this->assertSame(10, $this->admin->getPriority());
}
}
diff --git a/tests/lib/Settings/Admin/ServerTest.php b/tests/lib/Settings/Admin/ServerTest.php
index b8317540117..a121abc3df2 100644
--- a/tests/lib/Settings/Admin/ServerTest.php
+++ b/tests/lib/Settings/Admin/ServerTest.php
@@ -65,74 +65,25 @@ class ServerTest extends TestCase {
}
public function testGetForm() {
- $this->dbConnection
- ->expects($this->once())
- ->method('getDatabasePlatform')
- ->willReturn(new SqlitePlatform());
$this->config
->expects($this->at(0))
- ->method('getSystemValue')
- ->with('overwrite.cli.url', '')
- ->willReturn(true);
- $this->config
- ->expects($this->at(2))
->method('getAppValue')
->with('core', 'backgroundjobs_mode', 'ajax')
->willReturn('ajax');
$this->config
- ->expects($this->at(3))
+ ->expects($this->at(1))
->method('getAppValue')
->with('core', 'lastcron', false)
->willReturn(false);
$this->config
- ->expects($this->at(4))
+ ->expects($this->at(2))
->method('getAppValue')
->with('core', 'cronErrors')
->willReturn('');
- $this->config
- ->expects($this->at(1))
- ->method('getSystemValue')
- ->with('check_for_working_wellknown_setup', true)
- ->willReturn(true);
- $this->l10n
- ->expects($this->at(0))
- ->method('t')
- ->with('APCu')
- ->willReturn('APCu');
- $this->l10n
- ->expects($this->at(1))
- ->method('t')
- ->with('Redis')
- ->willReturn('Redis');
- $outdatedCaches = [];
- $caches = [
- 'apcu' => ['name' => 'APCu', 'version' => '4.0.6'],
- 'redis' => ['name' => 'Redis', 'version' => '2.2.5'],
- ];
- foreach ($caches as $php_module => $data) {
- $isOutdated = extension_loaded($php_module) && version_compare(phpversion($php_module), $data['version'], '<');
- if ($isOutdated) {
- $outdatedCaches[$php_module] = $data;
- }
- }
- $envPath = getenv('PATH');
$expected = new TemplateResponse(
'settings',
'settings/admin/server',
[
- // Diagnosis
- 'readOnlyConfigEnabled' => \OC_Helper::isReadOnlyConfigEnabled(),
- 'isLocaleWorking' => \OC_Util::isSetLocaleWorking(),
- 'isAnnotationsWorking' => \OC_Util::isAnnotationsWorking(),
- 'checkForWorkingWellKnownSetup' => true,
- 'has_fileinfo' => \OC_Util::fileInfoLoaded(),
- 'invalidTransactionIsolationLevel' => false,
- 'getenvServerNotWorking' => empty($envPath),
- 'OutdatedCacheWarning' => $outdatedCaches,
- 'fileLockingType' => 'cache',
- 'suggestedOverwriteCliUrl' => '',
-
- // Background jobs
'backgroundjobs_mode' => 'ajax',
'lastcron' => false,
'cronErrors' => '',
diff --git a/tests/lib/Settings/ManagerTest.php b/tests/lib/Settings/ManagerTest.php
index b218a347e85..d51a57598b3 100644
--- a/tests/lib/Settings/ManagerTest.php
+++ b/tests/lib/Settings/ManagerTest.php
@@ -115,24 +115,25 @@ class ManagerTest extends TestCase {
$this->manager->registerSection('admin', \OCA\WorkflowEngine\Settings\Section::class);
- $this->url->expects($this->exactly(6))
+ $this->url->expects($this->exactly(7))
->method('imagePath')
->willReturnMap([
- ['settings', 'admin.svg', '1'],
+ ['settings', 'admin.svg', '0'],
+ ['core', 'actions/settings-dark.svg', '1'],
['core', 'actions/share.svg', '2'],
['core', 'actions/password.svg', '3'],
- ['core', 'actions/settings-dark.svg', '4'],
- ['settings', 'help.svg', '5'],
+ ['settings', 'help.svg', '4'],
]);
$this->assertEquals([
- 0 => [new Section('server', 'Basic settings', 0, '1')],
+ 0 => [new Section('overview', 'Overview', 0, '0')],
+ 1 => [new Section('server', 'Basic settings', 0, '1')],
5 => [new Section('sharing', 'Sharing', 0, '2')],
10 => [new Section('security', 'Security', 0, '3')],
45 => [new Section('encryption', 'Encryption', 0, '3')],
55 => [\OC::$server->query(\OCA\WorkflowEngine\Settings\Section::class)],
- 98 => [new Section('additional', 'Additional settings', 0, '4')],
- 99 => [new Section('tips-tricks', 'Tips & tricks', 0, '5')],
+ 98 => [new Section('additional', 'Additional settings', 0, '1')],
+ 99 => [new Section('tips-tricks', 'Tips & tricks', 0, '4')],
], $this->manager->getAdminSections());
}
@@ -166,23 +167,24 @@ class ManagerTest extends TestCase {
->method('t')
->will($this->returnArgument(0));
- $this->url->expects($this->exactly(6))
+ $this->url->expects($this->exactly(7))
->method('imagePath')
->willReturnMap([
- ['settings', 'admin.svg', '1'],
+ ['settings', 'admin.svg', '0'],
+ ['core', 'actions/settings-dark.svg', '1'],
['core', 'actions/share.svg', '2'],
['core', 'actions/password.svg', '3'],
- ['core', 'actions/settings-dark.svg', '4'],
- ['settings', 'help.svg', '5'],
+ ['settings', 'help.svg', '4'],
]);
$this->assertEquals([
- 0 => [new Section('server', 'Basic settings', 0, '1')],
+ 0 => [new Section('overview', 'Overview', 0, '0')],
+ 1 => [new Section('server', 'Basic settings', 0, '1')],
5 => [new Section('sharing', 'Sharing', 0, '2')],
10 => [new Section('security', 'Security', 0, '3')],
45 => [new Section('encryption', 'Encryption', 0, '3')],
- 98 => [new Section('additional', 'Additional settings', 0, '4')],
- 99 => [new Section('tips-tricks', 'Tips & tricks', 0, '5')],
+ 98 => [new Section('additional', 'Additional settings', 0, '1')],
+ 99 => [new Section('tips-tricks', 'Tips & tricks', 0, '4')],
], $this->manager->getAdminSections());
}