summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.drone.yml9
-rw-r--r--apps/comments/appinfo/app.php10
-rw-r--r--apps/comments/appinfo/info.xml14
-rw-r--r--apps/comments/js/activitytabviewplugin.js2
-rw-r--r--apps/comments/lib/Activity/Extension.php342
-rw-r--r--apps/comments/lib/Activity/Filter.php90
-rw-r--r--apps/comments/lib/Activity/Listener.php10
-rw-r--r--apps/comments/lib/Activity/Provider.php235
-rw-r--r--apps/comments/lib/Activity/Setting.php98
-rw-r--r--apps/comments/tests/Unit/AppInfo/ApplicationTest.php4
-rw-r--r--apps/dav/appinfo/info.xml4
-rw-r--r--apps/dav/lib/CalDAV/Calendar.php2
-rw-r--r--apps/dav/lib/CardDAV/Converter.php2
-rw-r--r--apps/dav/lib/Migration/Classification.php94
-rw-r--r--apps/dav/lib/Migration/GenerateBirthdays.php71
-rw-r--r--apps/dav/tests/unit/CalDAV/CalendarTest.php25
-rw-r--r--apps/dav/tests/unit/CardDAV/ConverterTest.php46
-rw-r--r--apps/dav/tests/unit/Migration/ClassificationTest.php65
-rw-r--r--apps/encryption/lib/Crypto/Encryption.php8
-rw-r--r--apps/encryption/lib/Session.php10
-rw-r--r--apps/encryption/tests/Crypto/EncryptionTest.php15
-rw-r--r--apps/encryption/tests/SessionTest.php26
-rw-r--r--apps/federatedfilesharing/lib/Controller/RequestHandlerController.php38
-rw-r--r--apps/federation/templates/settings-admin.php6
-rw-r--r--apps/files/css/files.css12
-rw-r--r--apps/files/lib/Activity/Provider.php54
-rw-r--r--apps/files_sharing/appinfo/app.php8
-rw-r--r--apps/files_sharing/appinfo/info.xml20
-rw-r--r--apps/files_sharing/l10n/fr.js1
-rw-r--r--apps/files_sharing/l10n/fr.json1
-rw-r--r--apps/files_sharing/l10n/pt_BR.js12
-rw-r--r--apps/files_sharing/l10n/pt_BR.json12
-rw-r--r--apps/files_sharing/lib/Activity.php494
-rw-r--r--apps/files_sharing/lib/Activity/Filter.php95
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Downloads.php187
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Groups.php261
-rw-r--r--apps/files_sharing/lib/Activity/Providers/PublicLinks.php268
-rw-r--r--apps/files_sharing/lib/Activity/Providers/RemoteShares.php209
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Users.php289
-rw-r--r--apps/files_sharing/lib/Activity/Settings/PublicLinks.php98
-rw-r--r--apps/files_sharing/lib/Activity/Settings/RemoteShare.php98
-rw-r--r--apps/files_sharing/lib/Activity/Settings/Shared.php98
-rw-r--r--apps/files_sharing/lib/Controller/ShareController.php12
-rw-r--r--apps/files_sharing/tests/ActivityTest.php81
-rw-r--r--apps/systemtags/appinfo/app.php14
-rw-r--r--apps/systemtags/appinfo/info.xml10
-rw-r--r--apps/systemtags/css/systemtagsfilelist.css2
-rw-r--r--apps/systemtags/lib/Activity/Extension.php337
-rw-r--r--apps/systemtags/lib/Activity/Listener.php37
-rw-r--r--apps/systemtags/lib/Activity/Provider.php325
-rw-r--r--apps/systemtags/lib/Activity/Setting.php98
-rw-r--r--apps/theming/lib/Controller/ThemingController.php4
-rw-r--r--apps/user_ldap/css/settings.css5
-rw-r--r--apps/user_ldap/js/wizard/wizardTabAdvanced.js15
-rw-r--r--apps/user_ldap/lib/Access.php29
-rw-r--r--apps/user_ldap/lib/Configuration.php4
-rw-r--r--apps/user_ldap/lib/Connection.php1
-rw-r--r--apps/user_ldap/lib/Exceptions/ConstraintViolationException.php26
-rw-r--r--apps/user_ldap/lib/ILDAPWrapper.php9
-rw-r--r--apps/user_ldap/lib/LDAP.php17
-rw-r--r--apps/user_ldap/lib/User_LDAP.php32
-rw-r--r--apps/user_ldap/lib/User_Proxy.php11
-rw-r--r--apps/user_ldap/templates/settings.php2
-rw-r--r--apps/user_ldap/tests/AccessTest.php109
-rw-r--r--apps/user_ldap/tests/LDAPTest.php50
-rw-r--r--apps/user_ldap/tests/User_LDAPTest.php142
-rw-r--r--apps/user_ldap/tests/User_ProxyTest.php61
-rw-r--r--build/integration/config/behat.yml10
-rw-r--r--build/integration/features/bootstrap/SetupContext.php34
-rwxr-xr-xbuild/integration/run.sh41
-rw-r--r--build/integration/setup_features/setup.feature5
-rw-r--r--console.php2
-rw-r--r--core/css/apps.css4
-rw-r--r--core/css/inputs.css7
-rw-r--r--core/js/apps.js4
-rw-r--r--core/js/jquery.avatar.js6
-rw-r--r--core/js/js.js1
-rw-r--r--core/js/oc-dialogs.js1
-rw-r--r--core/js/sharedialogview.js12
-rw-r--r--core/js/tests/specs/jquery.avatarSpec.js4
-rw-r--r--core/templates/installation.php4
-rw-r--r--lib/base.php10
-rw-r--r--lib/l10n/cs_CZ.js2
-rw-r--r--lib/l10n/cs_CZ.json2
-rw-r--r--lib/l10n/de.js2
-rw-r--r--lib/l10n/de.json2
-rw-r--r--lib/l10n/de_DE.js2
-rw-r--r--lib/l10n/de_DE.json2
-rw-r--r--lib/l10n/es.js2
-rw-r--r--lib/l10n/es.json2
-rw-r--r--lib/l10n/fr.js2
-rw-r--r--lib/l10n/fr.json2
-rw-r--r--lib/l10n/hu_HU.js2
-rw-r--r--lib/l10n/hu_HU.json2
-rw-r--r--lib/l10n/it.js2
-rw-r--r--lib/l10n/it.json2
-rw-r--r--lib/l10n/ja.js2
-rw-r--r--lib/l10n/ja.json2
-rw-r--r--lib/l10n/nb_NO.js2
-rw-r--r--lib/l10n/nb_NO.json2
-rw-r--r--lib/l10n/nl.js2
-rw-r--r--lib/l10n/nl.json2
-rw-r--r--lib/l10n/pl.js2
-rw-r--r--lib/l10n/pl.json2
-rw-r--r--lib/l10n/ru.js2
-rw-r--r--lib/l10n/ru.json2
-rw-r--r--lib/l10n/zh_TW.js2
-rw-r--r--lib/l10n/zh_TW.json2
-rw-r--r--lib/private/Activity/Event.php1
-rw-r--r--lib/private/Activity/Manager.php6
-rw-r--r--lib/private/AppFramework/Http/Request.php33
-rw-r--r--lib/private/Console/Application.php13
-rw-r--r--lib/private/Files/Cache/Scanner.php10
-rw-r--r--lib/private/Files/Config/UserMountCache.php9
-rw-r--r--lib/private/Files/Storage/Common.php25
-rw-r--r--lib/private/Files/View.php40
-rw-r--r--lib/private/Preview/GeneratorHelper.php3
-rw-r--r--lib/private/legacy/defaults.php2
-rw-r--r--lib/public/Activity/IEvent.php1
-rw-r--r--lib/public/Activity/IFilter.php21
-rw-r--r--lib/public/Files/EmptyFileNameException.php31
-rw-r--r--lib/public/Files/InvalidDirectoryException.php31
-rw-r--r--settings/Application.php136
-rw-r--r--settings/Controller/AppSettingsController.php3
-rw-r--r--settings/ajax/enableapp.php2
-rw-r--r--settings/js/authtoken_view.js2
-rw-r--r--settings/js/users/users.js2
-rw-r--r--settings/l10n/cs_CZ.js34
-rw-r--r--settings/l10n/cs_CZ.json34
-rw-r--r--settings/l10n/de.js34
-rw-r--r--settings/l10n/de.json34
-rw-r--r--settings/l10n/de_DE.js34
-rw-r--r--settings/l10n/de_DE.json34
-rw-r--r--settings/l10n/el.js32
-rw-r--r--settings/l10n/el.json32
-rw-r--r--settings/l10n/en_GB.js34
-rw-r--r--settings/l10n/en_GB.json34
-rw-r--r--settings/l10n/es.js34
-rw-r--r--settings/l10n/es.json34
-rw-r--r--settings/l10n/fr.js37
-rw-r--r--settings/l10n/fr.json37
-rw-r--r--settings/l10n/hu_HU.js34
-rw-r--r--settings/l10n/hu_HU.json34
-rw-r--r--settings/l10n/id.js34
-rw-r--r--settings/l10n/id.json34
-rw-r--r--settings/l10n/is.js34
-rw-r--r--settings/l10n/is.json34
-rw-r--r--settings/l10n/it.js34
-rw-r--r--settings/l10n/it.json34
-rw-r--r--settings/l10n/ja.js34
-rw-r--r--settings/l10n/ja.json34
-rw-r--r--settings/l10n/ko.js34
-rw-r--r--settings/l10n/ko.json34
-rw-r--r--settings/l10n/nb_NO.js34
-rw-r--r--settings/l10n/nb_NO.json34
-rw-r--r--settings/l10n/nl.js34
-rw-r--r--settings/l10n/nl.json34
-rw-r--r--settings/l10n/pt_BR.js34
-rw-r--r--settings/l10n/pt_BR.json34
-rw-r--r--settings/l10n/ru.js34
-rw-r--r--settings/l10n/ru.json34
-rw-r--r--settings/l10n/tr.js34
-rw-r--r--settings/l10n/tr.json34
-rw-r--r--settings/templates/personal.php28
-rw-r--r--tests/lib/AppFramework/Http/RequestTest.php70
-rw-r--r--tests/lib/Files/Cache/ScannerTest.php26
-rw-r--r--tests/lib/Files/PathVerificationTest.php2
-rw-r--r--version.php2
168 files changed, 4298 insertions, 2500 deletions
diff --git a/.drone.yml b/.drone.yml
index d6b36097b96..3b56e54278b 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -322,6 +322,14 @@ pipeline:
when:
matrix:
TESTS: integration-sharees-features
+ integration-setup-features:
+ image: nextcloudci/integration-php7.0:integration-php7.0-2
+ commands:
+ - cd build/integration
+ - ./run.sh setup_features/setup.feature
+ when:
+ matrix:
+ TESTS: integration-setup-features
nodb-codecov:
image: nextcloudci/php7.0:php7.0-6
commands:
@@ -365,6 +373,7 @@ matrix:
- TESTS: integration-provisioning-v2
- TESTS: integration-webdav-related
- TESTS: integration-sharees-features
+ - TESTS: integration-setup-features
- TESTS: jsunit
- TESTS: check-autoloader
- TESTS: app-check-code
diff --git a/apps/comments/appinfo/app.php b/apps/comments/appinfo/app.php
index 66e60dbbd85..144a4506d38 100644
--- a/apps/comments/appinfo/app.php
+++ b/apps/comments/appinfo/app.php
@@ -37,14 +37,6 @@ $eventDispatcher->addListener(
}
);
-$activityManager = \OC::$server->getActivityManager();
-$activityManager->registerExtension(function() {
- $application = new \OCP\AppFramework\App('comments');
- /** @var \OCA\Comments\Activity\Extension $extension */
- $extension = $application->getContainer()->query(\OCA\Comments\Activity\Extension::class);
- return $extension;
-});
-
$eventDispatcher->addListener(\OCP\Comments\CommentsEntityEvent::EVENT_ENTITY, function(\OCP\Comments\CommentsEntityEvent $event) {
$event->addEntityCollection('files', function($name) {
$nodes = \OC::$server->getUserFolder()->getById(intval($name));
@@ -67,7 +59,7 @@ $notificationManager->registerNotifier(
$commentsManager = \OC::$server->getCommentsManager();
$commentsManager->registerEventHandler(function () {
$application = new \OCP\AppFramework\App('comments');
- /** @var \OCA\Comments\Activity\Extension $extension */
+ /** @var \OCA\Comments\EventHandler $handler */
$handler = $application->getContainer()->query(\OCA\Comments\EventHandler::class);
return $handler;
});
diff --git a/apps/comments/appinfo/info.xml b/apps/comments/appinfo/info.xml
index 1c0a38e5668..9d5409a2d62 100644
--- a/apps/comments/appinfo/info.xml
+++ b/apps/comments/appinfo/info.xml
@@ -13,4 +13,18 @@
<types>
<logging/>
</types>
+
+ <activity>
+ <settings>
+ <setting>OCA\Comments\Activity\Setting</setting>
+ </settings>
+
+ <filters>
+ <filter>OCA\Comments\Activity\Filter</filter>
+ </filters>
+
+ <providers>
+ <provider>OCA\Comments\Activity\Provider</provider>
+ </providers>
+ </activity>
</info>
diff --git a/apps/comments/js/activitytabviewplugin.js b/apps/comments/js/activitytabviewplugin.js
index ca3253bd137..b6195b80c45 100644
--- a/apps/comments/js/activitytabviewplugin.js
+++ b/apps/comments/js/activitytabviewplugin.js
@@ -25,7 +25,7 @@
if (view === 'ActivityTabView') {
$el.addClass('comment');
- if (this._isLong(model.get('message_prepared'))) {
+ if (model.get('message') && this._isLong(model.get('message'))) {
$el.addClass('collapsed');
var $overlay = $('<div>').addClass('message-overlay');
$el.find('.activitymessage').after($overlay);
diff --git a/apps/comments/lib/Activity/Extension.php b/apps/comments/lib/Activity/Extension.php
deleted file mode 100644
index 2a155dd0064..00000000000
--- a/apps/comments/lib/Activity/Extension.php
+++ /dev/null
@@ -1,342 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Joas Schilling <coding@schilljs.com>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-namespace OCA\Comments\Activity;
-
-use OCP\Activity\IExtension;
-use OCP\Activity\IManager;
-use OCP\Comments\ICommentsManager;
-use OCP\Comments\NotFoundException;
-use OCP\IL10N;
-use OCP\IURLGenerator;
-use OCP\L10N\IFactory;
-use OCP\Util;
-
-/**
- * Class Extension
- *
- * @package OCA\Comments\Activity
- */
-class Extension implements IExtension {
- const APP_NAME = 'comments';
-
- const ADD_COMMENT_SUBJECT = 'add_comment_subject';
- const ADD_COMMENT_MESSAGE = 'add_comment_message';
-
- /** @var IFactory */
- protected $languageFactory;
-
- /** @var IManager */
- protected $activityManager;
-
- /** @var ICommentsManager */
- protected $commentsManager;
-
- /** @var IURLGenerator */
- protected $URLGenerator;
-
- /**
- * @param IFactory $languageFactory
- * @param IManager $activityManager
- * @param ICommentsManager $commentsManager
- * @param IURLGenerator $URLGenerator
- */
- public function __construct(IFactory $languageFactory, IManager $activityManager, ICommentsManager $commentsManager, IURLGenerator $URLGenerator) {
- $this->languageFactory = $languageFactory;
- $this->activityManager = $activityManager;
- $this->commentsManager = $commentsManager;
- $this->URLGenerator = $URLGenerator;
- }
-
- protected function getL10N($languageCode = null) {
- return $this->languageFactory->get(self::APP_NAME, $languageCode);
- }
-
- /**
- * The extension can return an array of additional notification types.
- * If no additional types are to be added false is to be returned
- *
- * @param string $languageCode
- * @return array|false
- */
- public function getNotificationTypes($languageCode) {
- $l = $this->getL10N($languageCode);
-
- return array(
- self::APP_NAME => [
- 'desc' => (string) $l->t('<strong>Comments</strong> for files'),
- 'methods' => [self::METHOD_MAIL, self::METHOD_STREAM],
- ],
- );
- }
-
- /**
- * For a given method additional types to be displayed in the settings can be returned.
- * In case no additional types are to be added false is to be returned.
- *
- * @param string $method
- * @return array|false
- */
- public function getDefaultTypes($method) {
- return $method === self::METHOD_STREAM ? [self::APP_NAME] : false;
- }
-
- /**
- * A string naming the css class for the icon to be used can be returned.
- * If no icon is known for the given type false is to be returned.
- *
- * @param string $type
- * @return string|false
- */
- public function getTypeIcon($type) {
- switch ($type) {
- case self::APP_NAME:
- return 'icon-comment';
- }
-
- return false;
- }
-
- /**
- * The extension can translate a given message to the requested languages.
- * If no translation is available false is to be returned.
- *
- * @param string $app
- * @param string $text
- * @param array $params
- * @param boolean $stripPath
- * @param boolean $highlightParams
- * @param string $languageCode
- * @return string|false
- */
- public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode) {
- if ($app !== self::APP_NAME) {
- return false;
- }
-
- $l = $this->getL10N($languageCode);
-
- if ($this->activityManager->isFormattingFilteredObject()) {
- $translation = $this->translateShort($text, $l, $params);
- if ($translation !== false) {
- return $translation;
- }
- }
-
- return $this->translateLong($text, $l, $params);
- }
-
- /**
- * @param string $text
- * @param IL10N $l
- * @param array $params
- * @return bool|string
- */
- protected function translateShort($text, IL10N $l, array $params) {
-
- switch ($text) {
- case self::ADD_COMMENT_SUBJECT:
- if ($this->authorIsCurrentUser($params[0])) {
- return (string) $l->t('You commented');
- }
- return (string) $l->t('%1$s commented', $params);
- case self::ADD_COMMENT_MESSAGE:
- return $this->convertParameterToComment($params[0]);
- }
-
- return false;
- }
-
- /**
- * @param string $text
- * @param IL10N $l
- * @param array $params
- * @return bool|string
- */
- protected function translateLong($text, IL10N $l, array $params) {
-
- switch ($text) {
- case self::ADD_COMMENT_SUBJECT:
- if ($this->authorIsCurrentUser($params[0])) {
- return (string) $l->t('You commented on %2$s', $params);
- }
- return (string) $l->t('%1$s commented on %2$s', $params);
- case self::ADD_COMMENT_MESSAGE:
- return $this->convertParameterToComment($params[0]);
- }
-
- return false;
- }
-
- /**
- * Check if the author is the current user
- *
- * @param string $user Parameter e.g. `<user display-name="admin">admin</user>`
- * @return bool
- */
- protected function authorIsCurrentUser($user) {
- try {
- return strip_tags($user) === $this->activityManager->getCurrentUserId();
- } catch (\UnexpectedValueException $e) {
- return false;
- }
- }
-
- /**
- * The extension can define the type of parameters for translation
- *
- * Currently known types are:
- * * file => will strip away the path of the file and add a tooltip with it
- * * username => will add the avatar of the user
- *
- * @param string $app
- * @param string $text
- * @return array|false
- */
- public function getSpecialParameterList($app, $text) {
- if ($app === self::APP_NAME) {
- switch ($text) {
- case self::ADD_COMMENT_SUBJECT:
- return [
- 0 => 'username',
- 1 => 'file',
- ];
- }
- }
-
- return false;
- }
-
- /**
- * The extension can define the parameter grouping by returning the index as integer.
- * In case no grouping is required false is to be returned.
- *
- * @param array $activity
- * @return integer|false
- */
- public function getGroupParameter($activity) {
- return false;
- }
-
- /**
- * The extension can define additional navigation entries. The array returned has to contain two keys 'top'
- * and 'apps' which hold arrays with the relevant entries.
- * If no further entries are to be added false is no be returned.
- *
- * @return array|false
- */
- public function getNavigation() {
- $l = $this->getL10N();
- return [
- 'apps' => [
- self::APP_NAME => [
- 'id' => self::APP_NAME,
- 'icon' => 'icon-comment',
- 'name' => (string) $l->t('Comments'),
- 'url' => $this->URLGenerator->linkToRoute('activity.Activities.showList', ['filter' => self::APP_NAME]),
- ],
- ],
- 'top' => [],
- ];
- }
-
- /**
- * The extension can check if a custom filter (given by a query string like filter=abc) is valid or not.
- *
- * @param string $filterValue
- * @return boolean
- */
- public function isFilterValid($filterValue) {
- return $filterValue === self::APP_NAME;
- }
-
- /**
- * The extension can filter the types based on the filter if required.
- * In case no filter is to be applied false is to be returned unchanged.
- *
- * @param array $types
- * @param string $filter
- * @return array|false
- */
- public function filterNotificationTypes($types, $filter) {
- if ($filter === self::APP_NAME) {
- return array_intersect($types, [self::APP_NAME]);
- }
- return false;
- }
-
- /**
- * For a given filter the extension can specify the sql query conditions including parameters for that query.
- * In case the extension does not know the filter false is to be returned.
- * The query condition and the parameters are to be returned as array with two elements.
- * E.g. return array('`app` = ? and `message` like ?', array('mail', 'ownCloud%'));
- *
- * @param string $filter
- * @return array|false
- */
- public function getQueryForFilter($filter) {
- return false;
- }
-
- /**
- * @param string $parameter
- * @return string
- */
- protected function convertParameterToComment($parameter) {
- if (preg_match('/^\<parameter\>(\d*)\<\/parameter\>$/', $parameter, $matches)) {
- try {
- $comment = $this->commentsManager->get((int) $matches[1]);
- $message = $comment->getMessage();
- $message = str_replace("\n", '<br />', str_replace(['<', '>'], ['&lt;', '&gt;'], $message));
-
- foreach ($comment->getMentions() as $mention) {
- if ($mention['type'] !== 'user') {
- continue;
- }
-
- try {
- $displayName = $this->commentsManager->resolveDisplayName($mention['type'], $mention['id']);
- } catch (\OutOfBoundsException $e) {
- // No displayname, upon client's discretion what to display.
- $displayName = $mention['id'];
- }
-
- $message = preg_replace(
- '/(^|\s)(' . '@' . $mention['id'] . ')(\b)/',
- '${1}' . $this->regexSafeUser($mention['id'], $displayName) . '${3}',
- $message
- );
- }
- return $message;
- } catch (NotFoundException $e) {
- return '';
- }
- }
-
- return '';
- }
-
- protected function regexSafeUser($uid, $displayName) {
- // FIXME evil internal API hackery, do NOT copy this
- return str_replace('$', '\$', '<user display-name="' . Util::sanitizeHTML($displayName) . '">' . Util::sanitizeHTML($uid) . '</user>');
- }
-}
diff --git a/apps/comments/lib/Activity/Filter.php b/apps/comments/lib/Activity/Filter.php
new file mode 100644
index 00000000000..b9417b6b236
--- /dev/null
+++ b/apps/comments/lib/Activity/Filter.php
@@ -0,0 +1,90 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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\Comments\Activity;
+
+
+use OCP\Activity\IFilter;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+
+class Filter implements IFilter {
+
+ /** @var IL10N */
+ protected $l;
+
+ /** @var IURLGenerator */
+ protected $url;
+
+ public function __construct(IL10N $l, IURLGenerator $url) {
+ $this->l = $l;
+ $this->url = $url;
+ }
+
+ /**
+ * @return string Lowercase a-z only identifier
+ * @since 11.0.0
+ */
+ public function getIdentifier() {
+ return 'comments';
+ }
+
+ /**
+ * @return string A translated string
+ * @since 11.0.0
+ */
+ public function getName() {
+ return $this->l->t('Comments');
+ }
+
+ /**
+ * @return int
+ * @since 11.0.0
+ */
+ public function getPriority() {
+ return 40;
+ }
+
+ /**
+ * @return string Full URL to an icon, empty string when none is given
+ * @since 11.0.0
+ */
+ public function getIcon() {
+ return $this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/comment.svg'));
+ }
+
+ /**
+ * @param string[] $types
+ * @return string[] An array of allowed apps from which activities should be displayed
+ * @since 11.0.0
+ */
+ public function filterTypes(array $types) {
+ return $types;
+ }
+
+ /**
+ * @return string[] An array of allowed apps from which activities should be displayed
+ * @since 11.0.0
+ */
+ public function allowedApps() {
+ return ['comments'];
+ }
+}
diff --git a/apps/comments/lib/Activity/Listener.php b/apps/comments/lib/Activity/Listener.php
index ad1e2774148..2ac49144690 100644
--- a/apps/comments/lib/Activity/Listener.php
+++ b/apps/comments/lib/Activity/Listener.php
@@ -108,18 +108,18 @@ class Listener {
}
$activity = $this->activityManager->generateEvent();
- $activity->setApp(Extension::APP_NAME)
- ->setType(Extension::APP_NAME)
+ $activity->setApp('comments')
+ ->setType('comments')
->setAuthor($actor)
- ->setObject($event->getComment()->getObjectType(), $event->getComment()->getObjectId())
- ->setMessage(Extension::ADD_COMMENT_MESSAGE, [
+ ->setObject($event->getComment()->getObjectType(), (int) $event->getComment()->getObjectId())
+ ->setMessage('add_comment_message', [
$event->getComment()->getId(),
]);
foreach ($users as $user => $path) {
$activity->setAffectedUser($user);
- $activity->setSubject(Extension::ADD_COMMENT_SUBJECT, [
+ $activity->setSubject('add_comment_subject', [
$actor,
$path,
]);
diff --git a/apps/comments/lib/Activity/Provider.php b/apps/comments/lib/Activity/Provider.php
new file mode 100644
index 00000000000..9035087965c
--- /dev/null
+++ b/apps/comments/lib/Activity/Provider.php
@@ -0,0 +1,235 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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\Comments\Activity;
+
+use OCP\Activity\IEvent;
+use OCP\Activity\IManager;
+use OCP\Activity\IProvider;
+use OCP\Comments\ICommentsManager;
+use OCP\Comments\NotFoundException;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserManager;
+
+class Provider implements IProvider {
+
+ /** @var IL10N */
+ protected $l;
+
+ /** @var IURLGenerator */
+ protected $url;
+
+ /** @var ICommentsManager */
+ protected $commentsManager;
+
+ /** @var IUserManager */
+ protected $userManager;
+
+ /** @var IManager */
+ protected $activityManager;
+
+ /** @var string[] */
+ protected $displayNames = [];
+
+ /**
+ * @param IL10N $l
+ * @param IURLGenerator $url
+ * @param ICommentsManager $commentsManager
+ * @param IUserManager $userManager
+ * @param IManager $activityManager
+ */
+ public function __construct(IL10N $l, IURLGenerator $url, ICommentsManager $commentsManager, IUserManager $userManager, IManager $activityManager) {
+ $this->l = $l;
+ $this->url = $url;
+ $this->commentsManager = $commentsManager;
+ $this->userManager = $userManager;
+ $this->activityManager = $activityManager;
+ }
+
+ /**
+ * @param IEvent $event
+ * @param IEvent|null $previousEvent
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parse(IEvent $event, IEvent $previousEvent = null) {
+ if ($event->getApp() !== 'comments') {
+ throw new \InvalidArgumentException();
+ }
+
+ if ($event->getSubject() === 'add_comment_subject') {
+ $this->parseMessage($event);
+ $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/comment.svg')));
+
+ if ($this->activityManager->isFormattingFilteredObject()) {
+ try {
+ return $this->parseShortVersion($event);
+ } catch (\InvalidArgumentException $e) {
+ // Ignore and simply use the long version...
+ }
+ }
+
+ return $this->parseLongVersion($event);
+ } else {
+ throw new \InvalidArgumentException();
+ }
+ }
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ */
+ protected function parseShortVersion(IEvent $event) {
+ $subjectParameters = $event->getSubjectParameters();
+
+ if ($event->getSubject() === 'add_comment_subject') {
+ if ($subjectParameters[0] === $this->activityManager->getCurrentUserId()) {
+ $event->setParsedSubject($this->l->t('You commented'))
+ ->setRichSubject($this->l->t('You commented'), []);
+ } else {
+ $author = $this->generateUserParameter($subjectParameters[0]);
+ $event->setParsedSubject($this->l->t('%1$s commented', [$author['name']]))
+ ->setRichSubject($this->l->t('{author} commented'), [
+ 'author' => $author,
+ ]);
+ }
+ } else {
+ throw new \InvalidArgumentException();
+ }
+
+ return $event;
+ }
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ */
+ protected function parseLongVersion(IEvent $event) {
+ $subjectParameters = $event->getSubjectParameters();
+
+ if ($event->getSubject() === 'add_comment_subject') {
+ if ($subjectParameters[0] === $this->activityManager->getCurrentUserId()) {
+ $event->setParsedSubject($this->l->t('You commented on %1$s', [
+ trim($subjectParameters[1], '/'),
+ ]))
+ ->setRichSubject($this->l->t('You commented on {file}'), [
+ 'file' => $this->generateFileParameter($event->getObjectId(), $subjectParameters[1]),
+ ]);
+ } else {
+ $author = $this->generateUserParameter($subjectParameters[0]);
+ $event->setParsedSubject($this->l->t('%1$s commented on %2$s', [
+ $author['name'],
+ trim($subjectParameters[1], '/'),
+ ]))
+ ->setRichSubject($this->l->t('{author} commented on {file}'), [
+ 'author' => $author,
+ 'file' => $this->generateFileParameter($event->getObjectId(), $subjectParameters[1]),
+ ]);
+ }
+ } else {
+ throw new \InvalidArgumentException();
+ }
+
+ return $event;
+ }
+
+ /**
+ * @param IEvent $event
+ */
+ protected function parseMessage(IEvent $event) {
+ $messageParameters = $event->getMessageParameters();
+ try {
+ $comment = $this->commentsManager->get((int) $messageParameters[0]);
+ $message = $comment->getMessage();
+ $message = str_replace("\n", '<br />', str_replace(['<', '>'], ['&lt;', '&gt;'], $message));
+
+ $mentionCount = 1;
+ $mentions = [];
+ foreach ($comment->getMentions() as $mention) {
+ if ($mention['type'] !== 'user') {
+ continue;
+ }
+
+ $message = preg_replace(
+ '/(^|\s)(' . '@' . $mention['id'] . ')(\b)/',
+ //'${1}' . $this->regexSafeUser($mention['id'], $displayName) . '${3}',
+ '${1}' . '{mention' . $mentionCount . '}' . '${3}',
+ $message
+ );
+ $mentions['mention' . $mentionCount] = $this->generateUserParameter($mention['id']);
+ $mentionCount++;
+ }
+
+ $event->setParsedMessage($comment->getMessage())
+ ->setRichMessage($message, $mentions);
+ } catch (NotFoundException $e) {
+ }
+ }
+
+ /**
+ * @param int $id
+ * @param string $path
+ * @return array
+ */
+ protected function generateFileParameter($id, $path) {
+ return [
+ 'type' => 'file',
+ 'id' => $id,
+ 'name' => basename($path),
+ 'path' => $path,
+ 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
+ ];
+ }
+
+ /**
+ * @param string $uid
+ * @return array
+ */
+ protected function generateUserParameter($uid) {
+ if (!isset($this->displayNames[$uid])) {
+ $this->displayNames[$uid] = $this->getDisplayName($uid);
+ }
+
+ return [
+ 'type' => 'user',
+ 'id' => $uid,
+ 'name' => $this->displayNames[$uid],
+ ];
+ }
+
+ /**
+ * @param string $uid
+ * @return string
+ */
+ protected function getDisplayName($uid) {
+ $user = $this->userManager->get($uid);
+ if ($user instanceof IUser) {
+ return $user->getDisplayName();
+ } else {
+ return $uid;
+ }
+ }
+}
diff --git a/apps/comments/lib/Activity/Setting.php b/apps/comments/lib/Activity/Setting.php
new file mode 100644
index 00000000000..110ec4a31a4
--- /dev/null
+++ b/apps/comments/lib/Activity/Setting.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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\Comments\Activity;
+
+
+use OCP\Activity\ISetting;
+use OCP\IL10N;
+
+class Setting implements ISetting {
+
+ /** @var IL10N */
+ protected $l;
+
+ /**
+ * @param IL10N $l
+ */
+ public function __construct(IL10N $l) {
+ $this->l = $l;
+ }
+
+ /**
+ * @return string Lowercase a-z and underscore only identifier
+ * @since 11.0.0
+ */
+ public function getIdentifier() {
+ return 'comments';
+ }
+
+ /**
+ * @return string A translated string
+ * @since 11.0.0
+ */
+ public function getName() {
+ return $this->l->t('<strong>Comments</strong> for files');
+ }
+
+ /**
+ * @return int whether the filter should be rather on the top or bottom of
+ * the admin section. The filters are arranged in ascending order of the
+ * priority values. It is required to return a value between 0 and 100.
+ * @since 11.0.0
+ */
+ public function getPriority() {
+ return 50;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function canChangeStream() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function isDefaultEnabledStream() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the mail
+ * @since 11.0.0
+ */
+ public function canChangeMail() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function isDefaultEnabledMail() {
+ return false;
+ }
+}
+
diff --git a/apps/comments/tests/Unit/AppInfo/ApplicationTest.php b/apps/comments/tests/Unit/AppInfo/ApplicationTest.php
index c11d7857496..e0a47dbfff9 100644
--- a/apps/comments/tests/Unit/AppInfo/ApplicationTest.php
+++ b/apps/comments/tests/Unit/AppInfo/ApplicationTest.php
@@ -52,8 +52,10 @@ class ApplicationTest extends TestCase {
$this->assertInstanceOf('OCA\Comments\Controller\Notifications', $s);
$services = [
- 'OCA\Comments\Activity\Extension',
+ 'OCA\Comments\Activity\Filter',
'OCA\Comments\Activity\Listener',
+ 'OCA\Comments\Activity\Provider',
+ 'OCA\Comments\Activity\Setting',
'OCA\Comments\Notification\Listener'
];
diff --git a/apps/dav/appinfo/info.xml b/apps/dav/appinfo/info.xml
index 314391a1448..0024e41e753 100644
--- a/apps/dav/appinfo/info.xml
+++ b/apps/dav/appinfo/info.xml
@@ -22,12 +22,8 @@
</background-jobs>
<repair-steps>
<post-migration>
- <step>OCA\DAV\Migration\Classification</step>
<step>OCA\DAV\Migration\FixBirthdayCalendarComponent</step>
</post-migration>
- <live-migration>
- <step>OCA\DAV\Migration\GenerateBirthdays</step>
- </live-migration>
</repair-steps>
<commands>
<command>OCA\DAV\Command\CreateAddressBook</command>
diff --git a/apps/dav/lib/CalDAV/Calendar.php b/apps/dav/lib/CalDAV/Calendar.php
index 9fedbe6f91f..ef8e21be83a 100644
--- a/apps/dav/lib/CalDAV/Calendar.php
+++ b/apps/dav/lib/CalDAV/Calendar.php
@@ -177,7 +177,7 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable {
function propPatch(PropPatch $propPatch) {
$mutations = $propPatch->getMutations();
// If this is a shared calendar, the user can only change the enabled property, to hide it.
- if (isset($this->calendarInfo['{http://owncloud.org/ns}owner-principal']) && (sizeof($mutations) !== 1 || !isset($mutations['{http://owncloud.org/ns}calendar-enabled']))) {
+ if ($this->isShared() && (sizeof($mutations) !== 1 || !isset($mutations['{http://owncloud.org/ns}calendar-enabled']))) {
throw new Forbidden();
}
parent::propPatch($propPatch);
diff --git a/apps/dav/lib/CardDAV/Converter.php b/apps/dav/lib/CardDAV/Converter.php
index 065c5494ec3..ba0c4c2a2d5 100644
--- a/apps/dav/lib/CardDAV/Converter.php
+++ b/apps/dav/lib/CardDAV/Converter.php
@@ -71,7 +71,7 @@ class Converter {
break;
case AccountManager::PROPERTY_AVATAR:
if ($image !== null) {
- $vCard->add('PHOTO', $image->data(), ['ENCODING' => 'b', 'TYPE' => $image->mimeType()]);
+ $vCard->add('PHOTO', 'data:'.$image->mimeType().';base64,' . base64_encode($image->data()));
}
break;
case AccountManager::PROPERTY_EMAIL:
diff --git a/apps/dav/lib/Migration/Classification.php b/apps/dav/lib/Migration/Classification.php
deleted file mode 100644
index a18646023c8..00000000000
--- a/apps/dav/lib/Migration/Classification.php
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-
-namespace OCA\DAV\Migration;
-
-use OCA\DAV\CalDAV\CalDavBackend;
-use OCP\IUser;
-use OCP\IUserManager;
-use OCP\Migration\IOutput;
-use OCP\Migration\IRepairStep;
-
-class Classification implements IRepairStep {
-
- /** @var CalDavBackend */
- private $calDavBackend;
-
- /** @var IUserManager */
- private $userManager;
-
- /**
- * Classification constructor.
- *
- * @param CalDavBackend $calDavBackend
- */
- public function __construct(CalDavBackend $calDavBackend, IUserManager $userManager) {
- $this->calDavBackend = $calDavBackend;
- $this->userManager = $userManager;
- }
-
- /**
- * @param IUser $user
- */
- public function runForUser($user) {
- $principal = 'principals/users/' . $user->getUID();
- $calendars = $this->calDavBackend->getCalendarsForUser($principal);
- foreach ($calendars as $calendar) {
- $objects = $this->calDavBackend->getCalendarObjects($calendar['id']);
- foreach ($objects as $object) {
- $calObject = $this->calDavBackend->getCalendarObject($calendar['id'], $object['uri']);
- $classification = $this->extractClassification($calObject['calendardata']);
- $this->calDavBackend->setClassification($object['id'], $classification);
- }
- }
- }
-
- /**
- * @param $calendarData
- * @return integer
- * @throws \Sabre\DAV\Exception\BadRequest
- */
- protected function extractClassification($calendarData) {
- return $this->calDavBackend->getDenormalizedData($calendarData)['classification'];
- }
-
- /**
- * @inheritdoc
- */
- public function getName() {
- return 'Fix classification for calendar objects';
- }
-
- /**
- * @inheritdoc
- */
- public function run(IOutput $output) {
- $output->startProgress();
- $this->userManager->callForAllUsers(function($user) use ($output) {
- /** @var IUser $user */
- $output->advance(1, $user->getDisplayName());
- $this->runForUser($user);
- });
- $output->finishProgress();
- }
-}
diff --git a/apps/dav/lib/Migration/GenerateBirthdays.php b/apps/dav/lib/Migration/GenerateBirthdays.php
deleted file mode 100644
index 20e000314ac..00000000000
--- a/apps/dav/lib/Migration/GenerateBirthdays.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-
-namespace OCA\DAV\Migration;
-
-use OCA\DAV\CalDAV\BirthdayService;
-use OCP\IUser;
-use OCP\IUserManager;
-use OCP\Migration\IOutput;
-use OCP\Migration\IRepairStep;
-
-class GenerateBirthdays implements IRepairStep {
-
- /** @var BirthdayService */
- private $birthdayService;
-
- /** @var IUserManager */
- private $userManager;
-
- /**
- * GenerateBirthdays constructor.
- *
- * @param BirthdayService $birthdayService
- * @param IUserManager $userManager
- */
- public function __construct(BirthdayService $birthdayService, IUserManager $userManager) {
- $this->birthdayService = $birthdayService;
- $this->userManager = $userManager;
- }
-
- /**
- * @inheritdoc
- */
- public function getName() {
- return 'Regenerate birthday calendar for all users';
- }
-
- /**
- * @inheritdoc
- */
- public function run(IOutput $output) {
-
- $output->startProgress();
- $this->userManager->callForAllUsers(function($user) use ($output) {
- /** @var IUser $user */
- $output->advance(1, $user->getDisplayName());
- $this->birthdayService->syncUser($user->getUID());
- });
- $output->finishProgress();
- }
-}
diff --git a/apps/dav/tests/unit/CalDAV/CalendarTest.php b/apps/dav/tests/unit/CalDAV/CalendarTest.php
index e585a23a9a2..d0fb2d19243 100644
--- a/apps/dav/tests/unit/CalDAV/CalendarTest.php
+++ b/apps/dav/tests/unit/CalDAV/CalendarTest.php
@@ -106,29 +106,40 @@ class CalendarTest extends TestCase {
public function dataPropPatch() {
return [
- [[], true],
- [[
+ ['user1', 'user2', [], true],
+ ['user1', 'user2', [
'{http://owncloud.org/ns}calendar-enabled' => true,
], false],
- [[
+ ['user1', 'user2', [
'{DAV:}displayname' => true,
], true],
- [[
+ ['user1', 'user2', [
'{DAV:}displayname' => true,
'{http://owncloud.org/ns}calendar-enabled' => true,
], true],
+ ['user1', 'user1', [], false],
+ ['user1', 'user1', [
+ '{http://owncloud.org/ns}calendar-enabled' => true,
+ ], false],
+ ['user1', 'user1', [
+ '{DAV:}displayname' => true,
+ ], false],
+ ['user1', 'user1', [
+ '{DAV:}displayname' => true,
+ '{http://owncloud.org/ns}calendar-enabled' => true,
+ ], false],
];
}
/**
* @dataProvider dataPropPatch
*/
- public function testPropPatch($mutations, $throws) {
+ public function testPropPatch($ownerPrincipal, $principalUri, $mutations, $throws) {
/** @var \PHPUnit_Framework_MockObject_MockObject | CalDavBackend $backend */
$backend = $this->getMockBuilder(CalDavBackend::class)->disableOriginalConstructor()->getMock();
$calendarInfo = [
- '{http://owncloud.org/ns}owner-principal' => 'user1',
- 'principaluri' => 'user2',
+ '{http://owncloud.org/ns}owner-principal' => $ownerPrincipal,
+ 'principaluri' => $principalUri,
'id' => 666,
'uri' => 'default'
];
diff --git a/apps/dav/tests/unit/CardDAV/ConverterTest.php b/apps/dav/tests/unit/CardDAV/ConverterTest.php
index 737bbd96aaa..528b3aa9ef4 100644
--- a/apps/dav/tests/unit/CardDAV/ConverterTest.php
+++ b/apps/dav/tests/unit/CardDAV/ConverterTest.php
@@ -134,11 +134,45 @@ class ConverterTest extends TestCase {
public function providesNewUsers() {
return [
- [null],
- [null, null, 'foo@bar.net'],
- [['cloud' => 'foo@cloud.net', 'email' => 'foo@bar.net'], null, 'foo@bar.net', 'foo@cloud.net'],
- [['cloud' => 'foo@cloud.net', 'email' => 'foo@bar.net', 'fn' => 'Dr. Foo Bar'], "Dr. Foo Bar", "foo@bar.net", 'foo@cloud.net'],
- [['cloud' => 'foo@cloud.net', 'fn' => 'Dr. Foo Bar'], "Dr. Foo Bar", null, "foo@cloud.net"],
+ [
+ null
+ ],
+ [
+ null,
+ null,
+ 'foo@bar.net'
+ ],
+ [
+ [
+ 'cloud' => 'foo@cloud.net',
+ 'email' => 'foo@bar.net',
+ 'photo' => 'data:image/jpeg;base64,MTIzNDU2Nzg5',
+ ],
+ null,
+ 'foo@bar.net',
+ 'foo@cloud.net'
+ ],
+ [
+ [
+ 'cloud' => 'foo@cloud.net',
+ 'email' => 'foo@bar.net',
+ 'fn' => 'Dr. Foo Bar',
+ 'photo' => 'data:image/jpeg;base64,MTIzNDU2Nzg5',
+ ],
+ "Dr. Foo Bar",
+ "foo@bar.net",
+ 'foo@cloud.net'
+ ],
+ [
+ [
+ 'cloud' => 'foo@cloud.net',
+ 'fn' => 'Dr. Foo Bar',
+ 'photo' => 'data:image/jpeg;base64,MTIzNDU2Nzg5',
+ ],
+ "Dr. Foo Bar",
+ null,
+ "foo@cloud.net"
+ ],
];
}
@@ -171,7 +205,7 @@ class ConverterTest extends TestCase {
*/
protected function getUserMock($displayName, $eMailAddress, $cloudId) {
$image0 = $this->getMockBuilder(IImage::class)->disableOriginalConstructor()->getMock();
- $image0->method('mimeType')->willReturn('JPEG');
+ $image0->method('mimeType')->willReturn('image/jpeg');
$image0->method('data')->willReturn('123456789');
$user = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$user->method('getUID')->willReturn('12345');
diff --git a/apps/dav/tests/unit/Migration/ClassificationTest.php b/apps/dav/tests/unit/Migration/ClassificationTest.php
deleted file mode 100644
index 1960fa031e1..00000000000
--- a/apps/dav/tests/unit/Migration/ClassificationTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-namespace OCA\DAV\Tests\unit\DAV\Migration;
-
-use OCA\DAV\CalDAV\CalDavBackend;
-use OCA\DAV\Migration\Classification;
-use OCA\DAV\Tests\unit\CalDAV\AbstractCalDavBackendTest;
-use OCP\IUser;
-
-/**
- * Class ClassificationTest
- *
- * @group DB
- *
- * @package OCA\DAV\Tests\unit\DAV
- */
-class ClassificationTest extends AbstractCalDavBackendTest {
- public function test() {
- // setup data
- $calendarId = $this->createTestCalendar();
- $eventUri = $this->createEvent($calendarId, '20130912T130000Z', '20130912T140000Z');
- $object = $this->backend->getCalendarObject($calendarId, $eventUri);
-
- // assert proper classification
- $this->assertEquals(CalDavBackend::CLASSIFICATION_PUBLIC, $object['classification']);
- $this->backend->setClassification($object['id'], CalDavBackend::CLASSIFICATION_CONFIDENTIAL);
- $object = $this->backend->getCalendarObject($calendarId, $eventUri);
- $this->assertEquals(CalDavBackend::CLASSIFICATION_CONFIDENTIAL, $object['classification']);
-
- // run migration
- $c = new Classification($this->backend, $this->userManager);
-
- /** @var IUser | \PHPUnit_Framework_MockObject_MockObject $user */
- $user = $this->getMockBuilder('OCP\IUser')
- ->disableOriginalConstructor()
- ->getMock();
- $user->expects($this->once())->method('getUID')->willReturn('caldav-unit-test');
-
- $c->runForUser($user);
-
- // assert classification after migration
- $object = $this->backend->getCalendarObject($calendarId, $eventUri);
- $this->assertEquals(CalDavBackend::CLASSIFICATION_PUBLIC, $object['classification']);
- }
-}
diff --git a/apps/encryption/lib/Crypto/Encryption.php b/apps/encryption/lib/Crypto/Encryption.php
index c71e25b6442..fdcbd41a09c 100644
--- a/apps/encryption/lib/Crypto/Encryption.php
+++ b/apps/encryption/lib/Crypto/Encryption.php
@@ -177,6 +177,14 @@ class Encryption implements IEncryptionModule {
$this->isWriteOperation = false;
$this->writeCache = '';
+ if($this->session->isReady() === false) {
+ // if the master key is enabled we can initialize encryption
+ // with a empty password and user name
+ if ($this->util->isMasterKeyEnabled()) {
+ $this->keyManager->init('', '');
+ }
+ }
+
if ($this->session->decryptAllModeActivated()) {
$encryptedFileKey = $this->keyManager->getEncryptedFileKey($this->path);
$shareKey = $this->keyManager->getShareKey($this->path, $this->session->getDecryptAllUid());
diff --git a/apps/encryption/lib/Session.php b/apps/encryption/lib/Session.php
index 92132d6080c..a61ee25fadb 100644
--- a/apps/encryption/lib/Session.php
+++ b/apps/encryption/lib/Session.php
@@ -68,6 +68,16 @@ class Session {
}
/**
+ * check if encryption was initialized successfully
+ *
+ * @return bool
+ */
+ public function isReady() {
+ $status = $this->getStatus();
+ return $status === self::INIT_SUCCESSFUL;
+ }
+
+ /**
* Gets user or public share private key from session
*
* @return string $privateKey The user's plaintext private key
diff --git a/apps/encryption/tests/Crypto/EncryptionTest.php b/apps/encryption/tests/Crypto/EncryptionTest.php
index 658f6275bb4..3525d2d4aec 100644
--- a/apps/encryption/tests/Crypto/EncryptionTest.php
+++ b/apps/encryption/tests/Crypto/EncryptionTest.php
@@ -280,6 +280,21 @@ class EncryptionTest extends TestCase {
}
/**
+ * test begin() if encryption is not initialized but the master key is enabled
+ * in this case we can initialize the encryption without a username/password
+ * and continue
+ */
+ public function testBeginInitMasterKey() {
+
+ $this->sessionMock->expects($this->once())->method('isReady')->willReturn(false);
+ $this->utilMock->expects($this->once())->method('isMasterKeyEnabled')
+ ->willReturn(true);
+ $this->keyManagerMock->expects($this->once())->method('init')->with('', '');
+
+ $this->instance->begin('/user/files/welcome.txt', 'user', 'r', [], []);
+ }
+
+ /**
* @dataProvider dataTestUpdate
*
* @param string $fileKey
diff --git a/apps/encryption/tests/SessionTest.php b/apps/encryption/tests/SessionTest.php
index 099acddbca1..3000fedf2c3 100644
--- a/apps/encryption/tests/SessionTest.php
+++ b/apps/encryption/tests/SessionTest.php
@@ -134,6 +134,32 @@ class SessionTest extends TestCase {
}
/**
+ * @dataProvider dataTestIsReady
+ *
+ * @param int $status
+ * @param bool $expected
+ */
+ public function testIsReady($status, $expected) {
+ /** @var Session | \PHPUnit_Framework_MockObject_MockObject $instance */
+ $instance = $this->getMockBuilder(Session::class)
+ ->setConstructorArgs([$this->sessionMock])
+ ->setMethods(['getStatus'])->getMock();
+
+ $instance->expects($this->once())->method('getStatus')
+ ->willReturn($status);
+
+ $this->assertSame($expected, $instance->isReady());
+ }
+
+ public function dataTestIsReady() {
+ return [
+ [Session::INIT_SUCCESSFUL, true],
+ [Session::INIT_EXECUTED, false],
+ [Session::NOT_INITIALIZED, false],
+ ];
+ }
+
+ /**
* @param $key
* @param $value
*/
diff --git a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
index 9a41962ee3a..750415077a8 100644
--- a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
+++ b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
@@ -27,7 +27,7 @@
namespace OCA\FederatedFileSharing\Controller;
use OCA\FederatedFileSharing\DiscoveryManager;
-use OCA\Files_Sharing\Activity;
+use OCA\Files_Sharing\Activity\Providers\RemoteShares;
use OCA\FederatedFileSharing\AddressHandler;
use OCA\FederatedFileSharing\FederatedShareProvider;
use OCA\FederatedFileSharing\Notifications;
@@ -172,9 +172,13 @@ class RequestHandlerController extends OCSController {
$sharedByFederatedId = $ownerFederatedId;
}
- \OC::$server->getActivityManager()->publishActivity(
- Activity::FILES_SHARING_APP, Activity::SUBJECT_REMOTE_SHARE_RECEIVED, array($ownerFederatedId, trim($name, '/')), '', array(),
- '', '', $shareWith, Activity::TYPE_REMOTE_SHARE, Activity::PRIORITY_LOW);
+ $event = \OC::$server->getActivityManager()->generateEvent();
+ $event->setApp('files_sharing')
+ ->setType('remote_share')
+ ->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_RECEIVED, [$ownerFederatedId, trim($name, '/')])
+ ->setAffectedUser($shareWith)
+ ->setObject('remote_share', (int) $shareId, $name);
+ \OC::$server->getActivityManager()->publish($event);
$urlGenerator = \OC::$server->getURLGenerator();
@@ -315,11 +319,11 @@ class RequestHandlerController extends OCSController {
list($file, $link) = $this->getFile($this->getCorrectUid($share), $share->getNode()->getId());
$event = \OC::$server->getActivityManager()->generateEvent();
- $event->setApp(Activity::FILES_SHARING_APP)
- ->setType(Activity::TYPE_REMOTE_SHARE)
+ $event->setApp('files_sharing')
+ ->setType('remote_share')
->setAffectedUser($this->getCorrectUid($share))
- ->setSubject(Activity::SUBJECT_REMOTE_SHARE_ACCEPTED, [$share->getSharedWith(), basename($file)])
- ->setObject('files', $share->getNode()->getId(), $file)
+ ->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_ACCEPTED, [$share->getSharedWith(), $file])
+ ->setObject('files', (int) $share->getNode()->getId(), $file)
->setLink($link);
\OC::$server->getActivityManager()->publish($event);
}
@@ -370,11 +374,11 @@ class RequestHandlerController extends OCSController {
list($file, $link) = $this->getFile($this->getCorrectUid($share), $share->getNode()->getId());
$event = \OC::$server->getActivityManager()->generateEvent();
- $event->setApp(Activity::FILES_SHARING_APP)
- ->setType(Activity::TYPE_REMOTE_SHARE)
+ $event->setApp('files_sharing')
+ ->setType('remote_share')
->setAffectedUser($this->getCorrectUid($share))
- ->setSubject(Activity::SUBJECT_REMOTE_SHARE_DECLINED, [$share->getSharedWith(), basename($file)])
- ->setObject('files', $share->getNode()->getId(), $file)
+ ->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_DECLINED, [$share->getSharedWith(), $file])
+ ->setObject('files', (int) $share->getNode()->getId(), $file)
->setLink($link);
\OC::$server->getActivityManager()->publish($event);
@@ -440,9 +444,13 @@ class RequestHandlerController extends OCSController {
->setObject('remote_share', (int) $share['id']);
$notificationManager->markProcessed($notification);
- \OC::$server->getActivityManager()->publishActivity(
- Activity::FILES_SHARING_APP, Activity::SUBJECT_REMOTE_SHARE_UNSHARED, array($owner, $path), '', array(),
- '', '', $user, Activity::TYPE_REMOTE_SHARE, Activity::PRIORITY_MEDIUM);
+ $event = \OC::$server->getActivityManager()->generateEvent();
+ $event->setApp('files_sharing')
+ ->setType('remote_share')
+ ->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_UNSHARED, [$owner, $path])
+ ->setAffectedUser($user)
+ ->setObject('remote_share', (int) $share['id'], $path);
+ \OC::$server->getActivityManager()->publish($event);
}
return new Http\DataResponse();
diff --git a/apps/federation/templates/settings-admin.php b/apps/federation/templates/settings-admin.php
index 0514bad8ee2..dbcb4a54e6a 100644
--- a/apps/federation/templates/settings-admin.php
+++ b/apps/federation/templates/settings-admin.php
@@ -15,10 +15,10 @@ style('federation', 'settings-admin')
<label for="autoAddServers"><?php p($l->t('Add server automatically once a federated share was created successfully')); ?></label>
</p>
- <h3><?php p($l->t('Trusted Servers')); ?></h3>
+ <h3><?php p($l->t('Trusted servers')); ?></h3>
<p id="ocFederationAddServer">
- <button id="ocFederationAddServerButton" class=""><?php p($l->t('+ Add Nextcloud server')); ?></button>
- <input id="serverUrl" class="hidden" type="text" value="" placeholder="<?php p($l->t('Nextcloud Server')); ?>" name="server_url"/>
+ <button id="ocFederationAddServerButton" class=""><?php p($l->t('+ Add trusted server')); ?></button>
+ <input id="serverUrl" class="hidden" type="text" value="" placeholder="<?php p($l->t('Trusted server')); ?>" name="server_url"/>
<button id="ocFederationSubmit" class="hidden"><?php p($l->t('Add')); ?></button>
<span class="msg"></span>
</p>
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index c0460ff6058..1983d51809c 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -652,7 +652,7 @@ html.ie8 .column-mtime .selectedActions {
#fileList .name:focus a.action:focus {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
filter: alpha(opacity=70);
- opacity: 7;
+ opacity: .7;
display:inline;
}
#fileList tr a.action.disabled {
@@ -660,14 +660,20 @@ html.ie8 .column-mtime .selectedActions {
}
/* show share action of shared items darker to distinguish from non-shared */
-#fileList a.action.permanent.shared-style,
-#fileList a.action.action-favorite.permanent {
+#fileList a.action.action-share.permanent.shared-style,
+#fileList a.action.action-favorite.permanent,
+/* show hovered permanent entries darker */
+#fileList tr a.action.action-share.permanent:hover,
+#fileList tr a.action.action-share.permanent:focus,
+#fileList tr a.action.action-menu.permanent:hover,
+#fileList tr a.action.action-menu.permanent:focus {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)" !important;
filter: alpha(opacity=70) !important;
opacity: .7 !important;
display:inline;
}
/* always show actions on mobile, not only on hover */
+#fileList a.action.action-share.permanent,
#fileList a.action.action-menu.permanent {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)" !important;
filter: alpha(opacity=30) !important;
diff --git a/apps/files/lib/Activity/Provider.php b/apps/files/lib/Activity/Provider.php
index e95522a7d08..f1ffb851203 100644
--- a/apps/files/lib/Activity/Provider.php
+++ b/apps/files/lib/Activity/Provider.php
@@ -1,22 +1,21 @@
<?php
/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
- * @author Joas Schilling <coding@schilljs.com>
+ * @license GNU AGPL version 3 or any later version
*
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * 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
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * 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/>.
*
*/
@@ -27,6 +26,8 @@ use OCP\Activity\IManager;
use OCP\Activity\IProvider;
use OCP\IL10N;
use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserManager;
class Provider implements IProvider {
@@ -39,15 +40,23 @@ class Provider implements IProvider {
/** @var IManager */
protected $activityManager;
+ /** @var IUserManager */
+ protected $userManager;
+
+ /** @var string[] cached displayNames - key is the UID and value the displayname */
+ protected $displayNames = [];
+
/**
* @param IL10N $l
* @param IURLGenerator $url
* @param IManager $activityManager
+ * @param IUserManager $userManager
*/
- public function __construct(IL10N $l, IURLGenerator $url, IManager $activityManager) {
+ public function __construct(IL10N $l, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) {
$this->l = $l;
$this->url = $url;
$this->activityManager = $activityManager;
+ $this->userManager = $userManager;
}
/**
@@ -266,11 +275,28 @@ class Provider implements IProvider {
];
}
- protected function getRichUserParameter($parameter) {
+ protected function getRichUserParameter($uid) {
+ if (!isset($this->displayNames[$uid])) {
+ $this->displayNames[$uid] = $this->getDisplayName($uid);
+ }
+
return [
'type' => 'user',
- 'id' => $parameter,
- 'name' => $parameter,// FIXME Use display name
+ 'id' => $uid,
+ 'name' => $this->displayNames[$uid],
];
}
+
+ /**
+ * @param string $uid
+ * @return string
+ */
+ protected function getDisplayName($uid) {
+ $user = $this->userManager->get($uid);
+ if ($user instanceof IUser) {
+ return $user->getDisplayName();
+ } else {
+ return $uid;
+ }
+ }
}
diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index 850c2c05977..4fed51b1194 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -50,14 +50,6 @@ $eventDispatcher->addListener(
// \OCP\Util::addStyle('files_sharing', 'sharetabview');
-\OC::$server->getActivityManager()->registerExtension(function() {
- return new \OCA\Files_Sharing\Activity(
- \OC::$server->query('L10NFactory'),
- \OC::$server->getURLGenerator(),
- \OC::$server->getActivityManager()
- );
-});
-
$config = \OC::$server->getConfig();
if ($config->getAppValue('core', 'shareapi_enabled', 'yes') === 'yes') {
diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml
index 65b8d4af5d1..cff424d223a 100644
--- a/apps/files_sharing/appinfo/info.xml
+++ b/apps/files_sharing/appinfo/info.xml
@@ -23,6 +23,26 @@ Turning the feature off removes shared files and folders on the server for all s
<namespace>Files_Sharing</namespace>
+ <activity>
+ <settings>
+ <setting>OCA\Files_Sharing\Activity\Settings\Shared</setting>
+ <setting>OCA\Files_Sharing\Activity\Settings\RemoteShare</setting>
+ <setting>OCA\Files_Sharing\Activity\Settings\PublicLinks</setting>
+ </settings>
+
+ <filters>
+ <filter>OCA\Files_Sharing\Activity\Filter</filter>
+ </filters>
+
+ <providers>
+ <provider>OCA\Files_Sharing\Activity\Providers\Downloads</provider>
+ <provider>OCA\Files_Sharing\Activity\Providers\Groups</provider>
+ <provider>OCA\Files_Sharing\Activity\Providers\PublicLinks</provider>
+ <provider>OCA\Files_Sharing\Activity\Providers\RemoteShares</provider>
+ <provider>OCA\Files_Sharing\Activity\Providers\Users</provider>
+ </providers>
+ </activity>
+
<background-jobs>
<job>OCA\Files_Sharing\DeleteOrphanedSharesJob</job>
<job>OCA\Files_Sharing\ExpireSharesJob</job>
diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js
index 9cb19f4e288..578ced1fb2d 100644
--- a/apps/files_sharing/l10n/fr.js
+++ b/apps/files_sharing/l10n/fr.js
@@ -63,6 +63,7 @@ OC.L10N.register(
"Public link of %2$s expired" : "Le lien public de %2$s a expiré",
"Shared by %2$s" : "Partagé par %2$s",
"Downloaded by %2$s" : "Téléchargé par %2$s",
+ "File shares" : "Partages de fichiers",
"Wrong share ID, share doesn't exist" : "Mauvais ID de partage, le partage n'existe pas",
"could not delete share" : "impossible de supprimer le partage",
"Could not delete share" : "Impossible de supprimer le partage",
diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json
index c2d370429ab..88152c9f33a 100644
--- a/apps/files_sharing/l10n/fr.json
+++ b/apps/files_sharing/l10n/fr.json
@@ -61,6 +61,7 @@
"Public link of %2$s expired" : "Le lien public de %2$s a expiré",
"Shared by %2$s" : "Partagé par %2$s",
"Downloaded by %2$s" : "Téléchargé par %2$s",
+ "File shares" : "Partages de fichiers",
"Wrong share ID, share doesn't exist" : "Mauvais ID de partage, le partage n'existe pas",
"could not delete share" : "impossible de supprimer le partage",
"Could not delete share" : "Impossible de supprimer le partage",
diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js
index 840235ec885..2ceed708d3f 100644
--- a/apps/files_sharing/l10n/pt_BR.js
+++ b/apps/files_sharing/l10n/pt_BR.js
@@ -106,9 +106,21 @@ OC.L10N.register(
"Uploaded files:" : "Arquivos carregados:",
"A public shared file or folder was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhado publicamente foi <strong>baixado</strong>",
"Shares" : "Compartilhamentos",
+ "Server to server sharing is not enabled on this server" : "Servidor de compartilhamento não esta habilitado neste servidor",
+ "The mountpoint name contains invalid characters." : "O nome de mountpoint contém caracteres inválidos",
+ "Not allowed to create a federated share with the same user server" : "Não é permitido criar um compartilhamento federado com o mesmo nome do servidor",
+ "Invalid or untrusted SSL certificate" : "Certificado SSL inválido ou não-confiável",
+ "Could not authenticate to remote share, password might be wrong" : "Não foi possível autenticar no compartilhamento remoto, a senha pode estar errada",
"Storage not valid" : "Armazenamento inválido",
+ "Couldn't add remote share" : "Não foi possível adicionar o compartilhamento remoto",
+ "Federated sharing" : "Compartilhamento federado",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Voce deseja adicionar o compartilhamento remoto {name} de {owner}@{remote}?",
"Remote share" : "Compartilhamento remoto",
+ "Remote share password" : "Senha do compartilhamento remoto",
"Cancel" : "Cancelar",
+ "Add remote share" : "Adicionar compartilhamento remoto",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Nenhum instalação (7 ou maior) encontrada em {remote}",
+ "Invalid ownCloud url" : "URL invalida",
"Accept" : "Aceitar",
"Decline" : "Rejeitar"
},
diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json
index b2f45ff6407..4ad99f37ca0 100644
--- a/apps/files_sharing/l10n/pt_BR.json
+++ b/apps/files_sharing/l10n/pt_BR.json
@@ -104,9 +104,21 @@
"Uploaded files:" : "Arquivos carregados:",
"A public shared file or folder was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhado publicamente foi <strong>baixado</strong>",
"Shares" : "Compartilhamentos",
+ "Server to server sharing is not enabled on this server" : "Servidor de compartilhamento não esta habilitado neste servidor",
+ "The mountpoint name contains invalid characters." : "O nome de mountpoint contém caracteres inválidos",
+ "Not allowed to create a federated share with the same user server" : "Não é permitido criar um compartilhamento federado com o mesmo nome do servidor",
+ "Invalid or untrusted SSL certificate" : "Certificado SSL inválido ou não-confiável",
+ "Could not authenticate to remote share, password might be wrong" : "Não foi possível autenticar no compartilhamento remoto, a senha pode estar errada",
"Storage not valid" : "Armazenamento inválido",
+ "Couldn't add remote share" : "Não foi possível adicionar o compartilhamento remoto",
+ "Federated sharing" : "Compartilhamento federado",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Voce deseja adicionar o compartilhamento remoto {name} de {owner}@{remote}?",
"Remote share" : "Compartilhamento remoto",
+ "Remote share password" : "Senha do compartilhamento remoto",
"Cancel" : "Cancelar",
+ "Add remote share" : "Adicionar compartilhamento remoto",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Nenhum instalação (7 ou maior) encontrada em {remote}",
+ "Invalid ownCloud url" : "URL invalida",
"Accept" : "Aceitar",
"Decline" : "Rejeitar"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
diff --git a/apps/files_sharing/lib/Activity.php b/apps/files_sharing/lib/Activity.php
deleted file mode 100644
index 596043765bb..00000000000
--- a/apps/files_sharing/lib/Activity.php
+++ /dev/null
@@ -1,494 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Björn Schießle <bjoern@schiessle.org>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-namespace OCA\Files_Sharing;
-
-use OCP\Activity\IExtension;
-use OCP\Activity\IManager;
-use OCP\IL10N;
-use OCP\IURLGenerator;
-use OCP\L10N\IFactory;
-
-class Activity implements IExtension {
- const FILES_SHARING_APP = 'files_sharing';
- /**
- * Filter with all sharing related activities
- */
- const FILTER_SHARES = 'shares';
-
- /**
- * Activity types known to this extension
- */
- const TYPE_PUBLIC_LINKS = 'public_links';
- const TYPE_REMOTE_SHARE = 'remote_share';
- const TYPE_SHARED = 'shared';
-
- /**
- * Subject keys for translation of the subjections
- */
- const SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED = 'public_shared_file_downloaded';
- const SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED = 'public_shared_folder_downloaded';
-
- const SUBJECT_REMOTE_SHARE_ACCEPTED = 'remote_share_accepted';
- const SUBJECT_REMOTE_SHARE_DECLINED = 'remote_share_declined';
- const SUBJECT_REMOTE_SHARE_RECEIVED = 'remote_share_received';
- const SUBJECT_REMOTE_SHARE_UNSHARED = 'remote_share_unshared';
-
- const SUBJECT_SHARED_USER_SELF = 'shared_user_self';
- const SUBJECT_RESHARED_USER_BY = 'reshared_user_by';
- const SUBJECT_UNSHARED_USER_SELF = 'unshared_user_self';
- const SUBJECT_UNSHARED_USER_BY = 'unshared_user_by';
-
- const SUBJECT_SHARED_GROUP_SELF = 'shared_group_self';
- const SUBJECT_RESHARED_GROUP_BY = 'reshared_group_by';
- const SUBJECT_UNSHARED_GROUP_SELF = 'unshared_group_self';
- const SUBJECT_UNSHARED_GROUP_BY = 'unshared_group_by';
-
- const SUBJECT_SHARED_LINK_SELF = 'shared_link_self';
- const SUBJECT_RESHARED_LINK_BY = 'reshared_link_by';
- const SUBJECT_UNSHARED_LINK_SELF = 'unshared_link_self';
- const SUBJECT_UNSHARED_LINK_BY = 'unshared_link_by';
- const SUBJECT_LINK_EXPIRED = 'link_expired';
- const SUBJECT_LINK_BY_EXPIRED = 'link_by_expired';
-
- const SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED = 'file_shared_with_email_downloaded';
- const SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED = 'folder_shared_with_email_downloaded';
-
- const SUBJECT_SHARED_WITH_BY = 'shared_with_by';
- const SUBJECT_UNSHARED_BY = 'unshared_by';
-
- /** @var IFactory */
- protected $languageFactory;
-
- /** @var IURLGenerator */
- protected $URLGenerator;
-
- /** @var IManager */
- protected $activityManager;
-
- /**
- * @param IFactory $languageFactory
- * @param IURLGenerator $URLGenerator
- * @param IManager $activityManager
- */
- public function __construct(IFactory $languageFactory, IURLGenerator $URLGenerator, IManager $activityManager) {
- $this->languageFactory = $languageFactory;
- $this->URLGenerator = $URLGenerator;
- $this->activityManager = $activityManager;
- }
-
- protected function getL10N($languageCode = null) {
- return $this->languageFactory->get(self::FILES_SHARING_APP, $languageCode);
- }
-
- /**
- * The extension can return an array of additional notification types.
- * If no additional types are to be added false is to be returned
- *
- * @param string $languageCode
- * @return array|false
- */
- public function getNotificationTypes($languageCode) {
- $l = $this->getL10N($languageCode);
-
- return array(
- self::TYPE_SHARED => (string) $l->t('A file or folder has been <strong>shared</strong>'),
- self::TYPE_REMOTE_SHARE => (string) $l->t('A file or folder was shared from <strong>another server</strong>'),
- self::TYPE_PUBLIC_LINKS => (string) $l->t('A file or folder shared by mail or by public link was <strong>downloaded</strong>'),
- );
- }
-
- /**
- * For a given method additional types to be displayed in the settings can be returned.
- * In case no additional types are to be added false is to be returned.
- *
- * @param string $method
- * @return array|false
- */
- public function getDefaultTypes($method) {
- $defaultTypes = [
- self::TYPE_SHARED,
- self::TYPE_REMOTE_SHARE,
- ];
-
- if ($method === self::METHOD_STREAM) {
- $defaultTypes[] = self::TYPE_PUBLIC_LINKS;
- }
-
- return $defaultTypes;
- }
-
- /**
- * A string naming the css class for the icon to be used can be returned.
- * If no icon is known for the given type false is to be returned.
- *
- * @param string $type
- * @return string|false
- */
- public function getTypeIcon($type) {
- switch ($type) {
- case self::TYPE_SHARED:
- case self::TYPE_REMOTE_SHARE:
- return 'icon-share';
- case self::TYPE_PUBLIC_LINKS:
- return 'icon-download';
- }
-
- return false;
- }
-
- /**
- * The extension can translate a given message to the requested languages.
- * If no translation is available false is to be returned.
- *
- * @param string $app
- * @param string $text
- * @param array $params
- * @param boolean $stripPath
- * @param boolean $highlightParams
- * @param string $languageCode
- * @return string|false
- */
- public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode) {
- if ($app !== self::FILES_SHARING_APP) {
- return false;
- }
-
- $l = $this->getL10N($languageCode);
-
- if ($this->activityManager->isFormattingFilteredObject()) {
- $translation = $this->translateShort($text, $l, $params);
- if ($translation !== false) {
- return $translation;
- }
- }
-
- return $this->translateLong($text, $l, $params);
- }
-
- /**
- * @param string $text
- * @param IL10N $l
- * @param array $params
- * @return bool|string
- */
- protected function translateLong($text, IL10N $l, array $params) {
-
- switch ($text) {
- case self::SUBJECT_REMOTE_SHARE_RECEIVED:
- if (sizeof($params) === 2) {
- // New activity ownCloud 8.2+
- return (string) $l->t('You received a new remote share %2$s from %1$s', $params);
- }
- return (string) $l->t('You received a new remote share from %s', $params);
- case self::SUBJECT_REMOTE_SHARE_ACCEPTED:
- return (string) $l->t('%1$s accepted remote share %2$s', $params);
- case self::SUBJECT_REMOTE_SHARE_DECLINED:
- return (string) $l->t('%1$s declined remote share %2$s', $params);
- case self::SUBJECT_REMOTE_SHARE_UNSHARED:
- return (string) $l->t('%1$s unshared %2$s from you', $params);
- case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED:
- return (string) $l->t('Public shared folder %1$s was downloaded', $params);
- case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED:
- return (string) $l->t('Public shared file %1$s was downloaded', $params);
-
- case self::SUBJECT_SHARED_USER_SELF:
- return (string) $l->t('You shared %1$s with %2$s', $params);
- case self::SUBJECT_RESHARED_USER_BY:
- return (string) $l->t('%2$s shared %1$s with %3$s', $params);
- case self::SUBJECT_UNSHARED_USER_SELF:
- return (string) $l->t('You removed the share of %2$s for %1$s', $params);
- case self::SUBJECT_UNSHARED_USER_BY:
- return (string) $l->t('%2$s removed the share of %3$s for %1$s', $params);
-
- case self::SUBJECT_SHARED_GROUP_SELF:
- return (string) $l->t('You shared %1$s with group %2$s', $params);
- case self::SUBJECT_RESHARED_GROUP_BY:
- return (string) $l->t('%2$s shared %1$s with group %3$s', $params);
- case self::SUBJECT_UNSHARED_GROUP_SELF:
- return (string) $l->t('You removed the share of group %2$s for %1$s', $params);
- case self::SUBJECT_UNSHARED_GROUP_BY:
- return (string) $l->t('%2$s removed the share of group %3$s for %1$s', $params);
-
- case self::SUBJECT_RESHARED_LINK_BY:
- return (string) $l->t('%2$s shared %1$s via link', $params);
- case self::SUBJECT_SHARED_LINK_SELF:
- return (string) $l->t('You shared %1$s via link', $params);
- case self::SUBJECT_UNSHARED_LINK_SELF:
- return (string) $l->t('You removed the public link for %1$s', $params);
- case self::SUBJECT_UNSHARED_LINK_BY:
- return (string) $l->t('%2$s removed the public link for %1$s', $params);
- case self::SUBJECT_LINK_EXPIRED:
- return (string) $l->t('Your public link for %1$s expired', $params);
- case self::SUBJECT_LINK_BY_EXPIRED:
- return (string) $l->t('The public link of %2$s for %1$s expired', $params);
-
- case self::SUBJECT_SHARED_WITH_BY:
- return (string) $l->t('%2$s shared %1$s with you', $params);
- case self::SUBJECT_UNSHARED_BY:
- return (string) $l->t('%2$s removed the share for %1$s', $params);
-
- case self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED:
- return (string) $l->t('File %1$s shared by email with %2$s was downloaded', $params);
- case self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED:
- return (string) $l->t('Folder %1$s shared by email with %2$s was downloaded', $params);
- }
-
- return false;
- }
-
- /**
- * @param string $text
- * @param IL10N $l
- * @param array $params
- * @return bool|string
- */
- protected function translateShort($text, IL10N $l, array $params) {
- switch ($text) {
- case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED:
- case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED:
- return (string) $l->t('Downloaded via public link');
-
- case self::SUBJECT_SHARED_USER_SELF:
- return (string) $l->t('Shared with %2$s', $params);
- case self::SUBJECT_RESHARED_USER_BY:
- return (string) $l->t('Shared with %3$s by %2$s', $params);
- case self::SUBJECT_UNSHARED_USER_SELF:
- return (string) $l->t('Removed share for %2$s', $params);
- case self::SUBJECT_UNSHARED_USER_BY:
- return (string) $l->t('%2$s removed share for %3$s', $params);
-
- case self::SUBJECT_SHARED_GROUP_SELF:
- return (string) $l->t('Shared with group %2$s', $params);
- case self::SUBJECT_RESHARED_GROUP_BY:
- return (string) $l->t('Shared with group %3$s by %2$s', $params);
- case self::SUBJECT_UNSHARED_GROUP_SELF:
- return (string) $l->t('Removed share of group %2$s', $params);
- case self::SUBJECT_UNSHARED_GROUP_BY:
- return (string) $l->t('%2$s removed share of group %3$s', $params);
-
- case self::SUBJECT_RESHARED_LINK_BY:
- return (string) $l->t('Shared via link by %2$s', $params);
- case self::SUBJECT_SHARED_LINK_SELF:
- return (string) $l->t('Shared via public link');
- case self::SUBJECT_UNSHARED_LINK_SELF:
- return (string) $l->t('Removed public link');
- case self::SUBJECT_UNSHARED_LINK_BY:
- return (string) $l->t('%2$s removed public link');
- case self::SUBJECT_LINK_EXPIRED:
- return (string) $l->t('Public link expired', $params);
- case self::SUBJECT_LINK_BY_EXPIRED:
- return (string) $l->t('Public link of %2$s expired', $params);
-
- case self::SUBJECT_SHARED_WITH_BY:
- return (string) $l->t('Shared by %2$s', $params);
-
- case self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED:
- case self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED:
- return (string) $l->t('Downloaded by %2$s', $params);
-
- default:
- return false;
- }
- }
-
- /**
- * The extension can define the type of parameters for translation
- *
- * Currently known types are:
- * * file => will strip away the path of the file and add a tooltip with it
- * * username => will add the avatar of the user
- * * email => will add a mailto link
- *
- * @param string $app
- * @param string $text
- * @return array|false
- */
- public function getSpecialParameterList($app, $text) {
- if ($app === self::FILES_SHARING_APP) {
- switch ($text) {
- case self::SUBJECT_REMOTE_SHARE_RECEIVED:
- case self::SUBJECT_REMOTE_SHARE_UNSHARED:
- return array(
- 0 => 'federated_cloud_id',
- //1 => 'file', in theory its a file, but it does not exist yet/anymore
- );
- case self::SUBJECT_REMOTE_SHARE_ACCEPTED:
- case self::SUBJECT_REMOTE_SHARE_DECLINED:
- return array(
- 0 => 'federated_cloud_id',
- 1 => 'file',
- );
- case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED:
- case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED:
- return array(
- 0 => 'file',
- );
- case self::SUBJECT_SHARED_LINK_SELF:
- case self::SUBJECT_UNSHARED_LINK_SELF:
- case self::SUBJECT_LINK_EXPIRED:
- return [0 => 'file'];
- case self::SUBJECT_RESHARED_LINK_BY:
- return [
- 0 => 'file',
- 1 => 'username',
- 2 => '',
- ];
- case self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED:
- case self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED:
- return array(
- 0 => 'file',
- 1 => 'email',
- );
-
- case self::SUBJECT_SHARED_USER_SELF:
- case self::SUBJECT_SHARED_WITH_BY:
- case self::SUBJECT_UNSHARED_BY:
- case self::SUBJECT_UNSHARED_LINK_BY:
- case self::SUBJECT_LINK_BY_EXPIRED:
- case self::SUBJECT_UNSHARED_USER_SELF:
- return [0 => 'file', 1 => 'username'];
- case self::SUBJECT_RESHARED_USER_BY:
- case self::SUBJECT_UNSHARED_USER_BY:
- return [
- 0 => 'file',
- 1 => 'username',
- 2 => 'username',
- ];
-
- case self::SUBJECT_SHARED_GROUP_SELF:
- case self::SUBJECT_UNSHARED_GROUP_SELF:
- return [
- 0 => 'file',
- 1 => 'group',
- ];
-
- case self::SUBJECT_RESHARED_GROUP_BY:
- case self::SUBJECT_UNSHARED_GROUP_BY:
- return [
- 0 => 'file',
- 1 => 'username',
- 2 => 'group',
- ];
- }
- }
-
- return false;
- }
-
- /**
- * The extension can define the parameter grouping by returning the index as integer.
- * In case no grouping is required false is to be returned.
- *
- * @param array $activity
- * @return integer|false
- */
- public function getGroupParameter($activity) {
- if ($activity['app'] === self::FILES_SHARING_APP) {
- switch ($activity['subject']) {
- case self::SUBJECT_SHARED_LINK_SELF:
- case self::SUBJECT_UNSHARED_LINK_SELF:
- case self::SUBJECT_LINK_EXPIRED:
- case self::SUBJECT_SHARED_WITH_BY:
- case self::SUBJECT_UNSHARED_BY:
- // Group by file name
- return 0;
- case self::SUBJECT_SHARED_USER_SELF:
- case self::SUBJECT_SHARED_GROUP_SELF:
- // Group by user/group
- return 1;
- }
- }
-
- return false;
- }
-
- /**
- * The extension can define additional navigation entries. The array returned has to contain two keys 'top'
- * and 'apps' which hold arrays with the relevant entries.
- * If no further entries are to be added false is no be returned.
- *
- * @return array|false
- */
- public function getNavigation() {
- $l = $this->getL10N();
- return [
- 'apps' => [],
- 'top' => [
- self::FILTER_SHARES => [
- 'id' => self::FILTER_SHARES,
- 'icon' => 'icon-share',
- 'name' => (string) $l->t('File shares'),
- 'url' => $this->URLGenerator->linkToRoute('activity.Activities.showList', ['filter' => self::FILTER_SHARES]),
- ],
- ],
- ];
- }
-
- /**
- * The extension can check if a custom filter (given by a query string like filter=abc) is valid or not.
- *
- * @param string $filterValue
- * @return boolean
- */
- public function isFilterValid($filterValue) {
- return $filterValue === self::FILTER_SHARES;
- }
-
- /**
- * The extension can filter the types based on the filter if required.
- * In case no filter is to be applied false is to be returned unchanged.
- *
- * @param array $types
- * @param string $filter
- * @return array|false
- */
- public function filterNotificationTypes($types, $filter) {
- switch ($filter) {
- case self::FILTER_SHARES:
- return array_intersect([self::TYPE_SHARED, self::TYPE_REMOTE_SHARE], $types);
- }
- return false;
- }
-
- /**
- * For a given filter the extension can specify the sql query conditions including parameters for that query.
- * In case the extension does not know the filter false is to be returned.
- * The query condition and the parameters are to be returned as array with two elements.
- * E.g. return array('`app` = ? and `message` like ?', array('mail', 'ownCloud%'));
- *
- * @param string $filter
- * @return array|false
- */
- public function getQueryForFilter($filter) {
- if ($filter === self::FILTER_SHARES) {
- return [
- '`app` = ?',
- [self::FILES_SHARING_APP,],
- ];
- }
- return false;
- }
-
-}
diff --git a/apps/files_sharing/lib/Activity/Filter.php b/apps/files_sharing/lib/Activity/Filter.php
new file mode 100644
index 00000000000..66ba7f1967b
--- /dev/null
+++ b/apps/files_sharing/lib/Activity/Filter.php
@@ -0,0 +1,95 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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_Sharing\Activity;
+
+
+use OCP\Activity\IFilter;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+
+class Filter implements IFilter {
+ const TYPE_REMOTE_SHARE = 'remote_share';
+ const TYPE_SHARED = 'shared';
+
+ /** @var IL10N */
+ protected $l;
+
+ /** @var IURLGenerator */
+ protected $url;
+
+ public function __construct(IL10N $l, IURLGenerator $url) {
+ $this->l = $l;
+ $this->url = $url;
+ }
+
+ /**
+ * @return string Lowercase a-z only identifier
+ * @since 11.0.0
+ */
+ public function getIdentifier() {
+ return 'files_sharing';
+ }
+
+ /**
+ * @return string A translated string
+ * @since 11.0.0
+ */
+ public function getName() {
+ return $this->l->t('File shares');
+ }
+
+ /**
+ * @return int
+ * @since 11.0.0
+ */
+ public function getPriority() {
+ return 31;
+ }
+
+ /**
+ * @return string Full URL to an icon, empty string when none is given
+ * @since 11.0.0
+ */
+ public function getIcon() {
+ return $this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'));
+ }
+
+ /**
+ * @param string[] $types
+ * @return string[] An array of allowed apps from which activities should be displayed
+ * @since 11.0.0
+ */
+ public function filterTypes(array $types) {
+ return array_intersect([
+ self::TYPE_SHARED,
+ self::TYPE_REMOTE_SHARE
+ ], $types);
+ }
+
+ /**
+ * @return string[] An array of allowed apps from which activities should be displayed
+ * @since 11.0.0
+ */
+ public function allowedApps() {
+ return ['files_sharing'];
+ }
+}
diff --git a/apps/files_sharing/lib/Activity/Providers/Downloads.php b/apps/files_sharing/lib/Activity/Providers/Downloads.php
new file mode 100644
index 00000000000..39e2a846b30
--- /dev/null
+++ b/apps/files_sharing/lib/Activity/Providers/Downloads.php
@@ -0,0 +1,187 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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_Sharing\Activity\Providers;
+
+use OCP\Activity\IEvent;
+use OCP\Activity\IManager;
+use OCP\Activity\IProvider;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+
+class Downloads implements IProvider {
+
+ /** @var IL10N */
+ protected $l;
+
+ /** @var IURLGenerator */
+ protected $url;
+
+ /** @var IManager */
+ protected $activityManager;
+
+ const SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED = 'public_shared_file_downloaded';
+ const SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED = 'public_shared_folder_downloaded';
+
+ const SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED = 'file_shared_with_email_downloaded';
+ const SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED = 'folder_shared_with_email_downloaded';
+
+ /**
+ * @param IL10N $l
+ * @param IURLGenerator $url
+ * @param IManager $activityManager
+ */
+ public function __construct(IL10N $l, IURLGenerator $url, IManager $activityManager) {
+ $this->l = $l;
+ $this->url = $url;
+ $this->activityManager = $activityManager;
+ }
+
+ /**
+ * @param IEvent $event
+ * @param IEvent|null $previousEvent
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parse(IEvent $event, IEvent $previousEvent = null) {
+ if ($event->getApp() !== 'files_sharing') {
+ throw new \InvalidArgumentException();
+ }
+
+ if ($this->activityManager->isFormattingFilteredObject()) {
+ try {
+ return $this->parseShortVersion($event);
+ } catch (\InvalidArgumentException $e) {
+ // Ignore and simply use the long version...
+ }
+ }
+
+ return $this->parseLongVersion($event);
+ }
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parseShortVersion(IEvent $event) {
+ $parsedParameters = $this->getParsedParameters($event);
+
+ if ($event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED ||
+ $event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED) {
+ $event->setParsedSubject($this->l->t('Downloaded via public link'))
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED ||
+ $event->getSubject() === self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED) {
+ $event->setParsedSubject($this->l->t('Downloaded by %1$s', $parsedParameters['email']['name']))
+ ->setRichSubject($this->l->t('Downloaded by {email}'), [
+ 'email' => $parsedParameters['email'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg')));
+ } else {
+ throw new \InvalidArgumentException();
+ }
+
+ return $event;
+ }
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parseLongVersion(IEvent $event) {
+ $parsedParameters = $this->getParsedParameters($event);
+
+ if ($event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED ||
+ $event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED) {
+ $event->setParsedSubject($this->l->t('%1$s downloaded via public link', [
+ $parsedParameters['file']['path'],
+ ]))
+ ->setRichSubject($this->l->t('{file} downloaded via public link'), [
+ 'file' => $parsedParameters['file'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED ||
+ $event->getSubject() === self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED) {
+ $event->setParsedSubject($this->l->t('%1$s downloaded %2$s', [
+ $parsedParameters['email']['name'],
+ $parsedParameters['file']['path'],
+ ]))
+ ->setRichSubject($this->l->t('{email} downloaded {file}'), [
+ 'email' => $parsedParameters['email'],
+ 'file' => $parsedParameters['file'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg')));
+ } else {
+ throw new \InvalidArgumentException();
+ }
+
+ return $event;
+ }
+
+ /**
+ * @param IEvent $event
+ * @return array
+ */
+ protected function getParsedParameters(IEvent $event) {
+ $subject = $event->getSubject();
+ $parameters = $event->getSubjectParameters();
+
+ switch ($subject) {
+ case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED:
+ case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED:
+ return [
+ 'file' => $this->generateFileParameter($event->getObjectId(), $parameters[0]),
+ ];
+ case self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED:
+ case self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED:
+ return [
+ 'file' => $this->generateFileParameter($event->getObjectId(), $parameters[0]),
+ 'email' => [
+ 'type' => 'email',
+ 'id' => $parameters[1],
+ 'name' => $parameters[1],
+ ],
+ ];
+ }
+
+ throw new \InvalidArgumentException();
+ }
+
+ /**
+ * @param int $id
+ * @param string $path
+ * @return array
+ */
+ protected function generateFileParameter($id, $path) {
+ return [
+ 'type' => 'file',
+ 'id' => $id,
+ 'name' => basename($path),
+ 'path' => $path,
+ 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
+ ];
+ }
+}
diff --git a/apps/files_sharing/lib/Activity/Providers/Groups.php b/apps/files_sharing/lib/Activity/Providers/Groups.php
new file mode 100644
index 00000000000..c42cc1bb59b
--- /dev/null
+++ b/apps/files_sharing/lib/Activity/Providers/Groups.php
@@ -0,0 +1,261 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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_Sharing\Activity\Providers;
+
+use OCP\Activity\IEvent;
+use OCP\Activity\IManager;
+use OCP\Activity\IProvider;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserManager;
+
+class Groups implements IProvider {
+
+ /** @var IL10N */
+ protected $l;
+
+ /** @var IURLGenerator */
+ protected $url;
+
+ /** @var IManager */
+ protected $activityManager;
+
+ /** @var IUserManager */
+ protected $userManager;
+
+ /** @var array */
+ protected $displayNames = [];
+
+ const SUBJECT_SHARED_GROUP_SELF = 'shared_group_self';
+ const SUBJECT_RESHARED_GROUP_BY = 'reshared_group_by';
+ const SUBJECT_UNSHARED_GROUP_SELF = 'unshared_group_self';
+ const SUBJECT_UNSHARED_GROUP_BY = 'unshared_group_by';
+
+
+ /**
+ * @param IL10N $l
+ * @param IURLGenerator $url
+ * @param IManager $activityManager
+ * @param IUserManager $userManager
+ */
+ public function __construct(IL10N $l, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) {
+ $this->l = $l;
+ $this->url = $url;
+ $this->activityManager = $activityManager;
+ $this->userManager = $userManager;
+ }
+
+ /**
+ * @param IEvent $event
+ * @param IEvent|null $previousEvent
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parse(IEvent $event, IEvent $previousEvent = null) {
+ if ($event->getApp() !== 'files_sharing') {
+ throw new \InvalidArgumentException();
+ }
+
+ if ($this->activityManager->isFormattingFilteredObject()) {
+ try {
+ return $this->parseShortVersion($event);
+ } catch (\InvalidArgumentException $e) {
+ // Ignore and simply use the long version...
+ }
+ }
+
+ return $this->parseLongVersion($event);
+ }
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parseShortVersion(IEvent $event) {
+ $parsedParameters = $this->getParsedParameters($event);
+
+ if ($event->getSubject() === self::SUBJECT_SHARED_GROUP_SELF) {
+ $event->setParsedSubject($this->l->t('Shared with group %1$s', [$parsedParameters['group']['name']]))
+ ->setRichSubject($this->l->t('Shared with group {group}'), [
+ 'group' => $parsedParameters['group'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_UNSHARED_GROUP_SELF) {
+ $event->setParsedSubject($this->l->t('Removed share for group %1$s', [$parsedParameters['group']['name']]))
+ ->setRichSubject($this->l->t('Removed share for group {group}'), [
+ 'group' => $parsedParameters['group'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_RESHARED_GROUP_BY) {
+ $event->setParsedSubject($this->l->t('%2$s shared with group %1$s', [
+ $parsedParameters['group']['name'],
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{actor} shared with group {group}'), [
+ 'group' => $parsedParameters['group'],
+ 'actor' => $parsedParameters['actor'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_UNSHARED_GROUP_BY) {
+ $event->setParsedSubject($this->l->t('%2$s removed share for group %1$s', [
+ $parsedParameters['group']['name'],
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{actor} removed share for group {group}'), [
+ 'group' => $parsedParameters['group'],
+ 'actor' => $parsedParameters['actor'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+
+ } else {
+ throw new \InvalidArgumentException();
+ }
+
+ return $event;
+ }
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parseLongVersion(IEvent $event) {
+ $parsedParameters = $this->getParsedParameters($event);
+
+ if ($event->getSubject() === self::SUBJECT_SHARED_GROUP_SELF) {
+ $event->setParsedSubject($this->l->t('You shared %1$s with group %2$s', [
+ $parsedParameters['file']['path'],
+ $parsedParameters['group']['name'],
+ ]))
+ ->setRichSubject($this->l->t('You shared {file} with group {group}'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_UNSHARED_GROUP_SELF) {
+ $event->setParsedSubject($this->l->t('You removed group %2$s from %1$s', [
+ $parsedParameters['file']['path'],
+ $parsedParameters['group']['name'],
+ ]))
+ ->setRichSubject($this->l->t('You removed group {group} from {file}'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_RESHARED_GROUP_BY) {
+ $event->setParsedSubject($this->l->t('%3$s shared %1$s with group %2$s', [
+ $parsedParameters['file']['path'],
+ $parsedParameters['group']['name'],
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{actor} shared {file} with group {group}'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_UNSHARED_GROUP_BY) {
+ $event->setParsedSubject($this->l->t('%3$s removed group %2$s from %1$s', [
+ $parsedParameters['file']['path'],
+ $parsedParameters['group']['name'],
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{actor} removed group {group} from {file}'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else {
+ throw new \InvalidArgumentException();
+ }
+
+ return $event;
+ }
+
+ protected function getParsedParameters(IEvent $event) {
+ $subject = $event->getSubject();
+ $parameters = $event->getSubjectParameters();
+
+ switch ($subject) {
+ case self::SUBJECT_RESHARED_GROUP_BY:
+ case self::SUBJECT_UNSHARED_GROUP_BY:
+ $id = key($parameters[0]);
+ return [
+ 'file' => $this->generateFileParameter($id, $parameters[0][$id]),
+ 'group' => [
+ 'type' => 'group',
+ 'id' => $parameters[2],
+ 'name' => $parameters[2],
+ ],
+ 'actor' => $this->generateUserParameter($parameters[1]),
+ ];
+ case self::SUBJECT_SHARED_GROUP_SELF:
+ case self::SUBJECT_UNSHARED_GROUP_SELF:
+ $id = key($parameters[0]);
+ return [
+ 'file' => $this->generateFileParameter($id, $parameters[0][$id]),
+ 'group' => [
+ 'type' => 'group',
+ 'id' => $parameters[1],
+ 'name' => $parameters[1],
+ ],
+ ];
+ }
+ return [];
+ }
+
+ /**
+ * @param int $id
+ * @param string $path
+ * @return array
+ */
+ protected function generateFileParameter($id, $path) {
+ return [
+ 'type' => 'file',
+ 'id' => $id,
+ 'name' => basename($path),
+ 'path' => $path,
+ 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
+ ];
+ }
+
+ /**
+ * @param string $uid
+ * @return array
+ */
+ protected function generateUserParameter($uid) {
+ if (!isset($this->displayNames[$uid])) {
+ $this->displayNames[$uid] = $this->getDisplayName($uid);
+ }
+
+ return [
+ 'type' => 'user',
+ 'id' => $uid,
+ 'name' => $this->displayNames[$uid],
+ ];
+ }
+
+ /**
+ * @param string $uid
+ * @return string
+ */
+ protected function getDisplayName($uid) {
+ $user = $this->userManager->get($uid);
+ if ($user instanceof IUser) {
+ return $user->getDisplayName();
+ } else {
+ return $uid;
+ }
+ }
+}
diff --git a/apps/files_sharing/lib/Activity/Providers/PublicLinks.php b/apps/files_sharing/lib/Activity/Providers/PublicLinks.php
new file mode 100644
index 00000000000..a1c6333a86b
--- /dev/null
+++ b/apps/files_sharing/lib/Activity/Providers/PublicLinks.php
@@ -0,0 +1,268 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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_Sharing\Activity\Providers;
+
+use OCP\Activity\IEvent;
+use OCP\Activity\IManager;
+use OCP\Activity\IProvider;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserManager;
+
+class PublicLinks implements IProvider {
+
+ /** @var IL10N */
+ protected $l;
+
+ /** @var IURLGenerator */
+ protected $url;
+
+ /** @var IManager */
+ protected $activityManager;
+
+ /** @var IUserManager */
+ protected $userManager;
+
+ /** @var array */
+ protected $displayNames = [];
+
+ const SUBJECT_SHARED_LINK_SELF = 'shared_link_self';
+ const SUBJECT_RESHARED_LINK_BY = 'reshared_link_by';
+ const SUBJECT_UNSHARED_LINK_SELF = 'unshared_link_self';
+ const SUBJECT_UNSHARED_LINK_BY = 'unshared_link_by';
+ const SUBJECT_LINK_EXPIRED = 'link_expired';
+ const SUBJECT_LINK_BY_EXPIRED = 'link_by_expired';
+
+
+ /**
+ * @param IL10N $l
+ * @param IURLGenerator $url
+ * @param IManager $activityManager
+ * @param IUserManager $userManager
+ */
+ public function __construct(IL10N $l, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) {
+ $this->l = $l;
+ $this->url = $url;
+ $this->activityManager = $activityManager;
+ $this->userManager = $userManager;
+ }
+
+ /**
+ * @param IEvent $event
+ * @param IEvent|null $previousEvent
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parse(IEvent $event, IEvent $previousEvent = null) {
+ if ($event->getApp() !== 'files_sharing') {
+ throw new \InvalidArgumentException();
+ }
+
+ if ($this->activityManager->isFormattingFilteredObject()) {
+ try {
+ return $this->parseShortVersion($event);
+ } catch (\InvalidArgumentException $e) {
+ // Ignore and simply use the long version...
+ }
+ }
+
+ return $this->parseLongVersion($event);
+ }
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parseShortVersion(IEvent $event) {
+ $parsedParameters = $this->getParsedParameters($event);
+
+ if ($event->getSubject() === self::SUBJECT_SHARED_LINK_SELF) {
+ $event->setParsedSubject($this->l->t('Shared as public link'))
+ ->setRichSubject($this->l->t('Shared as public link'))
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_UNSHARED_LINK_SELF) {
+ $event->setParsedSubject($this->l->t('Removed public link'))
+ ->setRichSubject($this->l->t('Removed public link'))
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+// } else if ($event->getSubject() === self::SUBJECT_LINK_EXPIRED) {
+// $event->setParsedSubject($this->l->t('Public link expired'))
+// ->setRichSubject($this->l->t('Public link expired'))
+// ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_RESHARED_LINK_BY) {
+ $event->setParsedSubject($this->l->t('%1$s shared as public link', [
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{actor} shared as public link'), [
+ 'actor' => $parsedParameters['actor'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_UNSHARED_LINK_BY) {
+ $event->setParsedSubject($this->l->t('%1$s removed public link', [
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{actor} removed public link'), [
+ 'actor' => $parsedParameters['actor'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+// } else if ($event->getSubject() === self::SUBJECT_LINK_BY_EXPIRED) {
+// $event->setParsedSubject($this->l->t('Public link of %1$s expired', [
+// $parsedParameters['actor']['name'],
+// ]))
+// ->setRichSubject($this->l->t('Public link of {actor} expired',[
+// 'actor' => $parsedParameters['actor'],
+// ]))
+// ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+
+ } else {
+ throw new \InvalidArgumentException();
+ }
+
+ return $event;
+ }
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parseLongVersion(IEvent $event) {
+ $parsedParameters = $this->getParsedParameters($event);
+
+ if ($event->getSubject() === self::SUBJECT_SHARED_LINK_SELF) {
+ $event->setParsedSubject($this->l->t('You shared %1$s as public link', [
+ $parsedParameters['file']['path'],
+ ]))
+ ->setRichSubject($this->l->t('You shared {file} as public link'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_UNSHARED_LINK_SELF) {
+ $event->setParsedSubject($this->l->t('You removed public link for %1$s', [
+ $parsedParameters['file']['path'],
+ ]))
+ ->setRichSubject($this->l->t('You removed public link for {file}'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+// } else if ($event->getSubject() === self::SUBJECT_LINK_EXPIRED) {
+// $event->setParsedSubject($this->l->t('Public link expired'))
+// ->setRichSubject($this->l->t('Public link expired'))
+// ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_RESHARED_LINK_BY) {
+ $event->setParsedSubject($this->l->t('%2$s shared %1$s as public link', [
+ $parsedParameters['file']['path'],
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{actor} shared {file} as public link'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_UNSHARED_LINK_BY) {
+ $event->setParsedSubject($this->l->t('%2$s removed public link for %1$s', [
+ $parsedParameters['file']['path'],
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{actor} removed public link for {file}'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+// } else if ($event->getSubject() === self::SUBJECT_LINK_BY_EXPIRED) {
+// $event->setParsedSubject($this->l->t('Public link of %1$s expired', [
+// $parsedParameters['actor']['name'],
+// ]))
+// ->setRichSubject($this->l->t('Public link of {actor} expired',[
+// 'actor' => $parsedParameters['actor'],
+// ]))
+// ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+
+ } else {
+ throw new \InvalidArgumentException();
+ }
+
+ return $event;
+ }
+
+ protected function getParsedParameters(IEvent $event) {
+ $subject = $event->getSubject();
+ $parameters = $event->getSubjectParameters();
+
+ switch ($subject) {
+ case self::SUBJECT_SHARED_LINK_SELF:
+ case self::SUBJECT_UNSHARED_LINK_SELF:
+ case self::SUBJECT_LINK_EXPIRED:
+ $id = key($parameters[0]);
+ return [
+ 'file' => $this->generateFileParameter($id, $parameters[0][$id]),
+ ];
+ case self::SUBJECT_RESHARED_LINK_BY:
+ case self::SUBJECT_UNSHARED_LINK_BY:
+ case self::SUBJECT_LINK_BY_EXPIRED:
+ $id = key($parameters[0]);
+ return [
+ 'file' => $this->generateFileParameter($id, $parameters[0][$id]),
+ 'actor' => $this->generateUserParameter($parameters[1]),
+ ];
+ }
+ return [];
+ }
+
+ /**
+ * @param int $id
+ * @param string $path
+ * @return array
+ */
+ protected function generateFileParameter($id, $path) {
+ return [
+ 'type' => 'file',
+ 'id' => $id,
+ 'name' => basename($path),
+ 'path' => $path,
+ 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
+ ];
+ }
+
+ /**
+ * @param string $uid
+ * @return array
+ */
+ protected function generateUserParameter($uid) {
+ if (!isset($this->displayNames[$uid])) {
+ $this->displayNames[$uid] = $this->getDisplayName($uid);
+ }
+
+ return [
+ 'type' => 'user',
+ 'id' => $uid,
+ 'name' => $this->displayNames[$uid],
+ ];
+ }
+
+ /**
+ * @param string $uid
+ * @return string
+ */
+ protected function getDisplayName($uid) {
+ $user = $this->userManager->get($uid);
+ if ($user instanceof IUser) {
+ return $user->getDisplayName();
+ } else {
+ return $uid;
+ }
+ }
+}
diff --git a/apps/files_sharing/lib/Activity/Providers/RemoteShares.php b/apps/files_sharing/lib/Activity/Providers/RemoteShares.php
new file mode 100644
index 00000000000..8760733a261
--- /dev/null
+++ b/apps/files_sharing/lib/Activity/Providers/RemoteShares.php
@@ -0,0 +1,209 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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_Sharing\Activity\Providers;
+
+use OCP\Activity\IEvent;
+use OCP\Activity\IManager;
+use OCP\Activity\IProvider;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserManager;
+
+class RemoteShares implements IProvider {
+
+ /** @var IL10N */
+ protected $l;
+
+ /** @var IURLGenerator */
+ protected $url;
+
+ /** @var IManager */
+ protected $activityManager;
+
+ const SUBJECT_REMOTE_SHARE_ACCEPTED = 'remote_share_accepted';
+ const SUBJECT_REMOTE_SHARE_DECLINED = 'remote_share_declined';
+ const SUBJECT_REMOTE_SHARE_RECEIVED = 'remote_share_received';
+ const SUBJECT_REMOTE_SHARE_UNSHARED = 'remote_share_unshared';
+
+ /**
+ * @param IL10N $l
+ * @param IURLGenerator $url
+ * @param IManager $activityManager
+ */
+ public function __construct(IL10N $l, IURLGenerator $url, IManager $activityManager) {
+ $this->l = $l;
+ $this->url = $url;
+ $this->activityManager = $activityManager;
+ }
+
+ /**
+ * @param IEvent $event
+ * @param IEvent|null $previousEvent
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parse(IEvent $event, IEvent $previousEvent = null) {
+ if ($event->getApp() !== 'files_sharing') {
+ throw new \InvalidArgumentException();
+ }
+
+ if ($this->activityManager->isFormattingFilteredObject()) {
+ try {
+ return $this->parseShortVersion($event);
+ } catch (\InvalidArgumentException $e) {
+ // Ignore and simply use the long version...
+ }
+ }
+
+ return $this->parseLongVersion($event);
+ }
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parseShortVersion(IEvent $event) {
+ $parsedParameters = $this->getParsedParameters($event);
+
+ if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_ACCEPTED) {
+ $event->setParsedSubject($this->l->t('%1$s accepted the remote share', [
+ $parsedParameters['user']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{user} accepted the remote share'), [
+ 'user' => $parsedParameters['user']
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_DECLINED) {
+ $event->setParsedSubject($this->l->t('%1$s declined the remote share', [
+ $parsedParameters['user']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{user} declined the remote share'), [
+ 'user' => $parsedParameters['user']
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else {
+ throw new \InvalidArgumentException();
+ }
+
+ return $event;
+ }
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parseLongVersion(IEvent $event) {
+ $parsedParameters = $this->getParsedParameters($event);
+
+ if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_RECEIVED) {
+ $event->setParsedSubject($this->l->t('You received a new remote share %1$s from %2$s', [
+ $parsedParameters['file']['name'],
+ $parsedParameters['user']['name'],
+ ]))
+ ->setRichSubject($this->l->t('You received a new remote share {file} from {user}'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_ACCEPTED) {
+ $event->setParsedSubject($this->l->t('%2$s accepted the remote share of %1$s', [
+ $parsedParameters['file']['name'],
+ $parsedParameters['user']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{user} accepted the remote share of {file}'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_DECLINED) {
+ $event->setParsedSubject($this->l->t('%2$s declined the remote share of %1$s', [
+ $parsedParameters['file']['name'],
+ $parsedParameters['user']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{user} declined the remote share of {file}'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_UNSHARED) {
+ $event->setParsedSubject($this->l->t('%2$s unshared %1$s from you', [
+ $parsedParameters['file']['name'],
+ $parsedParameters['user']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{user} unshared {file} from you'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else {
+ throw new \InvalidArgumentException();
+ }
+
+ return $event;
+ }
+
+ protected function getParsedParameters(IEvent $event) {
+ $subject = $event->getSubject();
+ $parameters = $event->getSubjectParameters();
+
+ switch ($subject) {
+ case self::SUBJECT_REMOTE_SHARE_RECEIVED:
+ case self::SUBJECT_REMOTE_SHARE_UNSHARED:
+ $remoteUser = explode('@', $parameters[0], 2);
+ return [
+ 'file' => [
+ 'type' => 'pending-federated-share',
+ 'id' => $parameters[1],
+ 'name' => $parameters[1],
+ ],
+ 'user' => [
+ 'type' => 'user',
+ 'id' => $remoteUser[0],
+ 'name' => $parameters[0],// Todo display name from contacts
+ 'server' => $remoteUser[1],
+ ],
+ ];
+ case self::SUBJECT_REMOTE_SHARE_ACCEPTED:
+ case self::SUBJECT_REMOTE_SHARE_DECLINED:
+ $remoteUser = explode('@', $parameters[0], 2);
+ return [
+ 'file' => $this->generateFileParameter($event->getObjectId(), $event->getObjectName()),
+ 'user' => [
+ 'type' => 'user',
+ 'id' => $remoteUser[0],
+ 'name' => $parameters[0],// Todo display name from contacts
+ 'server' => $remoteUser[1],
+ ],
+ ];
+ }
+ throw new \InvalidArgumentException();
+ }
+
+ /**
+ * @param int $id
+ * @param string $path
+ * @return array
+ */
+ protected function generateFileParameter($id, $path) {
+ return [
+ 'type' => 'file',
+ 'id' => $id,
+ 'name' => basename($path),
+ 'path' => $path,
+ 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
+ ];
+ }
+}
diff --git a/apps/files_sharing/lib/Activity/Providers/Users.php b/apps/files_sharing/lib/Activity/Providers/Users.php
new file mode 100644
index 00000000000..c85452aec06
--- /dev/null
+++ b/apps/files_sharing/lib/Activity/Providers/Users.php
@@ -0,0 +1,289 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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_Sharing\Activity\Providers;
+
+use OCP\Activity\IEvent;
+use OCP\Activity\IManager;
+use OCP\Activity\IProvider;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserManager;
+
+class Users implements IProvider {
+
+ /** @var IL10N */
+ protected $l;
+
+ /** @var IURLGenerator */
+ protected $url;
+
+ /** @var IManager */
+ protected $activityManager;
+
+ /** @var IUserManager */
+ protected $userManager;
+
+ /** @var array */
+ protected $displayNames = [];
+
+ const SUBJECT_SHARED_USER_SELF = 'shared_user_self';
+ const SUBJECT_RESHARED_USER_BY = 'reshared_user_by';
+ const SUBJECT_UNSHARED_USER_SELF = 'unshared_user_self';
+ const SUBJECT_UNSHARED_USER_BY = 'unshared_user_by';
+
+ const SUBJECT_SHARED_WITH_BY = 'shared_with_by';
+ const SUBJECT_UNSHARED_BY = 'unshared_by';
+
+ /**
+ * @param IL10N $l
+ * @param IURLGenerator $url
+ * @param IManager $activityManager
+ * @param IUserManager $userManager
+ */
+ public function __construct(IL10N $l, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) {
+ $this->l = $l;
+ $this->url = $url;
+ $this->activityManager = $activityManager;
+ $this->userManager = $userManager;
+ }
+
+ /**
+ * @param IEvent $event
+ * @param IEvent|null $previousEvent
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parse(IEvent $event, IEvent $previousEvent = null) {
+ if ($event->getApp() !== 'files_sharing') {
+ throw new \InvalidArgumentException();
+ }
+
+ if ($this->activityManager->isFormattingFilteredObject()) {
+ try {
+ return $this->parseShortVersion($event);
+ } catch (\InvalidArgumentException $e) {
+ // Ignore and simply use the long version...
+ }
+ }
+
+ return $this->parseLongVersion($event);
+ }
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parseShortVersion(IEvent $event) {
+ $parsedParameters = $this->getParsedParameters($event);
+
+ if ($event->getSubject() === self::SUBJECT_SHARED_USER_SELF) {
+ $event->setParsedSubject($this->l->t('Shared with %1$s', [$parsedParameters['user']['name']]))
+ ->setRichSubject($this->l->t('Shared with {user}'), [
+ 'user' => $parsedParameters['user'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_UNSHARED_USER_SELF) {
+ $event->setParsedSubject($this->l->t('Removed share for %1$s', [$parsedParameters['user']['name']]))
+ ->setRichSubject($this->l->t('Removed share for {user}'), [
+ 'user' => $parsedParameters['user'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_RESHARED_USER_BY) {
+ $event->setParsedSubject($this->l->t('%2$s shared with %1$s', [
+ $parsedParameters['user']['name'],
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{actor} shared with {user}'), [
+ 'user' => $parsedParameters['user'],
+ 'actor' => $parsedParameters['actor'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_UNSHARED_USER_BY) {
+ $event->setParsedSubject($this->l->t('%2$s removed share for %1$s', [
+ $parsedParameters['user']['name'],
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{actor} removed share for {user}'), [
+ 'user' => $parsedParameters['user'],
+ 'actor' => $parsedParameters['actor'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_SHARED_WITH_BY) {
+ $event->setParsedSubject($this->l->t('Shared by %1$s', [$parsedParameters['actor']['name']]))
+ ->setRichSubject($this->l->t('Shared by {actor}'), [
+ 'actor' => $parsedParameters['actor'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_UNSHARED_BY) {
+ $event->setParsedSubject($this->l->t('%1$s removed share', [$parsedParameters['actor']['name']]))
+ ->setRichSubject($this->l->t('{actor} removed share'), [
+ 'actor' => $parsedParameters['actor'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+
+ } else {
+ throw new \InvalidArgumentException();
+ }
+
+ return $event;
+ }
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parseLongVersion(IEvent $event) {
+ $parsedParameters = $this->getParsedParameters($event);
+
+ if ($event->getSubject() === self::SUBJECT_SHARED_USER_SELF) {
+ $event->setParsedSubject($this->l->t('You shared %1$s with %2$s', [
+ $parsedParameters['file']['path'],
+ $parsedParameters['user']['name'],
+ ]))
+ ->setRichSubject($this->l->t('You shared {file} with {user}'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_UNSHARED_USER_SELF) {
+ $event->setParsedSubject($this->l->t('You removed %2$s from %1$s', [
+ $parsedParameters['file']['path'],
+ $parsedParameters['user']['name'],
+ ]))
+ ->setRichSubject($this->l->t('You removed {user} from {file}'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_RESHARED_USER_BY) {
+ $event->setParsedSubject($this->l->t('%3$s shared %1$s with %2$s', [
+ $parsedParameters['file']['path'],
+ $parsedParameters['user']['name'],
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{actor} removed {user} from {file}'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_UNSHARED_USER_BY) {
+ $event->setParsedSubject($this->l->t('%3$s removed %2$s from %1$s', [
+ $parsedParameters['file']['path'],
+ $parsedParameters['user']['name'],
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{actor} removed {user} from {file}'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_SHARED_WITH_BY) {
+ $event->setParsedSubject($this->l->t('%2$s shared %1$s with you', [
+ $parsedParameters['file']['path'],
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{actor} shared {file} with you'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_UNSHARED_BY) {
+ $event->setParsedSubject($this->l->t('%2$s removed you from %1$s', [
+ $parsedParameters['file']['path'],
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{actor} removed you from {file}'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+
+ } else {
+ throw new \InvalidArgumentException();
+ }
+
+ return $event;
+ }
+
+ protected function getParsedParameters(IEvent $event) {
+ $subject = $event->getSubject();
+ $parameters = $event->getSubjectParameters();
+
+ switch ($subject) {
+ case self::SUBJECT_SHARED_USER_SELF:
+ case self::SUBJECT_UNSHARED_USER_SELF:
+ $id = key($parameters[0]);
+ return [
+ 'file' => $this->generateFileParameter($id, $parameters[0][$id]),
+ 'user' => $this->generateUserParameter($parameters[1]),
+ ];
+ case self::SUBJECT_SHARED_WITH_BY:
+ case self::SUBJECT_UNSHARED_BY:
+ $id = key($parameters[0]);
+ return [
+ 'file' => $this->generateFileParameter($id, $parameters[0][$id]),
+ 'actor' => $this->generateUserParameter($parameters[1]),
+ ];
+ case self::SUBJECT_RESHARED_USER_BY:
+ case self::SUBJECT_UNSHARED_USER_BY:
+ $id = key($parameters[0]);
+ return [
+ 'file' => $this->generateFileParameter($id, $parameters[0][$id]),
+ 'user' => $this->generateUserParameter($parameters[2]),
+ 'actor' => $this->generateUserParameter($parameters[1]),
+ ];
+ }
+ return [];
+ }
+
+ /**
+ * @param int $id
+ * @param string $path
+ * @return array
+ */
+ protected function generateFileParameter($id, $path) {
+ return [
+ 'type' => 'file',
+ 'id' => $id,
+ 'name' => basename($path),
+ 'path' => $path,
+ 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
+ ];
+ }
+
+ /**
+ * @param string $uid
+ * @return array
+ */
+ protected function generateUserParameter($uid) {
+ if (!isset($this->displayNames[$uid])) {
+ $this->displayNames[$uid] = $this->getDisplayName($uid);
+ }
+
+ return [
+ 'type' => 'user',
+ 'id' => $uid,
+ 'name' => $this->displayNames[$uid],
+ ];
+ }
+
+ /**
+ * @param string $uid
+ * @return string
+ */
+ protected function getDisplayName($uid) {
+ $user = $this->userManager->get($uid);
+ if ($user instanceof IUser) {
+ return $user->getDisplayName();
+ } else {
+ return $uid;
+ }
+ }
+}
diff --git a/apps/files_sharing/lib/Activity/Settings/PublicLinks.php b/apps/files_sharing/lib/Activity/Settings/PublicLinks.php
new file mode 100644
index 00000000000..04fd5e23378
--- /dev/null
+++ b/apps/files_sharing/lib/Activity/Settings/PublicLinks.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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_Sharing\Activity\Settings;
+
+
+use OCP\Activity\ISetting;
+use OCP\IL10N;
+
+class PublicLinks implements ISetting {
+
+ /** @var IL10N */
+ protected $l;
+
+ /**
+ * @param IL10N $l
+ */
+ public function __construct(IL10N $l) {
+ $this->l = $l;
+ }
+
+ /**
+ * @return string Lowercase a-z and underscore only identifier
+ * @since 11.0.0
+ */
+ public function getIdentifier() {
+ return 'public_links';
+ }
+
+ /**
+ * @return string A translated string
+ * @since 11.0.0
+ */
+ public function getName() {
+ return $this->l->t('A file or folder shared by mail or by public link was <strong>downloaded</strong>');
+ }
+
+ /**
+ * @return int whether the filter should be rather on the top or bottom of
+ * the admin section. The filters are arranged in ascending order of the
+ * priority values. It is required to return a value between 0 and 100.
+ * @since 11.0.0
+ */
+ public function getPriority() {
+ return 20;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function canChangeStream() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function isDefaultEnabledStream() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the mail
+ * @since 11.0.0
+ */
+ public function canChangeMail() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function isDefaultEnabledMail() {
+ return false;
+ }
+}
+
diff --git a/apps/files_sharing/lib/Activity/Settings/RemoteShare.php b/apps/files_sharing/lib/Activity/Settings/RemoteShare.php
new file mode 100644
index 00000000000..ef506999fc4
--- /dev/null
+++ b/apps/files_sharing/lib/Activity/Settings/RemoteShare.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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_Sharing\Activity\Settings;
+
+
+use OCP\Activity\ISetting;
+use OCP\IL10N;
+
+class RemoteShare implements ISetting {
+
+ /** @var IL10N */
+ protected $l;
+
+ /**
+ * @param IL10N $l
+ */
+ public function __construct(IL10N $l) {
+ $this->l = $l;
+ }
+
+ /**
+ * @return string Lowercase a-z and underscore only identifier
+ * @since 11.0.0
+ */
+ public function getIdentifier() {
+ return 'remote_share';
+ }
+
+ /**
+ * @return string A translated string
+ * @since 11.0.0
+ */
+ public function getName() {
+ return $this->l->t('A file or folder was shared from <strong>another server</strong>');
+ }
+
+ /**
+ * @return int whether the filter should be rather on the top or bottom of
+ * the admin section. The filters are arranged in ascending order of the
+ * priority values. It is required to return a value between 0 and 100.
+ * @since 11.0.0
+ */
+ public function getPriority() {
+ return 11;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function canChangeStream() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function isDefaultEnabledStream() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the mail
+ * @since 11.0.0
+ */
+ public function canChangeMail() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function isDefaultEnabledMail() {
+ return true;
+ }
+}
+
diff --git a/apps/files_sharing/lib/Activity/Settings/Shared.php b/apps/files_sharing/lib/Activity/Settings/Shared.php
new file mode 100644
index 00000000000..847469d25fd
--- /dev/null
+++ b/apps/files_sharing/lib/Activity/Settings/Shared.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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_Sharing\Activity\Settings;
+
+
+use OCP\Activity\ISetting;
+use OCP\IL10N;
+
+class Shared implements ISetting {
+
+ /** @var IL10N */
+ protected $l;
+
+ /**
+ * @param IL10N $l
+ */
+ public function __construct(IL10N $l) {
+ $this->l = $l;
+ }
+
+ /**
+ * @return string Lowercase a-z and underscore only identifier
+ * @since 11.0.0
+ */
+ public function getIdentifier() {
+ return 'shared';
+ }
+
+ /**
+ * @return string A translated string
+ * @since 11.0.0
+ */
+ public function getName() {
+ return $this->l->t('A file or folder has been <strong>shared</strong>');
+ }
+
+ /**
+ * @return int whether the filter should be rather on the top or bottom of
+ * the admin section. The filters are arranged in ascending order of the
+ * priority values. It is required to return a value between 0 and 100.
+ * @since 11.0.0
+ */
+ public function getPriority() {
+ return 10;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function canChangeStream() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function isDefaultEnabledStream() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the mail
+ * @since 11.0.0
+ */
+ public function canChangeMail() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function isDefaultEnabledMail() {
+ return true;
+ }
+}
+
diff --git a/apps/files_sharing/lib/Controller/ShareController.php b/apps/files_sharing/lib/Controller/ShareController.php
index 910cbbdf397..c02f0396868 100644
--- a/apps/files_sharing/lib/Controller/ShareController.php
+++ b/apps/files_sharing/lib/Controller/ShareController.php
@@ -51,7 +51,7 @@ use OCP\ILogger;
use OCP\IUserManager;
use OCP\ISession;
use OCP\IPreview;
-use OCA\Files_Sharing\Activity;
+use OCA\Files_Sharing\Activity\Providers\Downloads;
use \OCP\Files\NotFoundException;
use OCP\Files\IRootFolder;
use OCP\Share\Exceptions\ShareNotFound;
@@ -570,16 +570,16 @@ class ShareController extends Controller {
if ($share->getShareType() === \OCP\Share::SHARE_TYPE_EMAIL) {
if ($node instanceof \OCP\Files\File) {
- $subject = Activity::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED;
+ $subject = Downloads::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED;
} else {
- $subject = Activity::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED;
+ $subject = Downloads::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED;
}
$parameters[] = $share->getSharedWith();
} else {
if ($node instanceof \OCP\Files\File) {
- $subject = Activity::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED;
+ $subject = Downloads::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED;
} else {
- $subject = Activity::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED;
+ $subject = Downloads::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED;
}
}
@@ -608,7 +608,7 @@ class ShareController extends Controller {
$event = $this->activityManager->generateEvent();
$event->setApp('files_sharing')
- ->setType(Activity::TYPE_PUBLIC_LINKS)
+ ->setType('public_links')
->setSubject($subject, $parameters)
->setAffectedUser($affectedUser)
->setObject('files', $fileId, $filePath);
diff --git a/apps/files_sharing/tests/ActivityTest.php b/apps/files_sharing/tests/ActivityTest.php
deleted file mode 100644
index 8acf1996609..00000000000
--- a/apps/files_sharing/tests/ActivityTest.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Björn Schießle <bjoern@schiessle.org>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-namespace OCA\Files_Sharing\Tests;
-
-/**
- * Class ActivityTest
- *
- * @group DB
- *
- * @package OCA\Files_Sharing\Tests
- */
-class ActivityTest extends TestCase {
-
- /**
- * @var \OCA\Files_Sharing\Activity
- */
- private $activity;
-
- protected function setUp() {
- parent::setUp();
- $this->activity = new \OCA\Files_Sharing\Activity(
- $this->getMockBuilder('OCP\L10N\IFactory')
- ->disableOriginalConstructor()
- ->getMock(),
- $this->getMockBuilder('OCP\IURLGenerator')
- ->disableOriginalConstructor()
- ->getMock(),
- $this->getMockBuilder('OCP\Activity\IManager')
- ->disableOriginalConstructor()
- ->getMock()
- );
- }
-
- /**
- * @dataProvider dataTestGetDefaultType
- */
- public function testGetDefaultTypes($method, $expectedResult) {
- $result = $this->activity->getDefaultTypes($method);
-
- if (is_array($expectedResult)) {
- $this->assertSame(count($expectedResult), count($result));
- foreach ($expectedResult as $key => $expected) {
- $this->assertSame($expected, $result[$key]);
- }
- } else {
- $this->assertSame($expectedResult, $result);
- }
-
- }
-
- public function dataTestGetDefaultType() {
- return array(
- array('email', array(\OCA\Files_Sharing\Activity::TYPE_SHARED, \OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE)),
- array('stream', array(\OCA\Files_Sharing\Activity::TYPE_SHARED, \OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE, \OCA\Files_Sharing\Activity::TYPE_PUBLIC_LINKS)),
- );
- }
-
-}
diff --git a/apps/systemtags/appinfo/app.php b/apps/systemtags/appinfo/app.php
index e3be0d7556e..2c095753ce8 100644
--- a/apps/systemtags/appinfo/app.php
+++ b/apps/systemtags/appinfo/app.php
@@ -21,8 +21,6 @@
*
*/
-use OCA\SystemTags\Activity\Extension;
-use OCA\SystemTags\Activity\Listener;
use OCP\SystemTag\ManagerEvent;
use OCP\SystemTag\MapperEvent;
@@ -46,15 +44,7 @@ $eventDispatcher->addListener(
}
);
-$activityManager = \OC::$server->getActivityManager();
-$activityManager->registerExtension(function() {
- $application = new \OCP\AppFramework\App('systemtags');
- /** @var \OCA\SystemTags\Activity\Extension $extension */
- $extension = $application->getContainer()->query('OCA\SystemTags\Activity\Extension');
- return $extension;
-});
-
-$managerListener = function(ManagerEvent $event) use ($activityManager) {
+$managerListener = function(ManagerEvent $event) {
$application = new \OCP\AppFramework\App('systemtags');
/** @var \OCA\SystemTags\Activity\Listener $listener */
$listener = $application->getContainer()->query('OCA\SystemTags\Activity\Listener');
@@ -65,7 +55,7 @@ $eventDispatcher->addListener(ManagerEvent::EVENT_CREATE, $managerListener);
$eventDispatcher->addListener(ManagerEvent::EVENT_DELETE, $managerListener);
$eventDispatcher->addListener(ManagerEvent::EVENT_UPDATE, $managerListener);
-$mapperListener = function(MapperEvent $event) use ($activityManager) {
+$mapperListener = function(MapperEvent $event) {
$application = new \OCP\AppFramework\App('systemtags');
/** @var \OCA\SystemTags\Activity\Listener $listener */
$listener = $application->getContainer()->query('OCA\SystemTags\Activity\Listener');
diff --git a/apps/systemtags/appinfo/info.xml b/apps/systemtags/appinfo/info.xml
index 3ed01d3d8c0..1d5f33207a4 100644
--- a/apps/systemtags/appinfo/info.xml
+++ b/apps/systemtags/appinfo/info.xml
@@ -18,4 +18,14 @@
<settings>
<admin>OCA\SystemTags\Settings\Admin</admin>
</settings>
+
+ <activity>
+ <settings>
+ <setting>OCA\SystemTags\Activity\Setting</setting>
+ </settings>
+
+ <providers>
+ <provider>OCA\SystemTags\Activity\Provider</provider>
+ </providers>
+ </activity>
</info>
diff --git a/apps/systemtags/css/systemtagsfilelist.css b/apps/systemtags/css/systemtagsfilelist.css
index 2da8cd40012..6318d43687e 100644
--- a/apps/systemtags/css/systemtagsfilelist.css
+++ b/apps/systemtags/css/systemtagsfilelist.css
@@ -9,6 +9,7 @@
*/
#app-content-systemtagsfilter .select2-container {
width: 30%;
+ margin-left: 10px;
}
#app-content-systemtagsfilter .select2-choices {
@@ -19,7 +20,6 @@
box-sizing: content-box;
border-radius: 3px;
border: 1px solid #ddd;
- margin: 3px 3px 3px 0;
padding: 0;
min-height: auto;
}
diff --git a/apps/systemtags/lib/Activity/Extension.php b/apps/systemtags/lib/Activity/Extension.php
deleted file mode 100644
index 8937d916209..00000000000
--- a/apps/systemtags/lib/Activity/Extension.php
+++ /dev/null
@@ -1,337 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Joas Schilling <coding@schilljs.com>
- * @author Vincent Petry <pvince81@owncloud.com>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-namespace OCA\SystemTags\Activity;
-
-use OCP\Activity\IExtension;
-use OCP\Activity\IManager;
-use OCP\IL10N;
-use OCP\L10N\IFactory;
-
-/**
- * Class Extension
- *
- * @package OCA\SystemTags\Activity
- */
-class Extension implements IExtension {
- const APP_NAME = 'systemtags';
-
- const CREATE_TAG = 'create_tag';
- const UPDATE_TAG = 'update_tag';
- const DELETE_TAG = 'delete_tag';
-
- const ASSIGN_TAG = 'assign_tag';
- const UNASSIGN_TAG = 'unassign_tag';
-
- /** @var IFactory */
- protected $languageFactory;
-
- /** @var IManager */
- protected $activityManager;
-
- /**
- * @param IFactory $languageFactory
- * @param IManager $activityManager
- */
- public function __construct(IFactory $languageFactory, IManager $activityManager) {
- $this->languageFactory = $languageFactory;
- $this->activityManager = $activityManager;
- }
-
- protected function getL10N($languageCode = null) {
- return $this->languageFactory->get(self::APP_NAME, $languageCode);
- }
-
- /**
- * The extension can return an array of additional notification types.
- * If no additional types are to be added false is to be returned
- *
- * @param string $languageCode
- * @return array|false
- */
- public function getNotificationTypes($languageCode) {
- $l = $this->getL10N($languageCode);
-
- return array(
- self::APP_NAME => (string) $l->t('<strong>System tags</strong> for a file have been modified'),
- );
- }
-
- /**
- * For a given method additional types to be displayed in the settings can be returned.
- * In case no additional types are to be added false is to be returned.
- *
- * @param string $method
- * @return array|false
- */
- public function getDefaultTypes($method) {
- return $method === self::METHOD_STREAM ? [self::APP_NAME] : false;
- }
-
- /**
- * A string naming the css class for the icon to be used can be returned.
- * If no icon is known for the given type false is to be returned.
- *
- * @param string $type
- * @return string|false
- */
- public function getTypeIcon($type) {
- switch ($type) {
- case self::APP_NAME:
- return 'icon-tag';
- }
-
- return false;
- }
-
- /**
- * The extension can translate a given message to the requested languages.
- * If no translation is available false is to be returned.
- *
- * @param string $app
- * @param string $text
- * @param array $params
- * @param boolean $stripPath
- * @param boolean $highlightParams
- * @param string $languageCode
- * @return string|false
- */
- public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode) {
- if ($app !== self::APP_NAME) {
- return false;
- }
-
- $l = $this->getL10N($languageCode);
-
- if ($this->activityManager->isFormattingFilteredObject()) {
- $translation = $this->translateShort($text, $l, $params);
- if ($translation !== false) {
- return $translation;
- }
- }
-
- return $this->translateLong($text, $l, $params);
- }
-
- /**
- * @param string $text
- * @param IL10N $l
- * @param array $params
- * @return bool|string
- */
- protected function translateShort($text, IL10N $l, array $params) {
-
- switch ($text) {
- case self::ASSIGN_TAG:
- $params[2] = $this->convertParameterToTag($params[2], $l);
- if ($this->actorIsCurrentUser($params[0])) {
- return (string) $l->t('You added system tag %3$s', $params);
- }
- return (string) $l->t('%1$s added system tag %3$s', $params);
- case self::UNASSIGN_TAG:
- $params[2] = $this->convertParameterToTag($params[2], $l);
- if ($this->actorIsCurrentUser($params[0])) {
- return (string) $l->t('You removed system tag %3$s', $params);
- }
- return (string) $l->t('%1$s removed system tag %3$s', $params);
- }
-
- return false;
- }
-
- /**
- * @param string $text
- * @param IL10N $l
- * @param array $params
- * @return bool|string
- */
- protected function translateLong($text, IL10N $l, array $params) {
-
- switch ($text) {
- case self::CREATE_TAG:
- $params[1] = $this->convertParameterToTag($params[1], $l);
- if ($this->actorIsCurrentUser($params[0])) {
- return (string) $l->t('You created system tag %2$s', $params);
- }
- return (string) $l->t('%1$s created system tag %2$s', $params);
- case self::DELETE_TAG:
- $params[1] = $this->convertParameterToTag($params[1], $l);
- if ($this->actorIsCurrentUser($params[0])) {
- return (string) $l->t('You deleted system tag %2$s', $params);
- }
- return (string) $l->t('%1$s deleted system tag %2$s', $params);
- case self::UPDATE_TAG:
- $params[1] = $this->convertParameterToTag($params[1], $l);
- $params[2] = $this->convertParameterToTag($params[2], $l);
- if ($this->actorIsCurrentUser($params[0])) {
- return (string) $l->t('You updated system tag %3$s to %2$s', $params);
- }
- return (string) $l->t('%1$s updated system tag %3$s to %2$s', $params);
- case self::ASSIGN_TAG:
- $params[2] = $this->convertParameterToTag($params[2], $l);
- if ($this->actorIsCurrentUser($params[0])) {
- return (string) $l->t('You added system tag %3$s to %2$s', $params);
- }
- return (string) $l->t('%1$s added system tag %3$s to %2$s', $params);
- case self::UNASSIGN_TAG:
- $params[2] = $this->convertParameterToTag($params[2], $l);
- if ($this->actorIsCurrentUser($params[0])) {
- return (string) $l->t('You removed system tag %3$s from %2$s', $params);
- }
- return (string) $l->t('%1$s removed system tag %3$s from %2$s', $params);
- }
-
- return false;
- }
-
- /**
- * Check if the author is the current user
- *
- * @param string $user Parameter e.g. `<user display-name="admin">admin</user>`
- * @return bool
- */
- protected function actorIsCurrentUser($user) {
- try {
- return strip_tags($user) === $this->activityManager->getCurrentUserId();
- } catch (\UnexpectedValueException $e) {
- return false;
- }
- }
-
- /**
- * The extension can define the type of parameters for translation
- *
- * Currently known types are:
- * * file => will strip away the path of the file and add a tooltip with it
- * * username => will add the avatar of the user
- *
- * @param string $app
- * @param string $text
- * @return array|false
- */
- public function getSpecialParameterList($app, $text) {
- if ($app === self::APP_NAME) {
- switch ($text) {
- case self::CREATE_TAG:
- case self::DELETE_TAG:
- return array(
- 0 => 'username',
- //1 => 'systemtag description',
- );
- case self::UPDATE_TAG:
- return array(
- 0 => 'username',
- //1 => 'systemtag description',
- //2 => 'systemtag description',
- );
-
- case self::ASSIGN_TAG:
- case self::UNASSIGN_TAG:
- return array(
- 0 => 'username',
- 1 => 'file',
- //2 => 'systemtag description',
- );
- }
- }
-
- return false;
- }
-
- /**
- * The extension can define the parameter grouping by returning the index as integer.
- * In case no grouping is required false is to be returned.
- *
- * @param array $activity
- * @return integer|false
- */
- public function getGroupParameter($activity) {
- return false;
- }
-
- /**
- * The extension can define additional navigation entries. The array returned has to contain two keys 'top'
- * and 'apps' which hold arrays with the relevant entries.
- * If no further entries are to be added false is no be returned.
- *
- * @return array|false
- */
- public function getNavigation() {
- return false;
- }
-
- /**
- * The extension can check if a custom filter (given by a query string like filter=abc) is valid or not.
- *
- * @param string $filterValue
- * @return boolean
- */
- public function isFilterValid($filterValue) {
- return false;
- }
-
- /**
- * The extension can filter the types based on the filter if required.
- * In case no filter is to be applied false is to be returned unchanged.
- *
- * @param array $types
- * @param string $filter
- * @return array|false
- */
- public function filterNotificationTypes($types, $filter) {
- return false;
- }
-
- /**
- * For a given filter the extension can specify the sql query conditions including parameters for that query.
- * In case the extension does not know the filter false is to be returned.
- * The query condition and the parameters are to be returned as array with two elements.
- * E.g. return array('`app` = ? and `message` like ?', array('mail', 'ownCloud%'));
- *
- * @param string $filter
- * @return array|false
- */
- public function getQueryForFilter($filter) {
- return false;
- }
-
- /**
- * @param string $parameter
- * @param IL10N $l
- * @return string
- */
- protected function convertParameterToTag($parameter, IL10N $l) {
- if (preg_match('/^\<parameter\>\{\{\{(.*)\|\|\|(.*)\}\}\}\<\/parameter\>$/', $parameter, $matches)) {
- switch ($matches[2]) {
- case 'assignable':
- return '<parameter>' . $matches[1] . '</parameter>';
- case 'not-assignable':
- return '<parameter>' . $l->t('%s (restricted)', $matches[1]) . '</parameter>';
- case 'invisible':
- return '<parameter>' . $l->t('%s (invisible)', $matches[1]) . '</parameter>';
- }
- }
-
- return $parameter;
- }
-}
diff --git a/apps/systemtags/lib/Activity/Listener.php b/apps/systemtags/lib/Activity/Listener.php
index 69ba888c4fb..dbddf3c38bc 100644
--- a/apps/systemtags/lib/Activity/Listener.php
+++ b/apps/systemtags/lib/Activity/Listener.php
@@ -92,24 +92,26 @@ class Listener {
} else {
$actor = '';
}
+ $tag = $event->getTag();
$activity = $this->activityManager->generateEvent();
- $activity->setApp(Extension::APP_NAME)
- ->setType(Extension::APP_NAME)
- ->setAuthor($actor);
+ $activity->setApp('systemtags')
+ ->setType('systemtags')
+ ->setAuthor($actor)
+ ->setObject('systemtag', $tag->getId(), $tag->getName());
if ($event->getEvent() === ManagerEvent::EVENT_CREATE) {
- $activity->setSubject(Extension::CREATE_TAG, [
+ $activity->setSubject(Provider::CREATE_TAG, [
$actor,
$this->prepareTagAsParameter($event->getTag()),
]);
} else if ($event->getEvent() === ManagerEvent::EVENT_UPDATE) {
- $activity->setSubject(Extension::UPDATE_TAG, [
+ $activity->setSubject(Provider::UPDATE_TAG, [
$actor,
$this->prepareTagAsParameter($event->getTag()),
$this->prepareTagAsParameter($event->getTagBefore()),
]);
} else if ($event->getEvent() === ManagerEvent::EVENT_DELETE) {
- $activity->setSubject(Extension::DELETE_TAG, [
+ $activity->setSubject(Provider::DELETE_TAG, [
$actor,
$this->prepareTagAsParameter($event->getTag()),
]);
@@ -181,10 +183,10 @@ class Listener {
}
$activity = $this->activityManager->generateEvent();
- $activity->setApp(Extension::APP_NAME)
- ->setType(Extension::APP_NAME)
+ $activity->setApp('systemtags')
+ ->setType('systemtags')
->setAuthor($actor)
- ->setObject($event->getObjectType(), $event->getObjectId());
+ ->setObject($event->getObjectType(), (int) $event->getObjectId());
foreach ($users as $user => $path) {
$activity->setAffectedUser($user);
@@ -195,13 +197,13 @@ class Listener {
continue;
}
if ($event->getEvent() === MapperEvent::EVENT_ASSIGN) {
- $activity->setSubject(Extension::ASSIGN_TAG, [
+ $activity->setSubject(Provider::ASSIGN_TAG, [
$actor,
$path,
$this->prepareTagAsParameter($tag),
]);
} else if ($event->getEvent() === MapperEvent::EVENT_UNASSIGN) {
- $activity->setSubject(Extension::UNASSIGN_TAG, [
+ $activity->setSubject(Provider::UNASSIGN_TAG, [
$actor,
$path,
$this->prepareTagAsParameter($tag),
@@ -218,12 +220,11 @@ class Listener {
* @return string
*/
protected function prepareTagAsParameter(ISystemTag $tag) {
- if (!$tag->isUserVisible()) {
- return '{{{' . $tag->getName() . '|||invisible}}}';
- } else if (!$tag->isUserAssignable()) {
- return '{{{' . $tag->getName() . '|||not-assignable}}}';
- } else {
- return '{{{' . $tag->getName() . '|||assignable}}}';
- }
+ return json_encode([
+ 'id' => $tag->getId(),
+ 'name' => $tag->getName(),
+ 'assignable' => $tag->isUserAssignable(),
+ 'visible' => $tag->isUserVisible(),
+ ]);
}
}
diff --git a/apps/systemtags/lib/Activity/Provider.php b/apps/systemtags/lib/Activity/Provider.php
new file mode 100644
index 00000000000..37ede8c3b8f
--- /dev/null
+++ b/apps/systemtags/lib/Activity/Provider.php
@@ -0,0 +1,325 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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\SystemTags\Activity;
+
+use OCP\Activity\IEvent;
+use OCP\Activity\IManager;
+use OCP\Activity\IProvider;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserManager;
+
+class Provider implements IProvider {
+
+ const CREATE_TAG = 'create_tag';
+ const UPDATE_TAG = 'update_tag';
+ const DELETE_TAG = 'delete_tag';
+
+ const ASSIGN_TAG = 'assign_tag';
+ const UNASSIGN_TAG = 'unassign_tag';
+
+ /** @var IL10N */
+ protected $l;
+
+ /** @var IURLGenerator */
+ protected $url;
+
+ /** @var IManager */
+ protected $activityManager;
+
+ /** @var IUserManager */
+ protected $userManager;
+
+ /** @var string[] */
+ protected $displayNames = [];
+
+ /**
+ * @param IL10N $l
+ * @param IURLGenerator $url
+ * @param IManager $activityManager
+ * @param IUserManager $userManager
+ */
+ public function __construct(IL10N $l, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) {
+ $this->l = $l;
+ $this->url = $url;
+ $this->activityManager = $activityManager;
+ $this->userManager = $userManager;
+ }
+
+ /**
+ * @param IEvent $event
+ * @param IEvent|null $previousEvent
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parse(IEvent $event, IEvent $previousEvent = null) {
+ if ($event->getApp() !== 'systemtags') {
+ throw new \InvalidArgumentException();
+ }
+
+ if ($this->activityManager->isFormattingFilteredObject()) {
+ try {
+ return $this->parseShortVersion($event);
+ } catch (\InvalidArgumentException $e) {
+ // Ignore and simply use the long version...
+ }
+ }
+
+ return $this->parseLongVersion($event);
+ }
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parseShortVersion(IEvent $event) {
+ $parsedParameters = $this->getParameters($event);
+ $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/tag.svg')));
+
+ if ($event->getSubject() === self::ASSIGN_TAG) {
+ if ($parsedParameters['actor']['id'] === $this->activityManager->getCurrentUserId()) {
+ $event->setParsedSubject($this->l->t('Added system tag %1$s', [
+ $this->generatePlainSystemTag($parsedParameters['systemtag']),
+ ]))
+ ->setRichSubject($this->l->t('Added system tag {systemtag}'), [
+ 'systemtag' => $parsedParameters['systemtag'],
+ ]);
+ } else {
+ $event->setParsedSubject($this->l->t('%1$s added system tag %2$s', [
+ $parsedParameters['actor']['name'],
+ $this->generatePlainSystemTag($parsedParameters['systemtag']),
+ ]))
+ ->setRichSubject($this->l->t('{actor} added system tag {systemtag}'), [
+ 'actor' => $parsedParameters['actor'],
+ 'systemtag' => $parsedParameters['systemtag'],
+ ]);
+ }
+ } else if ($event->getSubject() === self::UNASSIGN_TAG) {
+ if ($parsedParameters['actor']['id'] === $this->activityManager->getCurrentUserId()) {
+ $event->setParsedSubject($this->l->t('Removed system tag %1$s', [
+ $this->generatePlainSystemTag($parsedParameters['systemtag']),
+ ]))
+ ->setRichSubject($this->l->t('Removed system tag {systemtag}'), [
+ 'systemtag' => $parsedParameters['systemtag'],
+ ]);
+ } else {
+ $event->setParsedSubject($this->l->t('%1$s removed system tag %2$s', [
+ $parsedParameters['actor']['name'],
+ $this->generatePlainSystemTag($parsedParameters['systemtag']),
+ ]))
+ ->setRichSubject($this->l->t('{actor} removed system tag {systemtag}'), [
+ 'actor' => $parsedParameters['actor'],
+ 'systemtag' => $parsedParameters['systemtag'],
+ ]);
+ }
+ } else {
+ throw new \InvalidArgumentException();
+ }
+
+ return $event;
+ }
+
+ /**
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parseLongVersion(IEvent $event) {
+ $parsedParameters = $this->getParameters($event);
+ $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/tag.svg')));
+
+ if ($event->getSubject() === self::CREATE_TAG) {
+ if ($parsedParameters['actor']['id'] === $this->activityManager->getCurrentUserId()) {
+ $event->setParsedSubject($this->l->t('You created system tag %1$s', [
+ $this->generatePlainSystemTag($parsedParameters['systemtag']),
+ ]))
+ ->setRichSubject($this->l->t('You created system tag {systemtag}'), $parsedParameters);
+ } else {
+ $event->setParsedSubject($this->l->t('%1$s created system tag %2$s', [
+ $parsedParameters['actor']['name'],
+ $this->generatePlainSystemTag($parsedParameters['systemtag']),
+ ]))
+ ->setRichSubject($this->l->t('{actor} created system tag {systemtag}'), $parsedParameters);
+ }
+ } else if ($event->getSubject() === self::DELETE_TAG) {
+ if ($parsedParameters['actor']['id'] === $this->activityManager->getCurrentUserId()) {
+ $event->setParsedSubject($this->l->t('You deleted system tag %1$s', [
+ $this->generatePlainSystemTag($parsedParameters['systemtag']),
+ ]))
+ ->setRichSubject($this->l->t('You deleted system tag {systemtag}'), $parsedParameters);
+ } else {
+ $event->setParsedSubject($this->l->t('%1$s deleted system tag %2$s', [
+ $parsedParameters['actor']['name'],
+ $this->generatePlainSystemTag($parsedParameters['systemtag']),
+ ]))
+ ->setRichSubject($this->l->t('{actor} deleted system tag {systemtag}'), $parsedParameters);
+ }
+ } else if ($event->getSubject() === self::UPDATE_TAG) {
+ if ($parsedParameters['actor']['id'] === $this->activityManager->getCurrentUserId()) {
+ $event->setParsedSubject($this->l->t('You updated system tag %2$s to %1$s', [
+ $this->generatePlainSystemTag($parsedParameters['newsystemtag']),
+ $this->generatePlainSystemTag($parsedParameters['oldsystemtag']),
+ ]))
+ ->setRichSubject($this->l->t('You updated system tag {oldsystemtag} to {newsystemtag}'), $parsedParameters);
+ } else {
+ $event->setParsedSubject($this->l->t('%1$s updated system tag %3$s to %2$s', [
+ $parsedParameters['actor']['name'],
+ $this->generatePlainSystemTag($parsedParameters['newsystemtag']),
+ $this->generatePlainSystemTag($parsedParameters['oldsystemtag']),
+ ]))
+ ->setRichSubject($this->l->t('{actor} updated system tag {oldsystemtag} to {newsystemtag}'), $parsedParameters);
+ }
+ } else if ($event->getSubject() === self::ASSIGN_TAG) {
+ if ($parsedParameters['actor']['id'] === $this->activityManager->getCurrentUserId()) {
+ $event->setParsedSubject($this->l->t('You added system tag %2$s to %1$s', [
+ $parsedParameters['file']['path'],
+ $this->generatePlainSystemTag($parsedParameters['systemtag']),
+ ]))
+ ->setRichSubject($this->l->t('You added system tag {systemtag} to {file}'), $parsedParameters);
+ } else {
+ $event->setParsedSubject($this->l->t('%1$s added system tag %3$s to %2$s', [
+ $parsedParameters['actor']['name'],
+ $parsedParameters['file']['path'],
+ $this->generatePlainSystemTag($parsedParameters['systemtag']),
+ ]))
+ ->setRichSubject($this->l->t('{actor} added system tag {systemtag} to {file}'), $parsedParameters);
+ }
+ } else if ($event->getSubject() === self::UNASSIGN_TAG) {
+ if ($parsedParameters['actor']['id'] === $this->activityManager->getCurrentUserId()) {
+ $event->setParsedSubject($this->l->t('You removed system tag %2$s from %1$s', [
+ $parsedParameters['file']['path'],
+ $this->generatePlainSystemTag($parsedParameters['systemtag']),
+ ]))
+ ->setRichSubject($this->l->t('You removed system tag {systemtag} from {file}'), $parsedParameters);
+ } else {
+ $event->setParsedSubject($this->l->t('%1$s removed system tag %3$s from %2$s', [
+ $parsedParameters['actor']['name'],
+ $parsedParameters['file']['path'],
+ $this->generatePlainSystemTag($parsedParameters['systemtag']),
+ ]))
+ ->setRichSubject($this->l->t('{actor} removed system tag {systemtag} from {file}'), $parsedParameters);
+ }
+ } else {
+ throw new \InvalidArgumentException();
+ }
+
+ return $event;
+ }
+
+ protected function getParameters(IEvent $event) {
+ $subject = $event->getSubject();
+ $parameters = $event->getSubjectParameters();
+
+ switch ($subject) {
+ case self::CREATE_TAG:
+ case self::DELETE_TAG:
+ return [
+ 'actor' => $this->getUserParameter($parameters[0]),
+ 'systemtag' => $this->getSystemTagParameter($parameters[1]),
+ ];
+ case self::UPDATE_TAG:
+ return [
+ 'actor' => $this->getUserParameter($parameters[0]),
+ 'newsystemtag' => $this->getSystemTagParameter($parameters[1]),
+ 'oldsystemtag' => $this->getSystemTagParameter($parameters[2]),
+ ];
+ case self::ASSIGN_TAG:
+ case self::UNASSIGN_TAG:
+ return [
+ 'actor' => $this->getUserParameter($parameters[0]),
+ 'file' => $this->getFileParameter($event->getObjectId(), $parameters[1]),
+ 'systemtag' => $this->getSystemTagParameter($parameters[2]),
+ ];
+ }
+ return [];
+ }
+
+ protected function getFileParameter($id, $path) {
+ return [
+ 'type' => 'file',
+ 'id' => $id,
+ 'name' => basename($path),
+ 'path' => trim($path, '/'),
+ ];
+ }
+
+ protected function getSystemTagParameter($parameter) {
+ $tagData = json_decode($parameter, true);
+ if ($tagData === null) {
+ list($name, $status) = explode('|||', substr($parameter, 3, -3));
+ $tagData = [
+ 'id' => 0,// No way to recover the ID
+ 'name' => $name,
+ 'assignable' => $status === 'assignable',
+ 'visible' => $status !== 'invisible',
+ ];
+ }
+
+ return [
+ 'type' => 'systemtag',
+ 'id' => (int) $tagData['id'],
+ 'name' => $tagData['name'],
+ 'assignable' => $tagData['assignable'] ? '1' : '0',
+ 'visibility' => $tagData['visible'] ? '1' : '0',
+ ];
+ }
+
+ protected function getUserParameter($uid) {
+ if (!isset($this->displayNames[$uid])) {
+ $this->displayNames[$uid] = $this->getDisplayName($uid);
+ }
+
+ return [
+ 'type' => 'user',
+ 'id' => $uid,
+ 'name' => $this->displayNames[$uid],
+ ];
+ }
+
+ protected function generatePlainSystemTag(array $parameter) {
+ if ($parameter['assignable'] === '1') {
+ return $parameter['name'];
+ } else if ($parameter['visibility'] === '1') {
+ return $this->l->t('%s (restricted)', $parameter['name']);
+ } else {
+ return $this->l->t('%s (invisible)', $parameter['name']);
+ }
+ }
+
+ /**
+ * @param string $uid
+ * @return string
+ */
+ protected function getDisplayName($uid) {
+ $user = $this->userManager->get($uid);
+ if ($user instanceof IUser) {
+ return $user->getDisplayName();
+ } else {
+ return $uid;
+ }
+ }
+}
diff --git a/apps/systemtags/lib/Activity/Setting.php b/apps/systemtags/lib/Activity/Setting.php
new file mode 100644
index 00000000000..4cdb11b9c84
--- /dev/null
+++ b/apps/systemtags/lib/Activity/Setting.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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\SystemTags\Activity;
+
+
+use OCP\Activity\ISetting;
+use OCP\IL10N;
+
+class Setting implements ISetting {
+
+ /** @var IL10N */
+ protected $l;
+
+ /**
+ * @param IL10N $l
+ */
+ public function __construct(IL10N $l) {
+ $this->l = $l;
+ }
+
+ /**
+ * @return string Lowercase a-z and underscore only identifier
+ * @since 11.0.0
+ */
+ public function getIdentifier() {
+ return 'systemtags';
+ }
+
+ /**
+ * @return string A translated string
+ * @since 11.0.0
+ */
+ public function getName() {
+ return $this->l->t('<strong>System tags</strong> for a file have been modified');
+ }
+
+ /**
+ * @return int whether the filter should be rather on the top or bottom of
+ * the admin section. The filters are arranged in ascending order of the
+ * priority values. It is required to return a value between 0 and 100.
+ * @since 11.0.0
+ */
+ public function getPriority() {
+ return 50;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function canChangeStream() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function isDefaultEnabledStream() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the mail
+ * @since 11.0.0
+ */
+ public function canChangeMail() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function isDefaultEnabledMail() {
+ return false;
+ }
+}
+
diff --git a/apps/theming/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php
index 58e843c5d9d..73e3ed3a4b4 100644
--- a/apps/theming/lib/Controller/ThemingController.php
+++ b/apps/theming/lib/Controller/ThemingController.php
@@ -211,7 +211,9 @@ class ThemingController extends Controller {
$tmpFile = $this->tempManager->getTemporaryFile();
if(function_exists('imagescale')) {
// FIXME: Once PHP 5.5.0 is a requirement the above check can be removed
- $image = imagescale($image, 1920);
+ // Workaround for https://bugs.php.net/bug.php?id=65171
+ $newHeight = imagesy($image)/(imagesx($image)/1920);
+ $image = imagescale($image, 1920, $newHeight);
}
imageinterlace($image, 1);
imagejpeg($image, $tmpFile, 75);
diff --git a/apps/user_ldap/css/settings.css b/apps/user_ldap/css/settings.css
index c99efc48c5b..129064ff8b0 100644
--- a/apps/user_ldap/css/settings.css
+++ b/apps/user_ldap/css/settings.css
@@ -3,6 +3,11 @@
width: 85%;
}
+.inlinetable {
+ display: inline-table;
+ vertical-align: bottom;
+}
+
.tablerow {
display: table-row;
white-space: nowrap;
diff --git a/apps/user_ldap/js/wizard/wizardTabAdvanced.js b/apps/user_ldap/js/wizard/wizardTabAdvanced.js
index d1e5002d40a..d0922bbff32 100644
--- a/apps/user_ldap/js/wizard/wizardTabAdvanced.js
+++ b/apps/user_ldap/js/wizard/wizardTabAdvanced.js
@@ -95,6 +95,10 @@ OCA = OCA || {};
$element: $('#ldap_paging_size'),
setMethod: 'setPagingSize'
},
+ ldap_turn_on_pwd_change: {
+ $element: $('#ldap_turn_on_pwd_change'),
+ setMethod: 'setPasswordChangeEnabled'
+ },
//Special Attributes
ldap_quota_attr: {
@@ -288,6 +292,17 @@ OCA = OCA || {};
setPagingSize: function(size) {
this.setElementValue(this.managedItems.ldap_paging_size.$element, size);
},
+
+ /**
+ * sets whether the password changes per user should be enabled
+ *
+ * @param {string} doPasswordChange contains an int
+ */
+ setPasswordChangeEnabled: function(doPasswordChange) {
+ this.setElementValue(
+ this.managedItems.ldap_turn_on_pwd_change.$element, doPasswordChange
+ );
+ },
/**
* sets the email attribute
diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php
index e7facd80ae0..d88378c1888 100644
--- a/apps/user_ldap/lib/Access.php
+++ b/apps/user_ldap/lib/Access.php
@@ -40,6 +40,8 @@
namespace OCA\User_LDAP;
+use OC\HintException;
+use OCA\User_LDAP\Exceptions\ConstraintViolationException;
use OCA\User_LDAP\User\IUserTools;
use OCA\User_LDAP\User\Manager;
use OCA\User_LDAP\User\OfflineUser;
@@ -221,6 +223,33 @@ class Access extends LDAPUtility implements IUserTools {
\OCP\Util::writeLog('user_ldap', 'Requested attribute '.$attr.' not found for '.$dn, \OCP\Util::DEBUG);
return false;
}
+
+ /**
+ * Set password for an LDAP user identified by a DN
+ *
+ * @param string $userDN the user in question
+ * @param string $password the new password
+ * @return bool
+ * @throws HintException
+ * @throws \Exception
+ */
+ public function setPassword($userDN, $password) {
+ if(intval($this->connection->turnOnPasswordChange) !== 1) {
+ throw new \Exception('LDAP password changes are disabled.');
+ }
+ $cr = $this->connection->getConnectionResource();
+ if(!$this->ldap->isResource($cr)) {
+ //LDAP not available
+ \OCP\Util::writeLog('user_ldap', 'LDAP resource not available.', \OCP\Util::DEBUG);
+ return false;
+ }
+
+ try {
+ return $this->ldap->modReplace($cr, $userDN, $password);
+ } catch(ConstraintViolationException $e) {
+ throw new HintException('Password change rejected.', \OC::$server->getL10N('user_ldap')->t('Password change rejected. Hint: ').$e->getMessage(), $e->getCode());
+ }
+ }
/**
* checks whether the given attributes value is probably a DN
diff --git a/apps/user_ldap/lib/Configuration.php b/apps/user_ldap/lib/Configuration.php
index 80b353360c3..eb4fcd3fbe6 100644
--- a/apps/user_ldap/lib/Configuration.php
+++ b/apps/user_ldap/lib/Configuration.php
@@ -11,6 +11,7 @@
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roger Szabo <roger.szabo@web.de>
*
* @license AGPL-3.0
*
@@ -90,6 +91,7 @@ class Configuration {
'lastJpegPhotoLookup' => null,
'ldapNestedGroups' => false,
'ldapPagingSize' => null,
+ 'turnOnPasswordChange' => false,
'ldapDynamicGroupMemberURL' => null,
);
@@ -449,6 +451,7 @@ class Configuration {
'last_jpegPhoto_lookup' => 0,
'ldap_nested_groups' => 0,
'ldap_paging_size' => 500,
+ 'ldap_turn_on_pwd_change' => 0,
'ldap_experienced_admin' => 0,
'ldap_dynamic_group_member_url' => '',
);
@@ -505,6 +508,7 @@ class Configuration {
'last_jpegPhoto_lookup' => 'lastJpegPhotoLookup',
'ldap_nested_groups' => 'ldapNestedGroups',
'ldap_paging_size' => 'ldapPagingSize',
+ 'ldap_turn_on_pwd_change' => 'turnOnPasswordChange',
'ldap_experienced_admin' => 'ldapExperiencedAdmin',
'ldap_dynamic_group_member_url' => 'ldapDynamicGroupMemberURL',
);
diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php
index 6028486e8bb..d74afa42fe8 100644
--- a/apps/user_ldap/lib/Connection.php
+++ b/apps/user_ldap/lib/Connection.php
@@ -42,6 +42,7 @@ use OC\ServerNotAvailableException;
* @property string ldapUserFilter
* @property string ldapUserDisplayName
* @property string ldapUserDisplayName2
+ * @property boolean turnOnPasswordChange
* @property boolean hasPagedResultSupport
* @property string[] ldapBaseUsers
* @property int|string ldapPagingSize holds an integer
diff --git a/apps/user_ldap/lib/Exceptions/ConstraintViolationException.php b/apps/user_ldap/lib/Exceptions/ConstraintViolationException.php
new file mode 100644
index 00000000000..997b01b2d4e
--- /dev/null
+++ b/apps/user_ldap/lib/Exceptions/ConstraintViolationException.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Roger Szabo <roger.szabo@web.de>
+ *
+ * @author Roger Szabo <roger.szabo@web.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\User_LDAP\Exceptions;
+
+class ConstraintViolationException extends \Exception {}
diff --git a/apps/user_ldap/lib/ILDAPWrapper.php b/apps/user_ldap/lib/ILDAPWrapper.php
index 4fd3b31428a..e2089fa8a47 100644
--- a/apps/user_ldap/lib/ILDAPWrapper.php
+++ b/apps/user_ldap/lib/ILDAPWrapper.php
@@ -163,6 +163,15 @@ interface ILDAPWrapper {
* @return resource|false an LDAP search result resource, false on error
*/
public function search($link, $baseDN, $filter, $attr, $attrsOnly = 0, $limit = 0);
+
+ /**
+ * Replace the value of a userPassword by $password
+ * @param resource $link LDAP link resource
+ * @param string $userDN the DN of the user whose password is to be replaced
+ * @param string $password the new value for the userPassword
+ * @return bool true on success, false otherwise
+ */
+ public function modReplace($link, $userDN, $password);
/**
* Sets the value of the specified option to be $value
diff --git a/apps/user_ldap/lib/LDAP.php b/apps/user_ldap/lib/LDAP.php
index 74d83e4ab4f..cac09f25993 100644
--- a/apps/user_ldap/lib/LDAP.php
+++ b/apps/user_ldap/lib/LDAP.php
@@ -9,6 +9,7 @@
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roger Szabo <roger.szabo@web.de>
*
* @license AGPL-3.0
*
@@ -29,6 +30,7 @@
namespace OCA\User_LDAP;
use OC\ServerNotAvailableException;
+use OCA\User_LDAP\Exceptions\ConstraintViolationException;
class LDAP implements ILDAPWrapper {
protected $curFunc = '';
@@ -194,6 +196,16 @@ class LDAP implements ILDAPWrapper {
/**
* @param LDAP $link
+ * @param string $userDN
+ * @param string $password
+ * @return bool
+ */
+ public function modReplace($link, $userDN, $password) {
+ return $this->invokeLDAPMethod('mod_replace', $link, $userDN, array('userPassword' => $password));
+ }
+
+ /**
+ * @param LDAP $link
* @param string $option
* @param int $value
* @return bool|mixed
@@ -248,7 +260,7 @@ class LDAP implements ILDAPWrapper {
/**
* @return mixed
*/
- private function invokeLDAPMethod() {
+ protected function invokeLDAPMethod() {
$arguments = func_get_args();
$func = 'ldap_' . array_shift($arguments);
if(function_exists($func)) {
@@ -288,6 +300,9 @@ class LDAP implements ILDAPWrapper {
throw new \Exception('LDAP authentication method rejected', $errorCode);
} else if ($errorCode === 1) {
throw new \Exception('LDAP Operations error', $errorCode);
+ } else if ($errorCode === 19) {
+ ldap_get_option($this->curArgs[0], LDAP_OPT_ERROR_STRING, $extended_error);
+ throw new ConstraintViolationException(!empty($extended_error)?$extended_error:$errorMsg, $errorCode);
} else {
\OCP\Util::writeLog('user_ldap',
'LDAP error '.$errorMsg.' (' .
diff --git a/apps/user_ldap/lib/User_LDAP.php b/apps/user_ldap/lib/User_LDAP.php
index 9f2468bcc85..8dfde2d8148 100644
--- a/apps/user_ldap/lib/User_LDAP.php
+++ b/apps/user_ldap/lib/User_LDAP.php
@@ -35,6 +35,7 @@
namespace OCA\User_LDAP;
+use OC\User\Backend;
use OC\User\NoUserException;
use OCA\User_LDAP\Exceptions\NotOnLDAP;
use OCA\User_LDAP\User\OfflineUser;
@@ -175,6 +176,26 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
}
/**
+ * Set password
+ * @param string $uid The username
+ * @param string $password The new password
+ * @return bool
+ */
+ public function setPassword($uid, $password) {
+ $user = $this->access->userManager->get($uid);
+
+ if(!$user instanceof User) {
+ throw new \Exception('LDAP setPassword: Could not get user object for uid ' . $uid .
+ '. Maybe the LDAP entry has no set display name attribute?');
+ }
+ if($user->getUsername() !== false) {
+ return $this->access->setPassword($user->getDN(), $password);
+ }
+
+ return false;
+ }
+
+ /**
* Get a list of all users
*
* @param string $search
@@ -449,11 +470,12 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
* compared with OC_USER_BACKEND_CREATE_USER etc.
*/
public function implementsActions($actions) {
- return (bool)((\OC\User\Backend::CHECK_PASSWORD
- | \OC\User\Backend::GET_HOME
- | \OC\User\Backend::GET_DISPLAYNAME
- | \OC\User\Backend::PROVIDE_AVATAR
- | \OC\User\Backend::COUNT_USERS)
+ return (bool)((Backend::CHECK_PASSWORD
+ | Backend::GET_HOME
+ | Backend::GET_DISPLAYNAME
+ | Backend::PROVIDE_AVATAR
+ | Backend::COUNT_USERS
+ | ((intval($this->access->connection->turnOnPasswordChange) === 1)?(Backend::SET_PASSWORD):0))
& $actions);
}
diff --git a/apps/user_ldap/lib/User_Proxy.php b/apps/user_ldap/lib/User_Proxy.php
index cced469a7ae..2cdf401880e 100644
--- a/apps/user_ldap/lib/User_Proxy.php
+++ b/apps/user_ldap/lib/User_Proxy.php
@@ -262,6 +262,17 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface,
public function deleteUser($uid) {
return $this->handleRequest($uid, 'deleteUser', array($uid));
}
+
+ /**
+ * Set password
+ * @param string $uid The username
+ * @param string $password The new password
+ * @return bool
+ *
+ */
+ public function setPassword($uid, $password) {
+ return $this->handleRequest($uid, 'setPassword', array($uid, $password));
+ }
/**
* @return bool
diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php
index eb4c7b99127..e53456c703c 100644
--- a/apps/user_ldap/templates/settings.php
+++ b/apps/user_ldap/templates/settings.php
@@ -101,6 +101,8 @@ style('user_ldap', 'settings');
<p><label for="ldap_dynamic_group_member_url"><?php p($l->t('Dynamic Group Member URL'));?></label><input type="text" id="ldap_dynamic_group_member_url" name="ldap_dynamic_group_member_url" title="<?php p($l->t('The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)'));?>" data-default="<?php p($_['ldap_dynamic_group_member_url_default']); ?>" /></p>
<p><label for="ldap_nested_groups"><?php p($l->t('Nested Groups'));?></label><input type="checkbox" id="ldap_nested_groups" name="ldap_nested_groups" value="1" data-default="<?php p($_['ldap_nested_groups_default']); ?>" title="<?php p($l->t('When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)'));?>" /></p>
<p><label for="ldap_paging_size"><?php p($l->t('Paging chunksize'));?></label><input type="number" id="ldap_paging_size" name="ldap_paging_size" title="<?php p($l->t('Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)'));?>" data-default="<?php p($_['ldap_paging_size_default']); ?>" /></p>
+ <p><label for="ldap_turn_on_pwd_change"><?php p($l->t('Enable LDAP password changes per user'));?></label><span class="inlinetable"><span class="tablerow left"><input type="checkbox" id="ldap_turn_on_pwd_change" name="ldap_turn_on_pwd_change" value="1" data-default="<?php p($_['ldap_turn_on_pwd_change_default']); ?>" title="<?php p($l->t('Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server.'));?>" /><span class="tablecell"><?php p($l->t('(New password is sent as plain text to LDAP)'));?></span></span>
+ </span><br/></p>
</div>
<h3><?php p($l->t('Special Attributes'));?></h3>
<div>
diff --git a/apps/user_ldap/tests/AccessTest.php b/apps/user_ldap/tests/AccessTest.php
index d7d04e31d08..271e8eb605b 100644
--- a/apps/user_ldap/tests/AccessTest.php
+++ b/apps/user_ldap/tests/AccessTest.php
@@ -1,12 +1,14 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
*
* @author Andreas Fischer <bantu@owncloud.com>
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Lukas Reschke <lukas@statuscode.ch>
*
* @license AGPL-3.0
*
@@ -28,9 +30,11 @@ namespace OCA\User_LDAP\Tests;
use OCA\User_LDAP\Access;
use OCA\User_LDAP\Connection;
+use OCA\User_LDAP\Exceptions\ConstraintViolationException;
use OCA\User_LDAP\FilesystemHelper;
use OCA\User_LDAP\Helper;
use OCA\User_LDAP\ILDAPWrapper;
+use OCA\User_LDAP\LDAP;
use OCA\User_LDAP\LogWrapper;
use OCA\User_LDAP\User\Manager;
use OCP\IAvatarManager;
@@ -47,6 +51,31 @@ use OCP\IUserManager;
* @package OCA\User_LDAP\Tests
*/
class AccessTest extends \Test\TestCase {
+ /** @var Connection|\PHPUnit_Framework_MockObject_MockObject */
+ private $connection;
+ /** @var LDAP|\PHPUnit_Framework_MockObject_MockObject */
+ private $ldap;
+ /** @var Manager|\PHPUnit_Framework_MockObject_MockObject */
+ private $userManager;
+ /** @var Helper|\PHPUnit_Framework_MockObject_MockObject */
+ private $helper;
+ /** @var Access */
+ private $access;
+
+ public function setUp() {
+ $this->connection = $this->createMock(Connection::class);
+ $this->ldap = $this->createMock(LDAP::class);
+ $this->userManager = $this->createMock(Manager::class);
+ $this->helper = $this->createMock(Helper::class);
+
+ $this->access = new Access(
+ $this->connection,
+ $this->ldap,
+ $this->userManager,
+ $this->helper
+ );
+ }
+
private function getConnectorAndLdapMock() {
$lw = $this->createMock(ILDAPWrapper::class);
$connector = $this->getMockBuilder(Connection::class)
@@ -317,4 +346,84 @@ class AccessTest extends \Test\TestCase {
$values = $access->readAttribute('uid=whoever,dc=example,dc=org', $attribute);
$this->assertSame($values[0], strtolower($dnFromServer));
}
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage LDAP password changes are disabled
+ */
+ public function testSetPasswordWithDisabledChanges() {
+ $this->connection
+ ->method('__get')
+ ->willReturn(false);
+
+ $this->access->setPassword('CN=foo', 'MyPassword');
+ }
+
+ public function testSetPasswordWithLdapNotAvailable() {
+ $this->connection
+ ->method('__get')
+ ->willReturn(true);
+ $connection = $this->createMock(LDAP::class);
+ $this->connection
+ ->expects($this->once())
+ ->method('getConnectionResource')
+ ->willReturn($connection);
+ $this->ldap
+ ->expects($this->once())
+ ->method('isResource')
+ ->with($connection)
+ ->willReturn(false);
+
+ $this->assertFalse($this->access->setPassword('CN=foo', 'MyPassword'));
+ }
+
+ /**
+ * @expectedException \OC\HintException
+ * @expectedExceptionMessage Password change rejected.
+ */
+ public function testSetPasswordWithRejectedChange() {
+ $this->connection
+ ->method('__get')
+ ->willReturn(true);
+ $connection = $this->createMock(LDAP::class);
+ $this->connection
+ ->expects($this->once())
+ ->method('getConnectionResource')
+ ->willReturn($connection);
+ $this->ldap
+ ->expects($this->once())
+ ->method('isResource')
+ ->with($connection)
+ ->willReturn(true);
+ $this->ldap
+ ->expects($this->once())
+ ->method('modReplace')
+ ->with($connection, 'CN=foo', 'MyPassword')
+ ->willThrowException(new ConstraintViolationException());
+
+ $this->access->setPassword('CN=foo', 'MyPassword');
+ }
+
+ public function testSetPassword() {
+ $this->connection
+ ->method('__get')
+ ->willReturn(true);
+ $connection = $this->createMock(LDAP::class);
+ $this->connection
+ ->expects($this->once())
+ ->method('getConnectionResource')
+ ->willReturn($connection);
+ $this->ldap
+ ->expects($this->once())
+ ->method('isResource')
+ ->with($connection)
+ ->willReturn(true);
+ $this->ldap
+ ->expects($this->once())
+ ->method('modReplace')
+ ->with($connection, 'CN=foo', 'MyPassword')
+ ->willReturn(true);
+
+ $this->assertTrue($this->access->setPassword('CN=foo', 'MyPassword'));
+ }
}
diff --git a/apps/user_ldap/tests/LDAPTest.php b/apps/user_ldap/tests/LDAPTest.php
new file mode 100644
index 00000000000..1ac8cef12de
--- /dev/null
+++ b/apps/user_ldap/tests/LDAPTest.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @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\User_LDAP\Tests;
+
+use OCA\User_LDAP\LDAP;
+use Test\TestCase;
+
+class LDAPTest extends TestCase {
+ /** @var LDAP|\PHPUnit_Framework_MockObject_MockObject */
+ private $ldap;
+
+ public function setUp() {
+ parent::setUp();
+ $this->ldap = $this->getMockBuilder(LDAP::class)
+ ->setMethods(['invokeLDAPMethod'])
+ ->getMock();
+ }
+
+ public function testModReplace() {
+ $link = $this->createMock(LDAP::class);
+ $userDN = 'CN=user';
+ $password = 'MyPassword';
+ $this->ldap
+ ->expects($this->once())
+ ->method('invokeLDAPMethod')
+ ->with('mod_replace', $link, $userDN, array('userPassword' => $password))
+ ->willReturn(true);
+
+ $this->assertTrue($this->ldap->modReplace($link, $userDN, $password));
+ }
+}
diff --git a/apps/user_ldap/tests/User_LDAPTest.php b/apps/user_ldap/tests/User_LDAPTest.php
index 05837097929..606eff4e7a7 100644
--- a/apps/user_ldap/tests/User_LDAPTest.php
+++ b/apps/user_ldap/tests/User_LDAPTest.php
@@ -9,6 +9,7 @@
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Roger Szabo <roger.szabo@web.de>
*
* @license AGPL-3.0
*
@@ -36,8 +37,10 @@ use OCA\User_LDAP\ILDAPWrapper;
use OCA\User_LDAP\LogWrapper;
use OCA\User_LDAP\User\Manager;
use OCA\User_LDAP\User\OfflineUser;
+use OC\HintException;
use OCA\User_LDAP\User\User;
use OCA\User_LDAP\User_LDAP as UserLDAP;
+use OCA\User_LDAP\User_LDAP;
use OCP\IAvatarManager;
use OCP\IConfig;
use OCP\IDBConnection;
@@ -958,5 +961,144 @@ class User_LDAPTest extends TestCase {
// and once again to verify that caching works
$backend->loginName2UserName($loginName);
}
+
+ /**
+ * Prepares the Access mock for setPassword tests
+ * @param \OCA\User_LDAP\Access|\PHPUnit_Framework_MockObject_MockObject $access mock
+ * @return void
+ */
+ private function prepareAccessForSetPassword(&$access, $enablePasswordChange = true) {
+ $access->connection->expects($this->any())
+ ->method('__get')
+ ->will($this->returnCallback(function($name) use (&$enablePasswordChange) {
+ if($name === 'ldapLoginFilter') {
+ return '%uid';
+ }
+ if($name === 'turnOnPasswordChange') {
+ return $enablePasswordChange?1:0;
+ }
+ return null;
+ }));
+
+ $access->connection->expects($this->any())
+ ->method('getFromCache')
+ ->will($this->returnCallback(function($uid) {
+ if($uid === 'userExists'.'roland') {
+ return true;
+ }
+ return null;
+ }));
+
+ $access->expects($this->any())
+ ->method('fetchListOfUsers')
+ ->will($this->returnCallback(function($filter) {
+ if($filter === 'roland') {
+ return array(array('dn' => ['dnOfRoland,dc=test']));
+ }
+ return array();
+ }));
+
+ $access->expects($this->any())
+ ->method('fetchUsersByLoginName')
+ ->will($this->returnCallback(function($uid) {
+ if($uid === 'roland') {
+ return array(array('dn' => ['dnOfRoland,dc=test']));
+ }
+ return array();
+ }));
+
+ $access->expects($this->any())
+ ->method('dn2username')
+ ->with($this->equalTo('dnOfRoland,dc=test'))
+ ->will($this->returnValue('roland'));
+ $access->expects($this->any())
+ ->method('stringResemblesDN')
+ ->with($this->equalTo('dnOfRoland,dc=test'))
+ ->will($this->returnValue(true));
+
+ $access->expects($this->any())
+ ->method('setPassword')
+ ->will($this->returnCallback(function($uid, $password) {
+ if(strlen($password) <= 5) {
+ throw new HintException('Password fails quality checking policy', '', 19);
+ }
+ return true;
+ }));
+ }
+
+ /**
+ * @expectedException \OC\HintException
+ * @expectedExceptionMessage Password fails quality checking policy
+ */
+ public function testSetPasswordInvalid() {
+ $access = $this->getAccessMock();
+
+ $this->prepareAccessForSetPassword($access);
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class));
+ \OC_User::useBackend($backend);
+
+ $this->assertTrue(\OC_User::setPassword('roland', 'dt'));
+ }
+
+ public function testSetPasswordValid() {
+ $access = $this->getAccessMock();
+
+ $this->prepareAccessForSetPassword($access);
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class));
+ \OC_User::useBackend($backend);
+
+ $this->assertTrue(\OC_User::setPassword('roland', 'dt12234$'));
+ }
+
+ public function testSetPasswordValidDisabled() {
+ $access = $this->getAccessMock();
+
+ $this->prepareAccessForSetPassword($access, false);
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class));
+ \OC_User::useBackend($backend);
+
+ $this->assertFalse(\OC_User::setPassword('roland', 'dt12234$'));
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage LDAP setPassword: Could not get user object for uid NotExistingUser. Maybe the LDAP entry has no set display name attribute?
+ */
+ public function testSetPasswordWithInvalidUser() {
+ $access = $this->createMock(Access::class);
+ $access->userManager = $this->createMock(IUserManager::class);
+ $access->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('NotExistingUser')
+ ->willReturn(null);
+ $config = $this->createMock(IConfig::class);
+ $ldap = new User_LDAP(
+ $access,
+ $config
+ );
+ $ldap->setPassword('NotExistingUser', 'Password');
+ }
+
+ public function testSetPasswordWithUsernameFalse() {
+ $user = $this->createMock(User::class);
+ $user
+ ->expects($this->once())
+ ->method('getUsername')
+ ->willReturn(false);
+ $access = $this->createMock(Access::class);
+ $access->userManager = $this->createMock(IUserManager::class);
+ $access->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('NotExistingUser')
+ ->willReturn($user);
+ $config = $this->createMock(IConfig::class);
+ $ldap = new User_LDAP(
+ $access,
+ $config
+ );
+ $this->assertFalse($ldap->setPassword('NotExistingUser', 'Password'));
+ }
}
diff --git a/apps/user_ldap/tests/User_ProxyTest.php b/apps/user_ldap/tests/User_ProxyTest.php
new file mode 100644
index 00000000000..6d779d758e4
--- /dev/null
+++ b/apps/user_ldap/tests/User_ProxyTest.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @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\User_LDAP\Tests;
+
+use OCA\User_LDAP\ILDAPWrapper;
+use OCA\User_LDAP\User_Proxy;
+use OCP\IConfig;
+use Test\TestCase;
+
+class User_ProxyTest extends TestCase {
+ /** @var ILDAPWrapper|\PHPUnit_Framework_MockObject_MockObject */
+ private $ldapWrapper;
+ /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
+ private $config;
+ /** @var User_Proxy|\PHPUnit_Framework_MockObject_MockObject */
+ private $proxy;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->ldapWrapper = $this->createMock(ILDAPWrapper::class);
+ $this->config = $this->createMock(IConfig::class);
+ $this->proxy = $this->getMockBuilder(User_Proxy::class)
+ ->setConstructorArgs([
+ [],
+ $this->ldapWrapper,
+ $this->config,
+ ])
+ ->setMethods(['handleRequest'])
+ ->getMock();
+ }
+
+ public function testSetPassword() {
+ $this->proxy
+ ->expects($this->once())
+ ->method('handleRequest')
+ ->with('MyUid', 'setPassword', ['MyUid', 'MyPassword'])
+ ->willReturn(true);
+
+ $this->assertTrue($this->proxy->setPassword('MyUid', 'MyPassword'));
+ }
+}
diff --git a/build/integration/config/behat.yml b/build/integration/config/behat.yml
index 0c0ecef08e9..3728e5461d8 100644
--- a/build/integration/config/behat.yml
+++ b/build/integration/config/behat.yml
@@ -52,6 +52,16 @@ default:
- admin
- admin
regular_user_password: 123456
+ setup:
+ paths:
+ - %paths.base%/../setup_features
+ contexts:
+ - SetupContext:
+ baseUrl: http://localhost:8080/ocs/
+ admin:
+ - admin
+ - admin
+ regular_user_password: 123456
diff --git a/build/integration/features/bootstrap/SetupContext.php b/build/integration/features/bootstrap/SetupContext.php
new file mode 100644
index 00000000000..53ad7619d3d
--- /dev/null
+++ b/build/integration/features/bootstrap/SetupContext.php
@@ -0,0 +1,34 @@
+<?php
+/**
+
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @copyright Morris Jobke
+ *
+ * @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/>.
+ *
+ */
+use Behat\Behat\Context\Context;
+
+require __DIR__ . '/../../vendor/autoload.php';
+
+
+/**
+ * Setup context.
+ */
+class SetupContext implements Context {
+ use BasicStructure;
+}
diff --git a/build/integration/run.sh b/build/integration/run.sh
index cf42ed75e4c..145415fd079 100755
--- a/build/integration/run.sh
+++ b/build/integration/run.sh
@@ -2,6 +2,9 @@
COMPOSER=$(which composer)
+SCENARIO_TO_RUN=$1
+HIDE_OC_LOGS=$2
+
if [ -x "$COMPOSER" ]; then
echo "Using composer executable $COMPOSER"
else
@@ -9,13 +12,19 @@ else
exit 1
fi
-# Disable bruteforce protection because the integration tests do trigger them
-../../occ config:system:set auth.bruteforce.protection.enabled --value false --type bool
+INSTALLED=$(../../occ status | grep installed: | cut -d " " -f 5)
-composer install
+if [ "$INSTALLED" == "true" ]; then
+ # Disable bruteforce protection because the integration tests do trigger them
+ ../../occ config:system:set auth.bruteforce.protection.enabled --value false --type bool
+else
+ if [ "$SCENARIO_TO_RUN" != "setup_features/setup.feature" ]; then
+ echo "Nextcloud instance needs to be installed" >&2
+ exit 1
+ fi
+fi
-SCENARIO_TO_RUN=$1
-HIDE_OC_LOGS=$2
+composer install
# avoid port collision on jenkins - use $EXECUTOR_NUMBER
if [ -z "$EXECUTOR_NUMBER" ]; then
@@ -36,15 +45,17 @@ echo $PHPPID_FED
export TEST_SERVER_URL="http://localhost:$PORT/ocs/"
export TEST_SERVER_FED_URL="http://localhost:$PORT_FED/ocs/"
-#Enable external storage app
-../../occ app:enable files_external
+if [ "$INSTALLED" == "true" ]; then
+ #Enable external storage app
+ ../../occ app:enable files_external
-mkdir -p work/local_storage
-OUTPUT_CREATE_STORAGE=`../../occ files_external:create local_storage local null::null -c datadir=./build/integration/work/local_storage`
+ mkdir -p work/local_storage
+ OUTPUT_CREATE_STORAGE=`../../occ files_external:create local_storage local null::null -c datadir=./build/integration/work/local_storage`
-ID_STORAGE=`echo $OUTPUT_CREATE_STORAGE | awk {'print $5'}`
+ ID_STORAGE=`echo $OUTPUT_CREATE_STORAGE | awk {'print $5'}`
-../../occ files_external:option $ID_STORAGE enable_sharing true
+ ../../occ files_external:option $ID_STORAGE enable_sharing true
+fi
vendor/bin/behat -f junit -f pretty $SCENARIO_TO_RUN
RESULT=$?
@@ -52,10 +63,12 @@ RESULT=$?
kill $PHPPID
kill $PHPPID_FED
-../../occ files_external:delete -y $ID_STORAGE
+if [ "$INSTALLED" -eq "true" ]; then
+ ../../occ files_external:delete -y $ID_STORAGE
-#Disable external storage app
-../../occ app:disable files_external
+ #Disable external storage app
+ ../../occ app:disable files_external
+fi
if [ -z $HIDE_OC_LOGS ]; then
tail "../../data/nextcloud.log"
diff --git a/build/integration/setup_features/setup.feature b/build/integration/setup_features/setup.feature
new file mode 100644
index 00000000000..e1d9a73187e
--- /dev/null
+++ b/build/integration/setup_features/setup.feature
@@ -0,0 +1,5 @@
+Feature: setup
+
+ Scenario: setup page is shown properly
+ When requesting "/index.php" with "GET"
+ Then the HTTP status code should be "200"
diff --git a/console.php b/console.php
index c368a28cac0..fb410ee6983 100644
--- a/console.php
+++ b/console.php
@@ -85,7 +85,7 @@ try {
echo "The process control (PCNTL) extensions are required in case you want to interrupt long running commands - see http://php.net/manual/en/book.pcntl.php" . PHP_EOL;
}
- $application = new Application(\OC::$server->getConfig(), \OC::$server->getEventDispatcher(), \OC::$server->getRequest());
+ $application = new Application(\OC::$server->getConfig(), \OC::$server->getEventDispatcher(), \OC::$server->getRequest(), \OC::$server->getLogger());
$application->loadCommands(new ArgvInput(), new ConsoleOutput());
$application->run();
} catch (Exception $ex) {
diff --git a/core/css/apps.css b/core/css/apps.css
index bef5c7c4937..ba1e1265655 100644
--- a/core/css/apps.css
+++ b/core/css/apps.css
@@ -43,6 +43,10 @@
box-sizing: border-box;
}
+#app-navigation.without-app-settings {
+ padding-bottom: 0;
+}
+
#app-navigation .active.with-menu > a,
#app-navigation .with-counter > a {
padding-right: 50px;
diff --git a/core/css/inputs.css b/core/css/inputs.css
index 3d74ff38271..f2233395658 100644
--- a/core/css/inputs.css
+++ b/core/css/inputs.css
@@ -243,8 +243,8 @@ select:hover {
#select2-drop .select2-search input {
width: calc(100% - 14px);
min-height: auto;
- background: url('../img/actions/search.svg') no-repeat right center;
- background-origin: content-box;
+ background: url('../img/actions/search.svg') no-repeat right center !important;
+ background-origin: content-box !important;
}
#select2-drop .select2-results {
max-height: 250px;
@@ -252,7 +252,6 @@ select:hover {
padding: 0;
}
#select2-drop .select2-results .select2-result-label {
- padding: 12px !important;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
@@ -340,7 +339,7 @@ select:hover {
border: none;
}
.select2-container .select2-choice .select2-arrow b {
- background: url('../img/actions/triangle-s.svg') no-repeat center;
+ background: url('../img/actions/triangle-s.svg') no-repeat center !important;
opacity: .5;
}
.select2-container .select2-choice:hover .select2-arrow b,
diff --git a/core/js/apps.js b/core/js/apps.js
index 3b94aa1d87e..4daab5ce4c4 100644
--- a/core/js/apps.js
+++ b/core/js/apps.js
@@ -59,6 +59,10 @@
var registerAppsSlideToggle = function () {
var buttons = $('[data-apps-slide-toggle]');
+ if (buttons.length === 0) {
+ $('#app-navigation').addClass('without-app-settings');
+ }
+
$(document).click(function (event) {
if (dynamicSlideToggleEnabled) {
diff --git a/core/js/jquery.avatar.js b/core/js/jquery.avatar.js
index 754400acd7b..1abe70b79ea 100644
--- a/core/js/jquery.avatar.js
+++ b/core/js/jquery.avatar.js
@@ -29,7 +29,7 @@
* 3. $('.avatardiv').avatar();
* This will search the DOM for 'user' data, to use as the username. If there
* is no username available it will default to a placeholder with the value of
- * "x". The size will be determined the same way, as the second example.
+ * "?". The size will be determined the same way, as the second example.
*
* 4. $('.avatardiv').avatar('jdoe', 128, true);
* This will behave like the first example, except it will also append random
@@ -65,7 +65,7 @@
if (typeof(this.data('user')) !== 'undefined') {
user = this.data('user');
} else {
- this.imageplaceholder('x');
+ this.imageplaceholder('?');
return;
}
}
@@ -105,7 +105,7 @@
$div.imageplaceholder(user, result.data.displayname);
} else {
// User does not exist
- $div.imageplaceholder(user, 'X');
+ $div.imageplaceholder(user, '?');
$div.css('background-color', '#b9b9b9');
}
} else {
diff --git a/core/js/js.js b/core/js/js.js
index 41041a42885..714529fe5d1 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -1579,6 +1579,7 @@ OC.PasswordConfirmation = {
}
},
error: function() {
+ OC.PasswordConfirmation.requirePasswordConfirmation(self.callback);
OC.Notification.showTemporary(t('core', 'Failed to authenticate, try again'));
}
});
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index fc0734e9df4..3b5c1ae7199 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -149,6 +149,7 @@ var OCdialogs = {
modal : modal,
buttons : buttonlist
});
+ input.focus();
OCdialogs.dialogsCounter++;
});
},
diff --git a/core/js/sharedialogview.js b/core/js/sharedialogview.js
index 6377d16dd4c..f83a2675958 100644
--- a/core/js/sharedialogview.js
+++ b/core/js/sharedialogview.js
@@ -265,17 +265,11 @@
var text = item.label;
if (item.value.shareType === OC.Share.SHARE_TYPE_GROUP) {
- text = t('core', '{sharee} (group)', {
- sharee: text
- });
+ text = t('core', '{sharee} (group)', { sharee: text }, undefined, { escape: false });
} else if (item.value.shareType === OC.Share.SHARE_TYPE_REMOTE) {
- text = t('core', '{sharee} (remote)', {
- sharee: text
- });
+ text = t('core', '{sharee} (remote)', { sharee: text }, undefined, { escape: false });
} else if (item.value.shareType === OC.Share.SHARE_TYPE_EMAIL) {
- text = t('core', '{sharee} (email)', {
- sharee: text
- });
+ text = t('core', '{sharee} (email)', { sharee: text }, undefined, { escape: false });
}
var insert = $("<div class='share-autocomplete-item'/>");
var avatar = $("<div class='avatardiv'></div>").appendTo(insert);
diff --git a/core/js/tests/specs/jquery.avatarSpec.js b/core/js/tests/specs/jquery.avatarSpec.js
index f5caae10020..9bb10c41be7 100644
--- a/core/js/tests/specs/jquery.avatarSpec.js
+++ b/core/js/tests/specs/jquery.avatarSpec.js
@@ -65,7 +65,7 @@ describe('jquery.avatar tests', function() {
$div.avatar();
- expect($div.imageplaceholder).toHaveBeenCalledWith('x');
+ expect($div.imageplaceholder).toHaveBeenCalledWith('?');
});
describe('no avatar', function() {
@@ -96,7 +96,7 @@ describe('jquery.avatar tests', function() {
})
);
- expect($div.imageplaceholder).toHaveBeenCalledWith('foo', 'X');
+ expect($div.imageplaceholder).toHaveBeenCalledWith('foo', '?');
});
it('show no placeholder', function() {
diff --git a/core/templates/installation.php b/core/templates/installation.php
index f7556988634..d3f5021821d 100644
--- a/core/templates/installation.php
+++ b/core/templates/installation.php
@@ -147,8 +147,6 @@ script('core', [
<?php endif; ?>
<?php endif; ?>
- <div class="icon-loading-dark float-spinner">&nbsp;</div>
-
<?php if(!$_['dbIsSet'] OR count($_['errors']) > 0): ?>
<fieldset id="sqliteInformation" class="warning">
<legend><?php p($l->t('Performance warning'));?></legend>
@@ -158,6 +156,8 @@ script('core', [
</fieldset>
<?php endif ?>
+ <div class="icon-loading-dark float-spinner">&nbsp;</div>
+
<div class="buttons"><input type="submit" class="primary" value="<?php p($l->t( 'Finish setup' )); ?>" data-finishing="<?php p($l->t( 'Finishing …' )); ?>"></div>
<p class="info">
diff --git a/lib/base.php b/lib/base.php
index d6c6e17eff9..2f5517f4614 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -493,10 +493,18 @@ class OC {
'lax',
'strict',
];
+
+ // Append __Host to the cookie if it meets the requirements
+ $cookiePrefix = '';
+ if($cookieParams['secure'] === true && $cookieParams['path'] === '/') {
+ $cookiePrefix = '__Host-';
+ }
+
foreach($policies as $policy) {
header(
sprintf(
- 'Set-Cookie: nc_sameSiteCookie%s=true; path=%s; httponly;' . $secureCookie . 'expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=%s',
+ 'Set-Cookie: %snc_sameSiteCookie%s=true; path=%s; httponly;' . $secureCookie . 'expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=%s',
+ $cookiePrefix,
$policy,
$cookieParams['path'],
$policy
diff --git a/lib/l10n/cs_CZ.js b/lib/l10n/cs_CZ.js
index 97a57585936..9a44c0d1800 100644
--- a/lib/l10n/cs_CZ.js
+++ b/lib/l10n/cs_CZ.js
@@ -43,7 +43,6 @@ OC.L10N.register(
"Server settings" : "Nastavení serveru",
"Sharing" : "Sdílení",
"Encryption" : "Šifrování",
- "Logging" : "Logování",
"Additional settings" : "Dodatečná nastavení",
"Tips & tricks" : "Tipy a triky",
"%s enter the database username and name." : "%s zadejte uživatelské jméno a jméno databáze.",
@@ -220,6 +219,7 @@ OC.L10N.register(
"App can't be installed because it is not compatible with this version of the server" : "Aplikaci nelze nainstalovat, protože není kompatibilní s touto verzí serveru.",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikace nemůže být nainstalována, protože obsahuje značku\n<shipped>\n\ntrue\n</shipped>\n\ncož není povoleno pro nedodávané aplikace",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Aplikace nemůže být nainstalována, protože verze uvedená v info.xml nesouhlasí s verzí oznámenou z úložiště aplikací.",
+ "Logging" : "Logování",
"Recommended" : "Doporučené",
"Microsoft Windows Platform is not supported" : "Platforma Microsoft Windows není podporována",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Provozování Nextcloud Serveru na platformě Microsoft Windows není podporováno. Doporučujeme, abyste použili linuxový server ve virtuálním stroji, pokud nemáte možnost server migrovat.",
diff --git a/lib/l10n/cs_CZ.json b/lib/l10n/cs_CZ.json
index f352a8db458..861bc657d32 100644
--- a/lib/l10n/cs_CZ.json
+++ b/lib/l10n/cs_CZ.json
@@ -41,7 +41,6 @@
"Server settings" : "Nastavení serveru",
"Sharing" : "Sdílení",
"Encryption" : "Šifrování",
- "Logging" : "Logování",
"Additional settings" : "Dodatečná nastavení",
"Tips & tricks" : "Tipy a triky",
"%s enter the database username and name." : "%s zadejte uživatelské jméno a jméno databáze.",
@@ -218,6 +217,7 @@
"App can't be installed because it is not compatible with this version of the server" : "Aplikaci nelze nainstalovat, protože není kompatibilní s touto verzí serveru.",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikace nemůže být nainstalována, protože obsahuje značku\n<shipped>\n\ntrue\n</shipped>\n\ncož není povoleno pro nedodávané aplikace",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Aplikace nemůže být nainstalována, protože verze uvedená v info.xml nesouhlasí s verzí oznámenou z úložiště aplikací.",
+ "Logging" : "Logování",
"Recommended" : "Doporučené",
"Microsoft Windows Platform is not supported" : "Platforma Microsoft Windows není podporována",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Provozování Nextcloud Serveru na platformě Microsoft Windows není podporováno. Doporučujeme, abyste použili linuxový server ve virtuálním stroji, pokud nemáte možnost server migrovat.",
diff --git a/lib/l10n/de.js b/lib/l10n/de.js
index 6c0ba95dfad..89c83366136 100644
--- a/lib/l10n/de.js
+++ b/lib/l10n/de.js
@@ -44,7 +44,6 @@ OC.L10N.register(
"Server settings" : "Servereinstellungen",
"Sharing" : "Teilen",
"Encryption" : "Verschlüsselung",
- "Logging" : "Protokollierung",
"Additional settings" : "Zusätzliche Einstellungen",
"Tips & tricks" : "Tipps & Tricks",
"%s enter the database username and name." : "%s bitte gib den Datenbank Benutzernamen und den Datenbank Namen ein.",
@@ -221,6 +220,7 @@ OC.L10N.register(
"App can't be installed because it is not compatible with this version of the server" : "Die App kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die App kann nicht installiert werden, weil sie die <shipped>true</shipped>-Bezeichnung enthält, die bei Apps, die nicht zum Standardumfang gehören, nicht erlaubt ist",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Diese App kann nicht installiert werden, da die Version in info.xml nicht die gleiche Version wie die aus dem App Store ist.",
+ "Logging" : "Protokollierung",
"Recommended" : "Empfohlen",
"Microsoft Windows Platform is not supported" : "Microsoft Windows-Plattform wird nicht unterstützt",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Der Betrieb eines Nextcloud-Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehein Betracht einen Linux-Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn du keine Möglichkeit hast, den Server selbst zu migrieren.",
diff --git a/lib/l10n/de.json b/lib/l10n/de.json
index b81740cc2d2..46de315cfdf 100644
--- a/lib/l10n/de.json
+++ b/lib/l10n/de.json
@@ -42,7 +42,6 @@
"Server settings" : "Servereinstellungen",
"Sharing" : "Teilen",
"Encryption" : "Verschlüsselung",
- "Logging" : "Protokollierung",
"Additional settings" : "Zusätzliche Einstellungen",
"Tips & tricks" : "Tipps & Tricks",
"%s enter the database username and name." : "%s bitte gib den Datenbank Benutzernamen und den Datenbank Namen ein.",
@@ -219,6 +218,7 @@
"App can't be installed because it is not compatible with this version of the server" : "Die App kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die App kann nicht installiert werden, weil sie die <shipped>true</shipped>-Bezeichnung enthält, die bei Apps, die nicht zum Standardumfang gehören, nicht erlaubt ist",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Diese App kann nicht installiert werden, da die Version in info.xml nicht die gleiche Version wie die aus dem App Store ist.",
+ "Logging" : "Protokollierung",
"Recommended" : "Empfohlen",
"Microsoft Windows Platform is not supported" : "Microsoft Windows-Plattform wird nicht unterstützt",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Der Betrieb eines Nextcloud-Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehein Betracht einen Linux-Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn du keine Möglichkeit hast, den Server selbst zu migrieren.",
diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js
index c1b628a9bdf..434402a8527 100644
--- a/lib/l10n/de_DE.js
+++ b/lib/l10n/de_DE.js
@@ -44,7 +44,6 @@ OC.L10N.register(
"Server settings" : "Servereinstellungen",
"Sharing" : "Teilen",
"Encryption" : "Verschlüsselung",
- "Logging" : "Protokollierung",
"Additional settings" : "Zusätzliche Einstellungen",
"Tips & tricks" : "Tipps & Tricks",
"%s enter the database username and name." : "%s geben Sie den Datenbank-Benutzernamen und den Datenbanknamen an.",
@@ -221,6 +220,7 @@ OC.L10N.register(
"App can't be installed because it is not compatible with this version of the server" : "Die App kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die App kann nicht installiert werden, weil sie den <shipped>true</shipped>-Tag enthält, der bei Apps, die nicht zum Standardumfang gehören, nicht erlaubt ist",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Die App konnte nicht installiert werden, da die Version in der info.xml nicht die gleiche Version wie im App-Store ist.",
+ "Logging" : "Protokollierung",
"Recommended" : "Empfohlen",
"Microsoft Windows Platform is not supported" : "Microsoft Windows-Plattform wird nicht unterstützt",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Der Betrieb eines Nextcloud Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehen Sie in Betracht einen Linux Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn Sie keine Möglichkeit haben, den Server selbst zu migrieren.",
diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json
index 79581fe43a1..10bf5de7b1d 100644
--- a/lib/l10n/de_DE.json
+++ b/lib/l10n/de_DE.json
@@ -42,7 +42,6 @@
"Server settings" : "Servereinstellungen",
"Sharing" : "Teilen",
"Encryption" : "Verschlüsselung",
- "Logging" : "Protokollierung",
"Additional settings" : "Zusätzliche Einstellungen",
"Tips & tricks" : "Tipps & Tricks",
"%s enter the database username and name." : "%s geben Sie den Datenbank-Benutzernamen und den Datenbanknamen an.",
@@ -219,6 +218,7 @@
"App can't be installed because it is not compatible with this version of the server" : "Die App kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die App kann nicht installiert werden, weil sie den <shipped>true</shipped>-Tag enthält, der bei Apps, die nicht zum Standardumfang gehören, nicht erlaubt ist",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Die App konnte nicht installiert werden, da die Version in der info.xml nicht die gleiche Version wie im App-Store ist.",
+ "Logging" : "Protokollierung",
"Recommended" : "Empfohlen",
"Microsoft Windows Platform is not supported" : "Microsoft Windows-Plattform wird nicht unterstützt",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Der Betrieb eines Nextcloud Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehen Sie in Betracht einen Linux Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn Sie keine Möglichkeit haben, den Server selbst zu migrieren.",
diff --git a/lib/l10n/es.js b/lib/l10n/es.js
index 14b57caa516..7c30bcaef6c 100644
--- a/lib/l10n/es.js
+++ b/lib/l10n/es.js
@@ -42,7 +42,6 @@ OC.L10N.register(
"Server settings" : "Configuración del servidor",
"Sharing" : "Compartir",
"Encryption" : "Cifrado",
- "Logging" : "Inicio de sesión",
"Additional settings" : "Configuración adicional",
"Tips & tricks" : "Sugerencias y trucos",
"%s enter the database username and name." : "%s introduzca el nombre de usuario y la contraseña de la BBDD.",
@@ -219,6 +218,7 @@ OC.L10N.register(
"App can't be installed because it is not compatible with this version of the server" : "La aplicación no se puede instalar porque no es compatible con esta versión del servidor",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "La aplicación no se puede instalar porque contiene la etiqueta\n<shipped>\ntrue\n</shipped>\nque no está permitida para aplicaciones no distribuidas",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "La App no se puede instalar debido a que la versión de info.xml no es la misma que la versión reportada por la App Store.",
+ "Logging" : "Inicio de sesión",
"Recommended" : "Recomendado",
"Microsoft Windows Platform is not supported" : "La plataforma Microsoft Windows no está soportada",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Ejecutar el servidor Nextcloud en la plataforma MIcrosoft Windows no está soportado. Sugerimos usar un servidor Linux en una máquina virtual si no existe la opción de migrar el propio servidor.",
diff --git a/lib/l10n/es.json b/lib/l10n/es.json
index b712849303c..5445c9c757a 100644
--- a/lib/l10n/es.json
+++ b/lib/l10n/es.json
@@ -40,7 +40,6 @@
"Server settings" : "Configuración del servidor",
"Sharing" : "Compartir",
"Encryption" : "Cifrado",
- "Logging" : "Inicio de sesión",
"Additional settings" : "Configuración adicional",
"Tips & tricks" : "Sugerencias y trucos",
"%s enter the database username and name." : "%s introduzca el nombre de usuario y la contraseña de la BBDD.",
@@ -217,6 +216,7 @@
"App can't be installed because it is not compatible with this version of the server" : "La aplicación no se puede instalar porque no es compatible con esta versión del servidor",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "La aplicación no se puede instalar porque contiene la etiqueta\n<shipped>\ntrue\n</shipped>\nque no está permitida para aplicaciones no distribuidas",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "La App no se puede instalar debido a que la versión de info.xml no es la misma que la versión reportada por la App Store.",
+ "Logging" : "Inicio de sesión",
"Recommended" : "Recomendado",
"Microsoft Windows Platform is not supported" : "La plataforma Microsoft Windows no está soportada",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Ejecutar el servidor Nextcloud en la plataforma MIcrosoft Windows no está soportado. Sugerimos usar un servidor Linux en una máquina virtual si no existe la opción de migrar el propio servidor.",
diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js
index 6f6ef43cfa0..d182116c5da 100644
--- a/lib/l10n/fr.js
+++ b/lib/l10n/fr.js
@@ -44,7 +44,6 @@ OC.L10N.register(
"Server settings" : "Paramètres serveur",
"Sharing" : "Partage",
"Encryption" : "Chiffrement",
- "Logging" : "Connexion",
"Additional settings" : "Paramètres supplémentaires",
"Tips & tricks" : "Trucs et astuces",
"%s enter the database username and name." : "%s entrez le nom d'utilisateur et le nom de la base de données.",
@@ -221,6 +220,7 @@ OC.L10N.register(
"App can't be installed because it is not compatible with this version of the server" : "L'application ne peut être installée car elle n'est pas compatible avec cette version du serveur",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "L'application ne peut être installée car elle contient la balise <shipped>true</shipped> qui n'est pas autorisée pour les applications non incluses par défaut",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "L'App ne peut pas être installé car la version dans info.xml diffère de la version signalée par l' app store",
+ "Logging" : "Connexion",
"Recommended" : "Recommandée",
"Microsoft Windows Platform is not supported" : "La plate-forme Microsoft Windows n'est pas prise en charge.",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "L'exécution de Nextcloud Server sur une plateforme Microsoft Windows n'est pas supportée. Nous suggérons d'utilier un serveur Linux dans une machine virtuelle si vous n'avez pas la possibilité de migrer le serveur lui-même.",
diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json
index 2b3063f6fa5..cfabc97f539 100644
--- a/lib/l10n/fr.json
+++ b/lib/l10n/fr.json
@@ -42,7 +42,6 @@
"Server settings" : "Paramètres serveur",
"Sharing" : "Partage",
"Encryption" : "Chiffrement",
- "Logging" : "Connexion",
"Additional settings" : "Paramètres supplémentaires",
"Tips & tricks" : "Trucs et astuces",
"%s enter the database username and name." : "%s entrez le nom d'utilisateur et le nom de la base de données.",
@@ -219,6 +218,7 @@
"App can't be installed because it is not compatible with this version of the server" : "L'application ne peut être installée car elle n'est pas compatible avec cette version du serveur",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "L'application ne peut être installée car elle contient la balise <shipped>true</shipped> qui n'est pas autorisée pour les applications non incluses par défaut",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "L'App ne peut pas être installé car la version dans info.xml diffère de la version signalée par l' app store",
+ "Logging" : "Connexion",
"Recommended" : "Recommandée",
"Microsoft Windows Platform is not supported" : "La plate-forme Microsoft Windows n'est pas prise en charge.",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "L'exécution de Nextcloud Server sur une plateforme Microsoft Windows n'est pas supportée. Nous suggérons d'utilier un serveur Linux dans une machine virtuelle si vous n'avez pas la possibilité de migrer le serveur lui-même.",
diff --git a/lib/l10n/hu_HU.js b/lib/l10n/hu_HU.js
index 5e20645c303..d5b4598cf81 100644
--- a/lib/l10n/hu_HU.js
+++ b/lib/l10n/hu_HU.js
@@ -44,7 +44,6 @@ OC.L10N.register(
"Server settings" : "Szerver beállítások",
"Sharing" : "Megosztás",
"Encryption" : "Titkosítás",
- "Logging" : "Naplózás",
"Additional settings" : "További beállítások",
"Tips & tricks" : "Tippek és trükkök",
"%s enter the database username and name." : "%s add meg az adatbázis nevét és felhasználónevét",
@@ -221,6 +220,7 @@ OC.L10N.register(
"App can't be installed because it is not compatible with this version of the server" : "Az alkalmazást nem lehet telepíteni, mert nem kompatibilis ezzel a szerver verzióval",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Az alkalmazást nem lehet telepíteni, mert tartalmazza a \n<shipped>\ntrue\n</shipped>\ncímkét, ami a nem szállított alkalmazások esetén nem engedélyezett",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Az alkalmazás nem telepíthető, mert az info.xml fájlban tárolt verzió nem egyezik meg az alkalmazás boltban elérhető verzióval",
+ "Logging" : "Naplózás",
"Recommended" : "Ajánlott",
"Microsoft Windows Platform is not supported" : "Microsoft Windows platform nem támogatott",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "A Nextcloud Server Microsoft Windows platformon való futtatása nem támogatott. Ha nincs más lehetőséged a szerver migrációjára, akkor javasoljuk, hogy Linux szervert használj virtuális gépben.",
diff --git a/lib/l10n/hu_HU.json b/lib/l10n/hu_HU.json
index 39c624b2b08..02bd506bc22 100644
--- a/lib/l10n/hu_HU.json
+++ b/lib/l10n/hu_HU.json
@@ -42,7 +42,6 @@
"Server settings" : "Szerver beállítások",
"Sharing" : "Megosztás",
"Encryption" : "Titkosítás",
- "Logging" : "Naplózás",
"Additional settings" : "További beállítások",
"Tips & tricks" : "Tippek és trükkök",
"%s enter the database username and name." : "%s add meg az adatbázis nevét és felhasználónevét",
@@ -219,6 +218,7 @@
"App can't be installed because it is not compatible with this version of the server" : "Az alkalmazást nem lehet telepíteni, mert nem kompatibilis ezzel a szerver verzióval",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Az alkalmazást nem lehet telepíteni, mert tartalmazza a \n<shipped>\ntrue\n</shipped>\ncímkét, ami a nem szállított alkalmazások esetén nem engedélyezett",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Az alkalmazás nem telepíthető, mert az info.xml fájlban tárolt verzió nem egyezik meg az alkalmazás boltban elérhető verzióval",
+ "Logging" : "Naplózás",
"Recommended" : "Ajánlott",
"Microsoft Windows Platform is not supported" : "Microsoft Windows platform nem támogatott",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "A Nextcloud Server Microsoft Windows platformon való futtatása nem támogatott. Ha nincs más lehetőséged a szerver migrációjára, akkor javasoljuk, hogy Linux szervert használj virtuális gépben.",
diff --git a/lib/l10n/it.js b/lib/l10n/it.js
index 64b6606c615..af307f3c0c3 100644
--- a/lib/l10n/it.js
+++ b/lib/l10n/it.js
@@ -44,7 +44,6 @@ OC.L10N.register(
"Server settings" : "Impostazioni server",
"Sharing" : "Condivisione",
"Encryption" : "Cifratura",
- "Logging" : "Accesso",
"Additional settings" : "Impostazioni aggiuntive",
"Tips & tricks" : "Suggerimenti e trucchi",
"%s enter the database username and name." : "%s digita il nome utente e il nome del database.",
@@ -221,6 +220,7 @@ OC.L10N.register(
"App can't be installed because it is not compatible with this version of the server" : "L'applicazione non può essere installata perché non è compatibile con questa versione del server",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "L'applicazione non può essere installata poiché contiene l'etichetta <shipped>true<shipped> che è consentita per le applicazioni native",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "L'applicazione non può essere installata poiché la versione nel file info.xml non è la stessa riportata dall'app store",
+ "Logging" : "Accesso",
"Recommended" : "Consigliata",
"Microsoft Windows Platform is not supported" : "La piattaforma Microsoft Windows non è supportata",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "L'esecuzione del server Nextcloud sulla piattaforma Microsoft Windows. Ti consigliamo di utilizzare un server Linux in una macchina virtuale.",
diff --git a/lib/l10n/it.json b/lib/l10n/it.json
index 5e18b0a8aca..1cf8223f3f4 100644
--- a/lib/l10n/it.json
+++ b/lib/l10n/it.json
@@ -42,7 +42,6 @@
"Server settings" : "Impostazioni server",
"Sharing" : "Condivisione",
"Encryption" : "Cifratura",
- "Logging" : "Accesso",
"Additional settings" : "Impostazioni aggiuntive",
"Tips & tricks" : "Suggerimenti e trucchi",
"%s enter the database username and name." : "%s digita il nome utente e il nome del database.",
@@ -219,6 +218,7 @@
"App can't be installed because it is not compatible with this version of the server" : "L'applicazione non può essere installata perché non è compatibile con questa versione del server",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "L'applicazione non può essere installata poiché contiene l'etichetta <shipped>true<shipped> che è consentita per le applicazioni native",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "L'applicazione non può essere installata poiché la versione nel file info.xml non è la stessa riportata dall'app store",
+ "Logging" : "Accesso",
"Recommended" : "Consigliata",
"Microsoft Windows Platform is not supported" : "La piattaforma Microsoft Windows non è supportata",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "L'esecuzione del server Nextcloud sulla piattaforma Microsoft Windows. Ti consigliamo di utilizzare un server Linux in una macchina virtuale.",
diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js
index 124d29063c4..11d81383d6f 100644
--- a/lib/l10n/ja.js
+++ b/lib/l10n/ja.js
@@ -44,7 +44,6 @@ OC.L10N.register(
"Server settings" : "サーバー設定",
"Sharing" : "共有",
"Encryption" : "暗号化",
- "Logging" : "ロギング",
"Additional settings" : "追加設定",
"Tips & tricks" : "ヒントとコツ",
"%s enter the database username and name." : "%s データベース名とデータベースのユーザー名を入力してください。",
@@ -221,6 +220,7 @@ OC.L10N.register(
"App can't be installed because it is not compatible with this version of the server" : "アプリは、このバージョンのサーバーと互換性がないためインストールされませんでした。",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "非shippedアプリには許可されない<shipped>true</shipped>タグが含まれているためにアプリをインストールできません。",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "info.xmlのバージョンがアプリストアのバージョンと合っていないため、アプリはインストールされません",
+ "Logging" : "ロギング",
"Recommended" : "おすすめ",
"Microsoft Windows Platform is not supported" : "Microsoft Windows プラットフォームはサポートしていません。",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "マイクロソフト Windowsプラットフォーム上での Nextcloudの動作をサポートしていません。サーバー丸ごと移行する方式をとれない場合は仮想マシンで Linux を動かすことをお勧めします。",
diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json
index 1a2a1686198..c7694e53fd6 100644
--- a/lib/l10n/ja.json
+++ b/lib/l10n/ja.json
@@ -42,7 +42,6 @@
"Server settings" : "サーバー設定",
"Sharing" : "共有",
"Encryption" : "暗号化",
- "Logging" : "ロギング",
"Additional settings" : "追加設定",
"Tips & tricks" : "ヒントとコツ",
"%s enter the database username and name." : "%s データベース名とデータベースのユーザー名を入力してください。",
@@ -219,6 +218,7 @@
"App can't be installed because it is not compatible with this version of the server" : "アプリは、このバージョンのサーバーと互換性がないためインストールされませんでした。",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "非shippedアプリには許可されない<shipped>true</shipped>タグが含まれているためにアプリをインストールできません。",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "info.xmlのバージョンがアプリストアのバージョンと合っていないため、アプリはインストールされません",
+ "Logging" : "ロギング",
"Recommended" : "おすすめ",
"Microsoft Windows Platform is not supported" : "Microsoft Windows プラットフォームはサポートしていません。",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "マイクロソフト Windowsプラットフォーム上での Nextcloudの動作をサポートしていません。サーバー丸ごと移行する方式をとれない場合は仮想マシンで Linux を動かすことをお勧めします。",
diff --git a/lib/l10n/nb_NO.js b/lib/l10n/nb_NO.js
index b66d75a267e..a8c58da4e89 100644
--- a/lib/l10n/nb_NO.js
+++ b/lib/l10n/nb_NO.js
@@ -42,7 +42,6 @@ OC.L10N.register(
"Server settings" : "Tjenerinnstillinger",
"Sharing" : "Deling",
"Encryption" : "Kryptering",
- "Logging" : "Logging",
"Additional settings" : "Flere innstillinger",
"Tips & tricks" : "Tips og triks",
"%s enter the database username and name." : "%s legg inn database brukernavn og navn.",
@@ -219,6 +218,7 @@ OC.L10N.register(
"App can't be installed because it is not compatible with this version of the server" : "Appen kan ikke installere fordi den ikke er kompatibel med denne tjenerversjonen.",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "App kan ikke installeres fordi den er merket med <shipped>true</shipped> som ikke er tillatt for apper som ikke leveres med systemet",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "App kan ikke installeres fordi versjonen i info.xml ikke er den samme som versjonen som rapporteres fra app-butikken",
+ "Logging" : "Logging",
"Recommended" : "Anbefalt",
"Microsoft Windows Platform is not supported" : "Microsoft Windows-plattform støttes ikke",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Kjøring av Nextcloud tjeneren på en Microsoft Windows plattform er ikke støttet. Vi foreslår at du bruker en Linux tjener i en virtuell maskin hvis du ikke har mulighet til å migrere tjeneren selv.",
diff --git a/lib/l10n/nb_NO.json b/lib/l10n/nb_NO.json
index 45f168b8275..43351d07f07 100644
--- a/lib/l10n/nb_NO.json
+++ b/lib/l10n/nb_NO.json
@@ -40,7 +40,6 @@
"Server settings" : "Tjenerinnstillinger",
"Sharing" : "Deling",
"Encryption" : "Kryptering",
- "Logging" : "Logging",
"Additional settings" : "Flere innstillinger",
"Tips & tricks" : "Tips og triks",
"%s enter the database username and name." : "%s legg inn database brukernavn og navn.",
@@ -217,6 +216,7 @@
"App can't be installed because it is not compatible with this version of the server" : "Appen kan ikke installere fordi den ikke er kompatibel med denne tjenerversjonen.",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "App kan ikke installeres fordi den er merket med <shipped>true</shipped> som ikke er tillatt for apper som ikke leveres med systemet",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "App kan ikke installeres fordi versjonen i info.xml ikke er den samme som versjonen som rapporteres fra app-butikken",
+ "Logging" : "Logging",
"Recommended" : "Anbefalt",
"Microsoft Windows Platform is not supported" : "Microsoft Windows-plattform støttes ikke",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Kjøring av Nextcloud tjeneren på en Microsoft Windows plattform er ikke støttet. Vi foreslår at du bruker en Linux tjener i en virtuell maskin hvis du ikke har mulighet til å migrere tjeneren selv.",
diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js
index 4353a17104e..150354a1f0a 100644
--- a/lib/l10n/nl.js
+++ b/lib/l10n/nl.js
@@ -44,7 +44,6 @@ OC.L10N.register(
"Server settings" : "Serverinstellingen",
"Sharing" : "Delen",
"Encryption" : "Versleuteling",
- "Logging" : "Logging",
"Additional settings" : "Aanvullende instellingen",
"Tips & tricks" : "Tips & trucs",
"%s enter the database username and name." : "%s voer de database gebruikersnaam en naam in .",
@@ -221,6 +220,7 @@ OC.L10N.register(
"App can't be installed because it is not compatible with this version of the server" : "De app kan niet worden geïnstalleerd, omdat die niet compatible is met deze versie van de server",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "De app kan niet worden geïnstalleerd, omdat het de <shipped>true</shipped> markering bevat die niet is toegestaan voor niet gepubliceerde apps",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "De app kan niet worden geïnstalleerd, omdat de versie in info.xml niet dezelfde is als de versie zoals die in de app store staat vermeld",
+ "Logging" : "Logging",
"Recommended" : "Aanbevolen",
"Microsoft Windows Platform is not supported" : "Microsoft Windows Platform wordt niet ondersteund",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Het draaien van Nextcloud server op het Microsoft Windows platform wordt niet ondersteund. We adviseren je om een Linux server op een virtuele server te gebruiken als je geen mogelijkheid hebt om een server zelf te migreren.",
diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json
index d09a249ec06..598be59ad14 100644
--- a/lib/l10n/nl.json
+++ b/lib/l10n/nl.json
@@ -42,7 +42,6 @@
"Server settings" : "Serverinstellingen",
"Sharing" : "Delen",
"Encryption" : "Versleuteling",
- "Logging" : "Logging",
"Additional settings" : "Aanvullende instellingen",
"Tips & tricks" : "Tips & trucs",
"%s enter the database username and name." : "%s voer de database gebruikersnaam en naam in .",
@@ -219,6 +218,7 @@
"App can't be installed because it is not compatible with this version of the server" : "De app kan niet worden geïnstalleerd, omdat die niet compatible is met deze versie van de server",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "De app kan niet worden geïnstalleerd, omdat het de <shipped>true</shipped> markering bevat die niet is toegestaan voor niet gepubliceerde apps",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "De app kan niet worden geïnstalleerd, omdat de versie in info.xml niet dezelfde is als de versie zoals die in de app store staat vermeld",
+ "Logging" : "Logging",
"Recommended" : "Aanbevolen",
"Microsoft Windows Platform is not supported" : "Microsoft Windows Platform wordt niet ondersteund",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Het draaien van Nextcloud server op het Microsoft Windows platform wordt niet ondersteund. We adviseren je om een Linux server op een virtuele server te gebruiken als je geen mogelijkheid hebt om een server zelf te migreren.",
diff --git a/lib/l10n/pl.js b/lib/l10n/pl.js
index 67f241424d4..cfbfaea9199 100644
--- a/lib/l10n/pl.js
+++ b/lib/l10n/pl.js
@@ -41,7 +41,6 @@ OC.L10N.register(
"Server settings" : "Ustawienia serwera",
"Sharing" : "Udostępnianie",
"Encryption" : "Szyfrowanie",
- "Logging" : "Logowanie",
"Additional settings" : "Ustawienia dodatkowe",
"Tips & tricks" : "Porady i wskazówki",
"%s enter the database username." : "%s wpisz nazwę użytkownika do bazy",
@@ -182,6 +181,7 @@ OC.L10N.register(
"Signature could not get checked. Please contact the app developer and check your admin screen." : "Sygnatura nie mogła zostać sprawdzona. Proszę o skontaktownie się z twórcą aplikacji i sprawdzenie panelu administratora.",
"App can't be installed because of not allowed code in the App" : "Aplikacja nie może być zainstalowany ponieważ nie dopuszcza kod w aplikacji",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikacja nie może być zainstalowana ponieważ true tag nie jest <shipped>true</shipped> , co nie jest dozwolone dla aplikacji nie wysłanych",
+ "Logging" : "Logowanie",
"Recommended" : "Polecane",
"Microsoft Windows Platform is not supported" : "Platforma Microsoft Windows nie jest wspierana",
"Storage not available" : "Pamięć nie dostępna",
diff --git a/lib/l10n/pl.json b/lib/l10n/pl.json
index 89f945a8650..7511c6787e6 100644
--- a/lib/l10n/pl.json
+++ b/lib/l10n/pl.json
@@ -39,7 +39,6 @@
"Server settings" : "Ustawienia serwera",
"Sharing" : "Udostępnianie",
"Encryption" : "Szyfrowanie",
- "Logging" : "Logowanie",
"Additional settings" : "Ustawienia dodatkowe",
"Tips & tricks" : "Porady i wskazówki",
"%s enter the database username." : "%s wpisz nazwę użytkownika do bazy",
@@ -180,6 +179,7 @@
"Signature could not get checked. Please contact the app developer and check your admin screen." : "Sygnatura nie mogła zostać sprawdzona. Proszę o skontaktownie się z twórcą aplikacji i sprawdzenie panelu administratora.",
"App can't be installed because of not allowed code in the App" : "Aplikacja nie może być zainstalowany ponieważ nie dopuszcza kod w aplikacji",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikacja nie może być zainstalowana ponieważ true tag nie jest <shipped>true</shipped> , co nie jest dozwolone dla aplikacji nie wysłanych",
+ "Logging" : "Logowanie",
"Recommended" : "Polecane",
"Microsoft Windows Platform is not supported" : "Platforma Microsoft Windows nie jest wspierana",
"Storage not available" : "Pamięć nie dostępna",
diff --git a/lib/l10n/ru.js b/lib/l10n/ru.js
index 00cf3969e22..72876e799cd 100644
--- a/lib/l10n/ru.js
+++ b/lib/l10n/ru.js
@@ -43,7 +43,6 @@ OC.L10N.register(
"Server settings" : "Настройки сервера",
"Sharing" : "Общий доступ",
"Encryption" : "Шифрование",
- "Logging" : "Журнал",
"Additional settings" : "Дополнительные настройки",
"Tips & tricks" : "Советы и трюки",
"%s enter the database username and name." : "%s укажите имя пользователя и название для базы данных.",
@@ -220,6 +219,7 @@ OC.L10N.register(
"App can't be installed because it is not compatible with this version of the server" : "Приложение не может быть установлено, потому что оно несовместимо с этой версией сервера",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Приложение невозможно установить. Оно содержит параметр <shipped>true</shipped> который не допустим для приложений, не входящих в поставку.",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Приложение невозможно установить. Версия в файле info.xml не совпадает с версией заявленной в магазине приложений",
+ "Logging" : "Журнал",
"Recommended" : "Рекомендовано",
"Microsoft Windows Platform is not supported" : "Платформа Microsoft Windows не поддерживается",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Работа Nextcloud Server на платформе Microsoft Windows не поддерживается. Мы рекомендуем использовать Linux в качестве виртуальный машины, если у вас нет возможности перевести сам сервер.",
diff --git a/lib/l10n/ru.json b/lib/l10n/ru.json
index 0b43e8ae35a..c17b3ffe609 100644
--- a/lib/l10n/ru.json
+++ b/lib/l10n/ru.json
@@ -41,7 +41,6 @@
"Server settings" : "Настройки сервера",
"Sharing" : "Общий доступ",
"Encryption" : "Шифрование",
- "Logging" : "Журнал",
"Additional settings" : "Дополнительные настройки",
"Tips & tricks" : "Советы и трюки",
"%s enter the database username and name." : "%s укажите имя пользователя и название для базы данных.",
@@ -218,6 +217,7 @@
"App can't be installed because it is not compatible with this version of the server" : "Приложение не может быть установлено, потому что оно несовместимо с этой версией сервера",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Приложение невозможно установить. Оно содержит параметр <shipped>true</shipped> который не допустим для приложений, не входящих в поставку.",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Приложение невозможно установить. Версия в файле info.xml не совпадает с версией заявленной в магазине приложений",
+ "Logging" : "Журнал",
"Recommended" : "Рекомендовано",
"Microsoft Windows Platform is not supported" : "Платформа Microsoft Windows не поддерживается",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Работа Nextcloud Server на платформе Microsoft Windows не поддерживается. Мы рекомендуем использовать Linux в качестве виртуальный машины, если у вас нет возможности перевести сам сервер.",
diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js
index 5d44d1a172e..417c991337d 100644
--- a/lib/l10n/zh_TW.js
+++ b/lib/l10n/zh_TW.js
@@ -42,7 +42,6 @@ OC.L10N.register(
"Server settings" : "伺服器設定",
"Sharing" : "分享",
"Encryption" : "加密",
- "Logging" : "記錄",
"Additional settings" : "其他設定",
"Tips & tricks" : "使用祕訣",
"%s enter the database username and name." : "%s 輸入資料庫名稱及使用者名稱",
@@ -218,6 +217,7 @@ OC.L10N.register(
"App can't be installed because it is not compatible with this version of the server" : "程式無法安裝,因為伺服器版本不符。",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "無法安裝應用程式,因為它包含了 <shipped>true</shipped> 標籤,在未發行的應用程式當中這是不允許的",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "程式無法安裝,因為info.xml檔案中版本與app商店中要求不同。",
+ "Logging" : "記錄",
"Recommended" : "建議",
"Microsoft Windows Platform is not supported" : "不支援微軟Windows系統",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "微軟Windows不支援Nextcloud伺服器,如果您一定要使用,我們建議您在虛擬機中安裝Linux版本伺服器。",
diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json
index df8f6bc5de4..24f4eb07ec8 100644
--- a/lib/l10n/zh_TW.json
+++ b/lib/l10n/zh_TW.json
@@ -40,7 +40,6 @@
"Server settings" : "伺服器設定",
"Sharing" : "分享",
"Encryption" : "加密",
- "Logging" : "記錄",
"Additional settings" : "其他設定",
"Tips & tricks" : "使用祕訣",
"%s enter the database username and name." : "%s 輸入資料庫名稱及使用者名稱",
@@ -216,6 +215,7 @@
"App can't be installed because it is not compatible with this version of the server" : "程式無法安裝,因為伺服器版本不符。",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "無法安裝應用程式,因為它包含了 <shipped>true</shipped> 標籤,在未發行的應用程式當中這是不允許的",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "程式無法安裝,因為info.xml檔案中版本與app商店中要求不同。",
+ "Logging" : "記錄",
"Recommended" : "建議",
"Microsoft Windows Platform is not supported" : "不支援微軟Windows系統",
"Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "微軟Windows不支援Nextcloud伺服器,如果您一定要使用,我們建議您在虛擬機中安裝Linux版本伺服器。",
diff --git a/lib/private/Activity/Event.php b/lib/private/Activity/Event.php
index df6756940a0..a66ebd3c906 100644
--- a/lib/private/Activity/Event.php
+++ b/lib/private/Activity/Event.php
@@ -1,6 +1,7 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
* @author Joas Schilling <coding@schilljs.com>
* @author Phil Davis <phil.davis@inf.org>
diff --git a/lib/private/Activity/Manager.php b/lib/private/Activity/Manager.php
index 805124dc602..a8810a3e16b 100644
--- a/lib/private/Activity/Manager.php
+++ b/lib/private/Activity/Manager.php
@@ -1,6 +1,7 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
@@ -683,11 +684,6 @@ class Manager implements IManager {
foreach ($this->getExtensions() as $c) {
$result = $c->getNotificationTypes($languageCode);
if (is_array($result)) {
- if (class_exists('\OCA\Files_Sharing\Activity', false) && $c instanceof \OCA\Files_Sharing\Activity) {
- $sharingNotificationTypes = $result;
- continue;
- }
-
$notificationTypes = array_merge($notificationTypes, $result);
}
}
diff --git a/lib/private/AppFramework/Http/Request.php b/lib/private/AppFramework/Http/Request.php
index c7a3be163fe..62d7fc7ed30 100644
--- a/lib/private/AppFramework/Http/Request.php
+++ b/lib/private/AppFramework/Http/Request.php
@@ -498,6 +498,31 @@ class Request implements \ArrayAccess, \Countable, IRequest {
}
/**
+ * Wrapper around session_get_cookie_params
+ *
+ * @return array
+ */
+ protected function getCookieParams() {
+ return session_get_cookie_params();
+ }
+
+ /**
+ * Appends the __Host- prefix to the cookie if applicable
+ *
+ * @param string $name
+ * @return string
+ */
+ protected function getProtectedCookieName($name) {
+ $cookieParams = $this->getCookieParams();
+ $prefix = '';
+ if($cookieParams['secure'] === true && $cookieParams['path'] === '/') {
+ $prefix = '__Host-';
+ }
+
+ return $prefix.$name;
+ }
+
+ /**
* Checks if the strict cookie has been sent with the request if the request
* is including any cookies.
*
@@ -508,7 +533,9 @@ class Request implements \ArrayAccess, \Countable, IRequest {
if(!$this->cookieCheckRequired()) {
return true;
}
- if($this->getCookie('nc_sameSiteCookiestrict') === 'true'
+
+ $cookieName = $this->getProtectedCookieName('nc_sameSiteCookiestrict');
+ if($this->getCookie($cookieName) === 'true'
&& $this->passesLaxCookieCheck()) {
return true;
}
@@ -526,7 +553,9 @@ class Request implements \ArrayAccess, \Countable, IRequest {
if(!$this->cookieCheckRequired()) {
return true;
}
- if($this->getCookie('nc_sameSiteCookielax') === 'true') {
+
+ $cookieName = $this->getProtectedCookieName('nc_sameSiteCookielax');
+ if($this->getCookie($cookieName) === 'true') {
return true;
}
return false;
diff --git a/lib/private/Console/Application.php b/lib/private/Console/Application.php
index cd76b43f095..f7806ba01a7 100644
--- a/lib/private/Console/Application.php
+++ b/lib/private/Console/Application.php
@@ -31,6 +31,7 @@ use OC_App;
use OCP\AppFramework\QueryException;
use OCP\Console\ConsoleEvent;
use OCP\IConfig;
+use OCP\ILogger;
use OCP\IRequest;
use Symfony\Component\Console\Application as SymfonyApplication;
use Symfony\Component\Console\Input\InputInterface;
@@ -45,18 +46,22 @@ class Application {
private $dispatcher;
/** @var IRequest */
private $request;
+ /** @var ILogger */
+ private $logger;
/**
* @param IConfig $config
* @param EventDispatcherInterface $dispatcher
* @param IRequest $request
+ * @param ILogger $logger
*/
- public function __construct(IConfig $config, EventDispatcherInterface $dispatcher, IRequest $request) {
+ public function __construct(IConfig $config, EventDispatcherInterface $dispatcher, IRequest $request, ILogger $logger) {
$defaults = \OC::$server->getThemingDefaults();
$this->config = $config;
$this->application = new SymfonyApplication($defaults->getName(), \OC_Util::getVersionString());
$this->dispatcher = $dispatcher;
$this->request = $request;
+ $this->logger = $logger;
}
/**
@@ -110,7 +115,11 @@ class Application {
\OC_App::registerAutoloading($app, $appPath);
$file = $appPath . '/appinfo/register_command.php';
if (file_exists($file)) {
- require $file;
+ try {
+ require $file;
+ } catch (\Exception $e) {
+ $this->logger->logException($e);
+ }
}
}
}
diff --git a/lib/private/Files/Cache/Scanner.php b/lib/private/Files/Cache/Scanner.php
index 28f7be0b65a..8625e4904ca 100644
--- a/lib/private/Files/Cache/Scanner.php
+++ b/lib/private/Files/Cache/Scanner.php
@@ -131,6 +131,13 @@ class Scanner extends BasicEmitter implements IScanner {
* @throws \OCP\Lock\LockedException
*/
public function scanFile($file, $reuseExisting = 0, $parentId = -1, $cacheData = null, $lock = true) {
+ if ($file !== '') {
+ try {
+ $this->storage->verifyPath(dirname($file), basename($file));
+ } catch (\Exception $e) {
+ return null;
+ }
+ }
// only proceed if $file is not a partial file nor a blacklisted file
if (!self::isPartialFile($file) and !Filesystem::isFileBlacklisted($file)) {
@@ -167,6 +174,9 @@ class Scanner extends BasicEmitter implements IScanner {
// scan the parent if it's not in the cache (id -1) and the current file is not the root folder
if ($file and $parentId === -1) {
$parentData = $this->scanFile($parent);
+ if (!$parentData) {
+ return null;
+ }
$parentId = $parentData['fileid'];
}
if ($parent) {
diff --git a/lib/private/Files/Config/UserMountCache.php b/lib/private/Files/Config/UserMountCache.php
index e9e142d0d4b..c9a701d24b6 100644
--- a/lib/private/Files/Config/UserMountCache.php
+++ b/lib/private/Files/Config/UserMountCache.php
@@ -188,6 +188,9 @@ class UserMountCache implements IUserMountCache {
private function dbRowToMountInfo(array $row) {
$user = $this->userManager->get($row['user_id']);
+ if (is_null($user)) {
+ return null;
+ }
return new CachedMountInfo($user, (int)$row['storage_id'], (int)$row['root_id'], $row['mount_point'], $row['mount_id'], isset($row['path'])? $row['path']:'');
}
@@ -205,7 +208,7 @@ class UserMountCache implements IUserMountCache {
$rows = $query->execute()->fetchAll();
- $this->mountsForUsers[$user->getUID()] = array_map([$this, 'dbRowToMountInfo'], $rows);
+ $this->mountsForUsers[$user->getUID()] = array_filter(array_map([$this, 'dbRowToMountInfo'], $rows));
}
return $this->mountsForUsers[$user->getUID()];
}
@@ -223,7 +226,7 @@ class UserMountCache implements IUserMountCache {
$rows = $query->execute()->fetchAll();
- return array_map([$this, 'dbRowToMountInfo'], $rows);
+ return array_filter(array_map([$this, 'dbRowToMountInfo'], $rows));
}
/**
@@ -239,7 +242,7 @@ class UserMountCache implements IUserMountCache {
$rows = $query->execute()->fetchAll();
- return array_map([$this, 'dbRowToMountInfo'], $rows);
+ return array_filter(array_map([$this, 'dbRowToMountInfo'], $rows));
}
/**
diff --git a/lib/private/Files/Storage/Common.php b/lib/private/Files/Storage/Common.php
index c975791295d..5561f6a889b 100644
--- a/lib/private/Files/Storage/Common.php
+++ b/lib/private/Files/Storage/Common.php
@@ -45,8 +45,10 @@ use OC\Files\Cache\Scanner;
use OC\Files\Cache\Updater;
use OC\Files\Filesystem;
use OC\Files\Cache\Watcher;
+use OCP\Files\EmptyFileNameException;
use OCP\Files\FileNameTooLongException;
use OCP\Files\InvalidCharacterInPathException;
+use OCP\Files\InvalidDirectoryException;
use OCP\Files\InvalidPathException;
use OCP\Files\ReservedWordException;
use OCP\Files\Storage\ILockingStorage;
@@ -487,8 +489,31 @@ abstract class Common implements Storage, ILockingStorage {
/**
* @inheritdoc
+ * @throws InvalidPathException
*/
public function verifyPath($path, $fileName) {
+
+ // verify empty and dot files
+ $trimmed = trim($fileName);
+ if ($trimmed === '') {
+ throw new EmptyFileNameException();
+ }
+
+ if (\OC\Files\Filesystem::isIgnoredDir($trimmed)) {
+ throw new InvalidDirectoryException();
+ }
+
+ if (!\OC::$server->getDatabaseConnection()->supports4ByteText()) {
+ // verify database - e.g. mysql only 3-byte chars
+ if (preg_match('%(?:
+ \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
+ | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
+ | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
+)%xs', $fileName)) {
+ throw new InvalidCharacterInPathException();
+ }
+ }
+
if (isset($fileName[255])) {
throw new FileNameTooLongException();
}
diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php
index 7866f90157e..67f89180994 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -53,8 +53,10 @@ use OC\Files\Storage\Storage;
use OC\User\User;
use OCP\Constants;
use OCP\Files\Cache\ICacheEntry;
+use OCP\Files\EmptyFileNameException;
use OCP\Files\FileNameTooLongException;
use OCP\Files\InvalidCharacterInPathException;
+use OCP\Files\InvalidDirectoryException;
use OCP\Files\InvalidPathException;
use OCP\Files\Mount\IMountPoint;
use OCP\Files\NotFoundException;
@@ -1788,39 +1790,25 @@ class View {
* @throws InvalidPathException
*/
public function verifyPath($path, $fileName) {
-
- $l10n = \OC::$server->getL10N('lib');
-
- // verify empty and dot files
- $trimmed = trim($fileName);
- if ($trimmed === '') {
- throw new InvalidPathException($l10n->t('Empty filename is not allowed'));
- }
- if (\OC\Files\Filesystem::isIgnoredDir($trimmed)) {
- throw new InvalidPathException($l10n->t('Dot files are not allowed'));
- }
-
- if (!\OC::$server->getDatabaseConnection()->supports4ByteText()) {
- // verify database - e.g. mysql only 3-byte chars
- if (preg_match('%(?:
- \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
- | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
- | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
-)%xs', $fileName)) {
- throw new InvalidPathException($l10n->t('4-byte characters are not supported in file names'));
- }
- }
-
try {
/** @type \OCP\Files\Storage $storage */
list($storage, $internalPath) = $this->resolvePath($path);
$storage->verifyPath($internalPath, $fileName);
} catch (ReservedWordException $ex) {
- throw new InvalidPathException($l10n->t('File name is a reserved word'));
+ $l = \OC::$server->getL10N('lib');
+ throw new InvalidPathException($l->t('File name is a reserved word'));
} catch (InvalidCharacterInPathException $ex) {
- throw new InvalidPathException($l10n->t('File name contains at least one invalid character'));
+ $l = \OC::$server->getL10N('lib');
+ throw new InvalidPathException($l->t('File name contains at least one invalid character'));
} catch (FileNameTooLongException $ex) {
- throw new InvalidPathException($l10n->t('File name is too long'));
+ $l = \OC::$server->getL10N('lib');
+ throw new InvalidPathException($l->t('File name is too long'));
+ } catch (InvalidDirectoryException $ex) {
+ $l = \OC::$server->getL10N('lib');
+ throw new InvalidPathException($l->t('Dot files are not allowed'));
+ } catch (EmptyFileNameException $ex) {
+ $l = \OC::$server->getL10N('lib');
+ throw new InvalidPathException($l->t('Empty filename is not allowed'));
}
}
diff --git a/lib/private/Preview/GeneratorHelper.php b/lib/private/Preview/GeneratorHelper.php
index 282c46a2a5d..6535fde058b 100644
--- a/lib/private/Preview/GeneratorHelper.php
+++ b/lib/private/Preview/GeneratorHelper.php
@@ -60,7 +60,8 @@ class GeneratorHelper {
* This is required to create the old view and path
*/
private function getViewAndPath(File $file) {
- $owner = $file->getOwner()->getUID();
+ $absPath = ltrim($file->getPath(), '/');
+ $owner = explode('/', $absPath)[0];
$userFolder = $this->rootFolder->getUserFolder($owner)->getParent();
diff --git a/lib/private/legacy/defaults.php b/lib/private/legacy/defaults.php
index 6abc399bc82..036617ba5f9 100644
--- a/lib/private/legacy/defaults.php
+++ b/lib/private/legacy/defaults.php
@@ -60,7 +60,7 @@ class OC_Defaults {
$this->defaultiTunesAppId = '1125420102';
$this->defaultAndroidClientUrl = 'https://play.google.com/store/apps/details?id=com.nextcloud.client';
$this->defaultDocBaseUrl = 'https://docs.nextcloud.com';
- $this->defaultDocVersion = '10'; // used to generate doc links
+ $this->defaultDocVersion = '11'; // used to generate doc links
$this->defaultSlogan = $this->l->t('a safe home for all your data');
$this->defaultLogoClaim = '';
$this->defaultMailHeaderColor = '#0082c9'; /* header color of mail notifications */
diff --git a/lib/public/Activity/IEvent.php b/lib/public/Activity/IEvent.php
index a12ba8642a1..850af06359e 100644
--- a/lib/public/Activity/IEvent.php
+++ b/lib/public/Activity/IEvent.php
@@ -1,6 +1,7 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
* @author Joas Schilling <coding@schilljs.com>
*
diff --git a/lib/public/Activity/IFilter.php b/lib/public/Activity/IFilter.php
index e5b65a7d91f..bfe8ea9e472 100644
--- a/lib/public/Activity/IFilter.php
+++ b/lib/public/Activity/IFilter.php
@@ -1,24 +1,21 @@
<?php
/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
- * @author Joas Schilling <coding@schilljs.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @license GNU AGPL version 3 or any later version
*
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * 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
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * 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/>.
*
*/
diff --git a/lib/public/Files/EmptyFileNameException.php b/lib/public/Files/EmptyFileNameException.php
new file mode 100644
index 00000000000..22cdd5e805d
--- /dev/null
+++ b/lib/public/Files/EmptyFileNameException.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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\Files;
+
+/**
+ * Class EmptyFileNameException
+ *
+ * @package OCP\Files
+ * @since 9.2.0
+ */
+class EmptyFileNameException extends InvalidPathException {
+}
diff --git a/lib/public/Files/InvalidDirectoryException.php b/lib/public/Files/InvalidDirectoryException.php
new file mode 100644
index 00000000000..a82dc0829e2
--- /dev/null
+++ b/lib/public/Files/InvalidDirectoryException.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @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\Files;
+
+/**
+ * Class InvalidDirectoryException
+ *
+ * @package OCP\Files
+ * @since 9.2.0
+ */
+class InvalidDirectoryException extends InvalidPathException {
+}
diff --git a/settings/Application.php b/settings/Application.php
index ca2b2b91f71..d907cd666fb 100644
--- a/settings/Application.php
+++ b/settings/Application.php
@@ -34,21 +34,9 @@ use OC\App\AppStore\Fetcher\AppFetcher;
use OC\App\AppStore\Fetcher\CategoryFetcher;
use OC\AppFramework\Utility\TimeFactory;
use OC\Authentication\Token\IProvider;
-use OC\Files\View;
use OC\Server;
-use OC\Settings\Controller\AppSettingsController;
-use OC\Settings\Controller\AuthSettingsController;
-use OC\Settings\Controller\CertificateController;
-use OC\Settings\Controller\CheckSetupController;
-use OC\Settings\Controller\EncryptionController;
-use OC\Settings\Controller\GroupsController;
-use OC\Settings\Controller\LogSettingsController;
-use OC\Settings\Controller\MailSettingsController;
-use OC\Settings\Controller\SecuritySettingsController;
-use OC\Settings\Controller\UsersController;
use OC\Settings\Middleware\SubadminMiddleware;
use OCP\AppFramework\App;
-use OCP\AppFramework\IAppContainer;
use OCP\IContainer;
use OCP\Settings\IManager;
use OCP\Util;
@@ -69,129 +57,7 @@ class Application extends App {
// Register Middleware
$container->registerAlias('SubadminMiddleware', SubadminMiddleware::class);
- /**
- * Controllers
- */
- $container->registerService('MailSettingsController', function(IContainer $c) {
- return new MailSettingsController(
- $c->query('AppName'),
- $c->query('Request'),
- $c->query('L10N'),
- $c->query('Config'),
- $c->query('UserSession'),
- $c->query('Defaults'),
- $c->query('Mailer'),
- $c->query('DefaultMailAddress')
- );
- });
- $container->registerService('EncryptionController', function(IContainer $c) {
- return new EncryptionController(
- $c->query('AppName'),
- $c->query('Request'),
- $c->query('L10N'),
- $c->query('Config'),
- $c->query('DatabaseConnection'),
- $c->query('UserManager'),
- new View(),
- $c->query('Logger')
- );
- });
-
- $container->registerService('AppSettingsController', function(IContainer $c) {
- return new AppSettingsController(
- $c->query('AppName'),
- $c->query('Request'),
- $c->query('L10N'),
- $c->query('Config'),
- $c->query('INavigationManager'),
- $c->query('IAppManager'),
- $c->query('CategoryFetcher'),
- $c->query('AppFetcher'),
- \OC::$server->getL10NFactory()
- );
- });
- $container->registerService('AuthSettingsController', function(IContainer $c) {
- return new AuthSettingsController(
- $c->query('AppName'),
- $c->query('Request'),
- $c->query('ServerContainer')->query('OC\Authentication\Token\IProvider'),
- $c->query('UserManager'),
- $c->query('ServerContainer')->getSession(),
- $c->query('ServerContainer')->getSecureRandom(),
- $c->query('UserId')
- );
- });
- $container->registerService('SecuritySettingsController', function(IContainer $c) {
- return new SecuritySettingsController(
- $c->query('AppName'),
- $c->query('Request'),
- $c->query('Config')
- );
- });
- $container->registerService('AccountManager', function(IAppContainer $c) {
- return new AccountManager($c->getServer()->getDatabaseConnection());
- });
- $container->registerService('CertificateController', function(IContainer $c) {
- return new CertificateController(
- $c->query('AppName'),
- $c->query('Request'),
- $c->query('CertificateManager'),
- $c->query('SystemCertificateManager'),
- $c->query('L10N'),
- $c->query('IAppManager')
- );
- });
- $container->registerService('GroupsController', function(IContainer $c) {
- return new GroupsController(
- $c->query('AppName'),
- $c->query('Request'),
- $c->query('GroupManager'),
- $c->query('UserSession'),
- $c->query('IsAdmin'),
- $c->query('L10N')
- );
- });
- $container->registerService('UsersController', function(IContainer $c) {
- return new UsersController(
- $c->query('AppName'),
- $c->query('Request'),
- $c->query('UserManager'),
- $c->query('GroupManager'),
- $c->query('UserSession'),
- $c->query('Config'),
- $c->query('IsAdmin'),
- $c->query('L10N'),
- $c->query('Logger'),
- $c->query('Defaults'),
- $c->query('Mailer'),
- $c->query('DefaultMailAddress'),
- $c->query('URLGenerator'),
- $c->query('OCP\\App\\IAppManager'),
- $c->query('OCP\\IAvatarManager'),
- $c->query('AccountManager')
- );
- });
- $container->registerService('LogSettingsController', function(IContainer $c) {
- return new LogSettingsController(
- $c->query('AppName'),
- $c->query('Request'),
- $c->query('Config'),
- $c->query('L10N')
- );
- });
- $container->registerService('CheckSetupController', function(IContainer $c) {
- return new CheckSetupController(
- $c->query('AppName'),
- $c->query('Request'),
- $c->query('Config'),
- $c->query('ClientService'),
- $c->query('URLGenerator'),
- $c->query('Util'),
- $c->query('L10N'),
- $c->query('Checker')
- );
- });
-
+ $container->registerMiddleWare('SubadminMiddleware');
/**
* Core class wrappers
diff --git a/settings/Controller/AppSettingsController.php b/settings/Controller/AppSettingsController.php
index b668c5cfb38..8d12b2a85a2 100644
--- a/settings/Controller/AppSettingsController.php
+++ b/settings/Controller/AppSettingsController.php
@@ -154,6 +154,9 @@ class AppSettingsController extends Controller {
$formattedApps = [];
$apps = $this->appFetcher->get();
foreach($apps as $app) {
+ if (isset($app['isFeatured'])) {
+ $app['featured'] = $app['isFeatured'];
+ }
// Skip all apps not in the requested category
$isInCategory = false;
diff --git a/settings/ajax/enableapp.php b/settings/ajax/enableapp.php
index b378b3c918d..cf1b7f29db5 100644
--- a/settings/ajax/enableapp.php
+++ b/settings/ajax/enableapp.php
@@ -35,7 +35,7 @@ try {
$appId = (string)$_POST['appid'];
$appId = OC_App::cleanAppId($appId);
$app->enable($appId, $groups);
- OC_JSON::success(['data' => ['update_required' => \OC_App::shouldUpgrade($app)]]);
+ OC_JSON::success(['data' => ['update_required' => \OC_App::shouldUpgrade($appId)]]);
} catch (Exception $e) {
\OCP\Util::writeLog('core', $e->getMessage(), \OCP\Util::ERROR);
OC_JSON::error(array("data" => array("message" => $e->getMessage()) ));
diff --git a/settings/js/authtoken_view.js b/settings/js/authtoken_view.js
index 24593a04f53..b07d480d66f 100644
--- a/settings/js/authtoken_view.js
+++ b/settings/js/authtoken_view.js
@@ -307,7 +307,7 @@
var _this = this;
this._toggleAddingToken(true);
- var deviceName = this._tokenName.val();
+ var deviceName = this._tokenName.val() !== '' ? this._tokenName.val() : new Date();
var creatingToken = $.ajax(OC.generateUrl('/settings/personal/authtokens'), {
method: 'POST',
data: {
diff --git a/settings/js/users/users.js b/settings/js/users/users.js
index 7e70d98f091..71defeaa18a 100644
--- a/settings/js/users/users.js
+++ b/settings/js/users/users.js
@@ -497,7 +497,7 @@ var UserList = {
group: group
},
function (response) {
- if (response.data.message) {
+ if (response.data !== undefined && response.data.message) {
OC.Notification.show(response.data.message);
}
}
diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js
index 3552f83a341..3074c6263bf 100644
--- a/settings/l10n/cs_CZ.js
+++ b/settings/l10n/cs_CZ.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "Skupina již existuje.",
"Unable to add group." : "Nelze přidat skupinu.",
"Unable to delete group." : "Nelze smazat skupinu.",
- "log-level out of allowed range" : "úroveň logování z povoleného rozpětí",
"test email settings" : "Test nastavení emailu",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Při odesílání emailu nastala chyba. Překontrolujte prosím svá nastavení. (Error: %s)",
"Email sent" : "Email odeslán",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "Nelze vytvořit uživatele.",
"Your %s account was created" : "Účet %s byl vytvořen",
"Unable to delete user." : "Nelze smazat uživatele.",
- "Forbidden" : "Zakázáno",
- "Invalid user" : "Neplatný uživatel",
+ "Unable to change full name" : "Nelze změnit celé jméno",
"Unable to change mail address" : "Nelze změnit emailovou adresu",
- "Email saved" : "Email uložen",
"Your full name has been changed." : "Vaše celé jméno bylo změněno.",
- "Unable to change full name" : "Nelze změnit celé jméno",
"Couldn't remove app." : "Nepodařilo se odebrat aplikaci.",
"Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců",
"Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s",
@@ -166,17 +162,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou. Povolte prosím \"Default encryption module\" a spusťte příkaz 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou.",
"Start migration" : "Spustit migraci",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Vše (fatální problémy, chyby, varování, informační, ladící)",
- "Info, warnings, errors and fatal issues" : "Informace, varování, chyby a fatální problémy",
- "Warnings, errors and fatal issues" : "Varování, chyby a fatální problémy",
- "Errors and fatal issues" : "Chyby a fatální problémy",
- "Fatal issues only" : "Pouze fatální problémy",
- "Log" : "Záznam",
- "What to log" : "Co se má logovat",
- "Download logfile" : "Stáhnout soubor logu",
- "More" : "Více",
- "Less" : "Méně",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Soubor logu je větší než 100 MB. Jeho stažení zabere nějaký čas!",
"Security & setup warnings" : "Upozornění zabezpečení a nastavení",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php není nejspíše správně nastaveno pro dotazování na proměnné hodnoty systému. Test s getenv(\"PATH\") vrací pouze prázdnou odpověď.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Zkontrolujte prosím konfiguraci php podle <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">instalační dokumentace ↗</a>, hlavně při použití php-fpm.",
@@ -271,10 +256,10 @@ OC.L10N.register(
"Cancel" : "Zrušit",
"Choose as profile picture" : "Vybrat jako profilový obrázek",
"Full name" : "Celé jméno",
- "No display name set" : "Jméno pro zobrazení nenastaveno",
"Email" : "Email",
"Your email address" : "Vaše emailová adresa",
"For password recovery and notifications" : "Pro obnovení hesla a upozornění",
+ "No display name set" : "Jméno pro zobrazení nenastaveno",
"No email address set" : "Emailová adresa není nastavena",
"You are member of the following groups:" : "Patříte do následujících skupin:",
"Password" : "Heslo",
@@ -330,11 +315,26 @@ OC.L10N.register(
"set new password" : "nastavit nové heslo",
"change email address" : "změnit emailovou adresu",
"Default" : "Výchozí",
+ "log-level out of allowed range" : "úroveň logování z povoleného rozpětí",
+ "Forbidden" : "Zakázáno",
+ "Invalid user" : "Neplatný uživatel",
+ "Email saved" : "Email uložen",
"Language changed" : "Jazyk byl změněn",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jste si jisti, že chcete přidat \"{domain}\" mezi důvěryhodné domény?",
"add group" : "přidat skupinu",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Vše (fatální problémy, chyby, varování, informační, ladící)",
+ "Info, warnings, errors and fatal issues" : "Informace, varování, chyby a fatální problémy",
+ "Warnings, errors and fatal issues" : "Varování, chyby a fatální problémy",
+ "Errors and fatal issues" : "Chyby a fatální problémy",
+ "Fatal issues only" : "Pouze fatální problémy",
+ "Log" : "Záznam",
+ "What to log" : "Co se má logovat",
+ "Download logfile" : "Stáhnout soubor logu",
+ "More" : "Více",
+ "Less" : "Méně",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Soubor logu je větší než 100 MB. Jeho stažení zabere nějaký čas!",
"Allow users to send mail notification for shared files" : "Povolit uživatelům odesílat emailová upozornění pro sdílené soubory",
"Allow users to send mail notification for shared files to other users" : "Povolit uživatelům odesílat emailová upozornění na sdílené soubory ostatním uživatelům",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Je použita databáze SQLite. Pro větší instalace doporučujeme přejít na robustnější databázi.",
diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json
index ae4275f8dd2..1246dc81413 100644
--- a/settings/l10n/cs_CZ.json
+++ b/settings/l10n/cs_CZ.json
@@ -17,7 +17,6 @@
"Group already exists." : "Skupina již existuje.",
"Unable to add group." : "Nelze přidat skupinu.",
"Unable to delete group." : "Nelze smazat skupinu.",
- "log-level out of allowed range" : "úroveň logování z povoleného rozpětí",
"test email settings" : "Test nastavení emailu",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Při odesílání emailu nastala chyba. Překontrolujte prosím svá nastavení. (Error: %s)",
"Email sent" : "Email odeslán",
@@ -28,12 +27,9 @@
"Unable to create user." : "Nelze vytvořit uživatele.",
"Your %s account was created" : "Účet %s byl vytvořen",
"Unable to delete user." : "Nelze smazat uživatele.",
- "Forbidden" : "Zakázáno",
- "Invalid user" : "Neplatný uživatel",
+ "Unable to change full name" : "Nelze změnit celé jméno",
"Unable to change mail address" : "Nelze změnit emailovou adresu",
- "Email saved" : "Email uložen",
"Your full name has been changed." : "Vaše celé jméno bylo změněno.",
- "Unable to change full name" : "Nelze změnit celé jméno",
"Couldn't remove app." : "Nepodařilo se odebrat aplikaci.",
"Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců",
"Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s",
@@ -164,17 +160,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou. Povolte prosím \"Default encryption module\" a spusťte příkaz 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou.",
"Start migration" : "Spustit migraci",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Vše (fatální problémy, chyby, varování, informační, ladící)",
- "Info, warnings, errors and fatal issues" : "Informace, varování, chyby a fatální problémy",
- "Warnings, errors and fatal issues" : "Varování, chyby a fatální problémy",
- "Errors and fatal issues" : "Chyby a fatální problémy",
- "Fatal issues only" : "Pouze fatální problémy",
- "Log" : "Záznam",
- "What to log" : "Co se má logovat",
- "Download logfile" : "Stáhnout soubor logu",
- "More" : "Více",
- "Less" : "Méně",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Soubor logu je větší než 100 MB. Jeho stažení zabere nějaký čas!",
"Security & setup warnings" : "Upozornění zabezpečení a nastavení",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php není nejspíše správně nastaveno pro dotazování na proměnné hodnoty systému. Test s getenv(\"PATH\") vrací pouze prázdnou odpověď.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Zkontrolujte prosím konfiguraci php podle <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">instalační dokumentace ↗</a>, hlavně při použití php-fpm.",
@@ -269,10 +254,10 @@
"Cancel" : "Zrušit",
"Choose as profile picture" : "Vybrat jako profilový obrázek",
"Full name" : "Celé jméno",
- "No display name set" : "Jméno pro zobrazení nenastaveno",
"Email" : "Email",
"Your email address" : "Vaše emailová adresa",
"For password recovery and notifications" : "Pro obnovení hesla a upozornění",
+ "No display name set" : "Jméno pro zobrazení nenastaveno",
"No email address set" : "Emailová adresa není nastavena",
"You are member of the following groups:" : "Patříte do následujících skupin:",
"Password" : "Heslo",
@@ -328,11 +313,26 @@
"set new password" : "nastavit nové heslo",
"change email address" : "změnit emailovou adresu",
"Default" : "Výchozí",
+ "log-level out of allowed range" : "úroveň logování z povoleného rozpětí",
+ "Forbidden" : "Zakázáno",
+ "Invalid user" : "Neplatný uživatel",
+ "Email saved" : "Email uložen",
"Language changed" : "Jazyk byl změněn",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Jste si jisti, že chcete přidat \"{domain}\" mezi důvěryhodné domény?",
"add group" : "přidat skupinu",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Vše (fatální problémy, chyby, varování, informační, ladící)",
+ "Info, warnings, errors and fatal issues" : "Informace, varování, chyby a fatální problémy",
+ "Warnings, errors and fatal issues" : "Varování, chyby a fatální problémy",
+ "Errors and fatal issues" : "Chyby a fatální problémy",
+ "Fatal issues only" : "Pouze fatální problémy",
+ "Log" : "Záznam",
+ "What to log" : "Co se má logovat",
+ "Download logfile" : "Stáhnout soubor logu",
+ "More" : "Více",
+ "Less" : "Méně",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Soubor logu je větší než 100 MB. Jeho stažení zabere nějaký čas!",
"Allow users to send mail notification for shared files" : "Povolit uživatelům odesílat emailová upozornění pro sdílené soubory",
"Allow users to send mail notification for shared files to other users" : "Povolit uživatelům odesílat emailová upozornění na sdílené soubory ostatním uživatelům",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Je použita databáze SQLite. Pro větší instalace doporučujeme přejít na robustnější databázi.",
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index 3e64e6f2b5e..0e647082d86 100644
--- a/settings/l10n/de.js
+++ b/settings/l10n/de.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "Gruppe existiert bereits.",
"Unable to add group." : "Gruppe konnte nicht angelegt werden.",
"Unable to delete group." : "Gruppe konnte nicht gelöscht werden.",
- "log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"test email settings" : "E-Mail-Einstellungen testen",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Beim Senden der E-Mail ist ein Problem aufgetreten. Bitte überprüfe Deine Einstellungen. (Fehler: %s)",
"Email sent" : "E-Mail wurde verschickt",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "Benutzer konnte nicht erstellt werden.",
"Your %s account was created" : "Dein %s-Konto wurde erstellt",
"Unable to delete user." : "Benutzer konnte nicht gelöscht werden.",
- "Forbidden" : "Verboten",
- "Invalid user" : "Ungültiger Benutzer",
+ "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden",
"Unable to change mail address" : "E-Mail-Adresse konnte nicht geändert werden",
- "Email saved" : "E-Mail-Adresse gespeichert",
"Your full name has been changed." : "Dein vollständiger Name wurde geändert.",
- "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
"Password confirmation is required" : "Passwortbestätigung ist erforderlich",
"Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.",
@@ -168,17 +164,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Die Kodierungsschlüssel der alten Verschlüsselung müssen zur neuen Version migriert werden (ownCloud <= 8.0). Bitte »Default Encryption Module« aktivieren und »occ encryption:migrate« aufrufen.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Kodierungsschlüssel der alten Verschlüsselung migrieren (ownCloud <= 8.0).",
"Start migration" : "Migration beginnen",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Debug-Meldungen)",
- "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme",
- "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme",
- "Errors and fatal issues" : "Fehler und fatale Probleme",
- "Fatal issues only" : "Nur fatale Probleme",
- "Log" : "Protokoll",
- "What to log" : "Was protokolliert wird",
- "Download logfile" : "Protokolldatei herunterladen",
- "More" : "Mehr",
- "Less" : "Weniger",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!",
"Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration durchlesen, sowie die PHP-Konfiguration Ihres Servers überprüfen, insbesondere dann, wenn PHP-FPM eingesetzt wird.",
@@ -273,10 +258,10 @@ OC.L10N.register(
"Cancel" : "Abbrechen",
"Choose as profile picture" : "Wähle ein Profilbild",
"Full name" : "Vollständiger Name",
- "No display name set" : "Kein Anzeigename angegeben",
"Email" : "E-Mail",
"Your email address" : "Deine E-Mail-Adresse",
"For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen",
+ "No display name set" : "Kein Anzeigename angegeben",
"No email address set" : "Keine E-Mail-Adresse angegeben",
"You are member of the following groups:" : "Du bist Mitglied folgender Gruppen:",
"Password" : "Passwort",
@@ -332,11 +317,26 @@ OC.L10N.register(
"set new password" : "Neues Passwort setzen",
"change email address" : "E-Mail-Adresse ändern",
"Default" : "Standard",
+ "log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
+ "Forbidden" : "Verboten",
+ "Invalid user" : "Ungültiger Benutzer",
+ "Email saved" : "E-Mail-Adresse gespeichert",
"Language changed" : "Sprache geändert",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Bist du sicher, dass du „{domain}“ als vertrauenswürdige Domain hinzufügen möchtest?",
"add group" : "Gruppe hinzufügen",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Debug-Meldungen)",
+ "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme",
+ "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme",
+ "Errors and fatal issues" : "Fehler und fatale Probleme",
+ "Fatal issues only" : "Nur fatale Probleme",
+ "Log" : "Protokoll",
+ "What to log" : "Was protokolliert wird",
+ "Download logfile" : "Protokolldatei herunterladen",
+ "More" : "Mehr",
+ "Less" : "Weniger",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!",
"Allow users to send mail notification for shared files" : "Benutzern erlauben, E-Mail-Benachrichtigungen für freigegebene Dateien zu senden",
"Allow users to send mail notification for shared files to other users" : "Benutzern erlauben, E-Mail-Benachrichtigungen für geteilte Dateien an andere Benutzer zu senden",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.",
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index faf5f3ffec8..86950128614 100644
--- a/settings/l10n/de.json
+++ b/settings/l10n/de.json
@@ -17,7 +17,6 @@
"Group already exists." : "Gruppe existiert bereits.",
"Unable to add group." : "Gruppe konnte nicht angelegt werden.",
"Unable to delete group." : "Gruppe konnte nicht gelöscht werden.",
- "log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"test email settings" : "E-Mail-Einstellungen testen",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Beim Senden der E-Mail ist ein Problem aufgetreten. Bitte überprüfe Deine Einstellungen. (Fehler: %s)",
"Email sent" : "E-Mail wurde verschickt",
@@ -28,12 +27,9 @@
"Unable to create user." : "Benutzer konnte nicht erstellt werden.",
"Your %s account was created" : "Dein %s-Konto wurde erstellt",
"Unable to delete user." : "Benutzer konnte nicht gelöscht werden.",
- "Forbidden" : "Verboten",
- "Invalid user" : "Ungültiger Benutzer",
+ "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden",
"Unable to change mail address" : "E-Mail-Adresse konnte nicht geändert werden",
- "Email saved" : "E-Mail-Adresse gespeichert",
"Your full name has been changed." : "Dein vollständiger Name wurde geändert.",
- "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
"Password confirmation is required" : "Passwortbestätigung ist erforderlich",
"Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der Admin-Gruppe löschen.",
@@ -166,17 +162,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Die Kodierungsschlüssel der alten Verschlüsselung müssen zur neuen Version migriert werden (ownCloud <= 8.0). Bitte »Default Encryption Module« aktivieren und »occ encryption:migrate« aufrufen.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Kodierungsschlüssel der alten Verschlüsselung migrieren (ownCloud <= 8.0).",
"Start migration" : "Migration beginnen",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Debug-Meldungen)",
- "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme",
- "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme",
- "Errors and fatal issues" : "Fehler und fatale Probleme",
- "Fatal issues only" : "Nur fatale Probleme",
- "Log" : "Protokoll",
- "What to log" : "Was protokolliert wird",
- "Download logfile" : "Protokolldatei herunterladen",
- "More" : "Mehr",
- "Less" : "Weniger",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!",
"Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration durchlesen, sowie die PHP-Konfiguration Ihres Servers überprüfen, insbesondere dann, wenn PHP-FPM eingesetzt wird.",
@@ -271,10 +256,10 @@
"Cancel" : "Abbrechen",
"Choose as profile picture" : "Wähle ein Profilbild",
"Full name" : "Vollständiger Name",
- "No display name set" : "Kein Anzeigename angegeben",
"Email" : "E-Mail",
"Your email address" : "Deine E-Mail-Adresse",
"For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen",
+ "No display name set" : "Kein Anzeigename angegeben",
"No email address set" : "Keine E-Mail-Adresse angegeben",
"You are member of the following groups:" : "Du bist Mitglied folgender Gruppen:",
"Password" : "Passwort",
@@ -330,11 +315,26 @@
"set new password" : "Neues Passwort setzen",
"change email address" : "E-Mail-Adresse ändern",
"Default" : "Standard",
+ "log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
+ "Forbidden" : "Verboten",
+ "Invalid user" : "Ungültiger Benutzer",
+ "Email saved" : "E-Mail-Adresse gespeichert",
"Language changed" : "Sprache geändert",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Bist du sicher, dass du „{domain}“ als vertrauenswürdige Domain hinzufügen möchtest?",
"add group" : "Gruppe hinzufügen",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Debug-Meldungen)",
+ "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme",
+ "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme",
+ "Errors and fatal issues" : "Fehler und fatale Probleme",
+ "Fatal issues only" : "Nur fatale Probleme",
+ "Log" : "Protokoll",
+ "What to log" : "Was protokolliert wird",
+ "Download logfile" : "Protokolldatei herunterladen",
+ "More" : "Mehr",
+ "Less" : "Weniger",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!",
"Allow users to send mail notification for shared files" : "Benutzern erlauben, E-Mail-Benachrichtigungen für freigegebene Dateien zu senden",
"Allow users to send mail notification for shared files to other users" : "Benutzern erlauben, E-Mail-Benachrichtigungen für geteilte Dateien an andere Benutzer zu senden",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.",
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index 0c827bfcb92..00e5051ac23 100644
--- a/settings/l10n/de_DE.js
+++ b/settings/l10n/de_DE.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "Gruppe existiert bereits.",
"Unable to add group." : "Gruppe konnte nicht angelegt werden.",
"Unable to delete group." : "Gruppe konnte nicht gelöscht werden.",
- "log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"test email settings" : "E-Mail-Einstellungen testen",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Beim Senden der E-Mail ist ein Problem aufgetreten. Bitte überprüfen Sie Ihre Einstellungen. (Fehler: %s)",
"Email sent" : "E-Mail gesendet",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "Benutzer konnte nicht erstellt werden.",
"Your %s account was created" : "Ihr %s-Konto wurde erstellt",
"Unable to delete user." : "Benutzer konnte nicht gelöscht werden.",
- "Forbidden" : "Verboten",
- "Invalid user" : "Ungültiger Benutzer",
+ "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden",
"Unable to change mail address" : "E-Mail-Adresse konnte nicht geändert werden",
- "Email saved" : "E-Mail-Adresse gespeichert",
"Your full name has been changed." : "Ihr vollständiger Name ist geändert worden.",
- "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
"Password confirmation is required" : "Passwortbestätigung ist erforderlich",
"Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen",
@@ -168,17 +164,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur Neuen migrieren. Bitte aktivieren Sie das \"Default Encryption Module\" und rufen Sie 'occ encryption:migrate' auf.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur Neuen migrieren.",
"Start migration" : "Migration beginnen",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Fehlerdiagnose)",
- "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme",
- "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme",
- "Errors and fatal issues" : "Fehler und fatale Probleme",
- "Fatal issues only" : "Nur kritische Fehler",
- "Log" : "Log",
- "What to log" : "Was geloggt wird",
- "Download logfile" : "Logdatei herunterladen",
- "More" : "Mehr",
- "Less" : "Weniger",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!",
"Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte schauen Sie in der <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration, sowie die PHP-Konfiguration ihres Servers, insbesondere dann, wenn Sie PHP-FPM einsetzten.",
@@ -273,10 +258,10 @@ OC.L10N.register(
"Cancel" : "Abbrechen",
"Choose as profile picture" : "Als Profilbild auswählen",
"Full name" : "Vollständiger Name",
- "No display name set" : "Kein Anzeigename angegeben",
"Email" : "E-Mail",
"Your email address" : "Ihre E-Mail-Adresse",
"For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen",
+ "No display name set" : "Kein Anzeigename angegeben",
"No email address set" : "Keine E-Mail-Adresse angegeben",
"You are member of the following groups:" : "Sie sind Mitglied folgender Gruppen:",
"Password" : "Passwort",
@@ -332,11 +317,26 @@ OC.L10N.register(
"set new password" : "Neues Passwort setzen",
"change email address" : "E-Mail-Adresse ändern",
"Default" : "Standard",
+ "log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
+ "Forbidden" : "Verboten",
+ "Invalid user" : "Ungültiger Benutzer",
+ "Email saved" : "E-Mail-Adresse gespeichert",
"Language changed" : "Sprache geändert",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie »{domain}« als vertrauenswürdige Domain hinzufügen möchten?",
"add group" : "Gruppe hinzufügen",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Fehlerdiagnose)",
+ "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme",
+ "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme",
+ "Errors and fatal issues" : "Fehler und fatale Probleme",
+ "Fatal issues only" : "Nur kritische Fehler",
+ "Log" : "Log",
+ "What to log" : "Was geloggt wird",
+ "Download logfile" : "Logdatei herunterladen",
+ "More" : "Mehr",
+ "Less" : "Weniger",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!",
"Allow users to send mail notification for shared files" : "Benutzern erlauben, E-Mail-Benachrichtigungen für freigegebene Dateien zu senden",
"Allow users to send mail notification for shared files to other users" : "Benutzern erlauben, E-Mail-Benachrichtigungen für freigegebene Dateien an andere Benutzer zu senden",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.",
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index 8841141d757..f90e02f8dda 100644
--- a/settings/l10n/de_DE.json
+++ b/settings/l10n/de_DE.json
@@ -17,7 +17,6 @@
"Group already exists." : "Gruppe existiert bereits.",
"Unable to add group." : "Gruppe konnte nicht angelegt werden.",
"Unable to delete group." : "Gruppe konnte nicht gelöscht werden.",
- "log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"test email settings" : "E-Mail-Einstellungen testen",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Beim Senden der E-Mail ist ein Problem aufgetreten. Bitte überprüfen Sie Ihre Einstellungen. (Fehler: %s)",
"Email sent" : "E-Mail gesendet",
@@ -28,12 +27,9 @@
"Unable to create user." : "Benutzer konnte nicht erstellt werden.",
"Your %s account was created" : "Ihr %s-Konto wurde erstellt",
"Unable to delete user." : "Benutzer konnte nicht gelöscht werden.",
- "Forbidden" : "Verboten",
- "Invalid user" : "Ungültiger Benutzer",
+ "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden",
"Unable to change mail address" : "E-Mail-Adresse konnte nicht geändert werden",
- "Email saved" : "E-Mail-Adresse gespeichert",
"Your full name has been changed." : "Ihr vollständiger Name ist geändert worden.",
- "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden",
"Couldn't remove app." : "Die App konnte nicht entfernt werden.",
"Password confirmation is required" : "Passwortbestätigung ist erforderlich",
"Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen",
@@ -166,17 +162,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur Neuen migrieren. Bitte aktivieren Sie das \"Default Encryption Module\" und rufen Sie 'occ encryption:migrate' auf.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur Neuen migrieren.",
"Start migration" : "Migration beginnen",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Fehlerdiagnose)",
- "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme",
- "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme",
- "Errors and fatal issues" : "Fehler und fatale Probleme",
- "Fatal issues only" : "Nur kritische Fehler",
- "Log" : "Log",
- "What to log" : "Was geloggt wird",
- "Download logfile" : "Logdatei herunterladen",
- "More" : "Mehr",
- "Less" : "Weniger",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!",
"Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte schauen Sie in der <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration, sowie die PHP-Konfiguration ihres Servers, insbesondere dann, wenn Sie PHP-FPM einsetzten.",
@@ -271,10 +256,10 @@
"Cancel" : "Abbrechen",
"Choose as profile picture" : "Als Profilbild auswählen",
"Full name" : "Vollständiger Name",
- "No display name set" : "Kein Anzeigename angegeben",
"Email" : "E-Mail",
"Your email address" : "Ihre E-Mail-Adresse",
"For password recovery and notifications" : "Für Passwort Wiederherstellung und Benachrichtigungen",
+ "No display name set" : "Kein Anzeigename angegeben",
"No email address set" : "Keine E-Mail-Adresse angegeben",
"You are member of the following groups:" : "Sie sind Mitglied folgender Gruppen:",
"Password" : "Passwort",
@@ -330,11 +315,26 @@
"set new password" : "Neues Passwort setzen",
"change email address" : "E-Mail-Adresse ändern",
"Default" : "Standard",
+ "log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
+ "Forbidden" : "Verboten",
+ "Invalid user" : "Ungültiger Benutzer",
+ "Email saved" : "E-Mail-Adresse gespeichert",
"Language changed" : "Sprache geändert",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie »{domain}« als vertrauenswürdige Domain hinzufügen möchten?",
"add group" : "Gruppe hinzufügen",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Fehlerdiagnose)",
+ "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme",
+ "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme",
+ "Errors and fatal issues" : "Fehler und fatale Probleme",
+ "Fatal issues only" : "Nur kritische Fehler",
+ "Log" : "Log",
+ "What to log" : "Was geloggt wird",
+ "Download logfile" : "Logdatei herunterladen",
+ "More" : "Mehr",
+ "Less" : "Weniger",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!",
"Allow users to send mail notification for shared files" : "Benutzern erlauben, E-Mail-Benachrichtigungen für freigegebene Dateien zu senden",
"Allow users to send mail notification for shared files to other users" : "Benutzern erlauben, E-Mail-Benachrichtigungen für freigegebene Dateien an andere Benutzer zu senden",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.",
diff --git a/settings/l10n/el.js b/settings/l10n/el.js
index 2192d4f91a9..42a2982f461 100644
--- a/settings/l10n/el.js
+++ b/settings/l10n/el.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "Η ομάδα υπάρχει ήδη.",
"Unable to add group." : "Αδυναμία προσθήκης ομάδας.",
"Unable to delete group." : "Αδυναμία διαγραφής ομάδας.",
- "log-level out of allowed range" : "Το επίπεδο καταγραφής είναι εκτός του επιτρεπόμενου πεδίου",
"test email settings" : "δοκιμή ρυθμίσεων email",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Παρουσιάστηκε σφάλμα κατά την αποστολή e-mail. Παρακαλώ ελέγξτε τις ρυθμίσεις σας.(Error: %s)",
"Email sent" : "Το Email απεστάλη ",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "Αδυναμία δημιουργίας χρήστη.",
"Your %s account was created" : "Ο λογαριασμός %s δημιουργήθηκε",
"Unable to delete user." : "Αδυναμία διαγραφής χρήστη.",
- "Forbidden" : "Δεν επιτρέπεται",
- "Invalid user" : "Μη έγκυρος χρήστης",
+ "Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας",
"Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας",
- "Email saved" : "Το email αποθηκεύτηκε ",
"Your full name has been changed." : "Το πλήρες όνομά σας άλλαξε.",
- "Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας",
"Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.",
"Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών",
"Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s",
@@ -154,16 +150,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Πρέπει να μεταφέρετε τα κλειδιά κρυπτογράφησής σας από την παλιά κρυπτογράφηση (ownCloud <= 8.0) στην καινούρια. Παρακαλούμε ενεργοποιήστε την \"Προεπιλεγμένη Μονάδα Κρυπτογράφησης\" και εκτελέστε την εντολή 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Πρέπει να μεταφέρετε τα κλειδιά σας κρυπτογράφησης από την παλιά κρυπτογράφηση (ownCloud <= 8.0) στην καινούρια.",
"Start migration" : "Έναρξη μετάβασης",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Όλα (καίρια ζητήματα, σφάλματα, προειδοποιήσεις, πληροφορίες, αποσφαλμάτωση)",
- "Info, warnings, errors and fatal issues" : "Πληροφορίες, προειδοποιήσεις, σφάλματα και καίρια ζητήματα",
- "Warnings, errors and fatal issues" : "Προειδοποιήσεις, σφάλματα και καίρια ζητήματα",
- "Errors and fatal issues" : "Σφάλματα και καίρια ζητήματα",
- "Fatal issues only" : "Καίρια ζητήματα μόνο",
- "Log" : "Καταγραφές",
- "Download logfile" : "Λήψη αρχείου ιστορικού",
- "More" : "Περισσότερα",
- "Less" : "Λιγότερα",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Το αρχείο ιστορικού είναι μεγαλύτερο από 100ΜΒ. Η λήψη του ίσως πάρει λίγη ώρα!",
"Security & setup warnings" : "Προειδοποιήσεις ασφάλειας & ρυθμίσεων",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Η php δεν φαίνεται να είναι σωστά ρυθμισμένη για ερωτήματα σε μεταβλητές περιβάλλοντος του συστήματος. Η δοκιμή με την εντολή getenv(\"PATH\") επιστρέφει κενή απάντηση.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Παρακαλούμε ελέγξτε την <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">τεκμηρίωση εγκατάστασης ↗</a> για τις σημειώσεις ρυθμίσεων php και για τις ρυθμίσεις της php του διακομιστή, ειδικότερα όταν χρησιμοποιείτε το php-fpm.",
@@ -242,10 +228,10 @@ OC.L10N.register(
"Cancel" : "Άκυρο",
"Choose as profile picture" : "Επιλέξτε εικόνα προφίλ",
"Full name" : "Πλήρες όνομα",
- "No display name set" : "Δεν ορίστηκε όνομα",
"Email" : "Ηλεκτρονικό ταχυδρομείο",
"Your email address" : "Η διεύθυνση ηλ. ταχυδρομείου σας",
"For password recovery and notifications" : "Η ανάκτηση του συνθηματικού και οι ειδοποιήσεις",
+ "No display name set" : "Δεν ορίστηκε όνομα",
"No email address set" : "Δεν ορίστηκε διεύθυνση email",
"You are member of the following groups:" : "Είστε μέλος των ακόλουθων ομάδων:",
"Password" : "Συνθηματικό",
@@ -293,11 +279,25 @@ OC.L10N.register(
"set new password" : "επιλογή νέου κωδικού",
"change email address" : "αλλαγή διεύθυνσης ηλ. αλληλογραφίας",
"Default" : "Προκαθορισμένο",
+ "log-level out of allowed range" : "Το επίπεδο καταγραφής είναι εκτός του επιτρεπόμενου πεδίου",
+ "Forbidden" : "Δεν επιτρέπεται",
+ "Invalid user" : "Μη έγκυρος χρήστης",
+ "Email saved" : "Το email αποθηκεύτηκε ",
"Language changed" : "Η γλώσσα άλλαξε",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Είστε πραγματικά σίγουροι ότι θέλετε να προσθέσετε το \"{domain}\" σαν αξιόπιστη περιοχή;",
"add group" : "προσθήκη ομάδας",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Όλα (καίρια ζητήματα, σφάλματα, προειδοποιήσεις, πληροφορίες, αποσφαλμάτωση)",
+ "Info, warnings, errors and fatal issues" : "Πληροφορίες, προειδοποιήσεις, σφάλματα και καίρια ζητήματα",
+ "Warnings, errors and fatal issues" : "Προειδοποιήσεις, σφάλματα και καίρια ζητήματα",
+ "Errors and fatal issues" : "Σφάλματα και καίρια ζητήματα",
+ "Fatal issues only" : "Καίρια ζητήματα μόνο",
+ "Log" : "Καταγραφές",
+ "Download logfile" : "Λήψη αρχείου ιστορικού",
+ "More" : "Περισσότερα",
+ "Less" : "Λιγότερα",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Το αρχείο ιστορικού είναι μεγαλύτερο από 100ΜΒ. Η λήψη του ίσως πάρει λίγη ώρα!",
"Allow users to send mail notification for shared files" : "Επιτρέψτε στους χρήστες να στέλνουν ειδοποιήσεις μέσω ηλεκτρονικού ταχυδρομείου για κοινόχρηστα αρχεία",
"Allow users to send mail notification for shared files to other users" : "Να επιτρέπεται η αποστολή ειδοποιήσεων σε άλλους χρήστες, μέσω αλληλογραφίας για κοινόχρηστα αρχεία",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Ως βάση δεδομένων χρησιμοποιείται η SQLite. Για μεγαλύτερες εγκαταστάσεις συνιστούμε να επιλέξετε ένα διαφορετικό σύστημα υποστήριξης βάσης δεδομένων.",
diff --git a/settings/l10n/el.json b/settings/l10n/el.json
index 5af2d79f26e..af78d211e2c 100644
--- a/settings/l10n/el.json
+++ b/settings/l10n/el.json
@@ -17,7 +17,6 @@
"Group already exists." : "Η ομάδα υπάρχει ήδη.",
"Unable to add group." : "Αδυναμία προσθήκης ομάδας.",
"Unable to delete group." : "Αδυναμία διαγραφής ομάδας.",
- "log-level out of allowed range" : "Το επίπεδο καταγραφής είναι εκτός του επιτρεπόμενου πεδίου",
"test email settings" : "δοκιμή ρυθμίσεων email",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Παρουσιάστηκε σφάλμα κατά την αποστολή e-mail. Παρακαλώ ελέγξτε τις ρυθμίσεις σας.(Error: %s)",
"Email sent" : "Το Email απεστάλη ",
@@ -28,12 +27,9 @@
"Unable to create user." : "Αδυναμία δημιουργίας χρήστη.",
"Your %s account was created" : "Ο λογαριασμός %s δημιουργήθηκε",
"Unable to delete user." : "Αδυναμία διαγραφής χρήστη.",
- "Forbidden" : "Δεν επιτρέπεται",
- "Invalid user" : "Μη έγκυρος χρήστης",
+ "Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας",
"Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας",
- "Email saved" : "Το email αποθηκεύτηκε ",
"Your full name has been changed." : "Το πλήρες όνομά σας άλλαξε.",
- "Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας",
"Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.",
"Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών",
"Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s",
@@ -152,16 +148,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Πρέπει να μεταφέρετε τα κλειδιά κρυπτογράφησής σας από την παλιά κρυπτογράφηση (ownCloud <= 8.0) στην καινούρια. Παρακαλούμε ενεργοποιήστε την \"Προεπιλεγμένη Μονάδα Κρυπτογράφησης\" και εκτελέστε την εντολή 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Πρέπει να μεταφέρετε τα κλειδιά σας κρυπτογράφησης από την παλιά κρυπτογράφηση (ownCloud <= 8.0) στην καινούρια.",
"Start migration" : "Έναρξη μετάβασης",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Όλα (καίρια ζητήματα, σφάλματα, προειδοποιήσεις, πληροφορίες, αποσφαλμάτωση)",
- "Info, warnings, errors and fatal issues" : "Πληροφορίες, προειδοποιήσεις, σφάλματα και καίρια ζητήματα",
- "Warnings, errors and fatal issues" : "Προειδοποιήσεις, σφάλματα και καίρια ζητήματα",
- "Errors and fatal issues" : "Σφάλματα και καίρια ζητήματα",
- "Fatal issues only" : "Καίρια ζητήματα μόνο",
- "Log" : "Καταγραφές",
- "Download logfile" : "Λήψη αρχείου ιστορικού",
- "More" : "Περισσότερα",
- "Less" : "Λιγότερα",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Το αρχείο ιστορικού είναι μεγαλύτερο από 100ΜΒ. Η λήψη του ίσως πάρει λίγη ώρα!",
"Security & setup warnings" : "Προειδοποιήσεις ασφάλειας & ρυθμίσεων",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Η php δεν φαίνεται να είναι σωστά ρυθμισμένη για ερωτήματα σε μεταβλητές περιβάλλοντος του συστήματος. Η δοκιμή με την εντολή getenv(\"PATH\") επιστρέφει κενή απάντηση.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Παρακαλούμε ελέγξτε την <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">τεκμηρίωση εγκατάστασης ↗</a> για τις σημειώσεις ρυθμίσεων php και για τις ρυθμίσεις της php του διακομιστή, ειδικότερα όταν χρησιμοποιείτε το php-fpm.",
@@ -240,10 +226,10 @@
"Cancel" : "Άκυρο",
"Choose as profile picture" : "Επιλέξτε εικόνα προφίλ",
"Full name" : "Πλήρες όνομα",
- "No display name set" : "Δεν ορίστηκε όνομα",
"Email" : "Ηλεκτρονικό ταχυδρομείο",
"Your email address" : "Η διεύθυνση ηλ. ταχυδρομείου σας",
"For password recovery and notifications" : "Η ανάκτηση του συνθηματικού και οι ειδοποιήσεις",
+ "No display name set" : "Δεν ορίστηκε όνομα",
"No email address set" : "Δεν ορίστηκε διεύθυνση email",
"You are member of the following groups:" : "Είστε μέλος των ακόλουθων ομάδων:",
"Password" : "Συνθηματικό",
@@ -291,11 +277,25 @@
"set new password" : "επιλογή νέου κωδικού",
"change email address" : "αλλαγή διεύθυνσης ηλ. αλληλογραφίας",
"Default" : "Προκαθορισμένο",
+ "log-level out of allowed range" : "Το επίπεδο καταγραφής είναι εκτός του επιτρεπόμενου πεδίου",
+ "Forbidden" : "Δεν επιτρέπεται",
+ "Invalid user" : "Μη έγκυρος χρήστης",
+ "Email saved" : "Το email αποθηκεύτηκε ",
"Language changed" : "Η γλώσσα άλλαξε",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Είστε πραγματικά σίγουροι ότι θέλετε να προσθέσετε το \"{domain}\" σαν αξιόπιστη περιοχή;",
"add group" : "προσθήκη ομάδας",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Όλα (καίρια ζητήματα, σφάλματα, προειδοποιήσεις, πληροφορίες, αποσφαλμάτωση)",
+ "Info, warnings, errors and fatal issues" : "Πληροφορίες, προειδοποιήσεις, σφάλματα και καίρια ζητήματα",
+ "Warnings, errors and fatal issues" : "Προειδοποιήσεις, σφάλματα και καίρια ζητήματα",
+ "Errors and fatal issues" : "Σφάλματα και καίρια ζητήματα",
+ "Fatal issues only" : "Καίρια ζητήματα μόνο",
+ "Log" : "Καταγραφές",
+ "Download logfile" : "Λήψη αρχείου ιστορικού",
+ "More" : "Περισσότερα",
+ "Less" : "Λιγότερα",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Το αρχείο ιστορικού είναι μεγαλύτερο από 100ΜΒ. Η λήψη του ίσως πάρει λίγη ώρα!",
"Allow users to send mail notification for shared files" : "Επιτρέψτε στους χρήστες να στέλνουν ειδοποιήσεις μέσω ηλεκτρονικού ταχυδρομείου για κοινόχρηστα αρχεία",
"Allow users to send mail notification for shared files to other users" : "Να επιτρέπεται η αποστολή ειδοποιήσεων σε άλλους χρήστες, μέσω αλληλογραφίας για κοινόχρηστα αρχεία",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Ως βάση δεδομένων χρησιμοποιείται η SQLite. Για μεγαλύτερες εγκαταστάσεις συνιστούμε να επιλέξετε ένα διαφορετικό σύστημα υποστήριξης βάσης δεδομένων.",
diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js
index 1924145d9f9..a5164597f2d 100644
--- a/settings/l10n/en_GB.js
+++ b/settings/l10n/en_GB.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "Group already exists.",
"Unable to add group." : "Unable to add group.",
"Unable to delete group." : "Unable to delete group.",
- "log-level out of allowed range" : "log-level out of allowed range",
"test email settings" : "test email settings",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "A problem occurred while sending the email. Please revise your settings. (Error: %s)",
"Email sent" : "Email sent",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "Unable to create user.",
"Your %s account was created" : "Your %s account was created",
"Unable to delete user." : "Unable to delete user.",
- "Forbidden" : "Forbidden",
- "Invalid user" : "Invalid user",
+ "Unable to change full name" : "Unable to change full name",
"Unable to change mail address" : "Unable to change mail address",
- "Email saved" : "Email saved",
"Your full name has been changed." : "Your full name has been changed.",
- "Unable to change full name" : "Unable to change full name",
"Couldn't remove app." : "Couldn't remove app.",
"Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group",
"Unable to add user to group %s" : "Unable to add user to group %s",
@@ -141,17 +137,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one.",
"Start migration" : "Start migration",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Everything (fatal issues, errors, warnings, info, debug)",
- "Info, warnings, errors and fatal issues" : "Info, warnings, errors and fatal issues",
- "Warnings, errors and fatal issues" : "Warnings, errors and fatal issues",
- "Errors and fatal issues" : "Errors and fatal issues",
- "Fatal issues only" : "Fatal issues only",
- "Log" : "Log",
- "What to log" : "What to log",
- "Download logfile" : "Download logfile",
- "More" : "More",
- "Less" : "Less",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "The logfile is larger than 100 MB. Downloading it may take some time!",
"Security & setup warnings" : "Security & setup warnings",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm.",
@@ -237,10 +222,10 @@ OC.L10N.register(
"Cancel" : "Cancel",
"Choose as profile picture" : "Choose as profile picture",
"Full name" : "Full name",
- "No display name set" : "No display name set",
"Email" : "Email",
"Your email address" : "Your email address",
"For password recovery and notifications" : "For password recovery and notifications",
+ "No display name set" : "No display name set",
"No email address set" : "No email address set",
"You are member of the following groups:" : "You are member of the following groups:",
"Password" : "Password",
@@ -278,10 +263,25 @@ OC.L10N.register(
"set new password" : "set new password",
"change email address" : "change email address",
"Default" : "Default",
+ "log-level out of allowed range" : "log-level out of allowed range",
+ "Forbidden" : "Forbidden",
+ "Invalid user" : "Invalid user",
+ "Email saved" : "Email saved",
"Language changed" : "Language changed",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Everything (fatal issues, errors, warnings, info, debug)",
+ "Info, warnings, errors and fatal issues" : "Info, warnings, errors and fatal issues",
+ "Warnings, errors and fatal issues" : "Warnings, errors and fatal issues",
+ "Errors and fatal issues" : "Errors and fatal issues",
+ "Fatal issues only" : "Fatal issues only",
+ "Log" : "Log",
+ "What to log" : "What to log",
+ "Download logfile" : "Download logfile",
+ "More" : "More",
+ "Less" : "Less",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "The logfile is larger than 100 MB. Downloading it may take some time!",
"Allow users to send mail notification for shared files" : "Allow users to send mail notification for shared files",
"Allow users to send mail notification for shared files to other users" : "Allow users to send email notification for shared files to other users",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite is used as database. For larger installations, we recommend you switch to a different database backend.",
diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json
index 77b6583478b..5279ee97072 100644
--- a/settings/l10n/en_GB.json
+++ b/settings/l10n/en_GB.json
@@ -17,7 +17,6 @@
"Group already exists." : "Group already exists.",
"Unable to add group." : "Unable to add group.",
"Unable to delete group." : "Unable to delete group.",
- "log-level out of allowed range" : "log-level out of allowed range",
"test email settings" : "test email settings",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "A problem occurred while sending the email. Please revise your settings. (Error: %s)",
"Email sent" : "Email sent",
@@ -28,12 +27,9 @@
"Unable to create user." : "Unable to create user.",
"Your %s account was created" : "Your %s account was created",
"Unable to delete user." : "Unable to delete user.",
- "Forbidden" : "Forbidden",
- "Invalid user" : "Invalid user",
+ "Unable to change full name" : "Unable to change full name",
"Unable to change mail address" : "Unable to change mail address",
- "Email saved" : "Email saved",
"Your full name has been changed." : "Your full name has been changed.",
- "Unable to change full name" : "Unable to change full name",
"Couldn't remove app." : "Couldn't remove app.",
"Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group",
"Unable to add user to group %s" : "Unable to add user to group %s",
@@ -139,17 +135,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one.",
"Start migration" : "Start migration",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Everything (fatal issues, errors, warnings, info, debug)",
- "Info, warnings, errors and fatal issues" : "Info, warnings, errors and fatal issues",
- "Warnings, errors and fatal issues" : "Warnings, errors and fatal issues",
- "Errors and fatal issues" : "Errors and fatal issues",
- "Fatal issues only" : "Fatal issues only",
- "Log" : "Log",
- "What to log" : "What to log",
- "Download logfile" : "Download logfile",
- "More" : "More",
- "Less" : "Less",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "The logfile is larger than 100 MB. Downloading it may take some time!",
"Security & setup warnings" : "Security & setup warnings",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm.",
@@ -235,10 +220,10 @@
"Cancel" : "Cancel",
"Choose as profile picture" : "Choose as profile picture",
"Full name" : "Full name",
- "No display name set" : "No display name set",
"Email" : "Email",
"Your email address" : "Your email address",
"For password recovery and notifications" : "For password recovery and notifications",
+ "No display name set" : "No display name set",
"No email address set" : "No email address set",
"You are member of the following groups:" : "You are member of the following groups:",
"Password" : "Password",
@@ -276,10 +261,25 @@
"set new password" : "set new password",
"change email address" : "change email address",
"Default" : "Default",
+ "log-level out of allowed range" : "log-level out of allowed range",
+ "Forbidden" : "Forbidden",
+ "Invalid user" : "Invalid user",
+ "Email saved" : "Email saved",
"Language changed" : "Language changed",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Everything (fatal issues, errors, warnings, info, debug)",
+ "Info, warnings, errors and fatal issues" : "Info, warnings, errors and fatal issues",
+ "Warnings, errors and fatal issues" : "Warnings, errors and fatal issues",
+ "Errors and fatal issues" : "Errors and fatal issues",
+ "Fatal issues only" : "Fatal issues only",
+ "Log" : "Log",
+ "What to log" : "What to log",
+ "Download logfile" : "Download logfile",
+ "More" : "More",
+ "Less" : "Less",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "The logfile is larger than 100 MB. Downloading it may take some time!",
"Allow users to send mail notification for shared files" : "Allow users to send mail notification for shared files",
"Allow users to send mail notification for shared files to other users" : "Allow users to send email notification for shared files to other users",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite is used as database. For larger installations, we recommend you switch to a different database backend.",
diff --git a/settings/l10n/es.js b/settings/l10n/es.js
index bda0a68e98e..7ca98ed1c1b 100644
--- a/settings/l10n/es.js
+++ b/settings/l10n/es.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "El grupo ya existe.",
"Unable to add group." : "No se pudo agregar el grupo.",
"Unable to delete group." : "No se pudo eliminar el grupo.",
- "log-level out of allowed range" : "Nivel de autenticación fuera del rango permitido",
"test email settings" : "probar configuración de correo electrónico",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ocurrió un problema al enviar el mensaje de correo electrónico. Revise su configuración. (Error: %s)",
"Email sent" : "Correo electrónico enviado",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "No se pudo crear el usuario.",
"Your %s account was created" : "Se ha creado su cuenta de %s",
"Unable to delete user." : "No se pudo eliminar el usuario.",
- "Forbidden" : "Prohibido",
- "Invalid user" : "Usuario no válido",
+ "Unable to change full name" : "No se puede cambiar el nombre completo",
"Unable to change mail address" : "No se pudo cambiar la dirección de correo electrónico",
- "Email saved" : "Correo electrónico guardado",
"Your full name has been changed." : "Se ha cambiado su nombre completo.",
- "Unable to change full name" : "No se puede cambiar el nombre completo",
"Couldn't remove app." : "No se pudo eliminar la aplicación.",
"Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
"Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
@@ -162,17 +158,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Necesita migrar sus claves de cifrado provenientes del antiguo sistema (ownCloud <= 8.0) al nuevo. Por favor habilite el \"Módulo de cifrado por defecto\" y ejecute 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Se necesita migrar las claves de cifrado del antiguo sistema (ownCloud <= 8.0) al nuevo sistema.",
"Start migration" : "Iniciar migración",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)",
- "Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales",
- "Warnings, errors and fatal issues" : "Advertencias, errores y problemas fatales",
- "Errors and fatal issues" : "Errores y problemas fatales",
- "Fatal issues only" : "Problemas fatales solamente",
- "Log" : "Registro",
- "What to log" : "Que registrar",
- "Download logfile" : "Descargar archivo de registro",
- "More" : "Más",
- "Less" : "Menos",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "El archivo de registro es mayor de 100 MB. Descargarlo puede tardar.",
"Security & setup warnings" : "Avisos de seguridad y configuración",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php parece que no está configurado correctamente para solicitar las variables de entorno del sistema. La prueba con getenv(\"PATH\") sólo retorna una respuesta vacía.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor revisa la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación de instalación ↗</a> para notas de configuración PHP y la configuración PHP de tu servidor, especialmente cuando se está usando php-fpm",
@@ -259,10 +244,10 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como imagen de perfil",
"Full name" : "Nombre completo",
- "No display name set" : "No se ha establecido ningún nombre para mostrar",
"Email" : "Correo electrónico",
"Your email address" : "Su dirección de correo",
"For password recovery and notifications" : "Para la recuperación de contraseña y notificaciones",
+ "No display name set" : "No se ha establecido ningún nombre para mostrar",
"No email address set" : "Ninguna dirección de correo establecida",
"You are member of the following groups:" : "Es miembro de los siguientes grupos:",
"Password" : "Contraseña",
@@ -313,11 +298,26 @@ OC.L10N.register(
"set new password" : "establecer nueva contraseña",
"change email address" : "cambiar dirección de correo electrónico",
"Default" : "Predeterminado",
+ "log-level out of allowed range" : "Nivel de autenticación fuera del rango permitido",
+ "Forbidden" : "Prohibido",
+ "Invalid user" : "Usuario no válido",
+ "Email saved" : "Correo electrónico guardado",
"Language changed" : "Idioma cambiado",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?",
"add group" : "añadir grupo",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)",
+ "Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales",
+ "Warnings, errors and fatal issues" : "Advertencias, errores y problemas fatales",
+ "Errors and fatal issues" : "Errores y problemas fatales",
+ "Fatal issues only" : "Problemas fatales solamente",
+ "Log" : "Registro",
+ "What to log" : "Que registrar",
+ "Download logfile" : "Descargar archivo de registro",
+ "More" : "Más",
+ "Less" : "Menos",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "El archivo de registro es mayor de 100 MB. Descargarlo puede tardar.",
"Allow users to send mail notification for shared files" : "Permitir a los usuarios enviar mensajes de notificación para ficheros compartidos",
"Allow users to send mail notification for shared files to other users" : "Permitir a los usuarios enviar notificaciones por correo electrónico de los archivos compartidos a otros usuarios",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Se utiliza SQLite como base de datos. Para instalaciones mas grandes se recomiende cambiar a otro sistema de base de datos. ",
diff --git a/settings/l10n/es.json b/settings/l10n/es.json
index ff460346723..b099006a913 100644
--- a/settings/l10n/es.json
+++ b/settings/l10n/es.json
@@ -17,7 +17,6 @@
"Group already exists." : "El grupo ya existe.",
"Unable to add group." : "No se pudo agregar el grupo.",
"Unable to delete group." : "No se pudo eliminar el grupo.",
- "log-level out of allowed range" : "Nivel de autenticación fuera del rango permitido",
"test email settings" : "probar configuración de correo electrónico",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ocurrió un problema al enviar el mensaje de correo electrónico. Revise su configuración. (Error: %s)",
"Email sent" : "Correo electrónico enviado",
@@ -28,12 +27,9 @@
"Unable to create user." : "No se pudo crear el usuario.",
"Your %s account was created" : "Se ha creado su cuenta de %s",
"Unable to delete user." : "No se pudo eliminar el usuario.",
- "Forbidden" : "Prohibido",
- "Invalid user" : "Usuario no válido",
+ "Unable to change full name" : "No se puede cambiar el nombre completo",
"Unable to change mail address" : "No se pudo cambiar la dirección de correo electrónico",
- "Email saved" : "Correo electrónico guardado",
"Your full name has been changed." : "Se ha cambiado su nombre completo.",
- "Unable to change full name" : "No se puede cambiar el nombre completo",
"Couldn't remove app." : "No se pudo eliminar la aplicación.",
"Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
"Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
@@ -160,17 +156,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Necesita migrar sus claves de cifrado provenientes del antiguo sistema (ownCloud <= 8.0) al nuevo. Por favor habilite el \"Módulo de cifrado por defecto\" y ejecute 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Se necesita migrar las claves de cifrado del antiguo sistema (ownCloud <= 8.0) al nuevo sistema.",
"Start migration" : "Iniciar migración",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)",
- "Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales",
- "Warnings, errors and fatal issues" : "Advertencias, errores y problemas fatales",
- "Errors and fatal issues" : "Errores y problemas fatales",
- "Fatal issues only" : "Problemas fatales solamente",
- "Log" : "Registro",
- "What to log" : "Que registrar",
- "Download logfile" : "Descargar archivo de registro",
- "More" : "Más",
- "Less" : "Menos",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "El archivo de registro es mayor de 100 MB. Descargarlo puede tardar.",
"Security & setup warnings" : "Avisos de seguridad y configuración",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php parece que no está configurado correctamente para solicitar las variables de entorno del sistema. La prueba con getenv(\"PATH\") sólo retorna una respuesta vacía.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor revisa la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación de instalación ↗</a> para notas de configuración PHP y la configuración PHP de tu servidor, especialmente cuando se está usando php-fpm",
@@ -257,10 +242,10 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Seleccionar como imagen de perfil",
"Full name" : "Nombre completo",
- "No display name set" : "No se ha establecido ningún nombre para mostrar",
"Email" : "Correo electrónico",
"Your email address" : "Su dirección de correo",
"For password recovery and notifications" : "Para la recuperación de contraseña y notificaciones",
+ "No display name set" : "No se ha establecido ningún nombre para mostrar",
"No email address set" : "Ninguna dirección de correo establecida",
"You are member of the following groups:" : "Es miembro de los siguientes grupos:",
"Password" : "Contraseña",
@@ -311,11 +296,26 @@
"set new password" : "establecer nueva contraseña",
"change email address" : "cambiar dirección de correo electrónico",
"Default" : "Predeterminado",
+ "log-level out of allowed range" : "Nivel de autenticación fuera del rango permitido",
+ "Forbidden" : "Prohibido",
+ "Invalid user" : "Usuario no válido",
+ "Email saved" : "Correo electrónico guardado",
"Language changed" : "Idioma cambiado",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?",
"add group" : "añadir grupo",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)",
+ "Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales",
+ "Warnings, errors and fatal issues" : "Advertencias, errores y problemas fatales",
+ "Errors and fatal issues" : "Errores y problemas fatales",
+ "Fatal issues only" : "Problemas fatales solamente",
+ "Log" : "Registro",
+ "What to log" : "Que registrar",
+ "Download logfile" : "Descargar archivo de registro",
+ "More" : "Más",
+ "Less" : "Menos",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "El archivo de registro es mayor de 100 MB. Descargarlo puede tardar.",
"Allow users to send mail notification for shared files" : "Permitir a los usuarios enviar mensajes de notificación para ficheros compartidos",
"Allow users to send mail notification for shared files to other users" : "Permitir a los usuarios enviar notificaciones por correo electrónico de los archivos compartidos a otros usuarios",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Se utiliza SQLite como base de datos. Para instalaciones mas grandes se recomiende cambiar a otro sistema de base de datos. ",
diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js
index 211f04f388c..05dc00643bf 100644
--- a/settings/l10n/fr.js
+++ b/settings/l10n/fr.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "Ce groupe existe déjà.",
"Unable to add group." : "Impossible d'ajouter le groupe.",
"Unable to delete group." : "Impossible de supprimer le groupe.",
- "log-level out of allowed range" : "niveau de journalisation hors borne",
"test email settings" : "Test des paramètres e-mail",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Une erreur est survenue lors de l'envoi de l'e-mail. Veuillez vérifier vos paramètres. (Erreur: %s)",
"Email sent" : "E-mail envoyé",
@@ -30,13 +29,11 @@ OC.L10N.register(
"Unable to create user." : "Impossible de créer l'utilisateur.",
"Your %s account was created" : "Votre compte %s a été créé",
"Unable to delete user." : "Impossible de supprimer l'utilisateur.",
- "Forbidden" : "Interdit",
- "Invalid user" : "Utilisateur non valable",
+ "Unable to change full name" : "Impossible de changer le nom complet",
"Unable to change mail address" : "Impossible de modifier l'adresse e-mail",
- "Email saved" : "E-mail sauvegardé",
"Your full name has been changed." : "Votre nom complet a été modifié.",
- "Unable to change full name" : "Impossible de changer le nom complet",
"Couldn't remove app." : "Impossible de supprimer l'application.",
+ "Password confirmation is required" : "Confirmation par mot de passe est requise",
"Admins can't remove themself from the admin group" : "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin",
"Unable to add user to group %s" : "Impossible d'ajouter l'utilisateur au groupe %s",
"Unable to remove user from group %s" : "Impossible de supprimer l'utilisateur du groupe %s",
@@ -167,17 +164,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle. Veuillez activer l'application \"Default Encryption Module\" et exécuter 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle.",
"Start migration" : "Démarrer la migration",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Tout (erreurs fatales, erreurs, avertissements, informations, debogage)",
- "Info, warnings, errors and fatal issues" : "Informations, avertissements, erreurs et erreurs fatales",
- "Warnings, errors and fatal issues" : "Avertissements, erreurs et erreurs fatales",
- "Errors and fatal issues" : "Erreurs et erreurs fatales",
- "Fatal issues only" : "Erreurs fatales uniquement",
- "Log" : "Log",
- "What to log" : "Ce qu'il faut journaliser",
- "Download logfile" : "Télécharger le fichier de journalisation",
- "More" : "Plus",
- "Less" : "Moins",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "La taille du fichier journal excède 100 Mo. Le télécharger peut prendre un certain temps!",
"Security & setup warnings" : "Avertissements de sécurité & configuration",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php ne semble pas être configuré de manière à récupérer les valeurs des variables d’environnement. Le test de la commande getenv(\"PATH\") retourne seulement une réponse vide. ",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Veuillez consulter <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">la documentation d'installation ↗</a> pour savoir comment configurer php sur votre serveur, en particulier en cas d'utilisation de php-fpm.",
@@ -272,10 +258,10 @@ OC.L10N.register(
"Cancel" : "Annuler",
"Choose as profile picture" : "Définir comme image de profil",
"Full name" : "Nom complet",
- "No display name set" : "Aucun nom d'affichage configuré",
"Email" : "Adresse e-mail",
"Your email address" : "Votre adresse e-mail",
"For password recovery and notifications" : "Pour la récupération de mot de passe et les notifications",
+ "No display name set" : "Aucun nom d'affichage configuré",
"No email address set" : "Aucune adresse e-mail configurée",
"You are member of the following groups:" : "Vous êtes membre des groupes suivants :",
"Password" : "Mot de passe",
@@ -330,11 +316,26 @@ OC.L10N.register(
"set new password" : "Changer le mot de passe",
"change email address" : "changer l'adresse e-mail",
"Default" : "Défaut",
+ "log-level out of allowed range" : "niveau de journalisation hors borne",
+ "Forbidden" : "Interdit",
+ "Invalid user" : "Utilisateur non valable",
+ "Email saved" : "E-mail sauvegardé",
"Language changed" : "Langue changée",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Êtes-vous vraiment sûr de vouloir ajouter \"{domain}\" comme domaine de confiance ?",
"add group" : "ajouter groupe",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Tout (erreurs fatales, erreurs, avertissements, informations, debogage)",
+ "Info, warnings, errors and fatal issues" : "Informations, avertissements, erreurs et erreurs fatales",
+ "Warnings, errors and fatal issues" : "Avertissements, erreurs et erreurs fatales",
+ "Errors and fatal issues" : "Erreurs et erreurs fatales",
+ "Fatal issues only" : "Erreurs fatales uniquement",
+ "Log" : "Log",
+ "What to log" : "Ce qu'il faut journaliser",
+ "Download logfile" : "Télécharger le fichier de journalisation",
+ "More" : "Plus",
+ "Less" : "Moins",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "La taille du fichier journal excède 100 Mo. Le télécharger peut prendre un certain temps!",
"Allow users to send mail notification for shared files" : "Autoriser les utilisateurs à envoyer des notifications de partage par e-mail",
"Allow users to send mail notification for shared files to other users" : "Autoriser les utilisateurs à envoyer des notifications de partage par e-mail",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite est actuellement utilisé comme gestionnaire de base de données. Pour des installations plus volumineuses, nous vous conseillons d'utiliser un autre gestionnaire de base de données.",
@@ -342,7 +343,7 @@ OC.L10N.register(
"Experimental applications ahead" : "Attention! Applications expérimentales",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Les applications expérimentales n'ont pas fait l'objet de tests de sécurité, sont encore en développement et peuvent être instables. Les installer peut causer des pertes de données ou des failles de sécurité. ",
"Enable experimental apps" : "Activer les applications expérimentales",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez appuyer ce projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!",
"Add Group" : "Ajouter groupe",
"Group" : "Groupe",
"Default Quota" : "Quota par défaut",
diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json
index 7497e994055..5ac42c99a56 100644
--- a/settings/l10n/fr.json
+++ b/settings/l10n/fr.json
@@ -17,7 +17,6 @@
"Group already exists." : "Ce groupe existe déjà.",
"Unable to add group." : "Impossible d'ajouter le groupe.",
"Unable to delete group." : "Impossible de supprimer le groupe.",
- "log-level out of allowed range" : "niveau de journalisation hors borne",
"test email settings" : "Test des paramètres e-mail",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Une erreur est survenue lors de l'envoi de l'e-mail. Veuillez vérifier vos paramètres. (Erreur: %s)",
"Email sent" : "E-mail envoyé",
@@ -28,13 +27,11 @@
"Unable to create user." : "Impossible de créer l'utilisateur.",
"Your %s account was created" : "Votre compte %s a été créé",
"Unable to delete user." : "Impossible de supprimer l'utilisateur.",
- "Forbidden" : "Interdit",
- "Invalid user" : "Utilisateur non valable",
+ "Unable to change full name" : "Impossible de changer le nom complet",
"Unable to change mail address" : "Impossible de modifier l'adresse e-mail",
- "Email saved" : "E-mail sauvegardé",
"Your full name has been changed." : "Votre nom complet a été modifié.",
- "Unable to change full name" : "Impossible de changer le nom complet",
"Couldn't remove app." : "Impossible de supprimer l'application.",
+ "Password confirmation is required" : "Confirmation par mot de passe est requise",
"Admins can't remove themself from the admin group" : "Les administrateurs ne peuvent pas se retirer eux-mêmes du groupe admin",
"Unable to add user to group %s" : "Impossible d'ajouter l'utilisateur au groupe %s",
"Unable to remove user from group %s" : "Impossible de supprimer l'utilisateur du groupe %s",
@@ -165,17 +162,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle. Veuillez activer l'application \"Default Encryption Module\" et exécuter 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle.",
"Start migration" : "Démarrer la migration",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Tout (erreurs fatales, erreurs, avertissements, informations, debogage)",
- "Info, warnings, errors and fatal issues" : "Informations, avertissements, erreurs et erreurs fatales",
- "Warnings, errors and fatal issues" : "Avertissements, erreurs et erreurs fatales",
- "Errors and fatal issues" : "Erreurs et erreurs fatales",
- "Fatal issues only" : "Erreurs fatales uniquement",
- "Log" : "Log",
- "What to log" : "Ce qu'il faut journaliser",
- "Download logfile" : "Télécharger le fichier de journalisation",
- "More" : "Plus",
- "Less" : "Moins",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "La taille du fichier journal excède 100 Mo. Le télécharger peut prendre un certain temps!",
"Security & setup warnings" : "Avertissements de sécurité & configuration",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php ne semble pas être configuré de manière à récupérer les valeurs des variables d’environnement. Le test de la commande getenv(\"PATH\") retourne seulement une réponse vide. ",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Veuillez consulter <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">la documentation d'installation ↗</a> pour savoir comment configurer php sur votre serveur, en particulier en cas d'utilisation de php-fpm.",
@@ -270,10 +256,10 @@
"Cancel" : "Annuler",
"Choose as profile picture" : "Définir comme image de profil",
"Full name" : "Nom complet",
- "No display name set" : "Aucun nom d'affichage configuré",
"Email" : "Adresse e-mail",
"Your email address" : "Votre adresse e-mail",
"For password recovery and notifications" : "Pour la récupération de mot de passe et les notifications",
+ "No display name set" : "Aucun nom d'affichage configuré",
"No email address set" : "Aucune adresse e-mail configurée",
"You are member of the following groups:" : "Vous êtes membre des groupes suivants :",
"Password" : "Mot de passe",
@@ -328,11 +314,26 @@
"set new password" : "Changer le mot de passe",
"change email address" : "changer l'adresse e-mail",
"Default" : "Défaut",
+ "log-level out of allowed range" : "niveau de journalisation hors borne",
+ "Forbidden" : "Interdit",
+ "Invalid user" : "Utilisateur non valable",
+ "Email saved" : "E-mail sauvegardé",
"Language changed" : "Langue changée",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Êtes-vous vraiment sûr de vouloir ajouter \"{domain}\" comme domaine de confiance ?",
"add group" : "ajouter groupe",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Tout (erreurs fatales, erreurs, avertissements, informations, debogage)",
+ "Info, warnings, errors and fatal issues" : "Informations, avertissements, erreurs et erreurs fatales",
+ "Warnings, errors and fatal issues" : "Avertissements, erreurs et erreurs fatales",
+ "Errors and fatal issues" : "Erreurs et erreurs fatales",
+ "Fatal issues only" : "Erreurs fatales uniquement",
+ "Log" : "Log",
+ "What to log" : "Ce qu'il faut journaliser",
+ "Download logfile" : "Télécharger le fichier de journalisation",
+ "More" : "Plus",
+ "Less" : "Moins",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "La taille du fichier journal excède 100 Mo. Le télécharger peut prendre un certain temps!",
"Allow users to send mail notification for shared files" : "Autoriser les utilisateurs à envoyer des notifications de partage par e-mail",
"Allow users to send mail notification for shared files to other users" : "Autoriser les utilisateurs à envoyer des notifications de partage par e-mail",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite est actuellement utilisé comme gestionnaire de base de données. Pour des installations plus volumineuses, nous vous conseillons d'utiliser un autre gestionnaire de base de données.",
@@ -340,7 +341,7 @@
"Experimental applications ahead" : "Attention! Applications expérimentales",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Les applications expérimentales n'ont pas fait l'objet de tests de sécurité, sont encore en développement et peuvent être instables. Les installer peut causer des pertes de données ou des failles de sécurité. ",
"Enable experimental apps" : "Activer les applications expérimentales",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez appuyer ce projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!",
"Add Group" : "Ajouter groupe",
"Group" : "Groupe",
"Default Quota" : "Quota par défaut",
diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js
index 015483bdf63..2854ea53151 100644
--- a/settings/l10n/hu_HU.js
+++ b/settings/l10n/hu_HU.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "A csoport már létezik.",
"Unable to add group." : "Nem lehet létrehozni a csoportot.",
"Unable to delete group." : "Nem lehet törölni a csoportot.",
- "log-level out of allowed range" : "A naplózási szint a megengedett terjedelmen kívül van.",
"test email settings" : "e-mail beállítások ellenőrzése",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Hiba történt az e-mail küldésekor. Kérlek ellenőrizd a beállításokat! (Hiba: %s)",
"Email sent" : "Az e-mail elküldve!",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "Nem lehet létrehozni a felhasználót.",
"Your %s account was created" : "%s fiók létrehozva",
"Unable to delete user." : "Nem lehet törölni a felhasználót.",
- "Forbidden" : "Tiltott",
- "Invalid user" : "Érvénytelen felhasználó",
+ "Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét",
"Unable to change mail address" : "Nem lehet megváltoztatni az e-mail címet",
- "Email saved" : "E-mail elmentve!",
"Your full name has been changed." : "Az Ön teljes nevét módosítottuk.",
- "Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét",
"Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.",
"Password confirmation is required" : "Jelszó megerősítés szükséges",
"Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.",
@@ -168,17 +164,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Migrálni kell a titkosítási kulcsokat a régi titkosításból (ownCloud <= 8.0) egy újba. Kérjük, engedélyezd az „Alapértelmezett titkosítási modul”-t és futtasd ezt: occ encryption:migrate",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Migrálni kell a titkosítási kulcsokat a régi titkosításból (ownCloud <= 8.0) egy újba.",
"Start migration" : "Migrálás indítása",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Minden (végzetes hibák, hibák, figyelmeztetések, információk, hibakeresési üzenetek)",
- "Info, warnings, errors and fatal issues" : "Információk, figyelmeztetések, hibák és végzetes hibák",
- "Warnings, errors and fatal issues" : "Figyelmeztetések, hibák és végzetes hibák",
- "Errors and fatal issues" : "Hibák és végzetes hibák",
- "Fatal issues only" : "Csak a végzetes hibák",
- "Log" : "Naplózás",
- "What to log" : "Mit naplózzon",
- "Download logfile" : "Naplófájl letöltése",
- "More" : "Több",
- "Less" : "Kevesebb",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "A naplófájl 100MB-nál nagyobb. A letöltése hosszabb időt vehet igénybe.",
"Security & setup warnings" : "Biztonsági és telepítési figyelmeztetések",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Úgy tűnik, hogy a PHP nem tudja olvasni a rendszer környezeti változóit. A getenv(\"PATH\") teszt visszatérési értéke üres.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Kérjük, ellenőrizze a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">telepítési dokumentációt ↗</a> a PHP konfigurációs beállításaival kapcsolatban, főleg ha PHP-FPM-et használ.",
@@ -273,10 +258,10 @@ OC.L10N.register(
"Cancel" : "Mégsem",
"Choose as profile picture" : "Kiválasztás profil képként",
"Full name" : "Teljes név",
- "No display name set" : "Nincs megjelenítési név beállítva",
"Email" : "E-mail",
"Your email address" : "Az Ön e-mail címe",
"For password recovery and notifications" : "Jelszó helyreállításhoz és értesítésekhez",
+ "No display name set" : "Nincs megjelenítési név beállítva",
"No email address set" : "Nincs e-mail cím beállítva",
"You are member of the following groups:" : "Tagja vagy a következő csoport(ok)nak:",
"Password" : "Jelszó",
@@ -332,11 +317,26 @@ OC.L10N.register(
"set new password" : "új jelszó beállítása",
"change email address" : "e-mail cím megváltoztatása",
"Default" : "Alapértelmezett",
+ "log-level out of allowed range" : "A naplózási szint a megengedett terjedelmen kívül van.",
+ "Forbidden" : "Tiltott",
+ "Invalid user" : "Érvénytelen felhasználó",
+ "Email saved" : "E-mail elmentve!",
"Language changed" : "A nyelv megváltozott",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Biztos abban, hogy hozzá akarja adni \"{domain}\"-t a megbízható tartományokhoz?",
"add group" : "csoport hozzáadása",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Minden (végzetes hibák, hibák, figyelmeztetések, információk, hibakeresési üzenetek)",
+ "Info, warnings, errors and fatal issues" : "Információk, figyelmeztetések, hibák és végzetes hibák",
+ "Warnings, errors and fatal issues" : "Figyelmeztetések, hibák és végzetes hibák",
+ "Errors and fatal issues" : "Hibák és végzetes hibák",
+ "Fatal issues only" : "Csak a végzetes hibák",
+ "Log" : "Naplózás",
+ "What to log" : "Mit naplózzon",
+ "Download logfile" : "Naplófájl letöltése",
+ "More" : "Több",
+ "Less" : "Kevesebb",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "A naplófájl 100MB-nál nagyobb. A letöltése hosszabb időt vehet igénybe.",
"Allow users to send mail notification for shared files" : "A felhasználók küldhessenek e-mail értesítést a megosztás létrejöttéről",
"Allow users to send mail notification for shared files to other users" : "A felhasználók küldhessenek más felhasználóknak e-mail értesítést a megosztott fájlokról",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Adatbázisként az SQLite-ot fogjuk használni. Nagyobb telepítések esetén javasoljuk, hogy váltson másik adatbázis háttérkiszolgálóra",
diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json
index 221330beca8..7c1683cfde6 100644
--- a/settings/l10n/hu_HU.json
+++ b/settings/l10n/hu_HU.json
@@ -17,7 +17,6 @@
"Group already exists." : "A csoport már létezik.",
"Unable to add group." : "Nem lehet létrehozni a csoportot.",
"Unable to delete group." : "Nem lehet törölni a csoportot.",
- "log-level out of allowed range" : "A naplózási szint a megengedett terjedelmen kívül van.",
"test email settings" : "e-mail beállítások ellenőrzése",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Hiba történt az e-mail küldésekor. Kérlek ellenőrizd a beállításokat! (Hiba: %s)",
"Email sent" : "Az e-mail elküldve!",
@@ -28,12 +27,9 @@
"Unable to create user." : "Nem lehet létrehozni a felhasználót.",
"Your %s account was created" : "%s fiók létrehozva",
"Unable to delete user." : "Nem lehet törölni a felhasználót.",
- "Forbidden" : "Tiltott",
- "Invalid user" : "Érvénytelen felhasználó",
+ "Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét",
"Unable to change mail address" : "Nem lehet megváltoztatni az e-mail címet",
- "Email saved" : "E-mail elmentve!",
"Your full name has been changed." : "Az Ön teljes nevét módosítottuk.",
- "Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét",
"Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.",
"Password confirmation is required" : "Jelszó megerősítés szükséges",
"Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.",
@@ -166,17 +162,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Migrálni kell a titkosítási kulcsokat a régi titkosításból (ownCloud <= 8.0) egy újba. Kérjük, engedélyezd az „Alapértelmezett titkosítási modul”-t és futtasd ezt: occ encryption:migrate",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Migrálni kell a titkosítási kulcsokat a régi titkosításból (ownCloud <= 8.0) egy újba.",
"Start migration" : "Migrálás indítása",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Minden (végzetes hibák, hibák, figyelmeztetések, információk, hibakeresési üzenetek)",
- "Info, warnings, errors and fatal issues" : "Információk, figyelmeztetések, hibák és végzetes hibák",
- "Warnings, errors and fatal issues" : "Figyelmeztetések, hibák és végzetes hibák",
- "Errors and fatal issues" : "Hibák és végzetes hibák",
- "Fatal issues only" : "Csak a végzetes hibák",
- "Log" : "Naplózás",
- "What to log" : "Mit naplózzon",
- "Download logfile" : "Naplófájl letöltése",
- "More" : "Több",
- "Less" : "Kevesebb",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "A naplófájl 100MB-nál nagyobb. A letöltése hosszabb időt vehet igénybe.",
"Security & setup warnings" : "Biztonsági és telepítési figyelmeztetések",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Úgy tűnik, hogy a PHP nem tudja olvasni a rendszer környezeti változóit. A getenv(\"PATH\") teszt visszatérési értéke üres.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Kérjük, ellenőrizze a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">telepítési dokumentációt ↗</a> a PHP konfigurációs beállításaival kapcsolatban, főleg ha PHP-FPM-et használ.",
@@ -271,10 +256,10 @@
"Cancel" : "Mégsem",
"Choose as profile picture" : "Kiválasztás profil képként",
"Full name" : "Teljes név",
- "No display name set" : "Nincs megjelenítési név beállítva",
"Email" : "E-mail",
"Your email address" : "Az Ön e-mail címe",
"For password recovery and notifications" : "Jelszó helyreállításhoz és értesítésekhez",
+ "No display name set" : "Nincs megjelenítési név beállítva",
"No email address set" : "Nincs e-mail cím beállítva",
"You are member of the following groups:" : "Tagja vagy a következő csoport(ok)nak:",
"Password" : "Jelszó",
@@ -330,11 +315,26 @@
"set new password" : "új jelszó beállítása",
"change email address" : "e-mail cím megváltoztatása",
"Default" : "Alapértelmezett",
+ "log-level out of allowed range" : "A naplózási szint a megengedett terjedelmen kívül van.",
+ "Forbidden" : "Tiltott",
+ "Invalid user" : "Érvénytelen felhasználó",
+ "Email saved" : "E-mail elmentve!",
"Language changed" : "A nyelv megváltozott",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Biztos abban, hogy hozzá akarja adni \"{domain}\"-t a megbízható tartományokhoz?",
"add group" : "csoport hozzáadása",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Minden (végzetes hibák, hibák, figyelmeztetések, információk, hibakeresési üzenetek)",
+ "Info, warnings, errors and fatal issues" : "Információk, figyelmeztetések, hibák és végzetes hibák",
+ "Warnings, errors and fatal issues" : "Figyelmeztetések, hibák és végzetes hibák",
+ "Errors and fatal issues" : "Hibák és végzetes hibák",
+ "Fatal issues only" : "Csak a végzetes hibák",
+ "Log" : "Naplózás",
+ "What to log" : "Mit naplózzon",
+ "Download logfile" : "Naplófájl letöltése",
+ "More" : "Több",
+ "Less" : "Kevesebb",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "A naplófájl 100MB-nál nagyobb. A letöltése hosszabb időt vehet igénybe.",
"Allow users to send mail notification for shared files" : "A felhasználók küldhessenek e-mail értesítést a megosztás létrejöttéről",
"Allow users to send mail notification for shared files to other users" : "A felhasználók küldhessenek más felhasználóknak e-mail értesítést a megosztott fájlokról",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Adatbázisként az SQLite-ot fogjuk használni. Nagyobb telepítések esetén javasoljuk, hogy váltson másik adatbázis háttérkiszolgálóra",
diff --git a/settings/l10n/id.js b/settings/l10n/id.js
index 9df9cd7b706..a848052212b 100644
--- a/settings/l10n/id.js
+++ b/settings/l10n/id.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "Grup sudah ada.",
"Unable to add group." : "Tidak dapat menambah grup.",
"Unable to delete group." : "Tidak dapat menghapus grup.",
- "log-level out of allowed range" : "level-log melebihi batas yang diizinkan",
"test email settings" : "pengaturan email percobaan",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Terjadi masalah saat mengirim email. Mohon periksa kembali pengaturan Anda. (Kesalahan: %s)",
"Email sent" : "Email terkirim",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "Tidak dapat membuat pengguna.",
"Your %s account was created" : "Akun %s Anda telah dibuat",
"Unable to delete user." : "Tidak dapat menghapus pengguna.",
- "Forbidden" : "Terlarang",
- "Invalid user" : "Pengguna salah",
+ "Unable to change full name" : "Tidak dapat mengubah nama lengkap",
"Unable to change mail address" : "Tidak dapat mengubah alamat email",
- "Email saved" : "Email disimpan",
"Your full name has been changed." : "Nama lengkap Anda telah diubah",
- "Unable to change full name" : "Tidak dapat mengubah nama lengkap",
"Couldn't remove app." : "Tidak dapat menghapus aplikasi.",
"Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin",
"Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s",
@@ -158,17 +154,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Anda perlu mengganti kunci enkrispi Anda dari enkripsi lama (ownCloud <= 8.0) ke yang baru. Mohon aktifkan \"Modul enkripsi standar\" dan jalankan 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Anda perlu untuk mengubah kunci enkripsi dari enkripsi lama (ownCloud <= 8.0) ke yang baru.",
"Start migration" : "Mulai migrasi",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Semuanya (Masalah fatal, kesalahan, peringatan, info, debug)",
- "Info, warnings, errors and fatal issues" : "Info, peringatan, kesalahan dan masalah fatal",
- "Warnings, errors and fatal issues" : "Peringatan, kesalahan dan masalah fatal",
- "Errors and fatal issues" : "Kesalahan dan masalah fatal",
- "Fatal issues only" : "Hanya masalah fatal",
- "Log" : "Log",
- "What to log" : "Apa yang akan di log",
- "Download logfile" : "Unduh berkas log",
- "More" : "Lainnya",
- "Less" : "Ciutkan",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Berkas log lebih besar dari 100MB. Pengunduhan ini memerlukan beberapa saat!",
"Security & setup warnings" : "Peringatan Keamanan & Pengaturan",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "kelihatannya php tidak diatur dengan benar untuk variabel lingkungan sistem kueri. Pemeriksaan dengan getenv(\"PATH\") hanya mengembalikan respon kosong.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Mohon cek <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi instalasi↗</a> untuk catatan konfigurasi php dan konfigurasi PHP server Anda, khususnya saat menggunakan php-fpm.",
@@ -255,10 +240,10 @@ OC.L10N.register(
"Cancel" : "Batal",
"Choose as profile picture" : "Pilih sebagai gambar profil",
"Full name" : "Nama lengkap",
- "No display name set" : "Nama tampilan tidak diatur",
"Email" : "Email",
"Your email address" : "Alamat email Anda",
"For password recovery and notifications" : "Untuk pemulihan sandi dan pemberitahuan",
+ "No display name set" : "Nama tampilan tidak diatur",
"No email address set" : "Alamat email tidak diatur",
"You are member of the following groups:" : "Anda adalah anggota dari grup berikut:",
"Password" : "Sandi",
@@ -307,11 +292,26 @@ OC.L10N.register(
"set new password" : "setel sandi baru",
"change email address" : "ubah alamat email",
"Default" : "Default",
+ "log-level out of allowed range" : "level-log melebihi batas yang diizinkan",
+ "Forbidden" : "Terlarang",
+ "Invalid user" : "Pengguna salah",
+ "Email saved" : "Email disimpan",
"Language changed" : "Bahasa telah diubah",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Apakah Anda yakin ingin menambahkan \"{domain}\" sebagai domain terpercaya?",
"add group" : "tambah grup",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Semuanya (Masalah fatal, kesalahan, peringatan, info, debug)",
+ "Info, warnings, errors and fatal issues" : "Info, peringatan, kesalahan dan masalah fatal",
+ "Warnings, errors and fatal issues" : "Peringatan, kesalahan dan masalah fatal",
+ "Errors and fatal issues" : "Kesalahan dan masalah fatal",
+ "Fatal issues only" : "Hanya masalah fatal",
+ "Log" : "Log",
+ "What to log" : "Apa yang akan di log",
+ "Download logfile" : "Unduh berkas log",
+ "More" : "Lainnya",
+ "Less" : "Ciutkan",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Berkas log lebih besar dari 100MB. Pengunduhan ini memerlukan beberapa saat!",
"Allow users to send mail notification for shared files" : "Izinkan pengguna untuk mengirimkan email pemberitahuan untuk berkas berbagi",
"Allow users to send mail notification for shared files to other users" : "Izinkan pengguna mengirim pemberitahuan email saat berbagi berkas kepada pengguna lainnya",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite digunakan sebagai basis data. Untuk instalasi yang lebih besar, kami menyarankan untuk beralih ke backend basis data yang berbeda.",
diff --git a/settings/l10n/id.json b/settings/l10n/id.json
index 8ce60846b44..9fc9c487d85 100644
--- a/settings/l10n/id.json
+++ b/settings/l10n/id.json
@@ -17,7 +17,6 @@
"Group already exists." : "Grup sudah ada.",
"Unable to add group." : "Tidak dapat menambah grup.",
"Unable to delete group." : "Tidak dapat menghapus grup.",
- "log-level out of allowed range" : "level-log melebihi batas yang diizinkan",
"test email settings" : "pengaturan email percobaan",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Terjadi masalah saat mengirim email. Mohon periksa kembali pengaturan Anda. (Kesalahan: %s)",
"Email sent" : "Email terkirim",
@@ -28,12 +27,9 @@
"Unable to create user." : "Tidak dapat membuat pengguna.",
"Your %s account was created" : "Akun %s Anda telah dibuat",
"Unable to delete user." : "Tidak dapat menghapus pengguna.",
- "Forbidden" : "Terlarang",
- "Invalid user" : "Pengguna salah",
+ "Unable to change full name" : "Tidak dapat mengubah nama lengkap",
"Unable to change mail address" : "Tidak dapat mengubah alamat email",
- "Email saved" : "Email disimpan",
"Your full name has been changed." : "Nama lengkap Anda telah diubah",
- "Unable to change full name" : "Tidak dapat mengubah nama lengkap",
"Couldn't remove app." : "Tidak dapat menghapus aplikasi.",
"Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin",
"Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s",
@@ -156,17 +152,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Anda perlu mengganti kunci enkrispi Anda dari enkripsi lama (ownCloud <= 8.0) ke yang baru. Mohon aktifkan \"Modul enkripsi standar\" dan jalankan 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Anda perlu untuk mengubah kunci enkripsi dari enkripsi lama (ownCloud <= 8.0) ke yang baru.",
"Start migration" : "Mulai migrasi",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Semuanya (Masalah fatal, kesalahan, peringatan, info, debug)",
- "Info, warnings, errors and fatal issues" : "Info, peringatan, kesalahan dan masalah fatal",
- "Warnings, errors and fatal issues" : "Peringatan, kesalahan dan masalah fatal",
- "Errors and fatal issues" : "Kesalahan dan masalah fatal",
- "Fatal issues only" : "Hanya masalah fatal",
- "Log" : "Log",
- "What to log" : "Apa yang akan di log",
- "Download logfile" : "Unduh berkas log",
- "More" : "Lainnya",
- "Less" : "Ciutkan",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Berkas log lebih besar dari 100MB. Pengunduhan ini memerlukan beberapa saat!",
"Security & setup warnings" : "Peringatan Keamanan & Pengaturan",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "kelihatannya php tidak diatur dengan benar untuk variabel lingkungan sistem kueri. Pemeriksaan dengan getenv(\"PATH\") hanya mengembalikan respon kosong.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Mohon cek <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi instalasi↗</a> untuk catatan konfigurasi php dan konfigurasi PHP server Anda, khususnya saat menggunakan php-fpm.",
@@ -253,10 +238,10 @@
"Cancel" : "Batal",
"Choose as profile picture" : "Pilih sebagai gambar profil",
"Full name" : "Nama lengkap",
- "No display name set" : "Nama tampilan tidak diatur",
"Email" : "Email",
"Your email address" : "Alamat email Anda",
"For password recovery and notifications" : "Untuk pemulihan sandi dan pemberitahuan",
+ "No display name set" : "Nama tampilan tidak diatur",
"No email address set" : "Alamat email tidak diatur",
"You are member of the following groups:" : "Anda adalah anggota dari grup berikut:",
"Password" : "Sandi",
@@ -305,11 +290,26 @@
"set new password" : "setel sandi baru",
"change email address" : "ubah alamat email",
"Default" : "Default",
+ "log-level out of allowed range" : "level-log melebihi batas yang diizinkan",
+ "Forbidden" : "Terlarang",
+ "Invalid user" : "Pengguna salah",
+ "Email saved" : "Email disimpan",
"Language changed" : "Bahasa telah diubah",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Apakah Anda yakin ingin menambahkan \"{domain}\" sebagai domain terpercaya?",
"add group" : "tambah grup",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Semuanya (Masalah fatal, kesalahan, peringatan, info, debug)",
+ "Info, warnings, errors and fatal issues" : "Info, peringatan, kesalahan dan masalah fatal",
+ "Warnings, errors and fatal issues" : "Peringatan, kesalahan dan masalah fatal",
+ "Errors and fatal issues" : "Kesalahan dan masalah fatal",
+ "Fatal issues only" : "Hanya masalah fatal",
+ "Log" : "Log",
+ "What to log" : "Apa yang akan di log",
+ "Download logfile" : "Unduh berkas log",
+ "More" : "Lainnya",
+ "Less" : "Ciutkan",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Berkas log lebih besar dari 100MB. Pengunduhan ini memerlukan beberapa saat!",
"Allow users to send mail notification for shared files" : "Izinkan pengguna untuk mengirimkan email pemberitahuan untuk berkas berbagi",
"Allow users to send mail notification for shared files to other users" : "Izinkan pengguna mengirim pemberitahuan email saat berbagi berkas kepada pengguna lainnya",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite digunakan sebagai basis data. Untuk instalasi yang lebih besar, kami menyarankan untuk beralih ke backend basis data yang berbeda.",
diff --git a/settings/l10n/is.js b/settings/l10n/is.js
index b1f41217c05..e8655e620cb 100644
--- a/settings/l10n/is.js
+++ b/settings/l10n/is.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "Hópur er þegar til.",
"Unable to add group." : "Ekki tókst að bæta hóp við.",
"Unable to delete group." : "Get ekki eytt hópi.",
- "log-level out of allowed range" : "annálsstig utan leyfðra marka",
"test email settings" : "prófa tölvupóststillingar",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Vandamál kom upp við að senda tölvupóst. Farðu yfir stillingarnar þínar. (Villa: %s)",
"Email sent" : "Tölvupóstur sendur",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "Gat ekki búið til notanda.",
"Your %s account was created" : "%s notandaaðgangurinn þinn var búinn til",
"Unable to delete user." : "Get ekki eytt notanda.",
- "Forbidden" : "Bannað",
- "Invalid user" : "Ógildur notandi",
+ "Unable to change full name" : "Get ekki breytt fullu nafni",
"Unable to change mail address" : "Get ekki breytt tölvupóstfangi",
- "Email saved" : "Tölvupóstfang vistað",
"Your full name has been changed." : "Fullu nafni þínu hefur verið breytt.",
- "Unable to change full name" : "Get ekki breytt fullu nafni",
"Couldn't remove app." : "Gat ekki fjarlægt forrit.",
"Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp",
"Unable to add user to group %s" : "Ekki tókst að bæta notanda við hópinn %s",
@@ -159,17 +155,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Þú verður að yfirfæra dulritunarlyklana þína úr gömlu dulrituninni (ownCloud <= 8.0) yfir í þá nýju. Virkjaðu \"Sjálfgefna dulritunareiningu\" og keyrðu 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Þú verður að yfirfæra dulritunarlyklana þína úr gömlu dulrituninni (ownCloud <= 8.0) yfir í þá nýju.",
"Start migration" : "Hefja yfirfærslu",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Allt (aflúsun, upplýsingar, viðvaranir, villur og alvarlegar aðvaranir)",
- "Info, warnings, errors and fatal issues" : "Upplýsingar, viðvaranir, villur og alvarlegar aðvaranir",
- "Warnings, errors and fatal issues" : "Viðvaranir, villur og alvarlegar aðvaranir",
- "Errors and fatal issues" : "Villur og alvarlegar aðvaranir",
- "Fatal issues only" : "Einungis alvarlegar aðvaranir",
- "Log" : "Annáll",
- "What to log" : "Hvað á að skrá í annál",
- "Download logfile" : "Sækja annál",
- "More" : "Meira",
- "Less" : "Minna",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Annállinn er stærri en 100 MB.Þetta gæti tekið nokkra stund!",
"Security & setup warnings" : "Öryggi og aðvaranir vegna uppsetningar",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Það lítur út eins og að PHP sé ekki rétt sett upp varðandi fyrirspurnir um umhverfisbreytur. Prófun með getenv(\"PATH\") skilar auðu svari.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Endilega skoðaðu <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">hjálparskjöl uppsetningarinnar ↗</a> varðandi athugasemdir vegna uppsetningar PHP og sjálfa uppsetningu PHP-þjónsins, Sérstaklega ef þú notar php-fpm.",
@@ -254,10 +239,10 @@ OC.L10N.register(
"Cancel" : "Hætta við",
"Choose as profile picture" : "Veldu sem einkennismynd",
"Full name" : "Fullt nafn",
- "No display name set" : "Ekkert birtingarnafn sett",
"Email" : "Netfang",
"Your email address" : "Netfangið þitt",
"For password recovery and notifications" : "Fyrir tilkynningar og endurheimtingu lykilorðs",
+ "No display name set" : "Ekkert birtingarnafn sett",
"No email address set" : "Ekkert tölvupóstfang sett",
"You are member of the following groups:" : "Þú ert meðlimur eftirfarandi hópa:",
"Password" : "Lykilorð",
@@ -311,11 +296,26 @@ OC.L10N.register(
"set new password" : "setja nýtt lykilorð",
"change email address" : "breyta tölvupóstfangi",
"Default" : "Sjálfgefið",
+ "log-level out of allowed range" : "annálsstig utan leyfðra marka",
+ "Forbidden" : "Bannað",
+ "Invalid user" : "Ógildur notandi",
+ "Email saved" : "Tölvupóstfang vistað",
"Language changed" : "Tungumáli breytt",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ertu viss um að þú viljir bæta \"{domain}\" við sem treystu léni?",
"add group" : "bæta við hópi",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Allt (aflúsun, upplýsingar, viðvaranir, villur og alvarlegar aðvaranir)",
+ "Info, warnings, errors and fatal issues" : "Upplýsingar, viðvaranir, villur og alvarlegar aðvaranir",
+ "Warnings, errors and fatal issues" : "Viðvaranir, villur og alvarlegar aðvaranir",
+ "Errors and fatal issues" : "Villur og alvarlegar aðvaranir",
+ "Fatal issues only" : "Einungis alvarlegar aðvaranir",
+ "Log" : "Annáll",
+ "What to log" : "Hvað á að skrá í annál",
+ "Download logfile" : "Sækja annál",
+ "More" : "Meira",
+ "Less" : "Minna",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Annállinn er stærri en 100 MB.Þetta gæti tekið nokkra stund!",
"Allow users to send mail notification for shared files" : "Leyfa notendum að senda tilkynningar í tölvupósti vegna deildra skráa",
"Allow users to send mail notification for shared files to other users" : "Leyfa notendum að senda tilkynningar til annarra notenda í tölvupósti vegna deildra skráa",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite er notað sem gagnagrunnur. Fyrir stærri uppsetningar mælum við með að velja annan gagnagrunnsbakenda.",
diff --git a/settings/l10n/is.json b/settings/l10n/is.json
index 056f29eff65..61773936704 100644
--- a/settings/l10n/is.json
+++ b/settings/l10n/is.json
@@ -17,7 +17,6 @@
"Group already exists." : "Hópur er þegar til.",
"Unable to add group." : "Ekki tókst að bæta hóp við.",
"Unable to delete group." : "Get ekki eytt hópi.",
- "log-level out of allowed range" : "annálsstig utan leyfðra marka",
"test email settings" : "prófa tölvupóststillingar",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Vandamál kom upp við að senda tölvupóst. Farðu yfir stillingarnar þínar. (Villa: %s)",
"Email sent" : "Tölvupóstur sendur",
@@ -28,12 +27,9 @@
"Unable to create user." : "Gat ekki búið til notanda.",
"Your %s account was created" : "%s notandaaðgangurinn þinn var búinn til",
"Unable to delete user." : "Get ekki eytt notanda.",
- "Forbidden" : "Bannað",
- "Invalid user" : "Ógildur notandi",
+ "Unable to change full name" : "Get ekki breytt fullu nafni",
"Unable to change mail address" : "Get ekki breytt tölvupóstfangi",
- "Email saved" : "Tölvupóstfang vistað",
"Your full name has been changed." : "Fullu nafni þínu hefur verið breytt.",
- "Unable to change full name" : "Get ekki breytt fullu nafni",
"Couldn't remove app." : "Gat ekki fjarlægt forrit.",
"Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp",
"Unable to add user to group %s" : "Ekki tókst að bæta notanda við hópinn %s",
@@ -157,17 +153,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Þú verður að yfirfæra dulritunarlyklana þína úr gömlu dulrituninni (ownCloud <= 8.0) yfir í þá nýju. Virkjaðu \"Sjálfgefna dulritunareiningu\" og keyrðu 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Þú verður að yfirfæra dulritunarlyklana þína úr gömlu dulrituninni (ownCloud <= 8.0) yfir í þá nýju.",
"Start migration" : "Hefja yfirfærslu",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Allt (aflúsun, upplýsingar, viðvaranir, villur og alvarlegar aðvaranir)",
- "Info, warnings, errors and fatal issues" : "Upplýsingar, viðvaranir, villur og alvarlegar aðvaranir",
- "Warnings, errors and fatal issues" : "Viðvaranir, villur og alvarlegar aðvaranir",
- "Errors and fatal issues" : "Villur og alvarlegar aðvaranir",
- "Fatal issues only" : "Einungis alvarlegar aðvaranir",
- "Log" : "Annáll",
- "What to log" : "Hvað á að skrá í annál",
- "Download logfile" : "Sækja annál",
- "More" : "Meira",
- "Less" : "Minna",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Annállinn er stærri en 100 MB.Þetta gæti tekið nokkra stund!",
"Security & setup warnings" : "Öryggi og aðvaranir vegna uppsetningar",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Það lítur út eins og að PHP sé ekki rétt sett upp varðandi fyrirspurnir um umhverfisbreytur. Prófun með getenv(\"PATH\") skilar auðu svari.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Endilega skoðaðu <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">hjálparskjöl uppsetningarinnar ↗</a> varðandi athugasemdir vegna uppsetningar PHP og sjálfa uppsetningu PHP-þjónsins, Sérstaklega ef þú notar php-fpm.",
@@ -252,10 +237,10 @@
"Cancel" : "Hætta við",
"Choose as profile picture" : "Veldu sem einkennismynd",
"Full name" : "Fullt nafn",
- "No display name set" : "Ekkert birtingarnafn sett",
"Email" : "Netfang",
"Your email address" : "Netfangið þitt",
"For password recovery and notifications" : "Fyrir tilkynningar og endurheimtingu lykilorðs",
+ "No display name set" : "Ekkert birtingarnafn sett",
"No email address set" : "Ekkert tölvupóstfang sett",
"You are member of the following groups:" : "Þú ert meðlimur eftirfarandi hópa:",
"Password" : "Lykilorð",
@@ -309,11 +294,26 @@
"set new password" : "setja nýtt lykilorð",
"change email address" : "breyta tölvupóstfangi",
"Default" : "Sjálfgefið",
+ "log-level out of allowed range" : "annálsstig utan leyfðra marka",
+ "Forbidden" : "Bannað",
+ "Invalid user" : "Ógildur notandi",
+ "Email saved" : "Tölvupóstfang vistað",
"Language changed" : "Tungumáli breytt",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ertu viss um að þú viljir bæta \"{domain}\" við sem treystu léni?",
"add group" : "bæta við hópi",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Allt (aflúsun, upplýsingar, viðvaranir, villur og alvarlegar aðvaranir)",
+ "Info, warnings, errors and fatal issues" : "Upplýsingar, viðvaranir, villur og alvarlegar aðvaranir",
+ "Warnings, errors and fatal issues" : "Viðvaranir, villur og alvarlegar aðvaranir",
+ "Errors and fatal issues" : "Villur og alvarlegar aðvaranir",
+ "Fatal issues only" : "Einungis alvarlegar aðvaranir",
+ "Log" : "Annáll",
+ "What to log" : "Hvað á að skrá í annál",
+ "Download logfile" : "Sækja annál",
+ "More" : "Meira",
+ "Less" : "Minna",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Annállinn er stærri en 100 MB.Þetta gæti tekið nokkra stund!",
"Allow users to send mail notification for shared files" : "Leyfa notendum að senda tilkynningar í tölvupósti vegna deildra skráa",
"Allow users to send mail notification for shared files to other users" : "Leyfa notendum að senda tilkynningar til annarra notenda í tölvupósti vegna deildra skráa",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite er notað sem gagnagrunnur. Fyrir stærri uppsetningar mælum við með að velja annan gagnagrunnsbakenda.",
diff --git a/settings/l10n/it.js b/settings/l10n/it.js
index 72c9ee38660..204a7e56b52 100644
--- a/settings/l10n/it.js
+++ b/settings/l10n/it.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "Il gruppo esiste già.",
"Unable to add group." : "Impossibile aggiungere il gruppo.",
"Unable to delete group." : "Impossibile eliminare il gruppo.",
- "log-level out of allowed range" : "livello di log fuori dall'intervallo consentito",
"test email settings" : "prova impostazioni email",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Si è verificato un problema durante l'invio dell'email. Controlla le tue impostazioni. (Errore: %s)",
"Email sent" : "Email inviata",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "Impossibile creare l'utente.",
"Your %s account was created" : "Il tuo account %s è stato creato",
"Unable to delete user." : "Impossibile eliminare l'utente.",
- "Forbidden" : "Vietato",
- "Invalid user" : "Utente non valido",
+ "Unable to change full name" : "Impossibile cambiare il nome completo",
"Unable to change mail address" : "Impossibile cambiare l'indirizzo di posta",
- "Email saved" : "Email salvata",
"Your full name has been changed." : "Il tuo nome completo è stato cambiato.",
- "Unable to change full name" : "Impossibile cambiare il nome completo",
"Couldn't remove app." : "Impossibile rimuovere l'applicazione.",
"Password confirmation is required" : "La conferma della password è richiesta",
"Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione",
@@ -168,17 +164,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova. Abilita il \"Modulo di cifratura predefinito\" ed esegui 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova.",
"Start migration" : "Avvia migrazione",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Tutto (problemi gravi, errori, avvisi, informazioni, debug)",
- "Info, warnings, errors and fatal issues" : "Informazioni, avvisi, errori e problemi gravi",
- "Warnings, errors and fatal issues" : "Avvisi, errori e problemi gravi",
- "Errors and fatal issues" : "Errori e problemi gravi",
- "Fatal issues only" : "Solo problemi gravi",
- "Log" : "Log",
- "What to log" : "Cosa registrare",
- "Download logfile" : "Scarica file di log",
- "More" : "Altro",
- "Less" : "Meno",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Il file di log è più grande di 100MB. Scaricarlo potrebbe richiedere del tempo!",
"Security & setup warnings" : "Avvisi di sicurezza e di configurazione",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php non sembra essere configurato correttamente per interrogare le variabili d'ambiente di sistema. Il test con getenv(\"PATH\") restituisce solo una risposta vuota.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Controlla la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione di installazione↗</a> per le note di configurazione di php e la configurazione del tuo server, in particolare quando utilizzi php-fpm.",
@@ -273,10 +258,10 @@ OC.L10N.register(
"Cancel" : "Annulla",
"Choose as profile picture" : "Scegli come immagine del profilo",
"Full name" : "Nome completo",
- "No display name set" : "Nome visualizzato non impostato",
"Email" : "Posta elettronica",
"Your email address" : "Il tuo indirizzo email",
"For password recovery and notifications" : "Per il ripristino della password e per le notifiche",
+ "No display name set" : "Nome visualizzato non impostato",
"No email address set" : "Nessun indirizzo email impostato",
"You are member of the following groups:" : "Sei membro dei seguenti gruppi:",
"Password" : "Password",
@@ -332,11 +317,26 @@ OC.L10N.register(
"set new password" : "imposta una nuova password",
"change email address" : "cambia l'indirizzo email",
"Default" : "Predefinito",
+ "log-level out of allowed range" : "livello di log fuori dall'intervallo consentito",
+ "Forbidden" : "Vietato",
+ "Invalid user" : "Utente non valido",
+ "Email saved" : "Email salvata",
"Language changed" : "Lingua modificata",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sei sicuro di voler aggiungere \"{domain}\" come dominio attendibile?",
"add group" : "aggiungi gruppo",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Tutto (problemi gravi, errori, avvisi, informazioni, debug)",
+ "Info, warnings, errors and fatal issues" : "Informazioni, avvisi, errori e problemi gravi",
+ "Warnings, errors and fatal issues" : "Avvisi, errori e problemi gravi",
+ "Errors and fatal issues" : "Errori e problemi gravi",
+ "Fatal issues only" : "Solo problemi gravi",
+ "Log" : "Log",
+ "What to log" : "Cosa registrare",
+ "Download logfile" : "Scarica file di log",
+ "More" : "Altro",
+ "Less" : "Meno",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Il file di log è più grande di 100MB. Scaricarlo potrebbe richiedere del tempo!",
"Allow users to send mail notification for shared files" : "Consenti agli utenti di inviare email di notifica per i file condivisi",
"Allow users to send mail notification for shared files to other users" : "Consenti agli utenti di inviare email di notifica per i file condivisi con altri utenti",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite è utilizzato come database. Per installazioni più grandi consigliamo di passare a un motore di database diverso.",
diff --git a/settings/l10n/it.json b/settings/l10n/it.json
index 7f7b8f89501..c5ed2c0f2bf 100644
--- a/settings/l10n/it.json
+++ b/settings/l10n/it.json
@@ -17,7 +17,6 @@
"Group already exists." : "Il gruppo esiste già.",
"Unable to add group." : "Impossibile aggiungere il gruppo.",
"Unable to delete group." : "Impossibile eliminare il gruppo.",
- "log-level out of allowed range" : "livello di log fuori dall'intervallo consentito",
"test email settings" : "prova impostazioni email",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Si è verificato un problema durante l'invio dell'email. Controlla le tue impostazioni. (Errore: %s)",
"Email sent" : "Email inviata",
@@ -28,12 +27,9 @@
"Unable to create user." : "Impossibile creare l'utente.",
"Your %s account was created" : "Il tuo account %s è stato creato",
"Unable to delete user." : "Impossibile eliminare l'utente.",
- "Forbidden" : "Vietato",
- "Invalid user" : "Utente non valido",
+ "Unable to change full name" : "Impossibile cambiare il nome completo",
"Unable to change mail address" : "Impossibile cambiare l'indirizzo di posta",
- "Email saved" : "Email salvata",
"Your full name has been changed." : "Il tuo nome completo è stato cambiato.",
- "Unable to change full name" : "Impossibile cambiare il nome completo",
"Couldn't remove app." : "Impossibile rimuovere l'applicazione.",
"Password confirmation is required" : "La conferma della password è richiesta",
"Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione",
@@ -166,17 +162,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova. Abilita il \"Modulo di cifratura predefinito\" ed esegui 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova.",
"Start migration" : "Avvia migrazione",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Tutto (problemi gravi, errori, avvisi, informazioni, debug)",
- "Info, warnings, errors and fatal issues" : "Informazioni, avvisi, errori e problemi gravi",
- "Warnings, errors and fatal issues" : "Avvisi, errori e problemi gravi",
- "Errors and fatal issues" : "Errori e problemi gravi",
- "Fatal issues only" : "Solo problemi gravi",
- "Log" : "Log",
- "What to log" : "Cosa registrare",
- "Download logfile" : "Scarica file di log",
- "More" : "Altro",
- "Less" : "Meno",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Il file di log è più grande di 100MB. Scaricarlo potrebbe richiedere del tempo!",
"Security & setup warnings" : "Avvisi di sicurezza e di configurazione",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php non sembra essere configurato correttamente per interrogare le variabili d'ambiente di sistema. Il test con getenv(\"PATH\") restituisce solo una risposta vuota.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Controlla la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione di installazione↗</a> per le note di configurazione di php e la configurazione del tuo server, in particolare quando utilizzi php-fpm.",
@@ -271,10 +256,10 @@
"Cancel" : "Annulla",
"Choose as profile picture" : "Scegli come immagine del profilo",
"Full name" : "Nome completo",
- "No display name set" : "Nome visualizzato non impostato",
"Email" : "Posta elettronica",
"Your email address" : "Il tuo indirizzo email",
"For password recovery and notifications" : "Per il ripristino della password e per le notifiche",
+ "No display name set" : "Nome visualizzato non impostato",
"No email address set" : "Nessun indirizzo email impostato",
"You are member of the following groups:" : "Sei membro dei seguenti gruppi:",
"Password" : "Password",
@@ -330,11 +315,26 @@
"set new password" : "imposta una nuova password",
"change email address" : "cambia l'indirizzo email",
"Default" : "Predefinito",
+ "log-level out of allowed range" : "livello di log fuori dall'intervallo consentito",
+ "Forbidden" : "Vietato",
+ "Invalid user" : "Utente non valido",
+ "Email saved" : "Email salvata",
"Language changed" : "Lingua modificata",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Sei sicuro di voler aggiungere \"{domain}\" come dominio attendibile?",
"add group" : "aggiungi gruppo",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Tutto (problemi gravi, errori, avvisi, informazioni, debug)",
+ "Info, warnings, errors and fatal issues" : "Informazioni, avvisi, errori e problemi gravi",
+ "Warnings, errors and fatal issues" : "Avvisi, errori e problemi gravi",
+ "Errors and fatal issues" : "Errori e problemi gravi",
+ "Fatal issues only" : "Solo problemi gravi",
+ "Log" : "Log",
+ "What to log" : "Cosa registrare",
+ "Download logfile" : "Scarica file di log",
+ "More" : "Altro",
+ "Less" : "Meno",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Il file di log è più grande di 100MB. Scaricarlo potrebbe richiedere del tempo!",
"Allow users to send mail notification for shared files" : "Consenti agli utenti di inviare email di notifica per i file condivisi",
"Allow users to send mail notification for shared files to other users" : "Consenti agli utenti di inviare email di notifica per i file condivisi con altri utenti",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite è utilizzato come database. Per installazioni più grandi consigliamo di passare a un motore di database diverso.",
diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js
index c09c8b3f42c..035b994d612 100644
--- a/settings/l10n/ja.js
+++ b/settings/l10n/ja.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "グループはすでに存在しています",
"Unable to add group." : "グループを追加できません",
"Unable to delete group." : "グループを削除できません",
- "log-level out of allowed range" : "ログレベルが許可された範囲を超えています",
"test email settings" : "メール設定のテスト",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "メールの送信中に問題が発生しました。設定を確認してください。 (Error: %s)",
"Email sent" : "メールを送信しました",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "ユーザーを追加できません。",
"Your %s account was created" : "アカウント %s を作成しました",
"Unable to delete user." : "ユーザーを削除できません。",
- "Forbidden" : "禁止",
- "Invalid user" : "無効なユーザー",
+ "Unable to change full name" : "名前を変更できません",
"Unable to change mail address" : "メールアドレスを変更できません",
- "Email saved" : "メールアドレスを保存しました",
"Your full name has been changed." : "名前を変更しました。",
- "Unable to change full name" : "名前を変更できません",
"Couldn't remove app." : "アプリが削除できませんでした。",
"Password confirmation is required" : "パスワードの確認が必要です",
"Admins can't remove themself from the admin group" : "管理者は自身を管理者グループから削除できません。",
@@ -168,17 +164,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "古い暗号化(ownCloud <= 8.0) から新しいものに暗号化キーを移行する必要があります。\"デフォルトの暗号化モジュール\" を有効にして 'occ encryption:migrate' を実行してください。",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "古い暗号化(ownCloud <= 8.0) から新しいものに暗号化キーを移行する必要があります。",
"Start migration" : "移行を開始",
- "Everything (fatal issues, errors, warnings, info, debug)" : "すべて (致命的な問題、エラー、警告、情報、デバッグ)",
- "Info, warnings, errors and fatal issues" : "情報、警告、エラー、致命的な問題",
- "Warnings, errors and fatal issues" : "警告、エラー、致命的な問題",
- "Errors and fatal issues" : "エラー、致命的な問題",
- "Fatal issues only" : "致命的な問題のみ",
- "Log" : "ログ",
- "What to log" : "ログ出力対象",
- "Download logfile" : "ログファイルのダウンロード",
- "More" : "もっと見る",
- "Less" : "閉じる",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ログファイルが 100MB 以上あります。ダウンロードに時間がかかります!",
"Security & setup warnings" : "セキュリティ&セットアップ警告",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHPのシステム環境変数が正しく設定されていないようです。getenv(\"PATH\") コマンドでテストして何も値を返さないことを確認してください。",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "PHP設定の注意事項と php-fpmを利用する場合のサーバー向け設定を <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> インストールドキュメント ↗</a> で確認してください。",
@@ -273,10 +258,10 @@ OC.L10N.register(
"Cancel" : "キャンセル",
"Choose as profile picture" : "プロファイル画像として選択",
"Full name" : "氏名",
- "No display name set" : "表示名が未設定",
"Email" : "メール",
"Your email address" : "あなたのメールアドレス",
"For password recovery and notifications" : "パスワード回復と通知用",
+ "No display name set" : "表示名が未設定",
"No email address set" : "メールアドレスが設定されていません",
"You are member of the following groups:" : "以下のグループのメンバーです:",
"Password" : "パスワード",
@@ -332,11 +317,26 @@ OC.L10N.register(
"set new password" : "新しいパスワードを設定",
"change email address" : "メールアドレスを変更",
"Default" : "デフォルト",
+ "log-level out of allowed range" : "ログレベルが許可された範囲を超えています",
+ "Forbidden" : "禁止",
+ "Invalid user" : "無効なユーザー",
+ "Email saved" : "メールアドレスを保存しました",
"Language changed" : "言語が変更されました",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" を信頼するドメインに追加してもよろしいでしょうか?",
"add group" : "グループを追加する",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "すべて (致命的な問題、エラー、警告、情報、デバッグ)",
+ "Info, warnings, errors and fatal issues" : "情報、警告、エラー、致命的な問題",
+ "Warnings, errors and fatal issues" : "警告、エラー、致命的な問題",
+ "Errors and fatal issues" : "エラー、致命的な問題",
+ "Fatal issues only" : "致命的な問題のみ",
+ "Log" : "ログ",
+ "What to log" : "ログ出力対象",
+ "Download logfile" : "ログファイルのダウンロード",
+ "More" : "もっと見る",
+ "Less" : "閉じる",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ログファイルが 100MB 以上あります。ダウンロードに時間がかかります!",
"Allow users to send mail notification for shared files" : "共有ファイルに関するメール通知の送信をユーザーに許可する",
"Allow users to send mail notification for shared files to other users" : "他ユーザーへの共有ファイルに関するメール通知の送信をユーザーに許可する",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLiteがデータベースとして使用されています。大規模な運用では別のデータベースに切り替えることをお勧めします。",
diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json
index c7b2174859f..887cd1312be 100644
--- a/settings/l10n/ja.json
+++ b/settings/l10n/ja.json
@@ -17,7 +17,6 @@
"Group already exists." : "グループはすでに存在しています",
"Unable to add group." : "グループを追加できません",
"Unable to delete group." : "グループを削除できません",
- "log-level out of allowed range" : "ログレベルが許可された範囲を超えています",
"test email settings" : "メール設定のテスト",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "メールの送信中に問題が発生しました。設定を確認してください。 (Error: %s)",
"Email sent" : "メールを送信しました",
@@ -28,12 +27,9 @@
"Unable to create user." : "ユーザーを追加できません。",
"Your %s account was created" : "アカウント %s を作成しました",
"Unable to delete user." : "ユーザーを削除できません。",
- "Forbidden" : "禁止",
- "Invalid user" : "無効なユーザー",
+ "Unable to change full name" : "名前を変更できません",
"Unable to change mail address" : "メールアドレスを変更できません",
- "Email saved" : "メールアドレスを保存しました",
"Your full name has been changed." : "名前を変更しました。",
- "Unable to change full name" : "名前を変更できません",
"Couldn't remove app." : "アプリが削除できませんでした。",
"Password confirmation is required" : "パスワードの確認が必要です",
"Admins can't remove themself from the admin group" : "管理者は自身を管理者グループから削除できません。",
@@ -166,17 +162,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "古い暗号化(ownCloud <= 8.0) から新しいものに暗号化キーを移行する必要があります。\"デフォルトの暗号化モジュール\" を有効にして 'occ encryption:migrate' を実行してください。",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "古い暗号化(ownCloud <= 8.0) から新しいものに暗号化キーを移行する必要があります。",
"Start migration" : "移行を開始",
- "Everything (fatal issues, errors, warnings, info, debug)" : "すべて (致命的な問題、エラー、警告、情報、デバッグ)",
- "Info, warnings, errors and fatal issues" : "情報、警告、エラー、致命的な問題",
- "Warnings, errors and fatal issues" : "警告、エラー、致命的な問題",
- "Errors and fatal issues" : "エラー、致命的な問題",
- "Fatal issues only" : "致命的な問題のみ",
- "Log" : "ログ",
- "What to log" : "ログ出力対象",
- "Download logfile" : "ログファイルのダウンロード",
- "More" : "もっと見る",
- "Less" : "閉じる",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ログファイルが 100MB 以上あります。ダウンロードに時間がかかります!",
"Security & setup warnings" : "セキュリティ&セットアップ警告",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHPのシステム環境変数が正しく設定されていないようです。getenv(\"PATH\") コマンドでテストして何も値を返さないことを確認してください。",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "PHP設定の注意事項と php-fpmを利用する場合のサーバー向け設定を <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> インストールドキュメント ↗</a> で確認してください。",
@@ -271,10 +256,10 @@
"Cancel" : "キャンセル",
"Choose as profile picture" : "プロファイル画像として選択",
"Full name" : "氏名",
- "No display name set" : "表示名が未設定",
"Email" : "メール",
"Your email address" : "あなたのメールアドレス",
"For password recovery and notifications" : "パスワード回復と通知用",
+ "No display name set" : "表示名が未設定",
"No email address set" : "メールアドレスが設定されていません",
"You are member of the following groups:" : "以下のグループのメンバーです:",
"Password" : "パスワード",
@@ -330,11 +315,26 @@
"set new password" : "新しいパスワードを設定",
"change email address" : "メールアドレスを変更",
"Default" : "デフォルト",
+ "log-level out of allowed range" : "ログレベルが許可された範囲を超えています",
+ "Forbidden" : "禁止",
+ "Invalid user" : "無効なユーザー",
+ "Email saved" : "メールアドレスを保存しました",
"Language changed" : "言語が変更されました",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" を信頼するドメインに追加してもよろしいでしょうか?",
"add group" : "グループを追加する",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "すべて (致命的な問題、エラー、警告、情報、デバッグ)",
+ "Info, warnings, errors and fatal issues" : "情報、警告、エラー、致命的な問題",
+ "Warnings, errors and fatal issues" : "警告、エラー、致命的な問題",
+ "Errors and fatal issues" : "エラー、致命的な問題",
+ "Fatal issues only" : "致命的な問題のみ",
+ "Log" : "ログ",
+ "What to log" : "ログ出力対象",
+ "Download logfile" : "ログファイルのダウンロード",
+ "More" : "もっと見る",
+ "Less" : "閉じる",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ログファイルが 100MB 以上あります。ダウンロードに時間がかかります!",
"Allow users to send mail notification for shared files" : "共有ファイルに関するメール通知の送信をユーザーに許可する",
"Allow users to send mail notification for shared files to other users" : "他ユーザーへの共有ファイルに関するメール通知の送信をユーザーに許可する",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLiteがデータベースとして使用されています。大規模な運用では別のデータベースに切り替えることをお勧めします。",
diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js
index 49c8bb6306b..cd225493690 100644
--- a/settings/l10n/ko.js
+++ b/settings/l10n/ko.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "그룹이 이미 존재합니다.",
"Unable to add group." : "그룹을 추가할 수 없습니다.",
"Unable to delete group." : "그룹을 삭제할 수 없습니다.",
- "log-level out of allowed range" : "로그 단계가 허용 범위를 벗어남",
"test email settings" : "이메일 설정 시험",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "이메일을 보내는 중 오류가 발생했습니다. 설정을 확인하십시오.(오류: %s)",
"Email sent" : "이메일 발송됨",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "사용자를 만들 수 없습니다.",
"Your %s account was created" : "%s 계정을 등록했습니다",
"Unable to delete user." : "사용자를 삭제할 수 없습니다.",
- "Forbidden" : "거부됨",
- "Invalid user" : "잘못된 사용자",
+ "Unable to change full name" : "전체 이름을 변경할 수 없음",
"Unable to change mail address" : "이메일 주소를 변경할 수 없음",
- "Email saved" : "이메일 저장됨",
"Your full name has been changed." : "전체 이름이 변경되었습니다.",
- "Unable to change full name" : "전체 이름을 변경할 수 없음",
"Couldn't remove app." : "앱을 삭제할 수 없습니다.",
"Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음",
"Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음",
@@ -154,17 +150,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "과거에 사용하였던(ownCloud <= 8.0) 암호화된 데이터에서 키를 이전해야 합니다. \"기본 암호화 모듈\"을 활성화한 다음 'occ encryption:migrate'를 실행하십시오",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "ownCloud 8.0 이하에서 사용한 이전 암호화 키를 새 키로 이전해야 합니다.",
"Start migration" : "이전 시작",
- "Everything (fatal issues, errors, warnings, info, debug)" : "모두 (치명적 문제, 오류, 경고, 정보, 디버그)",
- "Info, warnings, errors and fatal issues" : "정보, 경고, 오류, 치명적 문제",
- "Warnings, errors and fatal issues" : "경고, 오류, 치명적 문제",
- "Errors and fatal issues" : "오류, 치명적 문제",
- "Fatal issues only" : "치명적 문제만",
- "Log" : "로그",
- "What to log" : "남길 로그",
- "Download logfile" : "로그 파일 다운로드",
- "More" : "더 중요함",
- "Less" : "덜 중요함",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "로그 파일이 100MB보다 큽니다. 다운로드하는 데 시간이 걸릴 수 있습니다!",
"Security & setup warnings" : "보안 및 설치 경고",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php가 시스템 환경 변수를 올바르게 조회할 수 있도록 설정되지 않았습니다. getenv(\"PATH\")의 값이 비어 있습니다.",
"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." : "읽기 전용 설정이 활성화되었습니다. 이 상태에서는 웹 인터페이스를 통하여 일부 설정을 변경할 수 없습니다. 또한 매 업데이트마다 파일을 쓸 수 있는 상태로 변경해야 합니다.",
@@ -246,10 +231,10 @@ OC.L10N.register(
"Cancel" : "취소",
"Choose as profile picture" : "프로필 사진으로 선택",
"Full name" : "전체 이름",
- "No display name set" : "표시 이름이 설정되지 않음",
"Email" : "이메일",
"Your email address" : "이메일 주소",
"For password recovery and notifications" : "암호 복구와 알림에 사용",
+ "No display name set" : "표시 이름이 설정되지 않음",
"No email address set" : "이메일 주소가 설정되지 않음",
"You are member of the following groups:" : "다음 그룹의 구성원입니다:",
"Password" : "암호",
@@ -295,11 +280,26 @@ OC.L10N.register(
"set new password" : "새 암호 설정",
"change email address" : "이메일 주소 변경",
"Default" : "기본값",
+ "log-level out of allowed range" : "로그 단계가 허용 범위를 벗어남",
+ "Forbidden" : "거부됨",
+ "Invalid user" : "잘못된 사용자",
+ "Email saved" : "이메일 저장됨",
"Language changed" : "언어가 변경됨",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "신뢰할 수 있는 도메인 목록에 \"{domain}\"을(를) 추가하시겠습니까?",
"add group" : "그룹 추가",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "모두 (치명적 문제, 오류, 경고, 정보, 디버그)",
+ "Info, warnings, errors and fatal issues" : "정보, 경고, 오류, 치명적 문제",
+ "Warnings, errors and fatal issues" : "경고, 오류, 치명적 문제",
+ "Errors and fatal issues" : "오류, 치명적 문제",
+ "Fatal issues only" : "치명적 문제만",
+ "Log" : "로그",
+ "What to log" : "남길 로그",
+ "Download logfile" : "로그 파일 다운로드",
+ "More" : "더 중요함",
+ "Less" : "덜 중요함",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "로그 파일이 100MB보다 큽니다. 다운로드하는 데 시간이 걸릴 수 있습니다!",
"Allow users to send mail notification for shared files" : "공유 파일 이메일 알림 전송 허용",
"Allow users to send mail notification for shared files to other users" : "다른 사용자에게 공유 파일 이메일 알림 전송 허용",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "데이터베이스로 SQLite를 사용하고 있습니다. 대규모의 파일을 관리하려고 한다면 다른 데이터베이스 백엔드로 전환할 것을 권장합니다.",
diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json
index 5de2325d0a8..bcd6e4bf3b4 100644
--- a/settings/l10n/ko.json
+++ b/settings/l10n/ko.json
@@ -17,7 +17,6 @@
"Group already exists." : "그룹이 이미 존재합니다.",
"Unable to add group." : "그룹을 추가할 수 없습니다.",
"Unable to delete group." : "그룹을 삭제할 수 없습니다.",
- "log-level out of allowed range" : "로그 단계가 허용 범위를 벗어남",
"test email settings" : "이메일 설정 시험",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "이메일을 보내는 중 오류가 발생했습니다. 설정을 확인하십시오.(오류: %s)",
"Email sent" : "이메일 발송됨",
@@ -28,12 +27,9 @@
"Unable to create user." : "사용자를 만들 수 없습니다.",
"Your %s account was created" : "%s 계정을 등록했습니다",
"Unable to delete user." : "사용자를 삭제할 수 없습니다.",
- "Forbidden" : "거부됨",
- "Invalid user" : "잘못된 사용자",
+ "Unable to change full name" : "전체 이름을 변경할 수 없음",
"Unable to change mail address" : "이메일 주소를 변경할 수 없음",
- "Email saved" : "이메일 저장됨",
"Your full name has been changed." : "전체 이름이 변경되었습니다.",
- "Unable to change full name" : "전체 이름을 변경할 수 없음",
"Couldn't remove app." : "앱을 삭제할 수 없습니다.",
"Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음",
"Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음",
@@ -152,17 +148,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "과거에 사용하였던(ownCloud <= 8.0) 암호화된 데이터에서 키를 이전해야 합니다. \"기본 암호화 모듈\"을 활성화한 다음 'occ encryption:migrate'를 실행하십시오",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "ownCloud 8.0 이하에서 사용한 이전 암호화 키를 새 키로 이전해야 합니다.",
"Start migration" : "이전 시작",
- "Everything (fatal issues, errors, warnings, info, debug)" : "모두 (치명적 문제, 오류, 경고, 정보, 디버그)",
- "Info, warnings, errors and fatal issues" : "정보, 경고, 오류, 치명적 문제",
- "Warnings, errors and fatal issues" : "경고, 오류, 치명적 문제",
- "Errors and fatal issues" : "오류, 치명적 문제",
- "Fatal issues only" : "치명적 문제만",
- "Log" : "로그",
- "What to log" : "남길 로그",
- "Download logfile" : "로그 파일 다운로드",
- "More" : "더 중요함",
- "Less" : "덜 중요함",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "로그 파일이 100MB보다 큽니다. 다운로드하는 데 시간이 걸릴 수 있습니다!",
"Security & setup warnings" : "보안 및 설치 경고",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php가 시스템 환경 변수를 올바르게 조회할 수 있도록 설정되지 않았습니다. getenv(\"PATH\")의 값이 비어 있습니다.",
"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." : "읽기 전용 설정이 활성화되었습니다. 이 상태에서는 웹 인터페이스를 통하여 일부 설정을 변경할 수 없습니다. 또한 매 업데이트마다 파일을 쓸 수 있는 상태로 변경해야 합니다.",
@@ -244,10 +229,10 @@
"Cancel" : "취소",
"Choose as profile picture" : "프로필 사진으로 선택",
"Full name" : "전체 이름",
- "No display name set" : "표시 이름이 설정되지 않음",
"Email" : "이메일",
"Your email address" : "이메일 주소",
"For password recovery and notifications" : "암호 복구와 알림에 사용",
+ "No display name set" : "표시 이름이 설정되지 않음",
"No email address set" : "이메일 주소가 설정되지 않음",
"You are member of the following groups:" : "다음 그룹의 구성원입니다:",
"Password" : "암호",
@@ -293,11 +278,26 @@
"set new password" : "새 암호 설정",
"change email address" : "이메일 주소 변경",
"Default" : "기본값",
+ "log-level out of allowed range" : "로그 단계가 허용 범위를 벗어남",
+ "Forbidden" : "거부됨",
+ "Invalid user" : "잘못된 사용자",
+ "Email saved" : "이메일 저장됨",
"Language changed" : "언어가 변경됨",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "신뢰할 수 있는 도메인 목록에 \"{domain}\"을(를) 추가하시겠습니까?",
"add group" : "그룹 추가",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "모두 (치명적 문제, 오류, 경고, 정보, 디버그)",
+ "Info, warnings, errors and fatal issues" : "정보, 경고, 오류, 치명적 문제",
+ "Warnings, errors and fatal issues" : "경고, 오류, 치명적 문제",
+ "Errors and fatal issues" : "오류, 치명적 문제",
+ "Fatal issues only" : "치명적 문제만",
+ "Log" : "로그",
+ "What to log" : "남길 로그",
+ "Download logfile" : "로그 파일 다운로드",
+ "More" : "더 중요함",
+ "Less" : "덜 중요함",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "로그 파일이 100MB보다 큽니다. 다운로드하는 데 시간이 걸릴 수 있습니다!",
"Allow users to send mail notification for shared files" : "공유 파일 이메일 알림 전송 허용",
"Allow users to send mail notification for shared files to other users" : "다른 사용자에게 공유 파일 이메일 알림 전송 허용",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "데이터베이스로 SQLite를 사용하고 있습니다. 대규모의 파일을 관리하려고 한다면 다른 데이터베이스 백엔드로 전환할 것을 권장합니다.",
diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js
index afdc9e18472..6ca405ff31f 100644
--- a/settings/l10n/nb_NO.js
+++ b/settings/l10n/nb_NO.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "Gruppe finnes allerede.",
"Unable to add group." : "Kan ikke legge til gruppe.",
"Unable to delete group." : "Kan ikke slette gruppe.",
- "log-level out of allowed range" : "Loggnivå utenfor tillatt område",
"test email settings" : "Test av innstillinger for e-post",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Et problem oppstod med sending av e-post. Sjekk innstillingene. (Feil: %s)",
"Email sent" : "E-post sendt",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "Kan ikke opprette bruker.",
"Your %s account was created" : "%s-kontoen din ble opprettet",
"Unable to delete user." : "Kan ikke slette bruker.",
- "Forbidden" : "Forbudt",
- "Invalid user" : "Ugyldig bruker",
+ "Unable to change full name" : "Klarte ikke å endre fullt navn",
"Unable to change mail address" : "Kan ikke endre epost-adresse",
- "Email saved" : "Epost lagret",
"Your full name has been changed." : "Ditt fulle navn er blitt endret.",
- "Unable to change full name" : "Klarte ikke å endre fullt navn",
"Couldn't remove app." : "Klarte ikke å fjerne app.",
"Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen",
"Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s",
@@ -162,17 +158,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst aktiver \"Standard krypteringsmodul\" og kjør 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye.",
"Start migration" : "Start migrering",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Alt (fatale problemer, feil, advarsler, info, debug)",
- "Info, warnings, errors and fatal issues" : "Info, advarsler, feil og fatale problemer",
- "Warnings, errors and fatal issues" : "Advarsler, feil og fatale problemer",
- "Errors and fatal issues" : "Feil og fatale problemer",
- "Fatal issues only" : "Kun fatale problemer",
- "Log" : "Logg",
- "What to log" : "Hva som skal logges",
- "Download logfile" : "Last ned loggfil",
- "More" : "Mer",
- "Less" : "Mindre",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Loggfilen er over 100 MB, nedlastingen kan ta en stund!",
"Security & setup warnings" : "Advarsler om sikkerhet og oppsett",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP ser ikke ut til å være satt opp riktig for å lese systemets miljøvariabler. Testen med getenv(\"PATH\") returnerer bare et tomt svar.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Vennligst sjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsdokumentasjonen ↗</a> etter php konfigurasjonsnotater og konfigurering av php på tjeneren din, særlig om du bruker php-fpm.",
@@ -264,10 +249,10 @@ OC.L10N.register(
"Cancel" : "Avbryt",
"Choose as profile picture" : "Velg som profilbilde",
"Full name" : "Fullt navn",
- "No display name set" : "Visningsnavn ikke satt",
"Email" : "Epost",
"Your email address" : "Din e-postadresse",
"For password recovery and notifications" : "For passord-gjenoppretting og varsler",
+ "No display name set" : "Visningsnavn ikke satt",
"No email address set" : "E-postadresse ikke satt",
"You are member of the following groups:" : "Du er medlem av følgende grupper:",
"Password" : "Passord",
@@ -322,11 +307,26 @@ OC.L10N.register(
"set new password" : "sett nytt passord",
"change email address" : "endre e-postadresse",
"Default" : "Standard",
+ "log-level out of allowed range" : "Loggnivå utenfor tillatt område",
+ "Forbidden" : "Forbudt",
+ "Invalid user" : "Ugyldig bruker",
+ "Email saved" : "Epost lagret",
"Language changed" : "Språk endret",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ønsker du virkelig å legge til \"{domain}\" som klarert domene?",
"add group" : "legg til gruppe",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Alt (fatale problemer, feil, advarsler, info, debug)",
+ "Info, warnings, errors and fatal issues" : "Info, advarsler, feil og fatale problemer",
+ "Warnings, errors and fatal issues" : "Advarsler, feil og fatale problemer",
+ "Errors and fatal issues" : "Feil og fatale problemer",
+ "Fatal issues only" : "Kun fatale problemer",
+ "Log" : "Logg",
+ "What to log" : "Hva som skal logges",
+ "Download logfile" : "Last ned loggfil",
+ "More" : "Mer",
+ "Less" : "Mindre",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Loggfilen er over 100 MB, nedlastingen kan ta en stund!",
"Allow users to send mail notification for shared files" : "Tlllat at brukere sender e-postvarsler for delte filer",
"Allow users to send mail notification for shared files to other users" : "Tillat at brukere sender varsler om delte filer på e-post til andre brukere",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite brukes som database. For større installasjoner anbefaler vi å bytte til en annen database-server.",
diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json
index 7e8eb2384c6..6fad2877e39 100644
--- a/settings/l10n/nb_NO.json
+++ b/settings/l10n/nb_NO.json
@@ -17,7 +17,6 @@
"Group already exists." : "Gruppe finnes allerede.",
"Unable to add group." : "Kan ikke legge til gruppe.",
"Unable to delete group." : "Kan ikke slette gruppe.",
- "log-level out of allowed range" : "Loggnivå utenfor tillatt område",
"test email settings" : "Test av innstillinger for e-post",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Et problem oppstod med sending av e-post. Sjekk innstillingene. (Feil: %s)",
"Email sent" : "E-post sendt",
@@ -28,12 +27,9 @@
"Unable to create user." : "Kan ikke opprette bruker.",
"Your %s account was created" : "%s-kontoen din ble opprettet",
"Unable to delete user." : "Kan ikke slette bruker.",
- "Forbidden" : "Forbudt",
- "Invalid user" : "Ugyldig bruker",
+ "Unable to change full name" : "Klarte ikke å endre fullt navn",
"Unable to change mail address" : "Kan ikke endre epost-adresse",
- "Email saved" : "Epost lagret",
"Your full name has been changed." : "Ditt fulle navn er blitt endret.",
- "Unable to change full name" : "Klarte ikke å endre fullt navn",
"Couldn't remove app." : "Klarte ikke å fjerne app.",
"Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen",
"Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s",
@@ -160,17 +156,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst aktiver \"Standard krypteringsmodul\" og kjør 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye.",
"Start migration" : "Start migrering",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Alt (fatale problemer, feil, advarsler, info, debug)",
- "Info, warnings, errors and fatal issues" : "Info, advarsler, feil og fatale problemer",
- "Warnings, errors and fatal issues" : "Advarsler, feil og fatale problemer",
- "Errors and fatal issues" : "Feil og fatale problemer",
- "Fatal issues only" : "Kun fatale problemer",
- "Log" : "Logg",
- "What to log" : "Hva som skal logges",
- "Download logfile" : "Last ned loggfil",
- "More" : "Mer",
- "Less" : "Mindre",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Loggfilen er over 100 MB, nedlastingen kan ta en stund!",
"Security & setup warnings" : "Advarsler om sikkerhet og oppsett",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP ser ikke ut til å være satt opp riktig for å lese systemets miljøvariabler. Testen med getenv(\"PATH\") returnerer bare et tomt svar.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Vennligst sjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsdokumentasjonen ↗</a> etter php konfigurasjonsnotater og konfigurering av php på tjeneren din, særlig om du bruker php-fpm.",
@@ -262,10 +247,10 @@
"Cancel" : "Avbryt",
"Choose as profile picture" : "Velg som profilbilde",
"Full name" : "Fullt navn",
- "No display name set" : "Visningsnavn ikke satt",
"Email" : "Epost",
"Your email address" : "Din e-postadresse",
"For password recovery and notifications" : "For passord-gjenoppretting og varsler",
+ "No display name set" : "Visningsnavn ikke satt",
"No email address set" : "E-postadresse ikke satt",
"You are member of the following groups:" : "Du er medlem av følgende grupper:",
"Password" : "Passord",
@@ -320,11 +305,26 @@
"set new password" : "sett nytt passord",
"change email address" : "endre e-postadresse",
"Default" : "Standard",
+ "log-level out of allowed range" : "Loggnivå utenfor tillatt område",
+ "Forbidden" : "Forbudt",
+ "Invalid user" : "Ugyldig bruker",
+ "Email saved" : "Epost lagret",
"Language changed" : "Språk endret",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Ønsker du virkelig å legge til \"{domain}\" som klarert domene?",
"add group" : "legg til gruppe",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Alt (fatale problemer, feil, advarsler, info, debug)",
+ "Info, warnings, errors and fatal issues" : "Info, advarsler, feil og fatale problemer",
+ "Warnings, errors and fatal issues" : "Advarsler, feil og fatale problemer",
+ "Errors and fatal issues" : "Feil og fatale problemer",
+ "Fatal issues only" : "Kun fatale problemer",
+ "Log" : "Logg",
+ "What to log" : "Hva som skal logges",
+ "Download logfile" : "Last ned loggfil",
+ "More" : "Mer",
+ "Less" : "Mindre",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Loggfilen er over 100 MB, nedlastingen kan ta en stund!",
"Allow users to send mail notification for shared files" : "Tlllat at brukere sender e-postvarsler for delte filer",
"Allow users to send mail notification for shared files to other users" : "Tillat at brukere sender varsler om delte filer på e-post til andre brukere",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite brukes som database. For større installasjoner anbefaler vi å bytte til en annen database-server.",
diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js
index 5ad98200624..f98ca941cd1 100644
--- a/settings/l10n/nl.js
+++ b/settings/l10n/nl.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "Groep bestaat al.",
"Unable to add group." : "Kan groep niet toevoegen.",
"Unable to delete group." : "Kan groep niet verwijderen.",
- "log-level out of allowed range" : "loggingniveau buiten toegestane bereik",
"test email settings" : "test e-mailinstellingen",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Er ontstond een probleem bij het versturen van de e-mail. Controleer je instellingen. (Fout: %s)",
"Email sent" : "E-mail verzonden",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "Kan gebruiker niet aanmaken.",
"Your %s account was created" : "Je %s account is aangemaakt",
"Unable to delete user." : "Kan gebruiker niet verwijderen.",
- "Forbidden" : "Verboden",
- "Invalid user" : "Ongeldige gebruiker",
+ "Unable to change full name" : "Kan de volledige naam niet wijzigen",
"Unable to change mail address" : "Kan e-mailadres niet wijzigen",
- "Email saved" : "E-mail opgeslagen",
"Your full name has been changed." : "Je volledige naam is gewijzigd.",
- "Unable to change full name" : "Kan de volledige naam niet wijzigen",
"Couldn't remove app." : "Kon app niet verwijderen.",
"Password confirmation is required" : "Wachtwoordbevestiging vereist",
"Admins can't remove themself from the admin group" : "Admins kunnen zichzelf niet uit de admin groep verwijderen",
@@ -168,17 +164,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe. Activeer de \"Standaard cryptomodule\" en start 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe.",
"Start migration" : "Start migratie",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale problemen, fouten, waarschuwingen, info, debug)",
- "Info, warnings, errors and fatal issues" : "Info, waarschuwingen, fouten en fatale problemen",
- "Warnings, errors and fatal issues" : "Waarschuwingen, fouten en fatale problemen",
- "Errors and fatal issues" : "Fouten en fatale problemen",
- "Fatal issues only" : "Alleen fatale problemen",
- "Log" : "Log",
- "What to log" : "Wat loggen",
- "Download logfile" : "Download logbestand",
- "More" : "Meer",
- "Less" : "Minder",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Het logbestand is groter dan 100MB. Downloaden kost even tijd!",
"Security & setup warnings" : "Beveiligings- en instellingswaarschuwingen",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php lijkt niet goed te zijn ingesteld om systeemomgevingsvariabelen te bevragen. De test met getenv(\"PATH\") gaf een leeg resultaat.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Lees de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installatiedocumentatie ↗</a> voor php configuratienotities en de php configuratie van je server, zeker bij gebruik van php-fpm.",
@@ -273,10 +258,10 @@ OC.L10N.register(
"Cancel" : "Annuleer",
"Choose as profile picture" : "Kies als profielafbeelding",
"Full name" : "Volledige naam",
- "No display name set" : "Nog geen weergavenaam ingesteld",
"Email" : "E-mailadres",
"Your email address" : "Uw e-mailadres",
"For password recovery and notifications" : "Voor wachtwoordherstel en meldingen",
+ "No display name set" : "Nog geen weergavenaam ingesteld",
"No email address set" : "Geen e-mailadres opgegeven",
"You are member of the following groups:" : "U bent lid van de volgende groepen:",
"Password" : "Wachtwoord",
@@ -332,11 +317,26 @@ OC.L10N.register(
"set new password" : "Instellen nieuw wachtwoord",
"change email address" : "wijzig e-mailadres",
"Default" : "Standaard",
+ "log-level out of allowed range" : "loggingniveau buiten toegestane bereik",
+ "Forbidden" : "Verboden",
+ "Invalid user" : "Ongeldige gebruiker",
+ "Email saved" : "E-mail opgeslagen",
"Language changed" : "Taal aangepast",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Weet je zeker dat je \"{domain}\" als een vertrouwd domein wilt toevoegen?",
"add group" : "groep toevoegen",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale problemen, fouten, waarschuwingen, info, debug)",
+ "Info, warnings, errors and fatal issues" : "Info, waarschuwingen, fouten en fatale problemen",
+ "Warnings, errors and fatal issues" : "Waarschuwingen, fouten en fatale problemen",
+ "Errors and fatal issues" : "Fouten en fatale problemen",
+ "Fatal issues only" : "Alleen fatale problemen",
+ "Log" : "Log",
+ "What to log" : "Wat loggen",
+ "Download logfile" : "Download logbestand",
+ "More" : "Meer",
+ "Less" : "Minder",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Het logbestand is groter dan 100MB. Downloaden kost even tijd!",
"Allow users to send mail notification for shared files" : "Sta gebruikers toe om e-mailnotificaties te versturen voor gedeelde bestanden",
"Allow users to send mail notification for shared files to other users" : "Sta gebruikers toe om e-mailnotificaties aan andere gebruikers te versturen voor gedeelde bestanden",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wordt gebruikt als database. Voor grotere installaties adviseren we om te schakelen naar een andere database engine.",
diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json
index 73d37bd0455..6644e5a13c2 100644
--- a/settings/l10n/nl.json
+++ b/settings/l10n/nl.json
@@ -17,7 +17,6 @@
"Group already exists." : "Groep bestaat al.",
"Unable to add group." : "Kan groep niet toevoegen.",
"Unable to delete group." : "Kan groep niet verwijderen.",
- "log-level out of allowed range" : "loggingniveau buiten toegestane bereik",
"test email settings" : "test e-mailinstellingen",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Er ontstond een probleem bij het versturen van de e-mail. Controleer je instellingen. (Fout: %s)",
"Email sent" : "E-mail verzonden",
@@ -28,12 +27,9 @@
"Unable to create user." : "Kan gebruiker niet aanmaken.",
"Your %s account was created" : "Je %s account is aangemaakt",
"Unable to delete user." : "Kan gebruiker niet verwijderen.",
- "Forbidden" : "Verboden",
- "Invalid user" : "Ongeldige gebruiker",
+ "Unable to change full name" : "Kan de volledige naam niet wijzigen",
"Unable to change mail address" : "Kan e-mailadres niet wijzigen",
- "Email saved" : "E-mail opgeslagen",
"Your full name has been changed." : "Je volledige naam is gewijzigd.",
- "Unable to change full name" : "Kan de volledige naam niet wijzigen",
"Couldn't remove app." : "Kon app niet verwijderen.",
"Password confirmation is required" : "Wachtwoordbevestiging vereist",
"Admins can't remove themself from the admin group" : "Admins kunnen zichzelf niet uit de admin groep verwijderen",
@@ -166,17 +162,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe. Activeer de \"Standaard cryptomodule\" en start 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe.",
"Start migration" : "Start migratie",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale problemen, fouten, waarschuwingen, info, debug)",
- "Info, warnings, errors and fatal issues" : "Info, waarschuwingen, fouten en fatale problemen",
- "Warnings, errors and fatal issues" : "Waarschuwingen, fouten en fatale problemen",
- "Errors and fatal issues" : "Fouten en fatale problemen",
- "Fatal issues only" : "Alleen fatale problemen",
- "Log" : "Log",
- "What to log" : "Wat loggen",
- "Download logfile" : "Download logbestand",
- "More" : "Meer",
- "Less" : "Minder",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Het logbestand is groter dan 100MB. Downloaden kost even tijd!",
"Security & setup warnings" : "Beveiligings- en instellingswaarschuwingen",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php lijkt niet goed te zijn ingesteld om systeemomgevingsvariabelen te bevragen. De test met getenv(\"PATH\") gaf een leeg resultaat.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Lees de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installatiedocumentatie ↗</a> voor php configuratienotities en de php configuratie van je server, zeker bij gebruik van php-fpm.",
@@ -271,10 +256,10 @@
"Cancel" : "Annuleer",
"Choose as profile picture" : "Kies als profielafbeelding",
"Full name" : "Volledige naam",
- "No display name set" : "Nog geen weergavenaam ingesteld",
"Email" : "E-mailadres",
"Your email address" : "Uw e-mailadres",
"For password recovery and notifications" : "Voor wachtwoordherstel en meldingen",
+ "No display name set" : "Nog geen weergavenaam ingesteld",
"No email address set" : "Geen e-mailadres opgegeven",
"You are member of the following groups:" : "U bent lid van de volgende groepen:",
"Password" : "Wachtwoord",
@@ -330,11 +315,26 @@
"set new password" : "Instellen nieuw wachtwoord",
"change email address" : "wijzig e-mailadres",
"Default" : "Standaard",
+ "log-level out of allowed range" : "loggingniveau buiten toegestane bereik",
+ "Forbidden" : "Verboden",
+ "Invalid user" : "Ongeldige gebruiker",
+ "Email saved" : "E-mail opgeslagen",
"Language changed" : "Taal aangepast",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Weet je zeker dat je \"{domain}\" als een vertrouwd domein wilt toevoegen?",
"add group" : "groep toevoegen",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale problemen, fouten, waarschuwingen, info, debug)",
+ "Info, warnings, errors and fatal issues" : "Info, waarschuwingen, fouten en fatale problemen",
+ "Warnings, errors and fatal issues" : "Waarschuwingen, fouten en fatale problemen",
+ "Errors and fatal issues" : "Fouten en fatale problemen",
+ "Fatal issues only" : "Alleen fatale problemen",
+ "Log" : "Log",
+ "What to log" : "Wat loggen",
+ "Download logfile" : "Download logbestand",
+ "More" : "Meer",
+ "Less" : "Minder",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Het logbestand is groter dan 100MB. Downloaden kost even tijd!",
"Allow users to send mail notification for shared files" : "Sta gebruikers toe om e-mailnotificaties te versturen voor gedeelde bestanden",
"Allow users to send mail notification for shared files to other users" : "Sta gebruikers toe om e-mailnotificaties aan andere gebruikers te versturen voor gedeelde bestanden",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wordt gebruikt als database. Voor grotere installaties adviseren we om te schakelen naar een andere database engine.",
diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js
index a0e7773b1a1..aaa3559d6cf 100644
--- a/settings/l10n/pt_BR.js
+++ b/settings/l10n/pt_BR.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "O Grupo já existe.",
"Unable to add group." : "Não é possível adicionar o grupo.",
"Unable to delete group." : "Não é possível excluir o grupo.",
- "log-level out of allowed range" : "log-nível acima do permitido",
"test email settings" : "testar configurações de email",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ocorreu um problema ao enviar o e-mail. Por favor, revise suas configurações. (Erro: %s)",
"Email sent" : "E-mail enviado",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "Não é possível criar usuário.",
"Your %s account was created" : "Sua conta %s foi criada",
"Unable to delete user." : "Não é possível excluir o usuário.",
- "Forbidden" : "Proibido",
- "Invalid user" : "Usuário inválido",
+ "Unable to change full name" : "Não é possível alterar o nome completo",
"Unable to change mail address" : "Não é possível trocar o endereço de email",
- "Email saved" : "E-mail salvo",
"Your full name has been changed." : "Seu nome completo foi alterado.",
- "Unable to change full name" : "Não é possível alterar o nome completo",
"Couldn't remove app." : "Não foi possível remover aplicativos.",
"Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração",
"Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s",
@@ -160,17 +156,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova. Ative o \"módulo de criptografia padrão\" e execute 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova.",
"Start migration" : "Iniciar migração",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (questões fatais, erros, avisos, informações, depuração)",
- "Info, warnings, errors and fatal issues" : "Informações, avisos, erros e problemas fatais",
- "Warnings, errors and fatal issues" : "Avisos, erros e problemas fatais",
- "Errors and fatal issues" : "Erros e problemas fatais",
- "Fatal issues only" : "Somente questões fatais",
- "Log" : "Registro",
- "What to log" : "O que colocar no log",
- "Download logfile" : "Baixar o arquivo de log",
- "More" : "Mais",
- "Less" : "Menos",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O arquivo de log é maior que 100 MB. Baixar esse arquivo requer algum tempo!",
"Security & setup warnings" : "Segurança & avisos de configuração",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "O PHP não parecem esta configurado corretamente para consultar as variáveis de ambiente do sistema. O teste com getenv(\"PATH\") só retorna uma resposta vazia.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor verifique a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação de instalação ↗</a> para notas configuração do PHP e a configuração do PHP do seu servidor, especialmente quando se utiliza php-fpm.",
@@ -260,10 +245,10 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"Choose as profile picture" : "Escolha como imagem de perfil",
"Full name" : "Nome completo",
- "No display name set" : "Nenhuma exibição de nome de configuração",
"Email" : "E-mail",
"Your email address" : "Seu endereço de e-mail",
"For password recovery and notifications" : "Para recuperação de senha e notificações",
+ "No display name set" : "Nenhuma exibição de nome de configuração",
"No email address set" : "Nenhum endereço de email foi configurado",
"You are member of the following groups:" : "Você é membro dos seguintes grupos:",
"Password" : "Senha",
@@ -317,11 +302,26 @@ OC.L10N.register(
"set new password" : "definir nova senha",
"change email address" : "Trocar o endereço de email",
"Default" : "Padrão",
+ "log-level out of allowed range" : "log-nível acima do permitido",
+ "Forbidden" : "Proibido",
+ "Invalid user" : "Usuário inválido",
+ "Email saved" : "E-mail salvo",
"Language changed" : "Idioma alterado",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Deseja realemente adicionar \"{domain}\" como domínio confiável?",
"add group" : "adicionar grupo",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (questões fatais, erros, avisos, informações, depuração)",
+ "Info, warnings, errors and fatal issues" : "Informações, avisos, erros e problemas fatais",
+ "Warnings, errors and fatal issues" : "Avisos, erros e problemas fatais",
+ "Errors and fatal issues" : "Erros e problemas fatais",
+ "Fatal issues only" : "Somente questões fatais",
+ "Log" : "Registro",
+ "What to log" : "O que colocar no log",
+ "Download logfile" : "Baixar o arquivo de log",
+ "More" : "Mais",
+ "Less" : "Menos",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O arquivo de log é maior que 100 MB. Baixar esse arquivo requer algum tempo!",
"Allow users to send mail notification for shared files" : "Permitir aos usuários enviar notificação de email para arquivos compartilhados",
"Allow users to send mail notification for shared files to other users" : "Permitir aos usuários enviar notificação de email de arquivos compartilhados para outros usuários",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite é usada como base de dados. Para instalações maiores recomendamos mudar para um backend de banco de dados diferente.",
diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json
index 13675dbaad8..223a51e1516 100644
--- a/settings/l10n/pt_BR.json
+++ b/settings/l10n/pt_BR.json
@@ -17,7 +17,6 @@
"Group already exists." : "O Grupo já existe.",
"Unable to add group." : "Não é possível adicionar o grupo.",
"Unable to delete group." : "Não é possível excluir o grupo.",
- "log-level out of allowed range" : "log-nível acima do permitido",
"test email settings" : "testar configurações de email",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ocorreu um problema ao enviar o e-mail. Por favor, revise suas configurações. (Erro: %s)",
"Email sent" : "E-mail enviado",
@@ -28,12 +27,9 @@
"Unable to create user." : "Não é possível criar usuário.",
"Your %s account was created" : "Sua conta %s foi criada",
"Unable to delete user." : "Não é possível excluir o usuário.",
- "Forbidden" : "Proibido",
- "Invalid user" : "Usuário inválido",
+ "Unable to change full name" : "Não é possível alterar o nome completo",
"Unable to change mail address" : "Não é possível trocar o endereço de email",
- "Email saved" : "E-mail salvo",
"Your full name has been changed." : "Seu nome completo foi alterado.",
- "Unable to change full name" : "Não é possível alterar o nome completo",
"Couldn't remove app." : "Não foi possível remover aplicativos.",
"Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração",
"Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s",
@@ -158,17 +154,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova. Ative o \"módulo de criptografia padrão\" e execute 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova.",
"Start migration" : "Iniciar migração",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (questões fatais, erros, avisos, informações, depuração)",
- "Info, warnings, errors and fatal issues" : "Informações, avisos, erros e problemas fatais",
- "Warnings, errors and fatal issues" : "Avisos, erros e problemas fatais",
- "Errors and fatal issues" : "Erros e problemas fatais",
- "Fatal issues only" : "Somente questões fatais",
- "Log" : "Registro",
- "What to log" : "O que colocar no log",
- "Download logfile" : "Baixar o arquivo de log",
- "More" : "Mais",
- "Less" : "Menos",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O arquivo de log é maior que 100 MB. Baixar esse arquivo requer algum tempo!",
"Security & setup warnings" : "Segurança & avisos de configuração",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "O PHP não parecem esta configurado corretamente para consultar as variáveis de ambiente do sistema. O teste com getenv(\"PATH\") só retorna uma resposta vazia.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor verifique a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação de instalação ↗</a> para notas configuração do PHP e a configuração do PHP do seu servidor, especialmente quando se utiliza php-fpm.",
@@ -258,10 +243,10 @@
"Cancel" : "Cancelar",
"Choose as profile picture" : "Escolha como imagem de perfil",
"Full name" : "Nome completo",
- "No display name set" : "Nenhuma exibição de nome de configuração",
"Email" : "E-mail",
"Your email address" : "Seu endereço de e-mail",
"For password recovery and notifications" : "Para recuperação de senha e notificações",
+ "No display name set" : "Nenhuma exibição de nome de configuração",
"No email address set" : "Nenhum endereço de email foi configurado",
"You are member of the following groups:" : "Você é membro dos seguintes grupos:",
"Password" : "Senha",
@@ -315,11 +300,26 @@
"set new password" : "definir nova senha",
"change email address" : "Trocar o endereço de email",
"Default" : "Padrão",
+ "log-level out of allowed range" : "log-nível acima do permitido",
+ "Forbidden" : "Proibido",
+ "Invalid user" : "Usuário inválido",
+ "Email saved" : "E-mail salvo",
"Language changed" : "Idioma alterado",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Deseja realemente adicionar \"{domain}\" como domínio confiável?",
"add group" : "adicionar grupo",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (questões fatais, erros, avisos, informações, depuração)",
+ "Info, warnings, errors and fatal issues" : "Informações, avisos, erros e problemas fatais",
+ "Warnings, errors and fatal issues" : "Avisos, erros e problemas fatais",
+ "Errors and fatal issues" : "Erros e problemas fatais",
+ "Fatal issues only" : "Somente questões fatais",
+ "Log" : "Registro",
+ "What to log" : "O que colocar no log",
+ "Download logfile" : "Baixar o arquivo de log",
+ "More" : "Mais",
+ "Less" : "Menos",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O arquivo de log é maior que 100 MB. Baixar esse arquivo requer algum tempo!",
"Allow users to send mail notification for shared files" : "Permitir aos usuários enviar notificação de email para arquivos compartilhados",
"Allow users to send mail notification for shared files to other users" : "Permitir aos usuários enviar notificação de email de arquivos compartilhados para outros usuários",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite é usada como base de dados. Para instalações maiores recomendamos mudar para um backend de banco de dados diferente.",
diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js
index 7bbf8b9570a..a21ee7d9fcd 100644
--- a/settings/l10n/ru.js
+++ b/settings/l10n/ru.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "Группа уже существует.",
"Unable to add group." : "Невозможно добавить группу.",
"Unable to delete group." : "Невозможно удалить группу.",
- "log-level out of allowed range" : "уровень журнала вышел за разрешенный диапазон",
"test email settings" : "проверить настройки почты",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Во время отправки письма произошла ошибка. Пожалуйста проверьте настройки. (Ошибка: %s)",
"Email sent" : "Письмо отправлено",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "Невозможно создать пользователя.",
"Your %s account was created" : "Учетная запись %s создана",
"Unable to delete user." : "Невозможно удалить пользователя.",
- "Forbidden" : "Запрещено",
- "Invalid user" : "Неверный пользователь",
+ "Unable to change full name" : "Невозможно изменить полное имя",
"Unable to change mail address" : "Невозможно изменить адрес электронной почты",
- "Email saved" : "Адрес сохранен",
"Your full name has been changed." : "Ваше полное имя было изменено.",
- "Unable to change full name" : "Невозможно изменить полное имя",
"Couldn't remove app." : "Не удалось удалить приложение.",
"Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов",
"Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s",
@@ -161,17 +157,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый. Пожалуйста включите \"Модуль шифрования по умолчанию\" и запустите команду 'occ encryption:migrate'.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый.",
"Start migration" : "Запустить миграцию",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Все (критические проблемы, ошибки, предупреждения, информационные, отладочные)",
- "Info, warnings, errors and fatal issues" : "Информационные, предупреждения, ошибки и критические проблемы",
- "Warnings, errors and fatal issues" : "Предупреждения, ошибки и критические проблемы",
- "Errors and fatal issues" : "Ошибки и критические проблемы",
- "Fatal issues only" : "Только критические проблемы",
- "Log" : "Журнал",
- "What to log" : "Что записывать в журнал",
- "Download logfile" : "Скачать журнал",
- "More" : "Больше",
- "Less" : "Меньше",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Лог-файл - больше 100 мб. Его скачивание может занять некоторое время!",
"Security & setup warnings" : "Предупреждения безопасности и установки",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP был установлен неверно. Запрос getenv(\"PATH\") возвращает пустые результаты.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Пожалуйста обратитесь к <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации по установке ↗</a> для получения информации по настройке php на вашем сервере, особенно это касается php-fpm.",
@@ -261,10 +246,10 @@ OC.L10N.register(
"Cancel" : "Отмена",
"Choose as profile picture" : "Выбрать в качестве картинки профиля",
"Full name" : "Полное имя",
- "No display name set" : "Отображаемое имя не указано",
"Email" : "Почта",
"Your email address" : "Ваш адрес электронной почты",
"For password recovery and notifications" : "Для восстановления пароля и уведомлений",
+ "No display name set" : "Отображаемое имя не указано",
"No email address set" : "Адрес не указан",
"You are member of the following groups:" : "Вы являетесь членом следующих групп:",
"Password" : "Пароль",
@@ -318,11 +303,26 @@ OC.L10N.register(
"set new password" : "установить новый пароль",
"change email address" : "изменить адрес почты",
"Default" : "По умолчанию",
+ "log-level out of allowed range" : "уровень журнала вышел за разрешенный диапазон",
+ "Forbidden" : "Запрещено",
+ "Invalid user" : "Неверный пользователь",
+ "Email saved" : "Адрес сохранен",
"Language changed" : "Язык изменён",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Вы действительно хотите добавить домен \"{domain}\" как доверенный?",
"add group" : "Добавить группу",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Все (критические проблемы, ошибки, предупреждения, информационные, отладочные)",
+ "Info, warnings, errors and fatal issues" : "Информационные, предупреждения, ошибки и критические проблемы",
+ "Warnings, errors and fatal issues" : "Предупреждения, ошибки и критические проблемы",
+ "Errors and fatal issues" : "Ошибки и критические проблемы",
+ "Fatal issues only" : "Только критические проблемы",
+ "Log" : "Журнал",
+ "What to log" : "Что записывать в журнал",
+ "Download logfile" : "Скачать журнал",
+ "More" : "Больше",
+ "Less" : "Меньше",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Лог-файл - больше 100 мб. Его скачивание может занять некоторое время!",
"Allow users to send mail notification for shared files" : "Разрешить пользователям отправлять email об открытии доступа к файлам",
"Allow users to send mail notification for shared files to other users" : "Разрешить пользователям отправлять оповещение других пользователей об открытии доступа к файлам",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "В качестве базы данных используется SQLite. Для больших установок мы рекомендуем переключиться на другую серверную базу данных.",
diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json
index 4b7bccbfe63..1c3c2d96493 100644
--- a/settings/l10n/ru.json
+++ b/settings/l10n/ru.json
@@ -17,7 +17,6 @@
"Group already exists." : "Группа уже существует.",
"Unable to add group." : "Невозможно добавить группу.",
"Unable to delete group." : "Невозможно удалить группу.",
- "log-level out of allowed range" : "уровень журнала вышел за разрешенный диапазон",
"test email settings" : "проверить настройки почты",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Во время отправки письма произошла ошибка. Пожалуйста проверьте настройки. (Ошибка: %s)",
"Email sent" : "Письмо отправлено",
@@ -28,12 +27,9 @@
"Unable to create user." : "Невозможно создать пользователя.",
"Your %s account was created" : "Учетная запись %s создана",
"Unable to delete user." : "Невозможно удалить пользователя.",
- "Forbidden" : "Запрещено",
- "Invalid user" : "Неверный пользователь",
+ "Unable to change full name" : "Невозможно изменить полное имя",
"Unable to change mail address" : "Невозможно изменить адрес электронной почты",
- "Email saved" : "Адрес сохранен",
"Your full name has been changed." : "Ваше полное имя было изменено.",
- "Unable to change full name" : "Невозможно изменить полное имя",
"Couldn't remove app." : "Не удалось удалить приложение.",
"Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов",
"Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s",
@@ -159,17 +155,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый. Пожалуйста включите \"Модуль шифрования по умолчанию\" и запустите команду 'occ encryption:migrate'.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый.",
"Start migration" : "Запустить миграцию",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Все (критические проблемы, ошибки, предупреждения, информационные, отладочные)",
- "Info, warnings, errors and fatal issues" : "Информационные, предупреждения, ошибки и критические проблемы",
- "Warnings, errors and fatal issues" : "Предупреждения, ошибки и критические проблемы",
- "Errors and fatal issues" : "Ошибки и критические проблемы",
- "Fatal issues only" : "Только критические проблемы",
- "Log" : "Журнал",
- "What to log" : "Что записывать в журнал",
- "Download logfile" : "Скачать журнал",
- "More" : "Больше",
- "Less" : "Меньше",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Лог-файл - больше 100 мб. Его скачивание может занять некоторое время!",
"Security & setup warnings" : "Предупреждения безопасности и установки",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP был установлен неверно. Запрос getenv(\"PATH\") возвращает пустые результаты.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Пожалуйста обратитесь к <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации по установке ↗</a> для получения информации по настройке php на вашем сервере, особенно это касается php-fpm.",
@@ -259,10 +244,10 @@
"Cancel" : "Отмена",
"Choose as profile picture" : "Выбрать в качестве картинки профиля",
"Full name" : "Полное имя",
- "No display name set" : "Отображаемое имя не указано",
"Email" : "Почта",
"Your email address" : "Ваш адрес электронной почты",
"For password recovery and notifications" : "Для восстановления пароля и уведомлений",
+ "No display name set" : "Отображаемое имя не указано",
"No email address set" : "Адрес не указан",
"You are member of the following groups:" : "Вы являетесь членом следующих групп:",
"Password" : "Пароль",
@@ -316,11 +301,26 @@
"set new password" : "установить новый пароль",
"change email address" : "изменить адрес почты",
"Default" : "По умолчанию",
+ "log-level out of allowed range" : "уровень журнала вышел за разрешенный диапазон",
+ "Forbidden" : "Запрещено",
+ "Invalid user" : "Неверный пользователь",
+ "Email saved" : "Адрес сохранен",
"Language changed" : "Язык изменён",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Вы действительно хотите добавить домен \"{domain}\" как доверенный?",
"add group" : "Добавить группу",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Все (критические проблемы, ошибки, предупреждения, информационные, отладочные)",
+ "Info, warnings, errors and fatal issues" : "Информационные, предупреждения, ошибки и критические проблемы",
+ "Warnings, errors and fatal issues" : "Предупреждения, ошибки и критические проблемы",
+ "Errors and fatal issues" : "Ошибки и критические проблемы",
+ "Fatal issues only" : "Только критические проблемы",
+ "Log" : "Журнал",
+ "What to log" : "Что записывать в журнал",
+ "Download logfile" : "Скачать журнал",
+ "More" : "Больше",
+ "Less" : "Меньше",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Лог-файл - больше 100 мб. Его скачивание может занять некоторое время!",
"Allow users to send mail notification for shared files" : "Разрешить пользователям отправлять email об открытии доступа к файлам",
"Allow users to send mail notification for shared files to other users" : "Разрешить пользователям отправлять оповещение других пользователей об открытии доступа к файлам",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "В качестве базы данных используется SQLite. Для больших установок мы рекомендуем переключиться на другую серверную базу данных.",
diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js
index 351ac3c587a..f90bb4fea54 100644
--- a/settings/l10n/tr.js
+++ b/settings/l10n/tr.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"Group already exists." : "Grup zaten mevcut.",
"Unable to add group." : "Grup ekleme başarısız.",
"Unable to delete group." : "Grubu silme başarısız.",
- "log-level out of allowed range" : "günlük seviyesi izin verilen aralık dışında",
"test email settings" : "e-posta ayarlarını sına",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "E-posta gönderilirken bir hata oluştu. Lütfen ayarlarınızı gözden geçirin. (Hata: %s)",
"Email sent" : "E-posta gönderildi",
@@ -30,12 +29,9 @@ OC.L10N.register(
"Unable to create user." : "Kullanıcı oluşturma başarısız.",
"Your %s account was created" : "%s hesabınız oluşturuldu",
"Unable to delete user." : "Kullanıcı silme başarısız.",
- "Forbidden" : "Yasaklı",
- "Invalid user" : "Geçersiz kullanıcı",
+ "Unable to change full name" : "Tam adınız değiştirilirken hata",
"Unable to change mail address" : "Posta adresini değiştirme başarısız",
- "Email saved" : "E-posta kaydedildi",
"Your full name has been changed." : "Tam adınız değiştirildi.",
- "Unable to change full name" : "Tam adınız değiştirilirken hata",
"Couldn't remove app." : "Uygulama kaldırılamadı.",
"Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz",
"Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor",
@@ -153,17 +149,6 @@ OC.L10N.register(
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Eski şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine taşımanız gerekli. Lütfen \"Öntanımlı şifreleme modülü\"nü etkinleştirin ve 'occ encryption:migrate' çalıştırın",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Eski şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine taşımanız gerekli.",
"Start migration" : "Taşınmayı başlat",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Her şey (Ciddi sorunlar, hatalar, uyarılar, bilgi, hata ayıklama)",
- "Info, warnings, errors and fatal issues" : "Bilgi, uyarılar, hatalar ve ciddi sorunlar",
- "Warnings, errors and fatal issues" : "Uyarılar, hatalar ve ciddi sorunlar",
- "Errors and fatal issues" : "Hatalar ve ciddi sorunlar",
- "Fatal issues only" : "Sadece ciddi sorunlar",
- "Log" : "Günlük",
- "What to log" : "Neler günlüklenmeli",
- "Download logfile" : "Günlük dosyasını indir",
- "More" : "Daha fazla",
- "Less" : "Daha az",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Günlük dosyası 100 MB'dan daha büyük. İndirmek zaman alabilir!",
"Security & setup warnings" : "Güvenlik ve kurulum uyarıları",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP sistem değişkenleri sorgusuna uygun olarak ayarlanmamış görünüyor. getenv(\"PATH\") komutu sadece boş bir cevap döndürüyor.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Lütfen php yapılandırma notları ve özellikler php-fpm kullanırken sunucu php yapılandırması için <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">kurulum belgelendirmesine ↗</a> bakın.",
@@ -250,10 +235,10 @@ OC.L10N.register(
"Cancel" : "İptal",
"Choose as profile picture" : "Profil resmi olarak seç",
"Full name" : "Ad soyad",
- "No display name set" : "Ekran adı ayarlanmamış",
"Email" : "E-posta",
"Your email address" : "E-posta adresiniz",
"For password recovery and notifications" : "Parola kurtarma ve bildirimler için",
+ "No display name set" : "Ekran adı ayarlanmamış",
"No email address set" : "E-posta adresi ayarlanmamış",
"You are member of the following groups:" : "Şu grupların üyesisiniz:",
"Password" : "Parola",
@@ -300,10 +285,25 @@ OC.L10N.register(
"set new password" : "yeni parola belirle",
"change email address" : "e-posta adresini değiştir",
"Default" : "Öntanımlı",
+ "log-level out of allowed range" : "günlük seviyesi izin verilen aralık dışında",
+ "Forbidden" : "Yasaklı",
+ "Invalid user" : "Geçersiz kullanıcı",
+ "Email saved" : "E-posta kaydedildi",
"Language changed" : "Dil değiştirildi",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" alan adını güvenilir alan adı olarak eklemek istediğinizden emin misiniz?",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Her şey (Ciddi sorunlar, hatalar, uyarılar, bilgi, hata ayıklama)",
+ "Info, warnings, errors and fatal issues" : "Bilgi, uyarılar, hatalar ve ciddi sorunlar",
+ "Warnings, errors and fatal issues" : "Uyarılar, hatalar ve ciddi sorunlar",
+ "Errors and fatal issues" : "Hatalar ve ciddi sorunlar",
+ "Fatal issues only" : "Sadece ciddi sorunlar",
+ "Log" : "Günlük",
+ "What to log" : "Neler günlüklenmeli",
+ "Download logfile" : "Günlük dosyasını indir",
+ "More" : "Daha fazla",
+ "Less" : "Daha az",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Günlük dosyası 100 MB'dan daha büyük. İndirmek zaman alabilir!",
"Allow users to send mail notification for shared files" : "Paylaşılmış dosyalar için kullanıcıların posta bildirimi göndermesine izin ver",
"Allow users to send mail notification for shared files to other users" : "Kullanıcıların diğer kullanıcılara, paylaşılmış dosyalar için posta bildirimi göndermesine izin ver",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Veritabanı olarak SQLite kullanılıyor. Daha büyük kurulumlar için farklı bir veritabanı arka ucuna geçmenizi öneriyoruz.",
diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json
index 48e874edb07..2b51e63f9bd 100644
--- a/settings/l10n/tr.json
+++ b/settings/l10n/tr.json
@@ -17,7 +17,6 @@
"Group already exists." : "Grup zaten mevcut.",
"Unable to add group." : "Grup ekleme başarısız.",
"Unable to delete group." : "Grubu silme başarısız.",
- "log-level out of allowed range" : "günlük seviyesi izin verilen aralık dışında",
"test email settings" : "e-posta ayarlarını sına",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "E-posta gönderilirken bir hata oluştu. Lütfen ayarlarınızı gözden geçirin. (Hata: %s)",
"Email sent" : "E-posta gönderildi",
@@ -28,12 +27,9 @@
"Unable to create user." : "Kullanıcı oluşturma başarısız.",
"Your %s account was created" : "%s hesabınız oluşturuldu",
"Unable to delete user." : "Kullanıcı silme başarısız.",
- "Forbidden" : "Yasaklı",
- "Invalid user" : "Geçersiz kullanıcı",
+ "Unable to change full name" : "Tam adınız değiştirilirken hata",
"Unable to change mail address" : "Posta adresini değiştirme başarısız",
- "Email saved" : "E-posta kaydedildi",
"Your full name has been changed." : "Tam adınız değiştirildi.",
- "Unable to change full name" : "Tam adınız değiştirilirken hata",
"Couldn't remove app." : "Uygulama kaldırılamadı.",
"Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz",
"Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor",
@@ -151,17 +147,6 @@
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Eski şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine taşımanız gerekli. Lütfen \"Öntanımlı şifreleme modülü\"nü etkinleştirin ve 'occ encryption:migrate' çalıştırın",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Eski şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine taşımanız gerekli.",
"Start migration" : "Taşınmayı başlat",
- "Everything (fatal issues, errors, warnings, info, debug)" : "Her şey (Ciddi sorunlar, hatalar, uyarılar, bilgi, hata ayıklama)",
- "Info, warnings, errors and fatal issues" : "Bilgi, uyarılar, hatalar ve ciddi sorunlar",
- "Warnings, errors and fatal issues" : "Uyarılar, hatalar ve ciddi sorunlar",
- "Errors and fatal issues" : "Hatalar ve ciddi sorunlar",
- "Fatal issues only" : "Sadece ciddi sorunlar",
- "Log" : "Günlük",
- "What to log" : "Neler günlüklenmeli",
- "Download logfile" : "Günlük dosyasını indir",
- "More" : "Daha fazla",
- "Less" : "Daha az",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Günlük dosyası 100 MB'dan daha büyük. İndirmek zaman alabilir!",
"Security & setup warnings" : "Güvenlik ve kurulum uyarıları",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP sistem değişkenleri sorgusuna uygun olarak ayarlanmamış görünüyor. getenv(\"PATH\") komutu sadece boş bir cevap döndürüyor.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Lütfen php yapılandırma notları ve özellikler php-fpm kullanırken sunucu php yapılandırması için <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">kurulum belgelendirmesine ↗</a> bakın.",
@@ -248,10 +233,10 @@
"Cancel" : "İptal",
"Choose as profile picture" : "Profil resmi olarak seç",
"Full name" : "Ad soyad",
- "No display name set" : "Ekran adı ayarlanmamış",
"Email" : "E-posta",
"Your email address" : "E-posta adresiniz",
"For password recovery and notifications" : "Parola kurtarma ve bildirimler için",
+ "No display name set" : "Ekran adı ayarlanmamış",
"No email address set" : "E-posta adresi ayarlanmamış",
"You are member of the following groups:" : "Şu grupların üyesisiniz:",
"Password" : "Parola",
@@ -298,10 +283,25 @@
"set new password" : "yeni parola belirle",
"change email address" : "e-posta adresini değiştir",
"Default" : "Öntanımlı",
+ "log-level out of allowed range" : "günlük seviyesi izin verilen aralık dışında",
+ "Forbidden" : "Yasaklı",
+ "Invalid user" : "Geçersiz kullanıcı",
+ "Email saved" : "E-posta kaydedildi",
"Language changed" : "Dil değiştirildi",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" alan adını güvenilir alan adı olarak eklemek istediğinizden emin misiniz?",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "Her şey (Ciddi sorunlar, hatalar, uyarılar, bilgi, hata ayıklama)",
+ "Info, warnings, errors and fatal issues" : "Bilgi, uyarılar, hatalar ve ciddi sorunlar",
+ "Warnings, errors and fatal issues" : "Uyarılar, hatalar ve ciddi sorunlar",
+ "Errors and fatal issues" : "Hatalar ve ciddi sorunlar",
+ "Fatal issues only" : "Sadece ciddi sorunlar",
+ "Log" : "Günlük",
+ "What to log" : "Neler günlüklenmeli",
+ "Download logfile" : "Günlük dosyasını indir",
+ "More" : "Daha fazla",
+ "Less" : "Daha az",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Günlük dosyası 100 MB'dan daha büyük. İndirmek zaman alabilir!",
"Allow users to send mail notification for shared files" : "Paylaşılmış dosyalar için kullanıcıların posta bildirimi göndermesine izin ver",
"Allow users to send mail notification for shared files to other users" : "Kullanıcıların diğer kullanıcılara, paylaşılmış dosyalar için posta bildirimi göndermesine izin ver",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Veritabanı olarak SQLite kullanılıyor. Daha büyük kurulumlar için farklı bir veritabanı arka ucuna geçmenizi öneriyoruz.",
diff --git a/settings/templates/personal.php b/settings/templates/personal.php
index 8b5931c369f..f40cc2d78c3 100644
--- a/settings/templates/personal.php
+++ b/settings/templates/personal.php
@@ -158,34 +158,6 @@ if($_['displayNameChangeSupported']) {
<?php
} else {
?>
-<div id="displaynameform" class="section">
- <h2><?php echo $l->t('Full name');?></h2>
- <span><?php if(isset($_['displayName'][0])) { p($_['displayName']); } else { p($l->t('No display name set')); } ?></span>
-</div>
-<?php
-}
-?>
-
-<?php
-if($_['displayNameChangeSupported']) {
-?>
-<form id="lostpassword" class="section">
- <h2>
- <label for="email"><?php p($l->t('Email'));?></label>
- </h2>
- <input type="email" name="email" id="email" value="<?php p($_['email']); ?>"
- placeholder="<?php p($l->t('Your email address'));?>"
- class="password-confirm-required"
- autocomplete="on" autocapitalize="off" autocorrect="off" />
- <span class="msg"></span><br />
- <em><?php p($l->t('For password recovery and notifications'));?></em>
-</form>
-<?php
-} else {
-?>
-<div id="lostpassword" class="section">
- <h2><?php echo $l->t('Email'); ?></h2>
- <span><?php if(isset($_['email'][0])) { p($_['email']); } else { p($l->t('No email address set')); }?></span>
<div id="personal-settings-container" class="no-edit">
<div id="displaynameform" class="section">
<h2><?php p($l->t('Full name'));?></h2>
diff --git a/tests/lib/AppFramework/Http/RequestTest.php b/tests/lib/AppFramework/Http/RequestTest.php
index 1ba20869439..b1515b0efb5 100644
--- a/tests/lib/AppFramework/Http/RequestTest.php
+++ b/tests/lib/AppFramework/Http/RequestTest.php
@@ -1500,6 +1500,76 @@ class RequestTest extends \Test\TestCase {
$this->assertFalse($request->passesCSRFCheck());
}
+ public function testPassesStrictCookieCheckWithAllCookiesAndStrict() {
+ /** @var Request $request */
+ $request = $this->getMockBuilder('\OC\AppFramework\Http\Request')
+ ->setMethods(['getScriptName', 'getCookieParams'])
+ ->setConstructorArgs([
+ [
+ 'server' => [
+ 'HTTP_REQUESTTOKEN' => 'AAAHGxsTCTc3BgMQESAcNR0OAR0=:MyTotalSecretShareds',
+ ],
+ 'cookies' => [
+ session_name() => 'asdf',
+ '__Host-nc_sameSiteCookiestrict' => 'true',
+ '__Host-nc_sameSiteCookielax' => 'true',
+ ],
+ ],
+ $this->secureRandom,
+ $this->config,
+ $this->csrfTokenManager,
+ $this->stream
+ ])
+ ->getMock();
+ $request
+ ->expects($this->any())
+ ->method('getCookieParams')
+ ->willReturn([
+ 'secure' => true,
+ 'path' => '/',
+ ]);
+
+ $this->assertTrue($request->passesStrictCookieCheck());
+ }
+
+ public function testFailsStrictCookieCheckWithAllCookiesAndMissingStrict() {
+ /** @var Request $request */
+ $request = $this->getMockBuilder('\OC\AppFramework\Http\Request')
+ ->setMethods(['getScriptName', 'getCookieParams'])
+ ->setConstructorArgs([
+ [
+ 'server' => [
+ 'HTTP_REQUESTTOKEN' => 'AAAHGxsTCTc3BgMQESAcNR0OAR0=:MyTotalSecretShareds',
+ ],
+ 'cookies' => [
+ session_name() => 'asdf',
+ 'nc_sameSiteCookiestrict' => 'true',
+ 'nc_sameSiteCookielax' => 'true',
+ ],
+ ],
+ $this->secureRandom,
+ $this->config,
+ $this->csrfTokenManager,
+ $this->stream
+ ])
+ ->getMock();
+ $request
+ ->expects($this->any())
+ ->method('getCookieParams')
+ ->willReturn([
+ 'secure' => true,
+ 'path' => '/',
+ ]);
+
+ $this->assertFalse($request->passesStrictCookieCheck());
+ }
+
+ public function testGetCookieParams() {
+ $request = $this->createMock(Request::class);
+ $actual = $this->invokePrivate($request, 'getCookieParams');
+ $this->assertSame(session_get_cookie_params(), $actual);
+ }
+
public function testPassesStrictCookieCheckWithAllCookies() {
/** @var Request $request */
$request = $this->getMockBuilder('\OC\AppFramework\Http\Request')
diff --git a/tests/lib/Files/Cache/ScannerTest.php b/tests/lib/Files/Cache/ScannerTest.php
index b44b6f5d0f5..075716f8033 100644
--- a/tests/lib/Files/Cache/ScannerTest.php
+++ b/tests/lib/Files/Cache/ScannerTest.php
@@ -70,6 +70,32 @@ class ScannerTest extends \Test\TestCase {
$this->assertEquals($cachedData['mimetype'], 'image/png');
}
+ function testFile4Byte() {
+ $data = "dummy file data\n";
+ $this->storage->file_put_contents('foo🙈.txt', $data);
+
+ if (\OC::$server->getDatabaseConnection()->supports4ByteText()) {
+ $this->assertNotNull($this->scanner->scanFile('foo🙈.txt'));
+ $this->assertTrue($this->cache->inCache('foo🙈.txt'), true);
+
+ $cachedData = $this->cache->get('foo🙈.txt');
+ $this->assertEquals(strlen($data), $cachedData['size']);
+ $this->assertEquals('text/plain', $cachedData['mimetype']);
+ $this->assertNotEquals(-1, $cachedData['parent']); //parent folders should be scanned automatically
+ } else {
+ $this->assertNull($this->scanner->scanFile('foo🙈.txt'));
+ $this->assertFalse($this->cache->inCache('foo🙈.txt'), true);
+ }
+ }
+
+ function testFileInvalidChars() {
+ $data = "dummy file data\n";
+ $this->storage->file_put_contents("foo\nbar.txt", $data);
+
+ $this->assertNull($this->scanner->scanFile("foo\nbar.txt"));
+ $this->assertFalse($this->cache->inCache("foo\nbar.txt"), true);
+ }
+
private function fillTestFolders() {
$textData = "dummy file data\n";
$imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png');
diff --git a/tests/lib/Files/PathVerificationTest.php b/tests/lib/Files/PathVerificationTest.php
index 12285bb7acd..c1cebe975fd 100644
--- a/tests/lib/Files/PathVerificationTest.php
+++ b/tests/lib/Files/PathVerificationTest.php
@@ -86,7 +86,7 @@ class PathVerificationTest extends \Test\TestCase {
if (!$connection->supports4ByteText()) {
$this->expectException(InvalidPathException::class);
- $this->expectExceptionMessage('4-byte characters are not supported in file names');
+ $this->expectExceptionMessage('File name contains at least one invalid character');
}
$this->view->verifyPath('', $fileName);
diff --git a/version.php b/version.php
index 0eb9f3de72a..4aef5b12d77 100644
--- a/version.php
+++ b/version.php
@@ -29,7 +29,7 @@
$OC_Version = array(11, 0, 0, 2);
// The human readable string
-$OC_VersionString = '11.0 alpha';
+$OC_VersionString = '11.0 beta';
$OC_VersionCanBeUpgradedFrom = array(9, 1);